merge: apply non-interactive working dir updates in parallel
This has a big effect on the performance of working dir updates.
Here are the results of update from null to the given rev in several
repos, on a Linux 3.2 system with 32 cores running ext4, with the progress
extension enabled.
repo rev plain parallel speedup
hg
7068089c95a2 0.9 0.3 3
mozilla-central
fe1600b22c77 42.8 7.7 5.5
linux-2.6
9ef4b770e069 31.4 4.9 6.4
$ "$TESTDIR/hghave" svn svn-bindings || exit 80
$ cat >> $HGRCPATH <<EOF
> [extensions]
> convert =
> graphlog =
> EOF
$ convert()
> {
> startrev=$1
> repopath=A-r$startrev-hg
> hg convert --config convert.svn.startrev=$startrev \
> --config convert.svn.trunk=branches/branch1 \
> --config convert.svn.branches=" " \
> --config convert.svn.tags= \
> --datesort svn-repo $repopath
> hg -R $repopath glog \
> --template '{rev} {desc|firstline} files: {files}\n'
> echo
> }
$ svnadmin create svn-repo
$ svnadmin load -q svn-repo < "$TESTDIR/svn/startrev.svndump"
Convert before branching point
$ convert 3
initializing destination A-r3-hg repository
scanning source...
sorting...
converting...
3 removeb
2 changeaa
1 branch, changeaaa
0 addc,changeaaaa
o 3 addc,changeaaaa files: a c
|
o 2 branch, changeaaa files: a
|
o 1 changeaa files: a
|
o 0 removeb files: a
Convert before branching point
$ convert 4
initializing destination A-r4-hg repository
scanning source...
sorting...
converting...
2 changeaa
1 branch, changeaaa
0 addc,changeaaaa
o 2 addc,changeaaaa files: a c
|
o 1 branch, changeaaa files: a
|
o 0 changeaa files: a
Convert at branching point
$ convert 5
initializing destination A-r5-hg repository
scanning source...
sorting...
converting...
1 branch, changeaaa
0 addc,changeaaaa
o 1 addc,changeaaaa files: a c
|
o 0 branch, changeaaa files: a
Convert last revision only
$ convert 6
initializing destination A-r6-hg repository
scanning source...
sorting...
converting...
0 addc,changeaaaa
o 0 addc,changeaaaa files: a c