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')
|
start_timestamp=$(date '+%s')
|
||||||
fi
|
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
|
while read commit parents; do
|
||||||
git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1))
|
git_filter_branch__commit_count=$(($git_filter_branch__commit_count+1))
|
||||||
|
|
||||||
@ -313,7 +322,10 @@ while read commit parents; do
|
|||||||
|
|
||||||
case "$filter_subdir" in
|
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
|
# The commit may not have the subdirectory at all
|
||||||
@ -387,8 +399,15 @@ while read commit parents; do
|
|||||||
} <../commit |
|
} <../commit |
|
||||||
eval "$filter_msg" > ../message ||
|
eval "$filter_msg" > ../message ||
|
||||||
die "msg filter failed: $filter_msg"
|
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" \
|
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"
|
die "could not write rewritten commit"
|
||||||
done <../revs
|
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