rev-list: Demonstrate breakage with --ancestry-path --all
authorBrad King <brad.king@kitware.com>
Thu, 25 Aug 2011 16:49:13 +0000 (12:49 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 25 Aug 2011 23:40:48 +0000 (16:40 -0700)
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 <brad.king@kitware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t6019-rev-list-ancestry-path.sh

index 76410293b34ecede219445e09b1eccb8175ee115..aa4674f1df3793b4e5521e2a2b9a7d6e7d414896 100755 (executable)
@@ -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