|
3 | 3 | test_description='test git rev-parse' |
4 | 4 | . ./test-lib.sh |
5 | 5 |
|
6 | | -test_rev_parse() { |
7 | | - name=$1 |
8 | | - shift |
9 | | - |
10 | | - test_expect_success "$name: is-bare-repository" \ |
11 | | - "test '$1' = \"\$(git rev-parse --is-bare-repository)\"" |
12 | | - shift |
13 | | - [ $# -eq 0 ] && return |
14 | | - |
15 | | - test_expect_success "$name: is-inside-git-dir" \ |
16 | | - "test '$1' = \"\$(git rev-parse --is-inside-git-dir)\"" |
17 | | - shift |
18 | | - [ $# -eq 0 ] && return |
| 6 | +# usage: [options] label is-bare is-inside-git is-inside-work prefix git-dir |
| 7 | +test_rev_parse () { |
| 8 | + d= |
| 9 | + bare= |
| 10 | + gitdir= |
| 11 | + while : |
| 12 | + do |
| 13 | + case "$1" in |
| 14 | + -C) d="$2"; shift; shift ;; |
| 15 | + -b) case "$2" in |
| 16 | + [tfu]*) bare="$2"; shift; shift ;; |
| 17 | + *) error "test_rev_parse: bogus core.bare value '$2'" ;; |
| 18 | + esac ;; |
| 19 | + -g) gitdir="$2"; shift; shift ;; |
| 20 | + -*) error "test_rev_parse: unrecognized option '$1'" ;; |
| 21 | + *) break ;; |
| 22 | + esac |
| 23 | + done |
19 | 24 |
|
20 | | - test_expect_success "$name: is-inside-work-tree" \ |
21 | | - "test '$1' = \"\$(git rev-parse --is-inside-work-tree)\"" |
22 | | - shift |
23 | | - [ $# -eq 0 ] && return |
24 | | - |
25 | | - test_expect_success "$name: prefix" \ |
26 | | - "test '$1' = \"\$(git rev-parse --show-prefix)\"" |
| 25 | + name=$1 |
27 | 26 | shift |
28 | | - [ $# -eq 0 ] && return |
29 | 27 |
|
30 | | - test_expect_success "$name: git-dir" \ |
31 | | - "test '$1' = \"\$(git rev-parse --git-dir)\"" |
32 | | - shift |
33 | | - [ $# -eq 0 ] && return |
| 28 | + for o in --is-bare-repository \ |
| 29 | + --is-inside-git-dir \ |
| 30 | + --is-inside-work-tree \ |
| 31 | + --show-prefix \ |
| 32 | + --git-dir |
| 33 | + do |
| 34 | + test $# -eq 0 && break |
| 35 | + expect="$1" |
| 36 | + test_expect_success "$name: $o" ' |
| 37 | + if test -n "$gitdir" |
| 38 | + then |
| 39 | + test_when_finished "unset GIT_DIR" && |
| 40 | + GIT_DIR="$gitdir" && |
| 41 | + export GIT_DIR |
| 42 | + fi && |
| 43 | +
|
| 44 | + case "$bare" in |
| 45 | + t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;; |
| 46 | + f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;; |
| 47 | + u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;; |
| 48 | + esac && |
| 49 | +
|
| 50 | + echo "$expect" >expect && |
| 51 | + git ${d:+-C} ${d:+"$d"} rev-parse $o >actual && |
| 52 | + test_cmp expect actual |
| 53 | + ' |
| 54 | + shift |
| 55 | + done |
34 | 56 | } |
35 | 57 |
|
36 | | -# label is-bare is-inside-git is-inside-work prefix git-dir |
37 | | - |
38 | 58 | ROOT=$(pwd) |
39 | 59 |
|
| 60 | +test_expect_success 'setup' ' |
| 61 | + mkdir -p sub/dir work && |
| 62 | + cp -R .git repo.git |
| 63 | +' |
| 64 | + |
40 | 65 | test_rev_parse toplevel false false true '' .git |
41 | 66 |
|
42 | | -cd .git || exit 1 |
43 | | -test_rev_parse .git/ false true false '' . |
44 | | -cd objects || exit 1 |
45 | | -test_rev_parse .git/objects/ false true false '' "$ROOT/.git" |
46 | | -cd ../.. || exit 1 |
| 67 | +test_rev_parse -C .git .git/ false true false '' . |
| 68 | +test_rev_parse -C .git/objects .git/objects/ false true false '' "$ROOT/.git" |
47 | 69 |
|
48 | | -mkdir -p sub/dir || exit 1 |
49 | | -cd sub/dir || exit 1 |
50 | | -test_rev_parse subdirectory false false true sub/dir/ "$ROOT/.git" |
51 | | -cd ../.. || exit 1 |
| 70 | +test_rev_parse -C sub/dir subdirectory false false true sub/dir/ "$ROOT/.git" |
52 | 71 |
|
53 | | -git config core.bare true |
54 | | -test_rev_parse 'core.bare = true' true false false |
| 72 | +test_rev_parse -b t 'core.bare = true' true false false |
55 | 73 |
|
56 | | -git config --unset core.bare |
57 | | -test_rev_parse 'core.bare undefined' false false true |
| 74 | +test_rev_parse -b u 'core.bare undefined' false false true |
58 | 75 |
|
59 | | -mkdir work || exit 1 |
60 | | -cd work || exit 1 |
61 | | -GIT_DIR=../.git |
62 | | -GIT_CONFIG="$(pwd)"/../.git/config |
63 | | -export GIT_DIR GIT_CONFIG |
64 | 76 |
|
65 | | -git config core.bare false |
66 | | -test_rev_parse 'GIT_DIR=../.git, core.bare = false' false false true '' |
| 77 | +test_rev_parse -C work -g ../.git -b f 'GIT_DIR=../.git, core.bare = false' false false true '' |
67 | 78 |
|
68 | | -git config core.bare true |
69 | | -test_rev_parse 'GIT_DIR=../.git, core.bare = true' true false false '' |
| 79 | +test_rev_parse -C work -g ../.git -b t 'GIT_DIR=../.git, core.bare = true' true false false '' |
70 | 80 |
|
71 | | -git config --unset core.bare |
72 | | -test_rev_parse 'GIT_DIR=../.git, core.bare undefined' false false true '' |
| 81 | +test_rev_parse -C work -g ../.git -b u 'GIT_DIR=../.git, core.bare undefined' false false true '' |
73 | 82 |
|
74 | | -mv ../.git ../repo.git || exit 1 |
75 | | -GIT_DIR=../repo.git |
76 | | -GIT_CONFIG="$(pwd)"/../repo.git/config |
77 | 83 |
|
78 | | -git config core.bare false |
79 | | -test_rev_parse 'GIT_DIR=../repo.git, core.bare = false' false false true '' |
| 84 | +test_rev_parse -C work -g ../repo.git -b f 'GIT_DIR=../repo.git, core.bare = false' false false true '' |
80 | 85 |
|
81 | | -git config core.bare true |
82 | | -test_rev_parse 'GIT_DIR=../repo.git, core.bare = true' true false false '' |
| 86 | +test_rev_parse -C work -g ../repo.git -b t 'GIT_DIR=../repo.git, core.bare = true' true false false '' |
83 | 87 |
|
84 | | -git config --unset core.bare |
85 | | -test_rev_parse 'GIT_DIR=../repo.git, core.bare undefined' false false true '' |
| 88 | +test_rev_parse -C work -g ../repo.git -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true '' |
86 | 89 |
|
87 | 90 | test_done |
0 commit comments