ls-tree: match the test to the new semantics.
authorJunio C Hamano <junkio@cox.net>
Mon, 28 Nov 2005 10:32:42 +0000 (02:32 -0800)
committerJunio C Hamano <junkio@cox.net>
Tue, 29 Nov 2005 07:06:29 +0000 (23:06 -0800)
The diff for this commit is a good illustration of what changed
in ls-tree behaviour.

 - With -r, tree nodes themselves are not shown anymore, but
   blobs in subtrees are shown.

 - The order of paths parameters do not matter, since they are
   not like arguments to /bin/ls, but are filter patterns.

 - When filter patterns overlap, unintuitive things happen.

Signed-off-by: Junio C Hamano <junkio@cox.net>
t/t0000-basic.sh
t/t3100-ls-tree-restrict.sh
t/t3101-ls-tree-dirname.sh

index dff7d69..22bdaca 100755 (executable)
@@ -126,19 +126,18 @@ test_expect_success \
     'git-ls-tree output for a known tree.' \
     'diff current expected'
 
+# This changed in ls-tree pathspec change -- recursive does
+# not show tree nodes anymore.
 test_expect_success \
     'showing tree with git-ls-tree -r' \
     'git-ls-tree -r $tree >current'
 cat >expected <<\EOF
 100644 blob f87290f8eb2cbbea7857214459a0739927eab154   path0
 120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01   path0sym
-040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe   path2
 100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7   path2/file2
 120000 blob d8ce161addc5173867a3c3c730924388daedbc38   path2/file2sym
-040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3   path3
 100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376   path3/file3
 120000 blob 8599103969b43aff7e430efea79ca4636466794f   path3/file3sym
-040000 tree 3c5e5399f3a333eddecce7a9b9465b63f65f51e2   path3/subp3
 100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f   path3/subp3/file3
 120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c   path3/subp3/file3sym
 EOF
index c6ce56c..ae08675 100755 (executable)
@@ -54,8 +54,6 @@ test_expect_success \
      cat >expected <<\EOF &&
 100644 blob X  path0
 120000 blob X  path1
-040000 tree X  path2
-040000 tree X  path2/baz
 100644 blob X  path2/baz/b
 120000 blob X  path2/bazbo
 100644 blob X  path2/foo
@@ -70,12 +68,14 @@ EOF
      test_output'
 
 
+# it used to be path1 and then path0, but with pathspec semantics
+# they are shown in canonical order.
 test_expect_success \
     'ls-tree filtered with path1 path0' \
     'git-ls-tree $tree path1 path0 >current &&
      cat >expected <<\EOF &&
-120000 blob X  path1
 100644 blob X  path0
+120000 blob X  path1
 EOF
      test_output'
 
@@ -86,45 +86,34 @@ test_expect_success \
 EOF
      test_output'
 
+# It used to show path2 and its immediate children but
+# with pathspec semantics it shows only path2
 test_expect_success \
     'ls-tree filtered with path2' \
     'git-ls-tree $tree path2 >current &&
      cat >expected <<\EOF &&
 040000 tree X  path2
-040000 tree X  path2/baz
-120000 blob X  path2/bazbo
-100644 blob X  path2/foo
-EOF
-     test_output'
-
-test_expect_success \
-    'ls-tree filtered with path2/baz' \
-    'git-ls-tree $tree path2/baz >current &&
-     cat >expected <<\EOF &&
-040000 tree X  path2/baz
-100644 blob X  path2/baz/b
 EOF
      test_output'
 
+# ... and path2/ shows the children.
 test_expect_success \
-    'ls-tree filtered with path2' \
-    'git-ls-tree $tree path2 >current &&
+    'ls-tree filtered with path2/' \
+    'git-ls-tree $tree path2/ >current &&
      cat >expected <<\EOF &&
-040000 tree X  path2
 040000 tree X  path2/baz
 120000 blob X  path2/bazbo
 100644 blob X  path2/foo
 EOF
      test_output'
 
+# The same change -- exact match does not show children of
+# path2/baz
 test_expect_success \
-    'ls-tree filtered with path2/' \
-    'git-ls-tree $tree path2/ >current &&
+    'ls-tree filtered with path2/baz' \
+    'git-ls-tree $tree path2/baz >current &&
      cat >expected <<\EOF &&
-040000 tree X  path2
 040000 tree X  path2/baz
-120000 blob X  path2/bazbo
-100644 blob X  path2/foo
 EOF
      test_output'
 
index 5410368..d78deb1 100644 (file)
@@ -59,24 +59,16 @@ test_expect_success \
 EOF
      test_output'
 
+# Recursive does not show tree nodes anymore...
 test_expect_success \
     'ls-tree recursive' \
     'git-ls-tree -r $tree >current &&
      cat >expected <<\EOF &&
 100644 blob X  1.txt
 100644 blob X  2.txt
-040000 tree X  path0
-040000 tree X  path0/a
-040000 tree X  path0/a/b
-040000 tree X  path0/a/b/c
 100644 blob X  path0/a/b/c/1.txt
-040000 tree X  path1
-040000 tree X  path1/b
-040000 tree X  path1/b/c
 100644 blob X  path1/b/c/1.txt
-040000 tree X  path2
 100644 blob X  path2/1.txt
-040000 tree X  path3
 100644 blob X  path3/1.txt
 100644 blob X  path3/2.txt
 EOF
@@ -110,41 +102,27 @@ test_expect_success \
 EOF
      test_output'
 
+# I am not so sure about this one after ls-tree doing pathspec match.
+# Having both path0/a and path0/a/b/c makes path0/a redundant, and
+# it behaves as if path0/a/b/c, path1/b/c, path2 and path3 are specified.
 test_expect_success \
     'ls-tree filter directories' \
     'git-ls-tree $tree path3 path2 path0/a/b/c path1/b/c path0/a >current &&
      cat >expected <<\EOF &&
-040000 tree X  path3
-100644 blob X  path3/1.txt
-100644 blob X  path3/2.txt
-040000 tree X  path2
-100644 blob X  path2/1.txt
 040000 tree X  path0/a/b/c
-100644 blob X  path0/a/b/c/1.txt
 040000 tree X  path1/b/c
-100644 blob X  path1/b/c/1.txt
-040000 tree X  path0/a
-040000 tree X  path0/a/b
+040000 tree X  path2
+040000 tree X  path3
 EOF
      test_output'
 
+# Again, duplicates are filtered away so this is equivalent to
+# having 1.txt and path3
 test_expect_success \
     'ls-tree filter odd names' \
     'git-ls-tree $tree 1.txt /1.txt //1.txt path3/1.txt /path3/1.txt //path3//1.txt path3 /path3/ path3// >current &&
      cat >expected <<\EOF &&
 100644 blob X  1.txt
-100644 blob X  1.txt
-100644 blob X  1.txt
-100644 blob X  path3/1.txt
-100644 blob X  path3/1.txt
-100644 blob X  path3/1.txt
-040000 tree X  path3
-100644 blob X  path3/1.txt
-100644 blob X  path3/2.txt
-040000 tree X  path3
-100644 blob X  path3/1.txt
-100644 blob X  path3/2.txt
-040000 tree X  path3
 100644 blob X  path3/1.txt
 100644 blob X  path3/2.txt
 EOF