diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-12-04 20:19:10 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-12-04 20:19:10 +0100 |
commit | 2e5adec97a65ce8c2c803b9e1cbb1c0d067e7e47 (patch) | |
tree | eacdbdd6d3972bef4437457c7cebafac0c4d4c68 /git-filter-branch.sh | |
parent | Merge branch 'ad/sha1-update-chunked' (diff) | |
parent | filter-branch: skip index read/write when possible (diff) | |
download | git-2e5adec97a65ce8c2c803b9e1cbb1c0d067e7e47.tar.xz git-2e5adec97a65ce8c2c803b9e1cbb1c0d067e7e47.zip |
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
Diffstat (limited to 'git-filter-branch.sh')
-rwxr-xr-x | git-filter-branch.sh | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/git-filter-branch.sh b/git-filter-branch.sh index cefd1452c6..98f1779cf3 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -306,6 +306,15 @@ then 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 @@ while read commit parents; do 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 @@ -387,8 +399,15 @@ while read commit parents; do } <../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 |