Merge branch 'kb/ancestry-path-threedots' into maint
* kb/ancestry-path-threedots: revision.c: treat A...B merge bases as if manually specified t6019: demonstrate --ancestry-path A...B breakage
This commit is contained in:
commit
81de16a5d5
17
revision.c
17
revision.c
@ -915,6 +915,19 @@ static void add_rev_cmdline(struct rev_info *revs,
|
||||
info->nr++;
|
||||
}
|
||||
|
||||
static void add_rev_cmdline_list(struct rev_info *revs,
|
||||
struct commit_list *commit_list,
|
||||
int whence,
|
||||
unsigned flags)
|
||||
{
|
||||
while (commit_list) {
|
||||
struct object *object = &commit_list->item->object;
|
||||
add_rev_cmdline(revs, object, sha1_to_hex(object->sha1),
|
||||
whence, flags);
|
||||
commit_list = commit_list->next;
|
||||
}
|
||||
}
|
||||
|
||||
struct all_refs_cb {
|
||||
int all_flags;
|
||||
int warned_bad_reflog;
|
||||
@ -1092,6 +1105,7 @@ static void prepare_show_merge(struct rev_info *revs)
|
||||
add_pending_object(revs, &head->object, "HEAD");
|
||||
add_pending_object(revs, &other->object, "MERGE_HEAD");
|
||||
bases = get_merge_bases(head, other, 1);
|
||||
add_rev_cmdline_list(revs, bases, REV_CMD_MERGE_BASE, UNINTERESTING);
|
||||
add_pending_commit_list(revs, bases, UNINTERESTING);
|
||||
free_commit_list(bases);
|
||||
head->object.flags |= SYMMETRIC_LEFT;
|
||||
@ -1179,6 +1193,9 @@ int handle_revision_arg(const char *arg_, struct rev_info *revs, int flags, unsi
|
||||
|
||||
if (symmetric) {
|
||||
exclude = get_merge_bases(a, b, 1);
|
||||
add_rev_cmdline_list(revs, exclude,
|
||||
REV_CMD_MERGE_BASE,
|
||||
flags_exclude);
|
||||
add_pending_commit_list(revs, exclude,
|
||||
flags_exclude);
|
||||
free_commit_list(exclude);
|
||||
|
@ -35,6 +35,7 @@ struct rev_cmdline_info {
|
||||
REV_CMD_PARENTS_ONLY,
|
||||
REV_CMD_LEFT,
|
||||
REV_CMD_RIGHT,
|
||||
REV_CMD_MERGE_BASE,
|
||||
REV_CMD_REV
|
||||
} whence;
|
||||
unsigned flags;
|
||||
|
@ -13,6 +13,9 @@ test_description='--ancestry-path'
|
||||
#
|
||||
# D..M -- M.t == M
|
||||
# --ancestry-path D..M -- M.t == M
|
||||
#
|
||||
# F...I == F G H I
|
||||
# --ancestry-path F...I == F H I
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
@ -63,13 +66,29 @@ test_expect_success 'rev-list D..M -- M.t' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'rev-list --ancestry-patch D..M -- M.t' '
|
||||
test_expect_success 'rev-list --ancestry-path D..M -- M.t' '
|
||||
echo M >expect &&
|
||||
git rev-list --ancestry-path --format=%s D..M -- M.t |
|
||||
sed -e "/^commit /d" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'rev-list F...I' '
|
||||
for c in F G H I; do echo $c; done >expect &&
|
||||
git rev-list --format=%s F...I |
|
||||
sed -e "/^commit /d" |
|
||||
sort >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'rev-list --ancestry-path F...I' '
|
||||
for c in F H I; do echo $c; done >expect &&
|
||||
git rev-list --ancestry-path --format=%s F...I |
|
||||
sed -e "/^commit /d" |
|
||||
sort >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
# b---bc
|
||||
# / \ /
|
||||
# a X
|
||||
|
Loading…
Reference in New Issue
Block a user