Fix performance regression in addremove command.
When I rewrote addremove, I lazily put a call to repo.changes in,
which was unnecessary and slow. This is a new rewrite, preserving the
file name behaviour, but replacing the call to repo.changes with a walk,
which is much cheaper, and avoids calls to os.stat on all but files that
have probably been deleted.
+ umask 027
+ mkdir test1
+ cd test1
+ hg init
+ touch a b
+ hg add a b
+ hg ci -m 'added a b' -d '0 0'
+ cd ..
+ mkdir test2
+ cd test2
+ hg init
+ hg pull ../test1
pulling from ../test1
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 2 changes to 2 files
(run 'hg update' to get a working copy)
+ hg co
+ chmod +x a
+ hg ci -m 'chmod +x a' -d '0 0'
+ cd ../test1
+ echo 123
+ hg ci -m 'a updated' -d '0 0'
+ hg pull ../test2
pulling from ../test2
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
+ hg heads
changeset: 2:3ef543305655
tag: tip
parent: 0:22a449e20da5
user: test
date: Thu Jan 1 00:00:00 1970
summary: chmod +x a
changeset: 1:c6ecefc45368
user: test
date: Thu Jan 1 00:00:00 1970
summary: a updated
+ hg history
changeset: 2:3ef543305655
tag: tip
parent: 0:22a449e20da5
user: test
date: Thu Jan 1 00:00:00 1970
summary: chmod +x a
changeset: 1:c6ecefc45368
user: test
date: Thu Jan 1 00:00:00 1970
summary: a updated
changeset: 0:22a449e20da5
user: test
date: Thu Jan 1 00:00:00 1970
summary: added a b
+ hg -v co -m
resolving manifests
merging a
resolving a
+ ls -l ../test1/a ../test2/a
+ cut -b 0-10
-rwxr-x---
-rwxr-x---