Sat, 26 Mar 2011 10:59:33 +0100 debugstate: add new --datesort option
Adrian Buehlmann <adrian@cadifra.com> [Sat, 26 Mar 2011 10:59:33 +0100] rev 13767
debugstate: add new --datesort option sorts the output lines by mtime, then by filename
Sat, 26 Mar 2011 13:05:17 +0100 rebase: restore mq guards after rebasing (issue2107)
Stefano Tortarolo <stefano.tortarolo@gmail.com> [Sat, 26 Mar 2011 13:05:17 +0100] rev 13766
rebase: restore mq guards after rebasing (issue2107) Guards on rebased mq patches were lost. This patch restores them after the qimporting step.
Fri, 25 Mar 2011 22:18:05 +0200 tests: no need to explicitly export HOME in test files
Idan Kamara <idankk86@gmail.com> [Fri, 25 Mar 2011 22:18:05 +0200] rev 13765
tests: no need to explicitly export HOME in test files the test runner ensures that HOME is set to a temp dir
Fri, 25 Mar 2011 22:15:37 +0200 tests: set HOME to the test temp dir (issue2707)
Idan Kamara <idankk86@gmail.com> [Fri, 25 Mar 2011 22:15:37 +0200] rev 13764
tests: set HOME to the test temp dir (issue2707)
Fri, 25 Mar 2011 15:03:53 +0100 dirstate: eliminate _lastnormal set
Adrian Buehlmann <adrian@cadifra.com> [Fri, 25 Mar 2011 15:03:53 +0100] rev 13763
dirstate: eliminate _lastnormal set We can get rid of the _lastnormal set by using the filesystem mtimes to identify the problematic "lastnormal" files on status(), forcing a file content-comparison if the file's mtime timeslot is equal to _lastnormaltime.
Fri, 25 Mar 2011 16:46:19 +0100 test-extdiff: fix 5c0e1222e7c0 temporary dir output
Patrick Mezard <pmezard@gmail.com> [Fri, 25 Mar 2011 16:46:19 +0100] rev 13762
test-extdiff: fix 5c0e1222e7c0 temporary dir output
Fri, 25 Mar 2011 10:13:46 -0400 convert/mtn: avoid unnecessary initial test of mtn repo
Daniel Atallah <daniel.atallah@gmail.com> [Fri, 25 Mar 2011 10:13:46 -0400] rev 13761
convert/mtn: avoid unnecessary initial test of mtn repo As soon as before() is called, we'll know if there is a problem (and get a better error message).
Wed, 23 Mar 2011 14:26:56 -0400 convert/mtn: add support for using monotone's "automate stdio" when available
Daniel Atallah <daniel.atallah@gmail.com> [Wed, 23 Mar 2011 14:26:56 -0400] rev 13760
convert/mtn: add support for using monotone's "automate stdio" when available Currently the convert extension spawns a new mtn process for each operation. For a large repository, this ends up being hundreds of thousands of processes. The following enables usage of monotone's "automate stdio" functionality - documented at: http://www.monotone.ca/docs/Automation.html#index-mtn-automate-stdio-188 The effect is that (after determining that a new enough mtn executable is available) a single long-running mtn process is used for all the operations, using stdin/stdout to send commands and read output. This has a pretty significant effect on the performance of some parts of the conversion process.
Thu, 24 Mar 2011 16:54:09 -0400 convert: add support to common commandline to access stdin of the process
Daniel Atallah <daniel.atallah@gmail.com> [Thu, 24 Mar 2011 16:54:09 -0400] rev 13759
convert: add support to common commandline to access stdin of the process
Mon, 21 Mar 2011 17:03:16 +0100 extdiff: use absolute paths for any temporary files
jfh <jason@jasonfharris.com> [Mon, 21 Mar 2011 17:03:16 +0100] rev 13758
extdiff: use absolute paths for any temporary files This allows the use of p4merge amongst possible other external tools.
Fri, 25 Mar 2011 01:38:47 +0100 convert: add bookmark support to hg source
Edouard Gomez <ed.gomez@free.fr> [Fri, 25 Mar 2011 01:38:47 +0100] rev 13757
convert: add bookmark support to hg source
Fri, 25 Mar 2011 01:38:43 +0100 convert: add bookmarks reading support to git backend
Edouard Gomez <ed.gomez@free.fr> [Fri, 25 Mar 2011 01:38:43 +0100] rev 13756
convert: add bookmarks reading support to git backend
Thu, 24 Mar 2011 15:12:51 -0500 ssh: fix password test
Matt Mackall <mpm@selenic.com> [Thu, 24 Mar 2011 15:12:51 -0500] rev 13755
ssh: fix password test We don't support passwords in ssh URLs, and neither do some versions of Python's urllib. Since we don't actually care much here, punt with a glob in the test.
Thu, 24 Mar 2011 18:39:54 +0100 dirstate: check mtime when adding to _lastnormal
Adrian Buehlmann <adrian@cadifra.com> [Thu, 24 Mar 2011 18:39:54 +0100] rev 13754
dirstate: check mtime when adding to _lastnormal - consistently use mtime as mapped to dirstate granularity (needed for filesystems like NTFS, which have sub-second resolution) - no need to add files with mtime < _lastnormaltime - improve comments
Thu, 24 Mar 2011 18:17:49 +0100 subrepo: simplify hgsubrepo._get a little
Martin Geisler <mg@aragost.com> [Thu, 24 Mar 2011 18:17:49 +0100] rev 13753
subrepo: simplify hgsubrepo._get a little
Thu, 24 Mar 2011 08:51:58 -0700 Fix expected url to match test.
Lee Cantey <lcantey@gmail.com> [Thu, 24 Mar 2011 08:51:58 -0700] rev 13752
Fix expected url to match test.
Thu, 24 Mar 2011 10:28:29 +0100 patch: deprecate ui.patch / external patcher feature
Patrick Mezard <pmezard@gmail.com> [Thu, 24 Mar 2011 10:28:29 +0100] rev 13751
patch: deprecate ui.patch / external patcher feature Why? - Mercurial internal patcher works correctly for regular patches and git patches, is much faster at least on Windows and is more extensible. - In theory, the external patcher can be used to handle exotic patch formats. I do not know any and have not heard about any such use in years. - Most patch programs cannot handle git format patches, which makes the API caller to decide either to ignore ui.patch by calling patch.internalpatch() directly, or take the risk of random failures with valid inputs. - One thing a patch program could do Mercurial patcher cannot is applying with --reverse. Apparently several shelve like extensions try to use that, including passing the "reverse" option to Mercurial patcher, which has been removed mid-2009. I never heard anybody complain about that, and would prefer reimplementing it anyway. And from the technical perspective: - The external patcher makes everything harder to maintain and implement. EOL normalization is not implemented, and I would bet file renames, if supported by the patcher, are not correctly recorded in the dirstate. - No tests. How? - Remove related documentation - Clearly mark patch.externalpatch() as private - Remove the debuginstall check. This deprecation request was actually triggered by this last point. debuginstall is the only piece of code patching without a repository. When migrating to an integrated patch() + updatedir() call, this was really a showstopper, all workarounds were either ugly or uselessly complicated to implement. If we do not support external patcher anymore, the debuginstall check is not useful anymore. - Remove patch.externalpatch() after 1.9 release.
Wed, 23 Mar 2011 19:28:16 -0500 # User Dan Villiom Podlaski Christiansen <danchr@gmail.com>
Matt Mackall <mpm@selenic.com> [Wed, 23 Mar 2011 19:28:16 -0500] rev 13750
# User Dan Villiom Podlaski Christiansen <danchr@gmail.com> # Date 1289564504 -3600 # Node ID b75264c15cc888cf38c3c7b8f619801e3c2589c7 # Parent 89b2e5d940f669e590096c6be70eee61c9172fff revsets: overload the branch() revset to also take a branch name. This should only change semantics in the specific case of a tag/branch conflict where the tag wasn't done on the branch with the same name. Previously, branch(whatever) would resolve to the branch of the tag in that case, whereas now it will resolve to the branch of the name. The previous behaviour, while documented, seemed very counter-intuitive to me. An alternate approach would be to introduce a new revset such as branchname() or namedbranch(). While this would retain backwards compatibility, the distinction between it and branch() would not be readily apparent to users. The most intuitive behaviour would be to have branch(x) require 'x' to be a branch name, and something like branchof(x) or samebranch(x) do what branch(x) currently does. Unfortunately, our backwards compatibility guarantees prevent us from doing that. Please note that while 'hg tag' guards against shadowing a branch, 'hg branch' does not. Besides, even if it did, that wouldn't solve the issue of conversions with such tags and branches...
Wed, 23 Mar 2011 22:58:40 +0100 test-commit-multiple.t: improve committwice.py
Adrian Buehlmann <adrian@cadifra.com> [Wed, 23 Mar 2011 22:58:40 +0100] rev 13749
test-commit-multiple.t: improve committwice.py - fix bug in replacebyte: parameter fn wasn't used (no harm done) - remove unneeded matcher - remove unused local n - increase test coverage a bit with a second file and some sleeping - show files changed in revisions - move print statements out of racy path to make sure it's as racy as possible
Wed, 23 Mar 2011 23:05:32 +0100 osutil: replace #import with #include, and add a check for it
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Wed, 23 Mar 2011 23:05:32 +0100] rev 13748
osutil: replace #import with #include, and add a check for it
Wed, 23 Mar 2011 23:33:14 +0100 code indentation fixes
Patrick Mezard <pmezard@gmail.com> [Wed, 23 Mar 2011 23:33:14 +0100] rev 13747
code indentation fixes
Wed, 07 Jul 2010 00:06:59 +0200 convert: add bookmark support to the hg sink
Edouard Gomez <ed.gomez@free.fr> [Wed, 07 Jul 2010 00:06:59 +0200] rev 13746
convert: add bookmark support to the hg sink
Wed, 07 Jul 2010 00:06:59 +0200 convert: add bookmark support to main command
Edouard Gomez <ed.gomez@free.fr> [Wed, 07 Jul 2010 00:06:59 +0200] rev 13745
convert: add bookmark support to main command During conversion, read bookmarks from source repo, filter them and push the resulting set of bookmarks to destination sink.
Wed, 07 Jul 2010 00:06:59 +0200 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr> [Wed, 07 Jul 2010 00:06:59 +0200] rev 13744
convert: add bookmark support to common sink/source implementation
Wed, 23 Mar 2011 11:22:29 +0100 dirstate: reset _lastnormal and _lastnormaltime
Adrian Buehlmann <adrian@cadifra.com> [Wed, 23 Mar 2011 11:22:29 +0100] rev 13743
dirstate: reset _lastnormal and _lastnormaltime on write, invalidate, and clear
Wed, 23 Mar 2011 16:06:55 +0100 discovery: avoid discovery when local graph is a subset of remote
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Wed, 23 Mar 2011 16:06:55 +0100] rev 13742
discovery: avoid discovery when local graph is a subset of remote Immediately sends local's heads to the server to check whether the server knows them all. If it does, we can call getbundle immediately. Interesting test output changes are: - added 1 changesets with 0 changes to 1 files (+1 heads) + added 1 changesets with 0 changes to 0 files (+1 heads) -> The new getbundle() actually fixes a bug vs. changegroupsubset() in that it no longer returns unnecessary files when file revs are reused. warning: repository is unrelated + requesting all changes -> The new use of common instead of bases correctly indicates that an unrelated pull gets all changes from the server.
Wed, 23 Mar 2011 16:02:11 +0100 wireproto: add getbundle() function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Wed, 23 Mar 2011 16:02:11 +0100] rev 13741
wireproto: add getbundle() function getbundle(common, heads) -> bundle Returns the changegroup for all ancestors of heads which are not ancestors of common. For both sets, the heads are included in the set. Intended to eventually supercede changegroupsubset and changegroup. Uses heads of common region to exclude unwanted changesets instead of bases of desired region, which is more useful and easier to implement. Designed to be extensible with new optional arguments (which will have to be guarded by corresponding capabilities).
Wed, 23 Mar 2011 12:38:36 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 23 Mar 2011 12:38:36 -0500] rev 13740
merge with stable
Wed, 23 Mar 2011 13:58:33 -0300 i18n-pt_BR: synchronized with 6783f47d90dd stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 23 Mar 2011 13:58:33 -0300] rev 13739
i18n-pt_BR: synchronized with 6783f47d90dd
Wed, 23 Mar 2011 11:57:10 -0300 merge with i18n stable
Wagner Bruna <wbruna@softwareexpress.com.br> [Wed, 23 Mar 2011 11:57:10 -0300] rev 13738
merge with i18n
Mon, 14 Mar 2011 23:48:17 +0100 i18n-it: synchronized with adf3c4401c5d stable
Stefano Tortarolo <stefano.tortarolo@gmail.com> [Mon, 14 Mar 2011 23:48:17 +0100] rev 13737
i18n-it: synchronized with adf3c4401c5d
Wed, 23 Mar 2011 09:41:58 -0500 osutil: fix up check-code issues
Matt Mackall <mpm@selenic.com> [Wed, 23 Mar 2011 09:41:58 -0500] rev 13736
osutil: fix up check-code issues
Wed, 23 Mar 2011 09:34:22 -0500 dirstate: flush _lastnormal when we see newer filesystem times
Matt Mackall <mpm@selenic.com> [Wed, 23 Mar 2011 09:34:22 -0500] rev 13735
dirstate: flush _lastnormal when we see newer filesystem times
Wed, 23 Mar 2011 09:43:34 +0100 util: add Mac-specific check whether we're in a GUI session (issue2553)
Dan Villiom Podlaski Christiansen <danchr@gmail.com> [Wed, 23 Mar 2011 09:43:34 +0100] rev 13734
util: add Mac-specific check whether we're in a GUI session (issue2553) The previous test assumed that 'os.name' was "mac" on Mac OS X. This is not the case; 'mac' was classic Mac OS, whereas Mac OS X has 'os.name' be 'posix'. Please note that this change will break Mercurial on hypothetical non-Mac OS X deployments of Darwin. Credit to Brodie Rao for thinking of CGSessionCopyCurrentDictionary() and Kevin Bullock for testing.
Wed, 23 Mar 2011 01:14:43 +0100 rebase: allow for rebasing descendants onto ancestors on different named branches
Stefano Tortarolo <stefano.tortarolo@gmail.com> [Wed, 23 Mar 2011 01:14:43 +0100] rev 13733
rebase: allow for rebasing descendants onto ancestors on different named branches So far we've been denying rebasing descendants onto ancestors, but there are situations in which this kind of operation makes perfect sense to me. Let's say we have made a commit (or more), that belongs to branch 'dev', on top of the named branch 'stable': ... a (stable) - b (dev) but then we realize that b should belong to branch 'stable'. In these cases a rebase means: "move these csets from named branch A to named branch B" and there isn't a valid reason to deny it. This patch basically doesn't block it, if source and destination are on different named branches. The old behaviour still applies for rebases across the same named branch. Can you think of any tricky corner cases in which this new behaviour could lead to problems? (I bet there are tons of them...) By the way, I created a brand new .t because I feel there should be more tests I can't think of at the moment.
Wed, 23 Mar 2011 02:33:24 +0100 bdiff.c: rename all variables which hold a hash value to "hash"
Markus F.X.J. Oberhumer <markus@oberhumer.com> [Wed, 23 Mar 2011 02:33:24 +0100] rev 13732
bdiff.c: rename all variables which hold a hash value to "hash"
Wed, 23 Mar 2011 02:33:23 +0100 bdiff.c: use unsigned arithmetic for hash computation
Markus F.X.J. Oberhumer <markus@oberhumer.com> [Wed, 23 Mar 2011 02:33:23 +0100] rev 13731
bdiff.c: use unsigned arithmetic for hash computation Signed integer overflow is undefined in C.
Wed, 23 Mar 2011 02:33:22 +0100 bdiff.c: cast to unsigned char when computing hash value
Markus F.X.J. Oberhumer <markus@oberhumer.com> [Wed, 23 Mar 2011 02:33:22 +0100] rev 13730
bdiff.c: cast to unsigned char when computing hash value
Wed, 23 Mar 2011 02:33:21 +0100 bdiff.c: make all local functions static
Markus F.X.J. Oberhumer <markus@oberhumer.com> [Wed, 23 Mar 2011 02:33:21 +0100] rev 13729
bdiff.c: make all local functions static
Wed, 23 Mar 2011 09:20:40 -0500 merge with stable
Matt Mackall <mpm@selenic.com> [Wed, 23 Mar 2011 09:20:40 -0500] rev 13728
merge with stable
Tue, 22 Mar 2011 21:27:51 -0500 debugbundle: fix up long line caught by check-code
Matt Mackall <mpm@selenic.com> [Tue, 22 Mar 2011 21:27:51 -0500] rev 13727
debugbundle: fix up long line caught by check-code
Tue, 22 Mar 2011 21:26:19 -0500 wireproto: avoid naked excepts
Matt Mackall <mpm@selenic.com> [Tue, 22 Mar 2011 21:26:19 -0500] rev 13726
wireproto: avoid naked excepts
Tue, 15 Mar 2011 14:55:16 +0100 mq: fix typo in docstring stable
Stefano Tortarolo <stefano.tortarolo@gmail.com> [Tue, 15 Mar 2011 14:55:16 +0100] rev 13725
mq: fix typo in docstring
Tue, 22 Mar 2011 09:22:29 +0100 commands: add debugbundle command
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 22 Mar 2011 09:22:29 +0100] rev 13724
commands: add debugbundle command Lists ids contained in a bundle file. Useful for testing bundle-related commands.
Tue, 22 Mar 2011 09:22:21 +0100 wireproto: add known([id]) function
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 22 Mar 2011 09:22:21 +0100] rev 13723
wireproto: add known([id]) function known([Node]) -> [1/0] Returns 1/0 for each node, indicating whether it's known by the server. Needed for new discovery protocols introduced in later patches.
Tue, 22 Mar 2011 07:40:02 +0100 wireproto: fix decodelist to properly return empty list
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 22 Mar 2011 07:40:02 +0100] rev 13722
wireproto: fix decodelist to properly return empty list Needed by tests for next patch introducing known().
Tue, 22 Mar 2011 07:38:32 +0100 wireproto: fix handling of '*' args for HTTP and SSH
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 22 Mar 2011 07:38:32 +0100] rev 13721
wireproto: fix handling of '*' args for HTTP and SSH
Tue, 22 Mar 2011 07:38:32 +0100 debug: add debugwireargs to test argument passing over the wire
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 22 Mar 2011 07:38:32 +0100] rev 13720
debug: add debugwireargs to test argument passing over the wire Tests argument passing locally, via HTTP, and via SSH. This is mainly preparation for the next patch.
Tue, 22 Mar 2011 07:37:56 +0100 sshserver: drop unnecessary line
Peter Arrenbrecht <peter.arrenbrecht@gmail.com> [Tue, 22 Mar 2011 07:37:56 +0100] rev 13719
sshserver: drop unnecessary line
Tue, 22 Mar 2011 12:00:38 -0500 merge: avoid unlinking destination of merge when case changes (issue2715) stable
Matt Mackall <mpm@selenic.com> [Tue, 22 Mar 2011 12:00:38 -0500] rev 13718
merge: avoid unlinking destination of merge when case changes (issue2715)
Tue, 22 Mar 2011 11:59:43 -0500 dirstate: introduce a public case normalizing method stable
Matt Mackall <mpm@selenic.com> [Tue, 22 Mar 2011 11:59:43 -0500] rev 13717
dirstate: introduce a public case normalizing method
Sun, 20 Mar 2011 20:25:41 -0500 changegroup: minor cleanups
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 20:25:41 -0500] rev 13716
changegroup: minor cleanups
Sun, 20 Mar 2011 20:21:19 -0500 repair: revlog has an iterator
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 20:21:19 -0500] rev 13715
repair: revlog has an iterator
Sun, 20 Mar 2011 20:17:57 -0500 changegroup: fix leftover from delta read
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 20:17:57 -0500] rev 13714
changegroup: fix leftover from delta read
Sun, 20 Mar 2011 20:16:51 -0500 changegroup: drop expensive redundant usage of readdelta for progress
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 20:16:51 -0500] rev 13713
changegroup: drop expensive redundant usage of readdelta for progress
Sun, 20 Mar 2011 19:43:28 -0500 changegroupsubset: use manifest.readfast to simplify collector
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13712
changegroupsubset: use manifest.readfast to simplify collector
Sun, 20 Mar 2011 19:43:28 -0500 manifest: add readfast method
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13711
manifest: add readfast method
Sun, 20 Mar 2011 19:43:28 -0500 changegroupsubset: simplify filenode_collector
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13710
changegroupsubset: simplify filenode_collector
Sun, 20 Mar 2011 19:43:28 -0500 changegroupsubset: more renaming
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13709
changegroupsubset: more renaming
Sun, 20 Mar 2011 19:43:28 -0500 changegroupsubset: simplify prune
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13708
changegroupsubset: simplify prune Ancestors of nodes linked to commonrevs can be expected to be linked to commonrevs. Walking graphs of each revlog looking for rare/nonexistent outliers is overkill.
Sun, 20 Mar 2011 19:43:28 -0500 changegroupsubset: more minor cleanups
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13707
changegroupsubset: more minor cleanups - remove more excessive comments - simplify some sorting operations - rename some variables - replace identity with a lambda
Sun, 20 Mar 2011 19:43:28 -0500 changegroupsubset: minor cleanups
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13706
changegroupsubset: minor cleanups - move some variable declarations - drop some excessive comments - use standard variable naming
Sun, 20 Mar 2011 19:43:28 -0500 strip: simplify collectone
Matt Mackall <mpm@selenic.com> [Sun, 20 Mar 2011 19:43:28 -0500] rev 13705
strip: simplify collectone
Sun, 20 Mar 2011 17:41:09 -0400 dirstate: avoid a race with multiple commits in the same process
Greg Ward <greg@gerg.ca> [Sun, 20 Mar 2011 17:41:09 -0400] rev 13704
dirstate: avoid a race with multiple commits in the same process (issue2264, issue2516) The race happens when two commits in a row change the same file without changing its size, *if* those two commits happen in the same second in the same process while holding the same repo lock. For example: commit 1: M a M b commit 2: # same process, same second, same repo lock M b # modify b without changing its size M c This first manifested in transplant, which is the most common way to do multiple commits in the same process. But it can manifest in any script or extension that does multiple commits under the same repo lock. (Thus, the test script tests both transplant and a custom script.) The problem was that dirstate.status() failed to notice the change to b when localrepo is about to do the second commit, meaning that change gets left in the working directory. In the context of transplant, that means either a crash ("RuntimeError: nothing committed after transplant") or a silently inaccurate transplant, depending on whether any other files were modified by the second transplanted changeset. The fix is to make status() work a little harder when we have previously marked files as clean (state 'normal') in the same process. Specifically, dirstate.normal() adds files to self._lastnormal, and other state-changing methods remove them. Then dirstate.status() puts any files in self._lastnormal into state 'lookup', which will make localrepository.status() read file contents to see if it has really changed. So we pay a small performance penalty for the second (and subsequent) commits in the same process, without affecting the common case. Anything that does lots of status updates and checks in the same process could suffer a performance hit. Incidentally, there is a simpler fix: call dirstate.normallookup() on every file updated by commit() at the end of the commit. The trouble with that solution is that it imposes a performance penalty on the common case: it means the next status-dependent hg command after every "hg commit" will be a little bit slower. The patch here is more complex, but only affects performance for the uncommon case.
(0) -10000 -3000 -1000 -300 -100 -64 +64 +100 +300 +1000 +3000 +10000 +30000 tip