Code

git-diff A...B to (usually) mean "git-diff `git-merge-base A B` B"
authorJunio C Hamano <junkio@cox.net>
Mon, 17 Jul 2006 07:34:44 +0000 (00:34 -0700)
committerJunio C Hamano <junkio@cox.net>
Mon, 17 Jul 2006 08:10:03 +0000 (01:10 -0700)
This tweaks the argument parser of "git diff" to allow "git-diff
A...B" to show diffs leading to B since their merge-base, when
there is only one sensible merge base between A and B.

Currently nonsense cases are thrown at combined-diff to produce
nonsense results, which would eventually need to be fixed.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-diff.c

index cb38f445611735cff5bc9fbafb3189e6ccc6c2fd..efd315240f0d8434bc378bf43b866588f6f4e42e 100644 (file)
@@ -346,7 +346,15 @@ int cmd_diff(int argc, const char **argv, char **envp)
                return builtin_diff_index(&rev, argc, argv);
        else if (ents == 2)
                return builtin_diff_tree(&rev, argc, argv, ent);
+       else if ((ents == 3) && (ent[0].item->flags & UNINTERESTING)) {
+               /* diff A...B where there is one sane merge base between
+                * A and B.  We have ent[0] == merge-base, ent[1] == A,
+                * and ent[2] == B.  Show diff between the base and B.
+                */
+               return builtin_diff_tree(&rev, argc, argv, ent);
+       }
        else
-               return builtin_diff_combined(&rev, argc, argv, ent, ents);
+               return builtin_diff_combined(&rev, argc, argv,
+                                            ent, ents);
        usage(builtin_diff_usage);
 }