1#!/bin/sh 2# 3# Copyright (c) 2006 Junio C Hamano 4# 5 6test_description='Try various core-level commands in subdirectory. 7' 8 9. ./test-lib.sh 10 11test_expect_success setup ' 12 long="a b c d e f g h i j k l m n o p q r s t u v w x y z" && 13 for c in$long; do echo$c; done >one && 14 mkdir dir && 15 for c in x y z$longa b c; do echo$c; done >dir/two && 16 cp one original.one && 17 cp dir/two original.two 18' 19LF=' 20' 21 22test_expect_success 'update-index and ls-files'' 23 git update-index --add one && 24 case "`git ls-files`" in 25 one) echo pass one ;; 26 *) echo bad one; exit 1 ;; 27 esac && 28 ( 29 cd dir && 30 git update-index --add two && 31 case "`git ls-files`" in 32 two) echo pass two ;; 33 *) echo bad two; exit 1 ;; 34 esac 35 ) && 36 case "`git ls-files`" in 37 dir/two"$LF"one) echo pass both ;; 38 *) echo bad; exit 1 ;; 39 esac 40' 41 42test_expect_success 'cat-file'' 43 two=`git ls-files -s dir/two` && 44 two=`expr "$two" : "[0-7]*\\([0-9a-f]*\\)"` && 45 echo "$two" && 46 git cat-file -p "$two" >actual && 47 cmp dir/two actual && 48 ( 49 cd dir && 50 git cat-file -p "$two" >actual && 51 cmp two actual 52 ) 53' 54rm-f actual dir/actual 55 56test_expect_success 'diff-files'' 57 echo a >>one && 58 echo d >>dir/two && 59 case "`git diff-files --name-only`" in 60 dir/two"$LF"one) echo pass top ;; 61 *) echo bad top; exit 1 ;; 62 esac && 63 # diff should not omit leading paths 64 ( 65 cd dir && 66 case "`git diff-files --name-only`" in 67 dir/two"$LF"one) echo pass subdir ;; 68 *) echo bad subdir; exit 1 ;; 69 esac && 70 case "`git diff-files --name-only .`" in 71 dir/two) echo pass subdir limited ;; 72 *) echo bad subdir limited; exit 1 ;; 73 esac 74 ) 75' 76 77test_expect_success 'write-tree'' 78 top=`git write-tree` && 79 echo$top&& 80 ( 81 cd dir && 82 sub=`git write-tree` && 83 echo$sub&& 84 test "z$top" = "z$sub" 85 ) 86' 87 88test_expect_success 'checkout-index'' 89 git checkout-index -f -u one && 90 cmp one original.one && 91 ( 92 cd dir && 93 git checkout-index -f -u two && 94 cmp two ../original.two 95 ) 96' 97 98test_expect_success 'read-tree'' 99 rm -f one dir/two && 100 tree=`git write-tree` && 101 git read-tree --reset -u "$tree" && 102 cmp one original.one && 103 cmp dir/two original.two && 104 ( 105 cd dir && 106 rm -f two && 107 git read-tree --reset -u "$tree" && 108 cmp two ../original.two && 109 cmp ../one ../original.one 110 ) 111' 112 113test_expect_success 'alias expansion'' 114 ( 115 git config alias.ss status && 116 cd dir && 117 git status && 118 git ss 119 ) 120' 121test_expect_success 'no file/rev ambiguity check inside .git'' 122 git commit -a -m 1 && 123 ( 124 cd .git && 125 git show -s HEAD 126 ) 127' 128 129test_expect_success 'no file/rev ambiguity check inside a bare repo'' 130 git clone -s --bare .git foo.git && 131 ( 132 cd foo.git && 133 GIT_DIR=. git show -s HEAD 134 ) 135' 136 137# This still does not work as it should... 138: test_expect_success 'no file/rev ambiguity check inside a bare repo'' 139 git clone -s --bare .git foo.git && 140 ( 141 cd foo.git && 142 git show -s HEAD 143 ) 144' 145 146test_expect_success SYMLINKS 'detection should not be fooled by a symlink'' 147 rm -fr foo.git && 148 git clone -s .git another && 149 ln -s another yetanother && 150 ( 151 cd yetanother/.git && 152 git show -s HEAD 153 ) 154' 155 156test_done