зеркало из https://github.com/microsoft/git.git
filter-branch: get rid of "set -e"
It was reported by Alex Riesen that "set -e" can break something as trivial as "unset CDPATH" in bash. So get rid of "set -e". Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
575d025c0d
Коммит
af580e9c5a
|
@ -8,8 +8,6 @@
|
||||||
# a new branch. You can specify a number of filters to modify the commits,
|
# a new branch. You can specify a number of filters to modify the commits,
|
||||||
# files and trees.
|
# files and trees.
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
USAGE="git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE]"
|
USAGE="git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE]"
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
|
|
||||||
|
@ -141,9 +139,10 @@ git show-ref "refs/heads/$dstbranch" 2> /dev/null &&
|
||||||
die "branch $dstbranch already exists"
|
die "branch $dstbranch already exists"
|
||||||
|
|
||||||
test ! -e "$tempdir" || die "$tempdir already exists, please remove it"
|
test ! -e "$tempdir" || die "$tempdir already exists, please remove it"
|
||||||
mkdir -p "$tempdir/t"
|
mkdir -p "$tempdir/t" &&
|
||||||
cd "$tempdir/t"
|
cd "$tempdir/t" &&
|
||||||
workdir="$(pwd)"
|
workdir="$(pwd)" ||
|
||||||
|
die ""
|
||||||
|
|
||||||
case "$GIT_DIR" in
|
case "$GIT_DIR" in
|
||||||
/*)
|
/*)
|
||||||
|
@ -155,12 +154,12 @@ esac
|
||||||
export GIT_DIR GIT_WORK_TREE=.
|
export GIT_DIR GIT_WORK_TREE=.
|
||||||
|
|
||||||
export GIT_INDEX_FILE="$(pwd)/../index"
|
export GIT_INDEX_FILE="$(pwd)/../index"
|
||||||
git read-tree # seed the index file
|
git read-tree || die "Could not seed the index"
|
||||||
|
|
||||||
ret=0
|
ret=0
|
||||||
|
|
||||||
|
# map old->new commit ids for rewriting parents
|
||||||
mkdir ../map # map old->new commit ids for rewriting parents
|
mkdir ../map || die "Could not create map/ directory"
|
||||||
|
|
||||||
case "$filter_subdir" in
|
case "$filter_subdir" in
|
||||||
"")
|
"")
|
||||||
|
@ -170,7 +169,7 @@ case "$filter_subdir" in
|
||||||
*)
|
*)
|
||||||
git rev-list --reverse --topo-order --default HEAD \
|
git rev-list --reverse --topo-order --default HEAD \
|
||||||
--parents --full-history "$@" -- "$filter_subdir"
|
--parents --full-history "$@" -- "$filter_subdir"
|
||||||
esac > ../revs
|
esac > ../revs || die "Could not get the commits"
|
||||||
commits=$(wc -l <../revs | tr -d " ")
|
commits=$(wc -l <../revs | tr -d " ")
|
||||||
|
|
||||||
test $commits -eq 0 && die "Found nothing to rewrite"
|
test $commits -eq 0 && die "Found nothing to rewrite"
|
||||||
|
@ -186,10 +185,11 @@ while read commit parents; do
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
git read-tree -i -m $commit:"$filter_subdir"
|
git read-tree -i -m $commit:"$filter_subdir"
|
||||||
esac
|
esac || die "Could not initialize the index"
|
||||||
|
|
||||||
export GIT_COMMIT=$commit
|
export GIT_COMMIT=$commit
|
||||||
git cat-file commit "$commit" >../commit
|
git cat-file commit "$commit" >../commit ||
|
||||||
|
die "Cannot read commit $commit"
|
||||||
|
|
||||||
eval "$(set_ident AUTHOR <../commit)" ||
|
eval "$(set_ident AUTHOR <../commit)" ||
|
||||||
die "setting author failed for commit $commit"
|
die "setting author failed for commit $commit"
|
||||||
|
@ -199,7 +199,8 @@ while read commit parents; do
|
||||||
die "env filter failed: $filter_env"
|
die "env filter failed: $filter_env"
|
||||||
|
|
||||||
if [ "$filter_tree" ]; then
|
if [ "$filter_tree" ]; then
|
||||||
git checkout-index -f -u -a
|
git checkout-index -f -u -a ||
|
||||||
|
die "Could not checkout the index"
|
||||||
# files that $commit removed are now still in the working tree;
|
# files that $commit removed are now still in the working tree;
|
||||||
# remove them, else they would be added again
|
# remove them, else they would be added again
|
||||||
git ls-files -z --others | xargs -0 rm -f
|
git ls-files -z --others | xargs -0 rm -f
|
||||||
|
@ -240,7 +241,8 @@ case "$target_head" in
|
||||||
echo Nothing rewritten
|
echo Nothing rewritten
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
git update-ref refs/heads/"$dstbranch" $target_head
|
git update-ref refs/heads/"$dstbranch" $target_head ||
|
||||||
|
die "Could not update $dstbranch with $target_head"
|
||||||
if [ $(wc -l <../map/$src_head) -gt 1 ]; then
|
if [ $(wc -l <../map/$src_head) -gt 1 ]; then
|
||||||
echo "WARNING: Your commit filter caused the head commit to expand to several rewritten commits. Only the first such commit was recorded as the current $dstbranch head but you will need to resolve the situation now (probably by manually merging the other commits). These are all the commits:" >&2
|
echo "WARNING: Your commit filter caused the head commit to expand to several rewritten commits. Only the first such commit was recorded as the current $dstbranch head but you will need to resolve the situation now (probably by manually merging the other commits). These are all the commits:" >&2
|
||||||
sed 's/^/ /' ../map/$src_head >&2
|
sed 's/^/ /' ../map/$src_head >&2
|
||||||
|
@ -277,7 +279,8 @@ if [ "$filter_tag_name" ]; then
|
||||||
warn "unreferencing tag object $sha1t"
|
warn "unreferencing tag object $sha1t"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git update-ref "refs/tags/$new_ref" "$new_sha1"
|
git update-ref "refs/tags/$new_ref" "$new_sha1" ||
|
||||||
|
die "Could not write tag $new_ref"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче