summaryrefslogtreecommitdiff
path: root/t/t1500-rev-parse.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t1500-rev-parse.sh')
-rwxr-xr-xt/t1500-rev-parse.sh90
1 files changed, 90 insertions, 0 deletions
diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh
new file mode 100755
index 0000000..038e24c
--- /dev/null
+++ b/t/t1500-rev-parse.sh
@@ -0,0 +1,90 @@
+#!/bin/sh
+
+test_description='test git rev-parse'
+. ./test-lib.sh
+
+# usage: [options] label is-bare is-inside-git is-inside-work prefix git-dir
+test_rev_parse () {
+ d=
+ bare=
+ gitdir=
+ while :
+ do
+ case "$1" in
+ -C) d="$2"; shift; shift ;;
+ -b) case "$2" in
+ [tfu]*) bare="$2"; shift; shift ;;
+ *) error "test_rev_parse: bogus core.bare value '$2'" ;;
+ esac ;;
+ -g) gitdir="$2"; shift; shift ;;
+ -*) error "test_rev_parse: unrecognized option '$1'" ;;
+ *) break ;;
+ esac
+ done
+
+ name=$1
+ shift
+
+ for o in --is-bare-repository \
+ --is-inside-git-dir \
+ --is-inside-work-tree \
+ --show-prefix \
+ --git-dir
+ do
+ test $# -eq 0 && break
+ expect="$1"
+ test_expect_success "$name: $o" '
+ if test -n "$gitdir"
+ then
+ test_when_finished "unset GIT_DIR" &&
+ GIT_DIR="$gitdir" &&
+ export GIT_DIR
+ fi &&
+
+ case "$bare" in
+ t*) test_config ${d:+-C} ${d:+"$d"} core.bare true ;;
+ f*) test_config ${d:+-C} ${d:+"$d"} core.bare false ;;
+ u*) test_unconfig ${d:+-C} ${d:+"$d"} core.bare ;;
+ esac &&
+
+ echo "$expect" >expect &&
+ git ${d:+-C} ${d:+"$d"} rev-parse $o >actual &&
+ test_cmp expect actual
+ '
+ shift
+ done
+}
+
+ROOT=$(pwd)
+
+test_expect_success 'setup' '
+ mkdir -p sub/dir work &&
+ cp -R .git repo.git
+'
+
+test_rev_parse toplevel false false true '' .git
+
+test_rev_parse -C .git .git/ false true false '' .
+test_rev_parse -C .git/objects .git/objects/ false true false '' "$ROOT/.git"
+
+test_rev_parse -C sub/dir subdirectory false false true sub/dir/ "$ROOT/.git"
+
+test_rev_parse -b t 'core.bare = true' true false false
+
+test_rev_parse -b u 'core.bare undefined' false false true
+
+
+test_rev_parse -C work -g ../.git -b f 'GIT_DIR=../.git, core.bare = false' false false true ''
+
+test_rev_parse -C work -g ../.git -b t 'GIT_DIR=../.git, core.bare = true' true false false ''
+
+test_rev_parse -C work -g ../.git -b u 'GIT_DIR=../.git, core.bare undefined' false false true ''
+
+
+test_rev_parse -C work -g ../repo.git -b f 'GIT_DIR=../repo.git, core.bare = false' false false true ''
+
+test_rev_parse -C work -g ../repo.git -b t 'GIT_DIR=../repo.git, core.bare = true' true false false ''
+
+test_rev_parse -C work -g ../repo.git -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true ''
+
+test_done