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@xxxxxxxxxx> --- git-filter-branch.sh | 24 +++++++----------------- 1 files changed, 7 insertions(+), 17 deletions(-) diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 4990729..4ef4570 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -229,17 +229,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= @@ -332,18 +321,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 "\rRewriting commits... ($i/$commits)" @@ -377,7 +367,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 @@ -398,7 +388,7 @@ while read commit; do done > ../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 '') -- 1.5.2 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html