From: Junio C Hamano Date: Mon, 17 Jul 2006 07:34:44 +0000 (-0700) Subject: git-diff A...B to (usually) mean "git-diff `git-merge-base A B` B" X-Git-Tag: v1.4.2-rc3~43^2 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=9919f41c91e525fd813fd2cd006f8fdcf976a661;p=git.git git-diff A...B to (usually) mean "git-diff `git-merge-base A B` B" 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 --- diff --git a/builtin-diff.c b/builtin-diff.c index cb38f4456..efd315240 100644 --- a/builtin-diff.c +++ b/builtin-diff.c @@ -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); }