Code

Do not rely on the exit status of "unset" for unset variables
authorH.Merijn Brand <h.m.brand@xs4all.nl>
Tue, 4 Dec 2007 22:45:16 +0000 (22:45 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Dec 2007 22:48:45 +0000 (14:48 -0800)
POSIX says that exit status "0" means that "unset" successfully unset
the variable.  However, it is kind of ambiguous if an environment
variable which was not set could be successfully unset.

At least the default shell on HP-UX insists on reporting an error in
such a case, so just ignore the exit status of "unset".

[Dscho: extended the patch to git-submodule.sh, as Junio realized that
 this is the only other place where we check the exit status of "unset".]

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-submodule.sh
t/t0001-init.sh

index 82ac28fa27dc41b821905f1a83155994d56c4f3b..ad9fe628fdf0f7d5a9a968abeb03d6213e3772d7 100755 (executable)
@@ -158,7 +158,7 @@ module_add()
        die "'$path' already exists in the index"
 
        module_clone "$path" "$realrepo" || exit
-       (unset GIT_DIR && cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
+       (unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
        die "Unable to checkout submodule '$path'"
        git add "$path" ||
        die "Failed to add submodule '$path'"
@@ -228,14 +228,14 @@ modules_update()
                        module_clone "$path" "$url" || exit
                        subsha1=
                else
-                       subsha1=$(unset GIT_DIR && cd "$path" &&
+                       subsha1=$(unset GIT_DIR; cd "$path" &&
                                git rev-parse --verify HEAD) ||
                        die "Unable to find current revision in submodule path '$path'"
                fi
 
                if test "$subsha1" != "$sha1"
                then
-                       (unset GIT_DIR && cd "$path" && git-fetch &&
+                       (unset GIT_DIR; cd "$path" && git-fetch &&
                                git-checkout -q "$sha1") ||
                        die "Unable to checkout '$sha1' in submodule path '$path'"
 
@@ -246,7 +246,7 @@ modules_update()
 
 set_name_rev () {
        revname=$( (
-               unset GIT_DIR &&
+               unset GIT_DIR
                cd "$1" && {
                        git describe "$2" 2>/dev/null ||
                        git describe --tags "$2" 2>/dev/null ||
@@ -285,7 +285,7 @@ modules_list()
                else
                        if test -z "$cached"
                        then
-                               sha1=$(unset GIT_DIR && cd "$path" && git rev-parse --verify HEAD)
+                               sha1=$(unset GIT_DIR; cd "$path" && git rev-parse --verify HEAD)
                                set_name_rev "$path" "$sha1"
                        fi
                        say "+$sha1 $path$revname"
index b14b3ec39418b37a2a7e4b3745032360c146dff7..c015405f124f738e66213987c3ba88c7d310caab 100755 (executable)
@@ -25,7 +25,7 @@ check_config () {
 
 test_expect_success 'plain' '
        (
-               unset GIT_DIR GIT_WORK_TREE &&
+               unset GIT_DIR GIT_WORK_TREE
                mkdir plain &&
                cd plain &&
                git init
@@ -35,7 +35,7 @@ test_expect_success 'plain' '
 
 test_expect_success 'plain with GIT_WORK_TREE' '
        if (
-               unset GIT_DIR &&
+               unset GIT_DIR
                mkdir plain-wt &&
                cd plain-wt &&
                GIT_WORK_TREE=$(pwd) git init
@@ -48,7 +48,7 @@ test_expect_success 'plain with GIT_WORK_TREE' '
 
 test_expect_success 'plain bare' '
        (
-               unset GIT_DIR GIT_WORK_TREE GIT_CONFIG &&
+               unset GIT_DIR GIT_WORK_TREE GIT_CONFIG
                mkdir plain-bare-1 &&
                cd plain-bare-1 &&
                git --bare init
@@ -58,7 +58,7 @@ test_expect_success 'plain bare' '
 
 test_expect_success 'plain bare with GIT_WORK_TREE' '
        if (
-               unset GIT_DIR GIT_CONFIG &&
+               unset GIT_DIR GIT_CONFIG
                mkdir plain-bare-2 &&
                cd plain-bare-2 &&
                GIT_WORK_TREE=$(pwd) git --bare init
@@ -72,7 +72,7 @@ test_expect_success 'plain bare with GIT_WORK_TREE' '
 test_expect_success 'GIT_DIR bare' '
 
        (
-               unset GIT_CONFIG &&
+               unset GIT_CONFIG
                mkdir git-dir-bare.git &&
                GIT_DIR=git-dir-bare.git git init
        ) &&
@@ -82,7 +82,7 @@ test_expect_success 'GIT_DIR bare' '
 test_expect_success 'GIT_DIR non-bare' '
 
        (
-               unset GIT_CONFIG &&
+               unset GIT_CONFIG
                mkdir non-bare &&
                cd non-bare &&
                GIT_DIR=.git git init
@@ -93,7 +93,7 @@ test_expect_success 'GIT_DIR non-bare' '
 test_expect_success 'GIT_DIR & GIT_WORK_TREE (1)' '
 
        (
-               unset GIT_CONFIG &&
+               unset GIT_CONFIG
                mkdir git-dir-wt-1.git &&
                GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-1.git git init
        ) &&
@@ -103,7 +103,7 @@ test_expect_success 'GIT_DIR & GIT_WORK_TREE (1)' '
 test_expect_success 'GIT_DIR & GIT_WORK_TREE (2)' '
 
        if (
-               unset GIT_CONFIG &&
+               unset GIT_CONFIG
                mkdir git-dir-wt-2.git &&
                GIT_WORK_TREE=$(pwd) GIT_DIR=git-dir-wt-2.git git --bare init
        )