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 "-g <dir>" option to allow callers to specify the value of the GIT_DIR environment variable explicitly, and take advantage of this new option to avoid polluting the global scope with GIT_DIR assignments. Regarding the implementation: Typically, tests avoid polluting the global state by wrapping transient environment variable assignments within a subshell, however, this technique can not be used here since test_config() and test_unconfig() need to know GIT_DIR, as well, but neither function can be used within a subshell. Consequently, GIT_DIR is cleared manually via sane_unset(). Signed-off-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> --- t/t1500-rev-parse.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh index c058aa4..525e6d3 100755 --- a/t/t1500-rev-parse.sh +++ b/t/t1500-rev-parse.sh @@ -7,11 +7,13 @@ test_description='test git rev-parse' test_rev_parse () { dir= bare= + env= while : do case "$1" in -C) dir="-C $2"; shift; shift ;; -b) bare="$2"; shift; shift ;; + -g) env="GIT_DIR=$2; export GIT_DIR"; shift; shift ;; -*) error "test_rev_parse: unrecognized option '$1'" ;; *) break ;; esac @@ -36,6 +38,8 @@ test_rev_parse () { do expect="$1" test_expect_success "$name: $o" ' + test_when_finished "sane_unset GIT_DIR" && + eval $env && $bare && echo "$expect" >expect && git $dir rev-parse --$o >actual && @@ -61,22 +65,19 @@ test_rev_parse -b t 'core.bare = true' true false false test_rev_parse -b u 'core.bare undefined' false false true test_expect_success 'setup non-local database ../.git' 'mkdir work' -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 -g ../.git -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 -g ../.git -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 '' +test_rev_parse -C work -g ../.git -b u 'GIT_DIR=../.git, core.bare undefined' false false true '' test_expect_success 'setup non-local database ../repo.git' 'mv .git repo.git' -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 -g ../repo.git -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 -g ../repo.git -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_rev_parse -C work -g ../repo.git -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true '' test_done -- 2.8.2.530.g51d527d -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html