Code

diff-files: do not play --no-index games
[git.git] / builtin-diff-files.c
index 5d4a5c5828d1202b6d6b2eadffc51fc131a37dc5..3aa031f24f83f6f1877d1aaf24bd834183713563 100644 (file)
@@ -16,10 +16,11 @@ COMMON_DIFF_OPTIONS_HELP;
 int cmd_diff_files(int argc, const char **argv, const char *prefix)
 {
        struct rev_info rev;
-       int silent = 0;
+       int result;
+       unsigned options = 0;
 
        init_revisions(&rev, prefix);
-       git_config(git_default_config); /* no "diff" UI options */
+       git_config(git_diff_basic_config); /* no "diff" UI options */
        rev.abbrev = 0;
 
        argc = setup_revisions(argc, argv, &rev, NULL);
@@ -31,7 +32,7 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
                else if (!strcmp(argv[1], "--theirs"))
                        rev.max_count = 3;
                else if (!strcmp(argv[1], "-q"))
-                       silent = 1;
+                       options |= DIFF_SILENT_ON_REMOVED;
                else
                        usage(diff_files_usage);
                argv++; argc--;
@@ -41,11 +42,22 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix)
 
        /*
         * Make sure there are NO revision (i.e. pending object) parameter,
-        * rev.max_count is reasonable (0 <= n <= 3),
+        * rev.max_count is reasonable (0 <= n <= 3), and
         * there is no other revision filtering parameters.
         */
        if (rev.pending.nr ||
-           rev.min_age != -1 || rev.max_age != -1)
+           rev.min_age != -1 || rev.max_age != -1 ||
+           3 < rev.max_count)
                usage(diff_files_usage);
-       return run_diff_files(&rev, silent);
+
+       if (rev.max_count == -1 &&
+           (rev.diffopt.output_format & DIFF_FORMAT_PATCH))
+               rev.combine_merges = rev.dense_combined_merges = 1;
+
+       if (read_cache() < 0) {
+               perror("read_cache");
+               return -1;
+       }
+       result = run_diff_files(&rev, options);
+       return diff_result_code(&rev.diffopt, result);
 }