From 813b4734fcb82e541658b33b8563387c197d6247 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Fri, 8 Jun 2007 23:28:39 +0200 Subject: [PATCH] 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 Signed-off-by: Junio C Hamano --- git-filter-branch.sh | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/git-filter-branch.sh b/git-filter-branch.sh index efb8f2dbca..cb43b59740 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -226,17 +226,6 @@ set_ident () { 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 filter_env= filter_tree= @@ -329,18 +318,19 @@ mkdir ../map # map old->new commit ids for rewriting parents 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 "$@" \ - -- "$filter_subdir" + git-rev-list --reverse --topo-order --default HEAD \ + --parents "$@" -- "$filter_subdir" esac > ../revs commits=$(cat ../revs | wc -l | tr -d " ") test $commits -eq 0 && die "Found nothing to rewrite" i=0 -while read commit; do +while read commit parents; do i=$(($i+1)) printf "$commit ($i/$commits) " @@ -374,7 +364,7 @@ while read commit; do eval "$filter_index" < /dev/null parentstr= - for parent in $(get_parents $commit); do + for parent in $parents; do for reparent in $(map "$parent"); do parentstr="$parentstr -p $reparent" done @@ -389,7 +379,7 @@ while read commit; do tee ../map/$commit 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) case "$target_head" in '') -- 2.11.4.GIT