dirstate: use a presized dict for the dirstate
This uses a simple heuristic to avoid expensive resizes.
On a real-world repo with around 400,000 files, perfdirstate:
before: ! wall 0.155562 comb 0.160000 user 0.150000 sys 0.010000 (best of 64)
after: ! wall 0.132638 comb 0.130000 user 0.120000 sys 0.010000 (best of 75)
On another real-world repo with around 250,000 files:
before: ! wall 0.098459 comb 0.100000 user 0.090000 sys 0.010000 (best of 100)
after: ! wall 0.089084 comb 0.090000 user 0.080000 sys 0.010000 (best of 100)
http://mercurial.selenic.com/bts/issue612
$ hg init
$ mkdir src
$ echo a > src/a.c
$ hg ci -Ama
adding src/a.c
$ hg mv src source
moving src/a.c to source/a.c (glob)
$ hg ci -Ammove
$ hg co -C 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo new > src/a.c
$ echo compiled > src/a.o
$ hg ci -mupdate
created new head
$ hg status
? src/a.o
$ hg merge
merging src/a.c and source/a.c to source/a.c
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status
M source/a.c
R src/a.c
? src/a.o