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
This commit is contained in:
commit
2e5adec97a
@ -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
|
||||
|
||||
|
19
t/perf/p7000-filter-branch.sh
Executable file
19
t/perf/p7000-filter-branch.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='performance of filter-branch'
|
||||
. ./perf-lib.sh
|
||||
|
||||
test_perf_default_repo
|
||||
test_checkout_worktree
|
||||
|
||||
test_expect_success 'mark bases for tests' '
|
||||
git tag -f tip &&
|
||||
git tag -f base HEAD~100
|
||||
'
|
||||
|
||||
test_perf 'noop filter' '
|
||||
git checkout --detach tip &&
|
||||
git filter-branch -f base..HEAD
|
||||
'
|
||||
|
||||
test_done
|
Loading…
Reference in New Issue
Block a user