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:
Junio C Hamano
2016-08-12 09:47:39 -07:00
8 changed files with 128 additions and 87 deletions

36
t/perf/p3400-rebase.sh Normal file
View 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