Merge branch 'kw/patch-ids-optim'
When "git rebase" tries to compare set of changes on the updated upstream and our own branch, it computes patch-id for all of these changes and attempts to find matches. This has been optimized by lazily computing the full patch-id (which is expensive) to be compared only for changes that touch the same set of paths. * kw/patch-ids-optim: rebase: avoid computing unnecessary patch IDs patch-ids: add flag to create the diff patch id using header only data patch-ids: replace the seen indicator with a commit pointer patch-ids: stop using a hand-rolled hashmap implementation
This commit is contained in:
36
t/perf/p3400-rebase.sh
Normal file
36
t/perf/p3400-rebase.sh
Normal file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='Tests rebase performance'
|
||||
. ./perf-lib.sh
|
||||
|
||||
test_perf_default_repo
|
||||
|
||||
test_expect_success 'setup' '
|
||||
git checkout -f -b base &&
|
||||
git checkout -b to-rebase &&
|
||||
git checkout -b upstream &&
|
||||
for i in $(seq 100)
|
||||
do
|
||||
# simulate huge diffs
|
||||
echo change$i >unrelated-file$i &&
|
||||
seq 1000 >>unrelated-file$i &&
|
||||
git add unrelated-file$i &&
|
||||
test_tick &&
|
||||
git commit -m commit$i unrelated-file$i &&
|
||||
echo change$i >unrelated-file$i &&
|
||||
seq 1000 | tac >>unrelated-file$i &&
|
||||
git add unrelated-file$i &&
|
||||
test_tick &&
|
||||
git commit -m commit$i-reverse unrelated-file$i ||
|
||||
break
|
||||
done &&
|
||||
git checkout to-rebase &&
|
||||
test_commit our-patch interesting-file
|
||||
'
|
||||
|
||||
test_perf 'rebase on top of a lot of unrelated changes' '
|
||||
git rebase --onto upstream HEAD^ &&
|
||||
git rebase --onto base HEAD^
|
||||
'
|
||||
|
||||
test_done
|
Reference in New Issue
Block a user