From 81f4953120f021832a0023dc704a0d7eb0ddf475 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 25 Aug 2011 12:49:13 -0400 Subject: rev-list: Demonstrate breakage with --ancestry-path --all The option added by commit ebdc94f3 (revision: --ancestry-path, 2010-04-20) does not work properly in combination with --all, at least in the case of a criss-cross merge: b---bc / \ / a X \ / \ c---cb There are no descendants of 'cb' in the history. The command git rev-list --ancestry-path cb..bc correctly reports no commits. However, the command git rev-list --ancestry-path --all ^cb reports 'bc'. Add a test case to t6019-rev-list-ancestry-path demonstrating this breakage. Signed-off-by: Brad King Signed-off-by: Junio C Hamano --- t/t6019-rev-list-ancestry-path.sh | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 't') diff --git a/t/t6019-rev-list-ancestry-path.sh b/t/t6019-rev-list-ancestry-path.sh index 76410293b3..aa4674f1df 100755 --- a/t/t6019-rev-list-ancestry-path.sh +++ b/t/t6019-rev-list-ancestry-path.sh @@ -70,4 +70,39 @@ test_expect_success 'rev-list --ancestry-patch D..M -- M.t' ' test_cmp expect actual ' +# b---bc +# / \ / +# a X +# \ / \ +# c---cb +test_expect_success 'setup criss-cross' ' + mkdir criss-cross && + (cd criss-cross && + git init && + test_commit A && + git checkout -b b master && + test_commit B && + git checkout -b c master && + test_commit C && + git checkout -b bc b -- && + git merge c && + git checkout -b cb c -- && + git merge b && + git checkout master) +' + +# no commits in bc descend from cb +test_expect_success 'criss-cross: rev-list --ancestry-path cb..bc' ' + (cd criss-cross && + git rev-list --ancestry-path cb..bc > actual && + test -z "$(cat actual)") +' + +# no commits in repository descend from cb +test_expect_failure 'criss-cross: rev-list --ancestry-path --all ^cb' ' + (cd criss-cross && + git rev-list --ancestry-path --all ^cb > actual && + test -z "$(cat actual)") +' + test_done -- cgit v1.2.3 From c3502fa8822fab99ee51b3f74cf3f100492d88e2 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 25 Aug 2011 17:51:50 -0700 Subject: 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 --- t/t6019-rev-list-ancestry-path.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 't') 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)") -- cgit v1.2.3 From c05b988a69c10d7eef2f34932eed61923c18b4a5 Mon Sep 17 00:00:00 2001 From: Thomas Rast Date: Thu, 15 Sep 2011 10:34:31 +0200 Subject: t6019: avoid refname collision on case-insensitive systems The criss-cross tests kept failing for me because of collisions of 'a' with 'A' etc. Prefix the lowercase refnames with an extra letter to disambiguate. Signed-off-by: Thomas Rast Acked-by: Brad King Signed-off-by: Junio C Hamano --- t/t6019-rev-list-ancestry-path.sh | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 't') diff --git a/t/t6019-rev-list-ancestry-path.sh b/t/t6019-rev-list-ancestry-path.sh index 738af73393..39b4cb0ecd 100755 --- a/t/t6019-rev-list-ancestry-path.sh +++ b/t/t6019-rev-list-ancestry-path.sh @@ -75,33 +75,36 @@ test_expect_success 'rev-list --ancestry-patch D..M -- M.t' ' # a X # \ / \ # c---cb +# +# All refnames prefixed with 'x' to avoid confusion with the tags +# generated by test_commit on case-insensitive systems. test_expect_success 'setup criss-cross' ' mkdir criss-cross && (cd criss-cross && git init && test_commit A && - git checkout -b b master && + git checkout -b xb master && test_commit B && - git checkout -b c master && + git checkout -b xc master && test_commit C && - git checkout -b bc b -- && - git merge c && - git checkout -b cb c -- && - git merge b && + git checkout -b xbc xb -- && + git merge xc && + git checkout -b xcb xc -- && + git merge xb && git checkout master) ' # no commits in bc descend from cb test_expect_success 'criss-cross: rev-list --ancestry-path cb..bc' ' (cd criss-cross && - git rev-list --ancestry-path cb..bc > actual && + git rev-list --ancestry-path xcb..xbc > actual && test -z "$(cat actual)") ' # no commits in repository descend from cb test_expect_success 'criss-cross: rev-list --ancestry-path --all ^cb' ' (cd criss-cross && - git rev-list --ancestry-path --all ^cb > actual && + git rev-list --ancestry-path --all ^xcb > actual && test -z "$(cat actual)") ' -- cgit v1.2.3