Code

Merge branch 'jc/diff-no-no-index'
authorJunio C Hamano <gitster@pobox.com>
Tue, 27 May 2008 05:38:19 +0000 (22:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 May 2008 05:38:19 +0000 (22:38 -0700)
* jc/diff-no-no-index:
  git diff --no-index: default to page like other diff frontends
  git-diff: allow  --no-index semantics a bit more
  "git diff": do not ignore index without --no-index
  diff-files: do not play --no-index games
  tests: do not use implicit "git diff --no-index"

1  2 
Makefile
builtin-diff-files.c
builtin-diff.c
diff.h
git.c

diff --cc Makefile
Simple merge
index 907392a1f3d9b548389708c8c56c20a05bb5a69c,3aa031f24f83f6f1877d1aaf24bd834183713563..384d871263383e89c6f8f52b16e9e7e147426d1d
@@@ -16,20 -16,48 +16,48 @@@ COMMON_DIFF_OPTIONS_HELP
  int cmd_diff_files(int argc, const char **argv, const char *prefix)
  {
        struct rev_info rev;
-       int nongit;
        int result;
+       unsigned options = 0;
  
-       prefix = setup_git_directory_gently(&nongit);
        init_revisions(&rev, prefix);
 -      git_config(git_diff_basic_config); /* no "diff" UI options */
 +      git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
        rev.abbrev = 0;
  
-       if (!setup_diff_no_index(&rev, argc, argv, nongit, prefix))
-               argc = 0;
-       else
-               argc = setup_revisions(argc, argv, &rev, NULL);
+       argc = setup_revisions(argc, argv, &rev, NULL);
+       while (1 < argc && argv[1][0] == '-') {
+               if (!strcmp(argv[1], "--base"))
+                       rev.max_count = 1;
+               else if (!strcmp(argv[1], "--ours"))
+                       rev.max_count = 2;
+               else if (!strcmp(argv[1], "--theirs"))
+                       rev.max_count = 3;
+               else if (!strcmp(argv[1], "-q"))
+                       options |= DIFF_SILENT_ON_REMOVED;
+               else
+                       usage(diff_files_usage);
+               argv++; argc--;
+       }
        if (!rev.diffopt.output_format)
                rev.diffopt.output_format = DIFF_FORMAT_RAW;
-       result = run_diff_files_cmd(&rev, argc, argv);
+       /*
+        * Make sure there are NO revision (i.e. pending object) parameter,
+        * 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 ||
+           3 < rev.max_count)
+               usage(diff_files_usage);
+       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);
  }
diff --cc builtin-diff.c
Simple merge
diff --cc diff.h
Simple merge
diff --cc git.c
Simple merge