Mon, 12 Jun 2017 17:15:43 +0200 profile: remove now useless indent
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:15:43 +0200] rev 32806
profile: remove now useless indent We no longer rely on the value of '_output' so we can remove this conditional.
Mon, 12 Jun 2017 17:14:56 +0200 profile: use explicit logic to control file closing
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:14:56 +0200] rev 32805
profile: use explicit logic to control file closing We make the decision to close 'fp' more explicit instead of relying on the implication of other variable. This makes the overall logic more robust.
Mon, 12 Jun 2017 17:13:35 +0200 profiling: move 'fp' closing logic into its own function
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:13:35 +0200] rev 32804
profiling: move 'fp' closing logic into its own function We are about to make the logic more robust and reuse it in more place, we start by isolating what we have.
Tue, 13 Jun 2017 01:23:54 +0530 py3: use python3 hg in test-py3-commands.t at places where py2 hg was used
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 13 Jun 2017 01:23:54 +0530] rev 32803
py3: use python3 hg in test-py3-commands.t at places where py2 hg was used This patch fixes my mistakes where I added test in test-py3-commands.t as `hg ...` where I forgot hg here refers to Python 2 mercurial.
Mon, 12 Jun 2017 13:10:09 -0700 test-dirstate-race: back out changeset c82fa7efcbc8
Siddharth Agarwal <sid0@fb.com> [Mon, 12 Jun 2017 13:10:09 -0700] rev 32802
test-dirstate-race: back out changeset c82fa7efcbc8 This is non-deterministic. In any case, I switched to using debugrebuilddirstate in my WIP patches, which makes this moot.
Sat, 10 Jun 2017 19:48:48 +0900 revset: fix order of first/last members in compound expression (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jun 2017 19:48:48 +0900] rev 32801
revset: fix order of first/last members in compound expression (BC) Suppose len(subset) >> len(ls) in common cases, 'subset & ls' should be avoided whenever possible.
Sat, 10 Jun 2017 19:41:42 +0900 revset: filter first/last members by __and__ operation
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jun 2017 19:41:42 +0900] rev 32800
revset: filter first/last members by __and__ operation This replaces 'if y in subset' with '& subset'. first(null) and last(wdir()) are fixed thanks to fullreposet.__and__. This also revealed that first() and last() don't follow the order of the input set. 'ls & subset' is valid only if the ordering requirement is 'define' or 'any'. No performance regression observed: revset #0: limit(0:9999, 100, 9000) 0) 0.001164 1) 0.001135 revset #2: 9000 & limit(0:9999, 100, 9000) 0) 0.001224 1) 0.001181 revset #3: last(0:9999, 100) 0) 0.000237 1) 0.000199
Sat, 10 Jun 2017 18:35:11 +0900 revset: reject negative number to select first/last n members
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jun 2017 18:35:11 +0900] rev 32799
revset: reject negative number to select first/last n members Negative 'lim' doesn't make sense here, and it makes things complicated when using list[:lim].
Sat, 10 Jun 2017 18:04:56 +0900 revset: fix order of last() n members where n > 1 (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jun 2017 18:04:56 +0900] rev 32798
revset: fix order of last() n members where n > 1 (BC) last() is implemented using a reversed iterator, so the result should be reversed again. I've marked this as BC since it's quite old bug seen in 3.0. The first bad revision is 4849f574aa24 "revset: changed last implementation to use lazy classes."
Sat, 10 Jun 2017 20:14:23 +0900 debugrevspec: add option to suppress list of computed revisions
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jun 2017 20:14:23 +0900] rev 32797
debugrevspec: add option to suppress list of computed revisions Test will be added later.
Sat, 10 Jun 2017 20:03:35 +0900 debugrevspec: add option to print representation of smartset object
Yuya Nishihara <yuya@tcha.org> [Sat, 10 Jun 2017 20:03:35 +0900] rev 32796
debugrevspec: add option to print representation of smartset object It's possible by -v, but -v also prints a parsed tree. Test will be added later.
Mon, 12 Jun 2017 11:24:21 -0700 help: correct description of "glob:foo/*" matching stable
Martin von Zweigbergk <martinvonz@google.com> [Mon, 12 Jun 2017 11:24:21 -0700] rev 32795
help: correct description of "glob:foo/*" matching Unlike what the description says, it does not match recursively. Also add an example of "glob:foo/**" (which does match recursively).
Sat, 10 Jun 2017 01:59:22 +0100 bookmarks: make sure we close the bookmark file after reading
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 10 Jun 2017 01:59:22 +0100] rev 32794
bookmarks: make sure we close the bookmark file after reading We previously lacked an explicit close of the bookmark file.
Sat, 10 Jun 2017 01:55:01 +0100 bookmarks: rephrase a comment to be shorted and clearer
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 10 Jun 2017 01:55:01 +0100] rev 32793
bookmarks: rephrase a comment to be shorted and clearer The initial motivation is that I need an initial level of indent in the next changeset o:-) It turn out I like the new version better.
Mon, 05 Jun 2017 13:44:15 +0100 checkheads: use a "lazyancestors" object for allfuturecommon
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 05 Jun 2017 13:44:15 +0100] rev 32792
checkheads: use a "lazyancestors" object for allfuturecommon Instead of walking all ancestors to compute the full set we now check membership lazily. This massively speed. On a million-ish revision repository, this remove 14 seconds from the push logic, making the checkheads function disappear from profile.
Mon, 05 Jun 2017 13:37:04 +0100 checkheads: use "revnum" in the "allfuturecommon" set
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 05 Jun 2017 13:37:04 +0100] rev 32791
checkheads: use "revnum" in the "allfuturecommon" set The obsolete post-processing needs to know the extend of the pushed set. The way it is implemented is... suboptimal. It build a full set of all nodes in the pushset and it does so using changectx. We have much better API for this now. The simplest is to use the existing lazy ancestors computation. That logic uses revnum and not node (for good reason) so we start with updating the post-processing code to handle a "allfuturecommon" set containing revision numbers.
Mon, 05 Jun 2017 15:20:20 +0100 checkheads: use 'nodemap.get' to convert nodes to revs
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 05 Jun 2017 15:20:20 +0100] rev 32790
checkheads: use 'nodemap.get' to convert nodes to revs We are about to call 'torev' on node that might be locally missing. In this case, 'nodemap.revs' will return None (something valid in our usecase) while 'changelog.rev' would raise an exception. We make this change in a distinct changeset to show it does not impact the tests.
Mon, 05 Jun 2017 15:17:47 +0100 checkheads: pass "ispushed" function to the obsmarkers logic
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 05 Jun 2017 15:17:47 +0100] rev 32789
checkheads: pass "ispushed" function to the obsmarkers logic We are about to make "allfuturecommon" a set of revs instead of a set of nodes. The function updated in this patch do not needs to know about these details so we just pass it a 'ispushed(node)' function. This will simplify the next changeset.
Fri, 09 Jun 2017 12:29:29 +0100 profile: drop maybeprofile
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 09 Jun 2017 12:29:29 +0100] rev 32788
profile: drop maybeprofile It seems sufficiently simple to use "profile(enabled=X)" to not justify having a dedicated context manager just to read the config. (I do not have a too strong opinion about this).
Fri, 09 Jun 2017 12:36:07 +0100 profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 09 Jun 2017 12:36:07 +0100] rev 32787
profile: support --profile in alias and abbreviated version (--prof) We now process the "--profile" a second time after alias has been processed and the command argument fully parsed. If appropriate we enable profiling at that time. In these situation, the --profile will cover less than if the full --profile flag was passed on the command line. This is better than the previous behavior (flag ignored) and still fullfil multiple valid usecases.
Fri, 09 Jun 2017 11:42:45 +0100 profile: make the contextmanager object available to the callers
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 09 Jun 2017 11:42:45 +0100] rev 32786
profile: make the contextmanager object available to the callers This will allow calling methods on the object in the code using the context manager.
Fri, 09 Jun 2017 11:41:47 +0100 profile: introduce a knob to control if the context is actually profiling
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 09 Jun 2017 11:41:47 +0100] rev 32785
profile: introduce a knob to control if the context is actually profiling This is a step toward allowing context where the profiling in enabled withing the context range. This also open the way to kill the dedicated "maybeprofile" context manager and keep only one of 'profile' and 'maybeprofile'.
Fri, 09 Jun 2017 11:39:53 +0100 profile: introduce a "start" method to the profile context
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 09 Jun 2017 11:39:53 +0100] rev 32784
profile: introduce a "start" method to the profile context The start method is doing all profiler setup and activation. It is currently unconditionally called by '__init__' but this will be made more flexible in later changesets.
Thu, 08 Jun 2017 01:38:48 +0100 profile: upgrade the "profile" context manager to a full class
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jun 2017 01:38:48 +0100] rev 32783
profile: upgrade the "profile" context manager to a full class So far we have been able to use a simple decorator for this. However using the current context manager makes the scope of the profiling in dispatch constrainted and the time frame to decide to enable profiling quite limited (using "maybeprofile") This is the first step toward the ability to enable the profiling from within the profiling scope. eg:: with maybeprofiling(ui) as profiler: ... bar.foo(): ... if options['profile']: profiler.start() ... fooz() ... My target usecase is adding support for "--profile" to alias definitions with effect. These are to be used with "profiling.output=blackbox" to gather data about operation that get slow from time to time (eg: pull being minutes instead of seconds from time to time). Of course, in such case, the scope of the profiling would be smaller since profiler would be started after running extensions 'reposetup' (and other potentially costly logic), but these are not relevant for my target usecase (multiple second commits, multiple tens of seconds pull). Currently adding '--profile' to a command through alias requires to re-spin a Mercurial binary (using "!$HG" in alias), which as a significant performance impact, especially in context where startup performance is being worked on... An alternative approach would be to stop using the context manager in dispatch and move back to a try/finally setup.
Fri, 09 Jun 2017 22:15:53 -0400 setup: avoid linker warnings on Windows about multiple export specifications
Matt Harbison <matt_harbison@yahoo.com> [Fri, 09 Jun 2017 22:15:53 -0400] rev 32782
setup: avoid linker warnings on Windows about multiple export specifications The PyMODINIT_FUNC macro contains __declspec(dllexport), and then the build process adds an "/EXPORT func" to the command line. The 64-bit linker flags this [1]. Everything except zstd.c and bser.c are covered by redefining the macro in util.h [2]. These modules aren't built with util.h in the #include path, so the redefining hack would have to be open coded two more times. After seeing that extra_linker_flags didn't work, I couldn't find anything authoritative indicating why, though I did see an offhand comment on SO that CFLAGS is also ignored on Windows. I also don't fully understand the interaction between msvccompiler and msvc9compiler- I first subclassed the latter, but it isn't used when building with VS2008. I know the camelcase naming isn't the standard, but the HackedMingw32CCompiler class above it was introduced 5 years ago (and I think the current style was in place by then), so I assume that there's some reason for it. [1] https://support.microsoft.com/en-us/help/835326/you-receive-an-lnk4197-error-in-the-64-bit-version-of-the-visual-c-compiler [2] https://bugs.python.org/issue9709#msg120859
Sat, 10 Jun 2017 16:00:18 -0700 memctx: always use cache for filectxfn
Sean Farley <sean@farley.io> [Sat, 10 Jun 2017 16:00:18 -0700] rev 32781
memctx: always use cache for filectxfn I don't see a downside to doing this unless I'm missing something. Thanks to foozy for correcting my previous bad logic.
Sat, 10 Jun 2017 00:06:57 -0400 test-hardlinks: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com> [Sat, 10 Jun 2017 00:06:57 -0400] rev 32780
test-hardlinks: stabilize for Windows This broke in c2cb0de25120, which breaks hardlinks when the executable bit is toggled.
Sun, 04 Jun 2017 00:16:45 +0200 releasenotes: add more tests for formatting and merging of release notes
Rishabh Madan <rishabhmadan96@gmail.com> [Sun, 04 Jun 2017 00:16:45 +0200] rev 32779
releasenotes: add more tests for formatting and merging of release notes
Fri, 02 Jun 2017 23:33:30 +0200 releasenotes: command to manage release notes files
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Jun 2017 23:33:30 +0200] rev 32778
releasenotes: command to manage release notes files Per discussion on the mailing list, we want better release notes for Mercurial. This patch introduces an extension that provides a command for producing release notes files. Functionality is implemented as an extension because it could be useful outside of the Mercurial project and because there is some code (like rst parsing) that already exists in Mercurial and it doesn't make sense to reinvent the wheel. The general idea with the extension is that changeset authors declare release notes in commit messages using rst directives. Periodically (such as at publishing or release time), a project maintainer runs `hg releasenotes` to extract release notes fragments from commit messages and format them to an auto-generated release notes file. More details are explained inline in docstrings. There are several things that need addressed before this is ready for prime time: * Moar tests * Interactive merge mode * Implement similarity detection for individual notes items * Support customizing section names/titles * Parsing improvements for bullet lists and paragraphs * Document which rst primitives can be parsed * Retain arbitrary content (e.g. header section/paragraphs) from existing release notes file * Better error messages (line numbers, hints, etc)
Mon, 12 Jun 2017 03:23:58 +0900 packagelib: use LANGUAGE=C for "hg version"
Toshi MARUYAMA <marutosijp2@gmail.com> [Mon, 12 Jun 2017 03:23:58 +0900] rev 32777
packagelib: use LANGUAGE=C for "hg version" If "hg version" does not contain "version" (e.g. Japanese), $hgversion was empty and rpmbuild failed.
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip