diff options
author | Jeff King <peff@peff.net> | 2008-05-13 04:46:38 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-05-13 21:45:28 -0700 |
commit | 0bdf93cbf0afd568384f237378ba368e751a2f0f (patch) | |
tree | 91ba78424da9ad1b1cb54fab05b521feb892a8e5 /ll-merge.c | |
parent | 6d9878cc60ba97fc99aa92f40535644938cad907 (diff) | |
download | git-0bdf93cbf0afd568384f237378ba368e751a2f0f.tar.gz |
filter-branch: fix variable export logic
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
This is just wrong. AND-list and OR-list operators && and || have equal
precedence and they bind left to right. The second term, var="$old"
assignment always succeeds, so we always end up exporting 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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'll-merge.c')
0 files changed, 0 insertions, 0 deletions