Sat, 26 Apr 2014 00:38:02 -0700 spanset: directly use __contains__ instead of a lambda stable
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 26 Apr 2014 00:38:02 -0700] rev 21207
spanset: directly use __contains__ instead of a lambda Spanset are massively used in revset. First because the initial subset itself is a repo wide spanset. We speed up the __and__ operation by getting rid of a gratuitous lambda call. A more long terms solution would be to: 1. speed up operation between spansets, 2. have a special smartset for `all` revisions. In the mean time, this is a very simple fix that buyback some of the performance regression. Below is performance benchmark for trival `and` operation between two spansets. (Run on an unspecified fairly large repository.) revset tip:0 2.9.2) wall 0.282543 comb 0.280000 user 0.260000 sys 0.020000 (best of 35) before) wall 0.819181 comb 0.820000 user 0.820000 sys 0.000000 (best of 12) after) wall 0.645358 comb 0.650000 user 0.650000 sys 0.000000 (best of 16) Proof of concept implementation of an `all` smartset brings this to 0.10 but it's too invasive for stable.
Wed, 30 Apr 2014 15:36:38 -0700 transaction: fix file descriptor leak for journal.backupfiles stable
Durham Goode <durham@fb.com> [Wed, 30 Apr 2014 15:36:38 -0700] rev 21206
transaction: fix file descriptor leak for journal.backupfiles The journal.backupfiles descriptor wasn't being closed. This resulted in hgsubversion test runs having a bagillion descriptors open, which crashed on platforms with low open file limits (like OSX).
Fri, 25 Apr 2014 18:00:07 -0700 revset: also inline spanset._contained in __len__ stable
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Apr 2014 18:00:07 -0700] rev 21205
revset: also inline spanset._contained in __len__ For consistency with what happen in `__contains__`, we inline the range test into `__len__` too.
Mon, 28 Apr 2014 15:15:36 -0700 revset: inline spanset containment check (fix perf regression) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 15:15:36 -0700] rev 21204
revset: inline spanset containment check (fix perf regression) Calling a function is super expensive in python. We inline the trivial range comparison to get back to more sensible performance on common revset operation. Benchmark result below: Revision mapping: 0) 3f83fc5cfe71 2.9.2 release 1) bcfd44abad93 current @ 2) This revision revset #0: public() 0) wall 0.010890 comb 0.010000 user 0.010000 sys 0.000000 (best of 201) 1) wall 0.012109 comb 0.010000 user 0.010000 sys 0.000000 (best of 199) 2) wall 0.012211 comb 0.020000 user 0.020000 sys 0.000000 (best of 197) revset #1: :10000 and public() 0) wall 0.007141 comb 0.010000 user 0.010000 sys 0.000000 (best of 361) 1) wall 0.014139 comb 0.010000 user 0.010000 sys 0.000000 (best of 186) 2) wall 0.008334 comb 0.010000 user 0.010000 sys 0.000000 (best of 308) revset #2: draft() 0) wall 0.009610 comb 0.010000 user 0.010000 sys 0.000000 (best of 279) 1) wall 0.010942 comb 0.010000 user 0.010000 sys 0.000000 (best of 243) 2) wall 0.011036 comb 0.010000 user 0.010000 sys 0.000000 (best of 239) revset #3: :10000 and draft() 0) wall 0.006852 comb 0.010000 user 0.010000 sys 0.000000 (best of 383) 1) wall 0.014641 comb 0.010000 user 0.010000 sys 0.000000 (best of 183) 2) wall 0.008314 comb 0.010000 user 0.010000 sys 0.000000 (best of 299) We can see this changeset gains back the regression for `and` operation on spanset. We are still a bit slowerfor the `public()` and `draft()`. Predicates not touched by this changeset.
Wed, 30 Apr 2014 14:19:01 -0500 ancestor: silence multiple ancestor warning outside of merge (issue4234) stable
Matt Mackall <mpm@selenic.com> [Wed, 30 Apr 2014 14:19:01 -0500] rev 21203
ancestor: silence multiple ancestor warning outside of merge (issue4234) The current situation is a bit of a layering violation as merge-specific knowledge is pushed down to lower layers and leaks merge assumptions into other code paths. Here, we simply silence the warning with a hack. Both the warning and the hack will probably go away in the near future when bid merge is made the default.
Fri, 25 Apr 2014 13:44:51 -0700 revsetbenchmark: fix error raising stable
Pierre-Yves David <pierre-yves.david@fb.com> [Fri, 25 Apr 2014 13:44:51 -0700] rev 21202
revsetbenchmark: fix error raising We want to display the commands, not all arguments of the function. (The old code actually crash, failing to joining a list of lists.)
Mon, 28 Apr 2014 16:28:52 -0700 revset: fix revision filtering in spanset.contains (regression) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 16:28:52 -0700] rev 21201
revset: fix revision filtering in spanset.contains (regression) The argument is `x` but the variable tested for filtering is `rev`. `rev` happens to be a revset methods, ... never part of the filtered revs. This method is now using `rev` for everything.
Mon, 28 Apr 2014 17:25:36 -0700 graft: do not use `.remove` on a smart set (regression) stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 28 Apr 2014 17:25:36 -0700] rev 21200
graft: do not use `.remove` on a smart set (regression) Revset calls use to return a list. Graft use to mutate that list. We cannot do this anymore leading to a crash when grafting multiple changeset with a revset. File ".../mercurial/commands.py", line 3117, in graft revs.remove(rev) AttributeError: '_addset' object has no attribute 'remove' We are late in code-freeze so we make the shortest possible fix by turning it back to a list.
Mon, 28 Apr 2014 15:09:23 -0700 help: clarify distinction among `contains`/`file`/`filelog` stable
Greg Hurrell <glh@fb.com> [Mon, 28 Apr 2014 15:09:23 -0700] rev 21199
help: clarify distinction among `contains`/`file`/`filelog` For a Mercurial new-comer, the distinction between `contains(x)`, `file(x)`, and `filelog(x)` in the "revsets" help page may not be obvious. This commit tries to make things more obvious (text based on an explanation from Matt in an FB group thread).
Thu, 24 Apr 2014 16:47:22 +0200 discovery: don't report all "unsynced" remote heads (issue4230) stable
Mads Kiilerich <madski@unity3d.com> [Thu, 24 Apr 2014 16:47:22 +0200] rev 21198
discovery: don't report all "unsynced" remote heads (issue4230) 8a9e0b523d2d made discovery more helpful - too helpful for some extreme use cases. Instead, we arbitrarily limit the list it at 4 and add 'or more'.
Wed, 23 Apr 2014 13:51:35 +0200 rebase: don't abort if we're asked to rebase an empty revset stable
Julien Cristau <julien.cristau@logilab.fr> [Wed, 23 Apr 2014 13:51:35 +0200] rev 21197
rebase: don't abort if we're asked to rebase an empty revset The documentation says we exit 1 if we have nothing to do, so avoid breaking that contract when we're passed an empty revset. This was changed in http://www.selenic.com/hg/rev/a259f7b488ab to improve the error message; keep the improved message, just not the abort.
Fri, 25 Apr 2014 22:34:09 -0400 largefiles: remove directories emptied after their files are moved (issue3515) stable
Matt Harbison <matt_harbison@yahoo.com> [Fri, 25 Apr 2014 22:34:09 -0400] rev 21196
largefiles: remove directories emptied after their files are moved (issue3515)
Sat, 26 Apr 2014 18:13:06 +0900 cmdserver: forcibly use L channel to read password input (issue3161) stable
Yuya Nishihara <yuya@tcha.org> [Sat, 26 Apr 2014 18:13:06 +0900] rev 21195
cmdserver: forcibly use L channel to read password input (issue3161) Command server is designed to use the channel protocol even if the server process is accessible to tty, whereas vanilla hg should be able to read password from tty in that case. So it isn't enough to swap sys.stdin: # works only if the server process is detached from the console sys.stdin = self.fin getpass.getpass('') sys.stdin = oldin or test isatty: # vanilla hg can't talk to tty if stdin is redirected if self._isatty(self.fin): return getpass.getpass('') else: ... Since ui.nontty flag is undocumented and command-server channels don't provide isatty(), this change won't affect the other uses of ui._isatty(). issue3161 also suggests to provide some context of messages. I think it can be implemented by using the generic templating function.
Tue, 29 Apr 2014 12:37:36 +0900 killdaemons: correct typo of _check() function caught by pyflakes stable
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:37:36 +0900] rev 21194
killdaemons: correct typo of _check() function caught by pyflakes
Tue, 29 Apr 2014 12:35:50 +0900 win32: add missing definition of _ERROR_NO_MORE_FILES caught by pyflakes stable
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:35:50 +0900] rev 21193
win32: add missing definition of _ERROR_NO_MORE_FILES caught by pyflakes
Tue, 29 Apr 2014 12:35:02 +0900 exchange: fix invalid reference to bundle2.UnknownPartError caught by pyflakes stable
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 12:35:02 +0900] rev 21192
exchange: fix invalid reference to bundle2.UnknownPartError caught by pyflakes
Tue, 29 Apr 2014 11:02:40 +0900 match: fix NameError 'pat' on overflow of regex pattern length stable
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Apr 2014 11:02:40 +0900] rev 21191
match: fix NameError 'pat' on overflow of regex pattern length 'pat' was renamed to 'regex' in 9d28fd795215.
Sun, 27 Apr 2014 15:09:48 +0900 color: add missing handling of stderr capture introduced by 350dc24a553d stable
Yuya Nishihara <yuya@tcha.org> [Sun, 27 Apr 2014 15:09:48 +0900] rev 21190
color: add missing handling of stderr capture introduced by 350dc24a553d It wouldn't raise exception without this change, but _bufferstates was wrong because of missing _bufferstates.pop() in colorui.popbuffer().
Wed, 23 Apr 2014 20:23:30 +0100 hgweb: replace excanvas.js with a newer version stable
Javi Merino <cibervicho@gmail.com> [Wed, 23 Apr 2014 20:23:30 +0100] rev 21189
hgweb: replace excanvas.js with a newer version The current version of excanvas is unknown. Substitute it with the latest version from the excanvas website: http://code.google.com/p/explorercanvas/ Instead of using the "compiled" version, just use the readable one.
Wed, 23 Apr 2014 23:29:55 +0200 httppeer: reintroduce _abort that accidentally was removed in 167047ba3cfa stable
Mads Kiilerich <madski@unity3d.com> [Wed, 23 Apr 2014 23:29:55 +0200] rev 21188
httppeer: reintroduce _abort that accidentally was removed in 167047ba3cfa Including the missing test coverage that would have caught it.
Mon, 21 Apr 2014 16:13:15 -0700 bundle2: gracefully handle hook abort stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 16:13:15 -0700] rev 21187
bundle2: gracefully handle hook abort We make sure any exceptions raised during the whole span of handling bundle2 processing are decorated. This let us catch exceptions raised by hooks prior to transaction commit.
Mon, 21 Apr 2014 17:51:58 -0700 bundle2: gracefully handle PushRaced error during unbundle stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 17:51:58 -0700] rev 21186
bundle2: gracefully handle PushRaced error during unbundle Same drill again. We catch the PushRaced error, check if it cames from a bundle2 processing, if so we turn it into a bundle2 with a part transporting error information to be reraised client side.
Mon, 21 Apr 2014 20:04:54 -0700 bundle2: add an error message to push race error stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 20:04:54 -0700] rev 21185
bundle2: add an error message to push race error Errors with no explanations makes my uncle Bob sad.
Mon, 21 Apr 2014 18:59:09 -0700 bundle2: fix raising errors during heads checking stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 18:59:09 -0700] rev 21184
bundle2: fix raising errors during heads checking If the heads on the server differ from the ones reported seen by the client at bundle time, we raise a PushRaced exception. However, the part raising the exception was broken. To fix it, we move the PushRaced class in the error module so it can be accessible everywhere without an import cycle. A test is also added to prevent regression.
Mon, 21 Apr 2014 16:02:03 -0700 bundle2: gracefully handle UnknownPartError during unbundle stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 16:02:03 -0700] rev 21183
bundle2: gracefully handle UnknownPartError during unbundle Same as for Abort error, we catch the error, encode it into a bundle2 reply (expected by the client) and stream this reply. The client processing of the error will raise the exception again.
Tue, 22 Apr 2014 11:41:34 -0700 bundle2: catch UnknownPartError during local push stable
Pierre-Yves David <pierre-yves.david@fb.com> [Tue, 22 Apr 2014 11:41:34 -0700] rev 21182
bundle2: catch UnknownPartError during local push When doing local push, UnknownPartError from the server will be raised directly to the client. We need to catch them too.
Mon, 21 Apr 2014 19:43:01 -0700 bundle2: catch UnknownPartError during pull stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 19:43:01 -0700] rev 21181
bundle2: catch UnknownPartError during pull We narrow the exception catching while pulling.
Mon, 21 Apr 2014 19:42:51 -0700 bundle2: catch UnknownPartError during push stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 19:42:51 -0700] rev 21180
bundle2: catch UnknownPartError during push We narrow the exception catching while unbundling the push reply.
Mon, 21 Apr 2014 19:42:40 -0700 bundle2: use a more specific UnknownPartError when no handler is found stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 19:42:40 -0700] rev 21179
bundle2: use a more specific UnknownPartError when no handler is found KeyError is very generic, we need something more specific for proper error handling.
Mon, 21 Apr 2014 15:59:55 -0700 bundle2: make error testing more modular stable
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 21 Apr 2014 15:59:55 -0700] rev 21178
bundle2: make error testing more modular We have more than Abort to test.
(0) -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 +30000 tip