summaryrefslogtreecommitdiff
path: root/git-filter-branch.sh
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2013-04-02 14:22:19 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-04-02 20:34:55 (GMT)
commit97276019bb20829c97528b53dc453a37177c35bb (patch)
tree6cbc4d88a238ca033e27a81349c6e6cb620ca538 /git-filter-branch.sh
parent15999998fbda60552742275570947431b57108ae (diff)
downloadgit-97276019bb20829c97528b53dc453a37177c35bb.zip
git-97276019bb20829c97528b53dc453a37177c35bb.tar.gz
git-97276019bb20829c97528b53dc453a37177c35bb.tar.bz2
filter-branch: return to original dir after filtering
The first thing filter-branch does is to create a temporary directory, either ".git-rewrite" in the current directory (which may be the working tree or the repository if bare), or in a directory specified by "-d". We then chdir to $tempdir/t as our temporary working directory in which to run tree filters. After finishing the filter, we then attempt to go back to the original directory with "cd ../..". This works in the .git-rewrite case, but if "-d" is used, we end up in a random directory. The only thing we do after this chdir is to run git-read-tree, but that means that: 1. The working directory is not updated to reflect the filtered history. 2. We dump random files into "$tempdir/.." (e.g., if you use "-d /tmp/foo", we dump junk into /tmp). Fix it by recording the full path to the original directory and returning there explicitly. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-filter-branch.sh')
-rwxr-xr-xgit-filter-branch.sh5
1 files changed, 3 insertions, 2 deletions
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 178e453..2442536 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -217,6 +217,7 @@ t)
test -d "$tempdir" &&
die "$tempdir already exists, please remove it"
esac
+orig_dir=$(pwd)
mkdir -p "$tempdir/t" &&
tempdir="$(cd "$tempdir"; pwd)" &&
cd "$tempdir/t" &&
@@ -224,7 +225,7 @@ workdir="$(pwd)" ||
die ""
# Remove tempdir on exit
-trap 'cd ../..; rm -rf "$tempdir"' 0
+trap 'cd "$orig_dir"; rm -rf "$tempdir"' 0
ORIG_GIT_DIR="$GIT_DIR"
ORIG_GIT_WORK_TREE="$GIT_WORK_TREE"
@@ -489,7 +490,7 @@ if [ "$filter_tag_name" ]; then
done
fi
-cd ../..
+cd "$orig_dir"
rm -rf "$tempdir"
trap - 0