[PATCH 4/4] filter-branch: fix variable export logic
- From
Jeff King <peff@peff.net>
- Date
- May 13, 2008, 08:46 UTC
- Message-ID
- <20080513084638.GD23799@sigill.intra.peff.net>
- In-Reply-To
- <20080513084338.GA23729@sigill.intra.peff.net>
filter-branch tries to restore "old" copies of some environment variables by using the construct:
unset var test -z "$old_var" || var="$old_var" && export var
However, by the short-circuit logic, we will always run 'export var'. On bash and dash, exporting an unset variable has no effect. However, on some shells (such as FreeBSD's /bin/sh), the shell exports the empty value.
This manifested itself in this case as git-filter-branch setting GIT_INDEX_FILE to the empty string, which in turn caused its call to git-read-tree to fail, leaving the working tree pointing at the original HEAD instead of the rewritten one.
To fix this, we change the short-circuit logic to better match the intent:
test -z "$old_var" || { var="$old_var" && export var; }Signed-off-by: Jeff King <peff@peff.net> --- git-filter-branch.sh | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 333f6a8..0304dc5 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -435,11 +435,11 @@ rm -rf "$tempdir" trap - 0 unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE -test -z "$ORIG_GIT_DIR" || GIT_DIR="$ORIG_GIT_DIR" && export GIT_DIR -test -z "$ORIG_GIT_WORK_TREE" || GIT_WORK_TREE="$ORIG_GIT_WORK_TREE" && - export GIT_WORK_TREE -test -z "$ORIG_GIT_INDEX_FILE" || GIT_INDEX_FILE="$ORIG_GIT_INDEX_FILE" && - export GIT_INDEX_FILE +test -z "$ORIG_GIT_DIR" || { GIT_DIR="$ORIG_GIT_DIR" && export GIT_DIR; } +test -z "$ORIG_GIT_WORK_TREE" || { GIT_WORK_TREE="$ORIG_GIT_WORK_TREE" && + export GIT_WORK_TREE; } +test -z "$ORIG_GIT_INDEX_FILE" || { GIT_INDEX_FILE="$ORIG_GIT_INDEX_FILE" && + export GIT_INDEX_FILE; } git read-tree -u -m HEAD exit $ret
-- 1.5.5.1.296.gf618c