Browse Source

filter-branch: Simplify parent computation.

We can use git rev-list --parents when we list the commits to rewrite.
It is not necessary to run git rev-list --parents for each commit in the
loop.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Sixt 18 years ago committed by Junio C Hamano
parent
commit
813b4734fc
  1. 24
      git-filter-branch.sh

24
git-filter-branch.sh

@ -226,17 +226,6 @@ set_ident () {
echo "[ -n \"\$GIT_${uid}_NAME\" ] || export GIT_${uid}_NAME=\"\${GIT_${uid}_EMAIL%%@*}\"" echo "[ -n \"\$GIT_${uid}_NAME\" ] || export GIT_${uid}_NAME=\"\${GIT_${uid}_EMAIL%%@*}\""
} }


# list all parent's object names for a given commit
get_parents () {
case "$filter_subdir" in
"")
git-rev-list -1 --parents "$1"
;;
*)
git-rev-list -1 --parents "$1" -- "$filter_subdir"
esac | sed "s/^[0-9a-f]*//"
}

tempdir=.git-rewrite tempdir=.git-rewrite
filter_env= filter_env=
filter_tree= filter_tree=
@ -329,18 +318,19 @@ mkdir ../map # map old->new commit ids for rewriting parents


case "$filter_subdir" in case "$filter_subdir" in
"") "")
git-rev-list --reverse --topo-order --default HEAD "$@" git-rev-list --reverse --topo-order --default HEAD \
--parents "$@"
;; ;;
*) *)
git-rev-list --reverse --topo-order --default HEAD "$@" \ git-rev-list --reverse --topo-order --default HEAD \
-- "$filter_subdir" --parents "$@" -- "$filter_subdir"
esac > ../revs esac > ../revs
commits=$(cat ../revs | wc -l | tr -d " ") commits=$(cat ../revs | wc -l | tr -d " ")


test $commits -eq 0 && die "Found nothing to rewrite" test $commits -eq 0 && die "Found nothing to rewrite"


i=0 i=0
while read commit; do while read commit parents; do
i=$(($i+1)) i=$(($i+1))
printf "$commit ($i/$commits) " printf "$commit ($i/$commits) "


@ -374,7 +364,7 @@ while read commit; do
eval "$filter_index" < /dev/null eval "$filter_index" < /dev/null


parentstr= parentstr=
for parent in $(get_parents $commit); do for parent in $parents; do
for reparent in $(map "$parent"); do for reparent in $(map "$parent"); do
parentstr="$parentstr -p $reparent" parentstr="$parentstr -p $reparent"
done done
@ -389,7 +379,7 @@ while read commit; do
tee ../map/$commit tee ../map/$commit
done <../revs done <../revs


src_head=$(tail -n 1 ../revs) src_head=$(tail -n 1 ../revs | sed -e 's/ .*//')
target_head=$(head -n 1 ../map/$src_head) target_head=$(head -n 1 ../map/$src_head)
case "$target_head" in case "$target_head" in
'') '')

Loading…
Cancel
Save