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 test_ln_s_add path0 path1 && 26 test_ln_s_add ../path1 path2/bazbo && 27 echo Lo >path2/foo && 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 34test_output () { 35sed-e"s/$OID_REGEX/ X /"<current >check 36 test_cmp expected check 37} 38 39test_expect_success \ 40'ls-tree plain' \ 41'git ls-tree$tree>current && 42 cat >expected <<\EOF && 43100644 blob X path0 44120000 blob X path1 45040000 tree X path2 46EOF 47 test_output' 48 49test_expect_success \ 50'ls-tree recursive' \ 51'git ls-tree -r$tree>current && 52 cat >expected <<\EOF && 53100644 blob X path0 54120000 blob X path1 55100644 blob X path2/baz/b 56120000 blob X path2/bazbo 57100644 blob X path2/foo 58EOF 59 test_output' 60 61test_expect_success \ 62'ls-tree recursive with -t' \ 63'git ls-tree -r -t$tree>current && 64 cat >expected <<\EOF && 65100644 blob X path0 66120000 blob X path1 67040000 tree X path2 68040000 tree X path2/baz 69100644 blob X path2/baz/b 70120000 blob X path2/bazbo 71100644 blob X path2/foo 72EOF 73 test_output' 74 75test_expect_success \ 76'ls-tree recursive with -d' \ 77'git ls-tree -r -d$tree>current && 78 cat >expected <<\EOF && 79040000 tree X path2 80040000 tree X path2/baz 81EOF 82 test_output' 83 84test_expect_success \ 85'ls-tree filtered with path' \ 86'git ls-tree$treepath >current && 87 cat >expected <<\EOF && 88EOF 89 test_output' 90 91 92# it used to be path1 and then path0, but with pathspec semantics 93# they are shown in canonical order. 94test_expect_success \ 95'ls-tree filtered with path1 path0' \ 96'git ls-tree$treepath1 path0 >current && 97 cat >expected <<\EOF && 98100644 blob X path0 99120000 blob X path1 100EOF 101 test_output' 102 103test_expect_success \ 104'ls-tree filtered with path0/' \ 105'git ls-tree$treepath0/ >current && 106 cat >expected <<\EOF && 107EOF 108 test_output' 109 110# It used to show path2 and its immediate children but 111# with pathspec semantics it shows only path2 112test_expect_success \ 113'ls-tree filtered with path2' \ 114'git ls-tree$treepath2 >current && 115 cat >expected <<\EOF && 116040000 tree X path2 117EOF 118 test_output' 119 120# ... and path2/ shows the children. 121test_expect_success \ 122'ls-tree filtered with path2/' \ 123'git ls-tree$treepath2/ >current && 124 cat >expected <<\EOF && 125040000 tree X path2/baz 126120000 blob X path2/bazbo 127100644 blob X path2/foo 128EOF 129 test_output' 130 131# The same change -- exact match does not show children of 132# path2/baz 133test_expect_success \ 134'ls-tree filtered with path2/baz' \ 135'git ls-tree$treepath2/baz >current && 136 cat >expected <<\EOF && 137040000 tree X path2/baz 138EOF 139 test_output' 140 141test_expect_success \ 142'ls-tree filtered with path2/bak' \ 143'git ls-tree$treepath2/bak >current && 144 cat >expected <<\EOF && 145EOF 146 test_output' 147 148test_expect_success \ 149'ls-tree -t filtered with path2/bak' \ 150'git ls-tree -t$treepath2/bak >current && 151 cat >expected <<\EOF && 152040000 tree X path2 153EOF 154 test_output' 155 156test_expect_success \ 157'ls-tree with one path a prefix of the other' \ 158'git ls-tree$treepath2/baz path2/bazbo >current && 159 cat >expected <<\EOF && 160040000 tree X path2/baz 161120000 blob X path2/bazbo 162EOF 163 test_output' 164 165test_done