Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='test git rev-parse' |
Johannes Schindelin | 06d5314 | 2020-11-18 23:44:21 +0000 | [diff] [blame] | 4 | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
Johannes Schindelin | 334afbc | 2020-11-18 23:44:19 +0000 | [diff] [blame] | 5 | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| 6 | |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 7 | . ./test-lib.sh |
| 8 | |
brian m. carlson | fac60b8 | 2020-12-13 00:25:29 +0000 | [diff] [blame] | 9 | test_one () { |
| 10 | dir="$1" && |
| 11 | expect="$2" && |
| 12 | shift && |
| 13 | shift && |
| 14 | echo "$expect" >expect && |
| 15 | git -C "$dir" rev-parse "$@" >actual && |
| 16 | test_cmp expect actual |
| 17 | } |
| 18 | |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 19 | # usage: [options] label is-bare is-inside-git is-inside-work prefix git-dir absolute-git-dir |
Eric Sunshine | 12f7526 | 2016-05-18 16:15:42 -0400 | [diff] [blame] | 20 | test_rev_parse () { |
Eric Sunshine | 1e043cf | 2016-05-18 16:15:43 -0400 | [diff] [blame] | 21 | d= |
Eric Sunshine | 1dea0dc | 2016-05-18 16:15:44 -0400 | [diff] [blame] | 22 | bare= |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 23 | gitdir= |
Eric Sunshine | 1e043cf | 2016-05-18 16:15:43 -0400 | [diff] [blame] | 24 | while : |
| 25 | do |
| 26 | case "$1" in |
| 27 | -C) d="$2"; shift; shift ;; |
Eric Sunshine | 1dea0dc | 2016-05-18 16:15:44 -0400 | [diff] [blame] | 28 | -b) case "$2" in |
| 29 | [tfu]*) bare="$2"; shift; shift ;; |
| 30 | *) error "test_rev_parse: bogus core.bare value '$2'" ;; |
| 31 | esac ;; |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 32 | -g) gitdir="$2"; shift; shift ;; |
Eric Sunshine | 1e043cf | 2016-05-18 16:15:43 -0400 | [diff] [blame] | 33 | -*) error "test_rev_parse: unrecognized option '$1'" ;; |
| 34 | *) break ;; |
| 35 | esac |
| 36 | done |
| 37 | |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 38 | name=$1 |
| 39 | shift |
| 40 | |
Eric Sunshine | 12f7526 | 2016-05-18 16:15:42 -0400 | [diff] [blame] | 41 | for o in --is-bare-repository \ |
| 42 | --is-inside-git-dir \ |
| 43 | --is-inside-work-tree \ |
| 44 | --show-prefix \ |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 45 | --git-dir \ |
| 46 | --absolute-git-dir |
Eric Sunshine | 12f7526 | 2016-05-18 16:15:42 -0400 | [diff] [blame] | 47 | do |
| 48 | test $# -eq 0 && break |
| 49 | expect="$1" |
| 50 | test_expect_success "$name: $o" ' |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 51 | if test -n "$gitdir" |
| 52 | then |
| 53 | test_when_finished "unset GIT_DIR" && |
| 54 | GIT_DIR="$gitdir" && |
| 55 | export GIT_DIR |
| 56 | fi && |
| 57 | |
Eric Sunshine | 1dea0dc | 2016-05-18 16:15:44 -0400 | [diff] [blame] | 58 | case "$bare" in |
| 59 | t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;; |
| 60 | f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;; |
| 61 | u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;; |
| 62 | esac && |
| 63 | |
Eric Sunshine | 12f7526 | 2016-05-18 16:15:42 -0400 | [diff] [blame] | 64 | echo "$expect" >expect && |
Eric Sunshine | 1e043cf | 2016-05-18 16:15:43 -0400 | [diff] [blame] | 65 | git ${d:+-C} ${d:+"$d"} rev-parse $o >actual && |
Eric Sunshine | 12f7526 | 2016-05-18 16:15:42 -0400 | [diff] [blame] | 66 | test_cmp expect actual |
| 67 | ' |
| 68 | shift |
| 69 | done |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 70 | } |
| 71 | |
SZEDER Gábor | 8fb3c00 | 2009-02-14 17:16:28 +0100 | [diff] [blame] | 72 | ROOT=$(pwd) |
Johannes Schindelin | 7efeb8f | 2007-08-05 14:12:53 +0100 | [diff] [blame] | 73 | |
Eric Sunshine | d66f68f | 2016-05-17 15:36:26 -0400 | [diff] [blame] | 74 | test_expect_success 'setup' ' |
Eric Sunshine | d66f68f | 2016-05-17 15:36:26 -0400 | [diff] [blame] | 75 | mkdir -p sub/dir work && |
brian m. carlson | fac60b8 | 2020-12-13 00:25:29 +0000 | [diff] [blame] | 76 | cp -R .git repo.git && |
| 77 | git checkout -B main && |
| 78 | test_commit abc && |
| 79 | git checkout -b side && |
| 80 | test_commit def && |
| 81 | git checkout main && |
| 82 | git worktree add worktree side |
Eric Sunshine | d66f68f | 2016-05-17 15:36:26 -0400 | [diff] [blame] | 83 | ' |
| 84 | |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 85 | test_rev_parse toplevel false false true '' .git "$ROOT/.git" |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 86 | |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 87 | test_rev_parse -C .git .git/ false true false '' . "$ROOT/.git" |
| 88 | test_rev_parse -C .git/objects .git/objects/ false true false '' "$ROOT/.git" "$ROOT/.git" |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 89 | |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 90 | test_rev_parse -C sub/dir subdirectory false false true sub/dir/ "$ROOT/.git" "$ROOT/.git" |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 91 | |
Eric Sunshine | 1dea0dc | 2016-05-18 16:15:44 -0400 | [diff] [blame] | 92 | test_rev_parse -b t 'core.bare = true' true false false |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 93 | |
Eric Sunshine | 1dea0dc | 2016-05-18 16:15:44 -0400 | [diff] [blame] | 94 | test_rev_parse -b u 'core.bare undefined' false false true |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 95 | |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 96 | |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 97 | test_rev_parse -C work -g ../.git -b f 'GIT_DIR=../.git, core.bare = false' false false true '' "../.git" "$ROOT/.git" |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 98 | |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 99 | test_rev_parse -C work -g ../.git -b t 'GIT_DIR=../.git, core.bare = true' true false false '' |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 100 | |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 101 | test_rev_parse -C work -g ../.git -b u 'GIT_DIR=../.git, core.bare undefined' false false true '' |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 102 | |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 103 | |
SZEDER Gábor | a2f5a87 | 2017-02-03 03:48:23 +0100 | [diff] [blame] | 104 | test_rev_parse -C work -g ../repo.git -b f 'GIT_DIR=../repo.git, core.bare = false' false false true '' "../repo.git" "$ROOT/repo.git" |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 105 | |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 106 | test_rev_parse -C work -g ../repo.git -b t 'GIT_DIR=../repo.git, core.bare = true' true false false '' |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 107 | |
Eric Sunshine | e6273f4 | 2016-05-18 16:15:45 -0400 | [diff] [blame] | 108 | test_rev_parse -C work -g ../repo.git -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true '' |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 109 | |
brian m. carlson | fac60b8 | 2020-12-13 00:25:29 +0000 | [diff] [blame] | 110 | test_expect_success 'rev-parse --path-format=absolute' ' |
| 111 | test_one "." "$ROOT/.git" --path-format=absolute --git-dir && |
| 112 | test_one "." "$ROOT/.git" --path-format=absolute --git-common-dir && |
| 113 | test_one "sub/dir" "$ROOT/.git" --path-format=absolute --git-dir && |
| 114 | test_one "sub/dir" "$ROOT/.git" --path-format=absolute --git-common-dir && |
| 115 | test_one "worktree" "$ROOT/.git/worktrees/worktree" --path-format=absolute --git-dir && |
| 116 | test_one "worktree" "$ROOT/.git" --path-format=absolute --git-common-dir && |
| 117 | test_one "." "$ROOT" --path-format=absolute --show-toplevel && |
| 118 | test_one "." "$ROOT/.git/objects" --path-format=absolute --git-path objects && |
| 119 | test_one "." "$ROOT/.git/objects/foo/bar/baz" --path-format=absolute --git-path objects/foo/bar/baz |
| 120 | ' |
| 121 | |
| 122 | test_expect_success 'rev-parse --path-format=relative' ' |
| 123 | test_one "." ".git" --path-format=relative --git-dir && |
| 124 | test_one "." ".git" --path-format=relative --git-common-dir && |
| 125 | test_one "sub/dir" "../../.git" --path-format=relative --git-dir && |
| 126 | test_one "sub/dir" "../../.git" --path-format=relative --git-common-dir && |
| 127 | test_one "worktree" "../.git/worktrees/worktree" --path-format=relative --git-dir && |
| 128 | test_one "worktree" "../.git" --path-format=relative --git-common-dir && |
| 129 | test_one "." "./" --path-format=relative --show-toplevel && |
| 130 | test_one "." ".git/objects" --path-format=relative --git-path objects && |
| 131 | test_one "." ".git/objects/foo/bar/baz" --path-format=relative --git-path objects/foo/bar/baz |
| 132 | ' |
| 133 | |
| 134 | test_expect_success '--path-format=relative does not affect --absolute-git-dir' ' |
| 135 | git rev-parse --path-format=relative --absolute-git-dir >actual && |
| 136 | echo "$ROOT/.git" >expect && |
| 137 | test_cmp expect actual |
| 138 | ' |
| 139 | |
| 140 | test_expect_success '--path-format can change in the middle of the command line' ' |
| 141 | git rev-parse --path-format=absolute --git-dir --path-format=relative --git-path objects/foo/bar >actual && |
| 142 | cat >expect <<-EOF && |
| 143 | $ROOT/.git |
| 144 | .git/objects/foo/bar |
| 145 | EOF |
| 146 | test_cmp expect actual |
| 147 | ' |
| 148 | |
Michael Rappazzo | 5de8a54 | 2017-02-17 17:59:02 +0100 | [diff] [blame] | 149 | test_expect_success 'git-common-dir from worktree root' ' |
| 150 | echo .git >expect && |
| 151 | git rev-parse --git-common-dir >actual && |
| 152 | test_cmp expect actual |
| 153 | ' |
| 154 | |
Johannes Schindelin | 098aa86 | 2017-02-17 17:59:06 +0100 | [diff] [blame] | 155 | test_expect_success 'git-common-dir inside sub-dir' ' |
Michael Rappazzo | 5de8a54 | 2017-02-17 17:59:02 +0100 | [diff] [blame] | 156 | mkdir -p path/to/child && |
| 157 | test_when_finished "rm -rf path" && |
| 158 | echo "$(git -C path/to/child rev-parse --show-cdup).git" >expect && |
| 159 | git -C path/to/child rev-parse --git-common-dir >actual && |
| 160 | test_cmp expect actual |
| 161 | ' |
| 162 | |
| 163 | test_expect_success 'git-path from worktree root' ' |
| 164 | echo .git/objects >expect && |
| 165 | git rev-parse --git-path objects >actual && |
| 166 | test_cmp expect actual |
| 167 | ' |
| 168 | |
Johannes Schindelin | 098aa86 | 2017-02-17 17:59:06 +0100 | [diff] [blame] | 169 | test_expect_success 'git-path inside sub-dir' ' |
Michael Rappazzo | 5de8a54 | 2017-02-17 17:59:02 +0100 | [diff] [blame] | 170 | mkdir -p path/to/child && |
| 171 | test_when_finished "rm -rf path" && |
| 172 | echo "$(git -C path/to/child rev-parse --show-cdup).git/objects" >expect && |
| 173 | git -C path/to/child rev-parse --git-path objects >actual && |
| 174 | test_cmp expect actual |
| 175 | ' |
| 176 | |
Øystein Walle | 417abfd | 2017-09-18 19:04:29 +0200 | [diff] [blame] | 177 | test_expect_success 'rev-parse --is-shallow-repository in shallow repo' ' |
| 178 | test_commit test_commit && |
| 179 | echo true >expect && |
| 180 | git clone --depth 1 --no-local . shallow && |
| 181 | test_when_finished "rm -rf shallow" && |
| 182 | git -C shallow rev-parse --is-shallow-repository >actual && |
| 183 | test_cmp expect actual |
| 184 | ' |
| 185 | |
| 186 | test_expect_success 'rev-parse --is-shallow-repository in non-shallow repo' ' |
| 187 | echo false >expect && |
| 188 | git rev-parse --is-shallow-repository >actual && |
| 189 | test_cmp expect actual |
| 190 | ' |
| 191 | |
brian m. carlson | 2eabd38 | 2019-10-28 00:58:55 +0000 | [diff] [blame] | 192 | test_expect_success 'rev-parse --show-object-format in repo' ' |
| 193 | echo "$(test_oid algo)" >expect && |
| 194 | git rev-parse --show-object-format >actual && |
| 195 | test_cmp expect actual && |
| 196 | git rev-parse --show-object-format=storage >actual && |
| 197 | test_cmp expect actual && |
| 198 | git rev-parse --show-object-format=input >actual && |
| 199 | test_cmp expect actual && |
| 200 | git rev-parse --show-object-format=output >actual && |
| 201 | test_cmp expect actual && |
| 202 | test_must_fail git rev-parse --show-object-format=squeamish-ossifrage 2>err && |
| 203 | grep "unknown mode for --show-object-format: squeamish-ossifrage" err |
| 204 | ' |
| 205 | |
Jeff King | 2d92ab3 | 2019-11-19 03:05:43 -0500 | [diff] [blame] | 206 | test_expect_success '--show-toplevel from subdir of working tree' ' |
| 207 | pwd >expect && |
| 208 | git -C sub/dir rev-parse --show-toplevel >actual && |
| 209 | test_cmp expect actual |
| 210 | ' |
| 211 | |
| 212 | test_expect_success '--show-toplevel from inside .git' ' |
| 213 | test_must_fail git -C .git rev-parse --show-toplevel |
| 214 | ' |
| 215 | |
Stefan Beller | bf0231c | 2017-03-08 15:07:42 -0800 | [diff] [blame] | 216 | test_expect_success 'showing the superproject correctly' ' |
| 217 | git rev-parse --show-superproject-working-tree >out && |
| 218 | test_must_be_empty out && |
| 219 | |
| 220 | test_create_repo super && |
| 221 | test_commit -C super test_commit && |
| 222 | test_create_repo sub && |
| 223 | test_commit -C sub test_commit && |
| 224 | git -C super submodule add ../sub dir/sub && |
| 225 | echo $(pwd)/super >expect && |
| 226 | git -C super/dir/sub rev-parse --show-superproject-working-tree >out && |
Sam McKelvie | c5cbb27 | 2018-09-27 11:10:54 -0700 | [diff] [blame] | 227 | test_cmp expect out && |
| 228 | |
| 229 | test_commit -C super submodule_add && |
| 230 | git -C super checkout -b branch1 && |
| 231 | git -C super/dir/sub checkout -b branch1 && |
| 232 | test_commit -C super/dir/sub branch1_commit && |
| 233 | git -C super add dir/sub && |
| 234 | test_commit -C super branch1_commit && |
Johannes Schindelin | 06d5314 | 2020-11-18 23:44:21 +0000 | [diff] [blame] | 235 | git -C super checkout -b branch2 main && |
| 236 | git -C super/dir/sub checkout -b branch2 main && |
Sam McKelvie | c5cbb27 | 2018-09-27 11:10:54 -0700 | [diff] [blame] | 237 | test_commit -C super/dir/sub branch2_commit && |
| 238 | git -C super add dir/sub && |
| 239 | test_commit -C super branch2_commit && |
| 240 | test_must_fail git -C super merge branch1 && |
| 241 | |
| 242 | git -C super/dir/sub rev-parse --show-superproject-working-tree >out && |
Stefan Beller | bf0231c | 2017-03-08 15:07:42 -0800 | [diff] [blame] | 243 | test_cmp expect out |
| 244 | ' |
| 245 | |
Eric Wong | a5cdca4 | 2021-02-10 21:55:43 +0000 | [diff] [blame] | 246 | # at least one external project depends on this behavior: |
| 247 | test_expect_success 'rev-parse --since= unsqueezed ordering' ' |
| 248 | x1=--since=1970-01-01T00:00:01Z && |
| 249 | x2=--since=1970-01-01T00:00:02Z && |
| 250 | x3=--since=1970-01-01T00:00:03Z && |
| 251 | git rev-parse $x1 $x1 $x3 $x2 >actual && |
| 252 | cat >expect <<-EOF && |
| 253 | --max-age=1 |
| 254 | --max-age=1 |
| 255 | --max-age=3 |
| 256 | --max-age=2 |
| 257 | EOF |
| 258 | test_cmp expect actual |
| 259 | ' |
| 260 | |
Matthias Lederhofer | dace6e4 | 2007-06-06 09:01:21 +0200 | [diff] [blame] | 261 | test_done |