X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=builtin%2Fdiff.c;h=89ae89cde1e6d8a0a2e02209f5396263a81bda5b;hb=33a0292e612915320e56f392b3372589f602a9e6;hp=ffcdd055ca0b9b30bec2ce1f22e348ec15d58c81;hpb=d249515f297d47df6d79167b988eaa7db0981178;p=git.git diff --git a/builtin/diff.c b/builtin/diff.c index ffcdd055c..89ae89cde 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -407,17 +407,19 @@ int cmd_diff(int argc, const char **argv, const char *prefix) result = builtin_diff_index(&rev, argc, argv); else if (ents == 2) result = 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. + else if (ent[0].item->flags & UNINTERESTING) { + /* + * diff A...B where there is at least one merge base + * between A and B. We have ent[0] == merge-base, + * ent[ents-2] == A, and ent[ents-1] == B. Show diff + * between the base and B. Note that we pick one + * merge base at random if there are more than one. */ - ent[1] = ent[2]; + ent[1] = ent[ents-1]; result = builtin_diff_tree(&rev, argc, argv, ent); - } - else + } else result = builtin_diff_combined(&rev, argc, argv, - ent, ents); + ent, ents); result = diff_result_code(&rev.diffopt, result); if (1 < rev.diffopt.skip_stat_unmatch) refresh_index_quietly();