зеркало из https://github.com/microsoft/git.git
Merge branch 'jc/diff-merge-base-multi'
* jc/diff-merge-base-multi: diff A...B: give one possible diff when there are more than one merge-base
This commit is contained in:
Коммит
4cd1b99c32
|
@ -407,17 +407,32 @@ 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) {
|
||||
/*
|
||||
* Perhaps the user gave us A...B, which expands
|
||||
* to a list of negative merge bases followed by
|
||||
* A (symmetric-left) and B? Let's make sure...
|
||||
*/
|
||||
ent[1] = ent[2];
|
||||
for (i = 1; i < ents; i++)
|
||||
if (!(ent[i].item->flags & UNINTERESTING))
|
||||
break;
|
||||
if (ents != i + 2 ||
|
||||
(ent[i+1].item->flags & UNINTERESTING) ||
|
||||
(!(ent[i].item->flags & SYMMETRIC_LEFT)) ||
|
||||
(ent[i+1].item->flags & SYMMETRIC_LEFT))
|
||||
die("what do you mean by that?");
|
||||
/*
|
||||
* 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[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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче