From: Junio C Hamano Date: Fri, 4 Dec 2015 19:19:10 +0000 (-0800) Subject: Merge branch 'jk/filter-branch-no-index' X-Git-Tag: v2.7.0-rc0~17 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/2e5adec97a65ce8c2c803b9e1cbb1c0d067e7e47?ds=sidebyside;hp=-c Merge branch 'jk/filter-branch-no-index' Speed up filter-branch for cases where we only care about rewriting commits, not tree data. * jk/filter-branch-no-index: filter-branch: skip index read/write when possible --- 2e5adec97a65ce8c2c803b9e1cbb1c0d067e7e47 diff --combined git-filter-branch.sh index cefd1452c6,d61f9baceb..98f1779cf3 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@@ -306,6 -306,15 +306,15 @@@ the start_timestamp=$(date '+%s') fi + if test -n "$filter_index" || + test -n "$filter_tree" || + test -n "$filter_subdir" + then + need_index=t + else + need_index= + fi + while read commit parents; do git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1)) @@@ -313,7 -322,10 +322,10 @@@ case "$filter_subdir" in "") - GIT_ALLOW_NULL_SHA1=1 git read-tree -i -m $commit + if test -n "$need_index" + then + GIT_ALLOW_NULL_SHA1=1 git read-tree -i -m $commit + fi ;; *) # The commit may not have the subdirectory at all @@@ -349,7 -361,7 +361,7 @@@ die "tree filter failed: $filter_tree" ( - git diff-index -r --name-only --ignore-submodules $commit && + git diff-index -r --name-only --ignore-submodules $commit -- && git ls-files --others ) > "$tempdir"/tree-state || exit git update-index --add --replace --remove --stdin \ @@@ -387,8 -399,15 +399,15 @@@ } <../commit | eval "$filter_msg" > ../message || die "msg filter failed: $filter_msg" + + if test -n "$need_index" + then + tree=$(git write-tree) + else + tree="$commit^{tree}" + fi workdir=$workdir @SHELL_PATH@ -c "$filter_commit" "git commit-tree" \ - $(git write-tree) $parentstr < ../message > ../map/$commit || + "$tree" $parentstr < ../message > ../map/$commit || die "could not write rewritten commit" done <../revs