| 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='test GIT_CEILING_DIRECTORIES' |
| 4 | |
| 5 | . ./test-lib.sh |
| 6 | |
| 7 | test_prefix() { |
| 8 | local expect="$2" && |
| 9 | test_expect_success "$1: git rev-parse --show-prefix is '$2'" ' |
| 10 | echo "$expect" >expect && |
| 11 | git rev-parse --show-prefix >actual && |
| 12 | test_cmp expect actual |
| 13 | ' |
| 14 | } |
| 15 | |
| 16 | test_fail() { |
| 17 | test_expect_success "$1: prefix" ' |
| 18 | test_expect_code 128 git rev-parse --show-prefix |
| 19 | ' |
| 20 | } |
| 21 | |
| 22 | TRASH_ROOT="$PWD" |
| 23 | ROOT_PARENT=$(dirname "$TRASH_ROOT") |
| 24 | |
| 25 | |
| 26 | unset GIT_CEILING_DIRECTORIES |
| 27 | test_prefix no_ceil "" |
| 28 | |
| 29 | export GIT_CEILING_DIRECTORIES |
| 30 | |
| 31 | GIT_CEILING_DIRECTORIES="" |
| 32 | test_prefix ceil_empty "" |
| 33 | |
| 34 | GIT_CEILING_DIRECTORIES="$ROOT_PARENT" |
| 35 | test_prefix ceil_at_parent "" |
| 36 | |
| 37 | GIT_CEILING_DIRECTORIES="$ROOT_PARENT/" |
| 38 | test_prefix ceil_at_parent_slash "" |
| 39 | |
| 40 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT" |
| 41 | test_prefix ceil_at_trash "" |
| 42 | |
| 43 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/" |
| 44 | test_prefix ceil_at_trash_slash "" |
| 45 | |
| 46 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub" |
| 47 | test_prefix ceil_at_sub "" |
| 48 | |
| 49 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/" |
| 50 | test_prefix ceil_at_sub_slash "" |
| 51 | |
| 52 | if test_have_prereq SYMLINKS |
| 53 | then |
| 54 | ln -s sub top |
| 55 | fi |
| 56 | |
| 57 | mkdir -p sub/dir || exit 1 |
| 58 | cd sub/dir || exit 1 |
| 59 | |
| 60 | unset GIT_CEILING_DIRECTORIES |
| 61 | test_prefix subdir_no_ceil "sub/dir/" |
| 62 | |
| 63 | export GIT_CEILING_DIRECTORIES |
| 64 | |
| 65 | GIT_CEILING_DIRECTORIES="" |
| 66 | test_prefix subdir_ceil_empty "sub/dir/" |
| 67 | |
| 68 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT" |
| 69 | test_fail subdir_ceil_at_trash |
| 70 | |
| 71 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/" |
| 72 | test_fail subdir_ceil_at_trash_slash |
| 73 | |
| 74 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub" |
| 75 | test_fail subdir_ceil_at_sub |
| 76 | |
| 77 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/" |
| 78 | test_fail subdir_ceil_at_sub_slash |
| 79 | |
| 80 | if test_have_prereq SYMLINKS |
| 81 | then |
| 82 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top" |
| 83 | test_fail subdir_ceil_at_top |
| 84 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top/" |
| 85 | test_fail subdir_ceil_at_top_slash |
| 86 | |
| 87 | GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top" |
| 88 | test_prefix subdir_ceil_at_top_no_resolve "sub/dir/" |
| 89 | GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top/" |
| 90 | test_prefix subdir_ceil_at_top_slash_no_resolve "sub/dir/" |
| 91 | fi |
| 92 | |
| 93 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir" |
| 94 | test_prefix subdir_ceil_at_subdir "sub/dir/" |
| 95 | |
| 96 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir/" |
| 97 | test_prefix subdir_ceil_at_subdir_slash "sub/dir/" |
| 98 | |
| 99 | |
| 100 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su" |
| 101 | test_prefix subdir_ceil_at_su "sub/dir/" |
| 102 | |
| 103 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/" |
| 104 | test_prefix subdir_ceil_at_su_slash "sub/dir/" |
| 105 | |
| 106 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di" |
| 107 | test_prefix subdir_ceil_at_sub_di "sub/dir/" |
| 108 | |
| 109 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di" |
| 110 | test_prefix subdir_ceil_at_sub_di_slash "sub/dir/" |
| 111 | |
| 112 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi" |
| 113 | test_prefix subdir_ceil_at_subdi "sub/dir/" |
| 114 | |
| 115 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi" |
| 116 | test_prefix subdir_ceil_at_subdi_slash "sub/dir/" |
| 117 | |
| 118 | |
| 119 | GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub" |
| 120 | test_fail second_of_two |
| 121 | |
| 122 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub:/bar" |
| 123 | test_fail first_of_two |
| 124 | |
| 125 | GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub:/bar" |
| 126 | test_fail second_of_three |
| 127 | |
| 128 | |
| 129 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub" |
| 130 | GIT_DIR=../../.git |
| 131 | export GIT_DIR |
| 132 | test_prefix git_dir_specified "" |
| 133 | unset GIT_DIR |
| 134 | |
| 135 | |
| 136 | cd ../.. || exit 1 |
| 137 | mkdir -p s/d || exit 1 |
| 138 | cd s/d || exit 1 |
| 139 | |
| 140 | unset GIT_CEILING_DIRECTORIES |
| 141 | test_prefix sd_no_ceil "s/d/" |
| 142 | |
| 143 | export GIT_CEILING_DIRECTORIES |
| 144 | |
| 145 | GIT_CEILING_DIRECTORIES="" |
| 146 | test_prefix sd_ceil_empty "s/d/" |
| 147 | |
| 148 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT" |
| 149 | test_fail sd_ceil_at_trash |
| 150 | |
| 151 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/" |
| 152 | test_fail sd_ceil_at_trash_slash |
| 153 | |
| 154 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s" |
| 155 | test_fail sd_ceil_at_s |
| 156 | |
| 157 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/" |
| 158 | test_fail sd_ceil_at_s_slash |
| 159 | |
| 160 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d" |
| 161 | test_prefix sd_ceil_at_sd "s/d/" |
| 162 | |
| 163 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d/" |
| 164 | test_prefix sd_ceil_at_sd_slash "s/d/" |
| 165 | |
| 166 | |
| 167 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su" |
| 168 | test_prefix sd_ceil_at_su "s/d/" |
| 169 | |
| 170 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/" |
| 171 | test_prefix sd_ceil_at_su_slash "s/d/" |
| 172 | |
| 173 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di" |
| 174 | test_prefix sd_ceil_at_s_di "s/d/" |
| 175 | |
| 176 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di" |
| 177 | test_prefix sd_ceil_at_s_di_slash "s/d/" |
| 178 | |
| 179 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi" |
| 180 | test_prefix sd_ceil_at_sdi "s/d/" |
| 181 | |
| 182 | GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi" |
| 183 | test_prefix sd_ceil_at_sdi_slash "s/d/" |
| 184 | |
| 185 | |
| 186 | test_done |