git-commit-vandalism/t/t1500-rev-parse.sh
Eric Sunshine 1dea0dc9e0 t1500: avoid setting configuration options outside of tests
Ideally, each test should be responsible for setting up state it needs
rather than relying upon transient global state. Toward this end, teach
test_rev_parse() to accept a "-b <value>" option to allow callers to set
"core.bare" explicitly or undefine it. Take advantage of this new option
to avoid setting "core.bare" outside of tests.

Under the hood, "-b <value>" invokes "test_config -C <dir>" (or
"test_unconfig -C <dir>"), thus git-config knows explicitly where to
find its configuration file. Consequently, the global GIT_CONFIG
environment variable required by the manual git-config invocations
outside of tests is no longer needed, and is thus dropped.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-05-18 14:15:10 -07:00

85 lines
2.0 KiB
Bash
Executable File

#!/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=
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 ;;
-*) 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" '
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
GIT_DIR=../.git
export GIT_DIR
test_rev_parse -C work -b f 'GIT_DIR=../.git, core.bare = false' false false true ''
test_rev_parse -C work -b t 'GIT_DIR=../.git, core.bare = true' true false false ''
test_rev_parse -C work -b u 'GIT_DIR=../.git, core.bare undefined' false false true ''
GIT_DIR=../repo.git
test_rev_parse -C work -b f 'GIT_DIR=../repo.git, core.bare = false' false false true ''
test_rev_parse -C work -b t 'GIT_DIR=../repo.git, core.bare = true' true false false ''
test_rev_parse -C work -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true ''
test_done