1#!/bin/sh 2# 3# Copyright (c) 2005 Junio C Hamano 4# 5 6test_description='git-ls-tree test. 7 8This test runs git-ls-tree with the following in a tree. 9 10 path0 - a file 11 path1 - a symlink 12 path2/foo - a file in a directory 13 path2/bazbo - a symlink in a directory 14 path2/baz/b - a file in a directory in a directory 15 16The new path restriction code should do the right thing for path2 and 17path2/baz. Also path0/ should snow nothing. 18' 19. ./test-lib.sh 20 21test_expect_success \ 22'setup' \ 23'mkdir path2 path2/baz && 24 echo Hi >path0 && 25 ln -s path0 path1 && 26 echo Lo >path2/foo && 27 ln -s ../path1 path2/bazbo && 28 echo Mi >path2/baz/b && 29 find path? \( -type f -o -type l \) -print | 30 xargs git-update-index --add && 31 tree=`git-write-tree` && 32 echo$tree' 33 34_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' 35_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40" 36test_output () { 37sed-e"s/$_x40/ X /"<current >check 38diff-u expected check 39} 40 41test_expect_success \ 42'ls-tree plain' \ 43'git-ls-tree$tree>current && 44 cat >expected <<\EOF && 45100644 blob X path0 46120000 blob X path1 47040000 tree X path2 48EOF 49 test_output' 50 51test_expect_success \ 52'ls-tree recursive' \ 53'git-ls-tree -r$tree>current && 54 cat >expected <<\EOF && 55100644 blob X path0 56120000 blob X path1 57100644 blob X path2/baz/b 58120000 blob X path2/bazbo 59100644 blob X path2/foo 60EOF 61 test_output' 62 63test_expect_success \ 64'ls-tree filtered with path' \ 65'git-ls-tree$treepath >current && 66 cat >expected <<\EOF && 67EOF 68 test_output' 69 70 71# it used to be path1 and then path0, but with pathspec semantics 72# they are shown in canonical order. 73test_expect_success \ 74'ls-tree filtered with path1 path0' \ 75'git-ls-tree$treepath1 path0 >current && 76 cat >expected <<\EOF && 77100644 blob X path0 78120000 blob X path1 79EOF 80 test_output' 81 82test_expect_success \ 83'ls-tree filtered with path0/' \ 84'git-ls-tree$treepath0/ >current && 85 cat >expected <<\EOF && 86EOF 87 test_output' 88 89# It used to show path2 and its immediate children but 90# with pathspec semantics it shows only path2 91test_expect_success \ 92'ls-tree filtered with path2' \ 93'git-ls-tree$treepath2 >current && 94 cat >expected <<\EOF && 95040000 tree X path2 96EOF 97 test_output' 98 99# ... and path2/ shows the children. 100test_expect_success \ 101'ls-tree filtered with path2/' \ 102'git-ls-tree$treepath2/ >current && 103 cat >expected <<\EOF && 104040000 tree X path2/baz 105120000 blob X path2/bazbo 106100644 blob X path2/foo 107EOF 108 test_output' 109 110# The same change -- exact match does not show children of 111# path2/baz 112test_expect_success \ 113'ls-tree filtered with path2/baz' \ 114'git-ls-tree$treepath2/baz >current && 115 cat >expected <<\EOF && 116040000 tree X path2/baz 117EOF 118 test_output' 119 120test_done