diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-08-25 17:51:50 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-08-25 19:40:51 -0700 |
commit | c3502fa8822fab99ee51b3f74cf3f100492d88e2 (patch) | |
tree | 055e059da56a9e78ece64250562bb04ebed1cdba | |
parent | 281eee473000e5bd46e59d636626132dc9ea85cb (diff) | |
download | git-c3502fa8822fab99ee51b3f74cf3f100492d88e2.tar.gz |
revision: do not include sibling history in --ancestry-path output
If the commit specified as the bottom of the commit range has a direct
parent that has another child commit that contributed to the resulting
history, "rev-list --ancestry-path" was confused and listed that side
history as well, due to the command line parser subtlety corrected by the
previous commit.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | revision.c | 16 | ||||
-rwxr-xr-x | t/t6019-rev-list-ancestry-path.sh | 2 |
2 files changed, 11 insertions, 7 deletions
diff --git a/revision.c b/revision.c index 3e87c8677e..48a2db439f 100644 --- a/revision.c +++ b/revision.c @@ -724,12 +724,16 @@ static void limit_to_ancestry(struct commit_list *bottom, struct commit_list *li * to filter the result of "A..B" further to the ones that can actually * reach A. */ -static struct commit_list *collect_bottom_commits(struct commit_list *list) +static struct commit_list *collect_bottom_commits(struct rev_info *revs) { - struct commit_list *elem, *bottom = NULL; - for (elem = list; elem; elem = elem->next) - if (elem->item->object.flags & UNINTERESTING) - commit_list_insert(elem->item, &bottom); + struct commit_list *bottom = NULL; + int i; + for (i = 0; i < revs->cmdline.nr; i++) { + struct rev_cmdline_entry *elem = &revs->cmdline.rev[i]; + if ((elem->flags & UNINTERESTING) && + elem->item->type == OBJ_COMMIT) + commit_list_insert((struct commit *)elem->item, &bottom); + } return bottom; } @@ -743,7 +747,7 @@ static int limit_list(struct rev_info *revs) struct commit_list *bottom = NULL; if (revs->ancestry_path) { - bottom = collect_bottom_commits(list); + bottom = collect_bottom_commits(revs); if (!bottom) die("--ancestry-path given but there are no bottom commits"); } diff --git a/t/t6019-rev-list-ancestry-path.sh b/t/t6019-rev-list-ancestry-path.sh index aa4674f1df..738af73393 100755 --- a/t/t6019-rev-list-ancestry-path.sh +++ b/t/t6019-rev-list-ancestry-path.sh @@ -99,7 +99,7 @@ test_expect_success 'criss-cross: rev-list --ancestry-path cb..bc' ' ' # no commits in repository descend from cb -test_expect_failure 'criss-cross: rev-list --ancestry-path --all ^cb' ' +test_expect_success 'criss-cross: rev-list --ancestry-path --all ^cb' ' (cd criss-cross && git rev-list --ancestry-path --all ^cb > actual && test -z "$(cat actual)") |