Sun, 18 Jun 2017 23:05:54 -0400 highlight: put pygments import inside demandimport.deactivated
Augie Fackler <raf@durin42.com> [Sun, 18 Jun 2017 23:05:54 -0400] rev 32926
highlight: put pygments import inside demandimport.deactivated I tripped on some weirdness relating to _thread vs threading way down in a dep of highlight recently. I'm not really sure why I'm only just seeing this defect now, but experimentally this fixes the problem, and shouldn't cause any load-time slowness for people until pygments is actually about to be used since highlight.highlight is still lazily loaded in the highlight/__init__.py file.
Sun, 18 Jun 2017 22:19:54 -0400 run-tests: explicitly flush test runner output for Windows stability
Matt Harbison <matt_harbison@yahoo.com> [Sun, 18 Jun 2017 22:19:54 -0400] rev 32925
run-tests: explicitly flush test runner output for Windows stability When hghave testing goes awry, the output order was changing on Windows. diff --git a/tests/test-run-tests.t b/tests/test-run-tests.t --- a/tests/test-run-tests.t +++ b/tests/test-run-tests.t @@ -920,10 +920,10 @@ > EOF > done $ rt -j 2 - .... + ....skipped: unknown feature: notarealhghavefeature\r (esc) + + # Ran 5 tests, 0 skipped, 0 warned, 0 failed. - skipped: unknown feature: notarealhghavefeature - $ cd .. $ rm -rf broken Since 'skipped: unknown feature: notarealhghavefeature\n\n' is printed to stdout and the rest to stderr, it seems like maybe stdio isn't line buffered on Windows. When a program exits, stdout is flushed before stderr[1]. [1] https://blogs.msdn.microsoft.com/oldnewthing/20060519-09/?p=31133
Sun, 18 Jun 2017 21:31:53 -0400 tinyproxy: explicitly flush logged messages
Matt Harbison <matt_harbison@yahoo.com> [Sun, 18 Jun 2017 21:31:53 -0400] rev 32924
tinyproxy: explicitly flush logged messages On Windows, output streams are buffered when redirected to a file, and TerminateProcess() apparently doesn't trigger a flush. This left test-http-proxy.t missing part of the last line when it cat'd proxy.log[1]. Flushing stderr is all that is needed (on py27 anyway). I originally flushed stdout too, but that added additional output to the log: $ cat proxy.log + Accept: $LOCALIP (localhost)\r (esc) + Serving HTTP on 0.0.0.0 port 20810 ...\r (esc) + connect to localhost:$HGPORT\r (esc) * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob) + bye\r (esc) + connect to localhost:$HGPORT\r (esc) * - - [*] "GET http://localhost:$HGPORT/?cmd=branchmap HTTP/1.1" - - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) + bye\r (esc) + connect to localhost:$HGPORT\r (esc) * - - [*] "GET http://localhost:$HGPORT/?cmd=stream_out HTTP/1.1" - - x-hgproto-1:0.1 0.2 comp=*zlib,none,bzip2 (glob) + bye\r (esc) + connect to localhost:$HGPORT\r (esc) ... [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-April/096987.html
Sun, 18 Jun 2017 22:46:56 +0900 help: clarify ancestors() and descendants() include given set (issue5594)
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Jun 2017 22:46:56 +0900] rev 32923
help: clarify ancestors() and descendants() include given set (issue5594) Also unified "a changeset" to "changesets".
Sun, 19 Feb 2017 19:37:14 +0900 dagop: move blockancestors() and blockdescendants() from context
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Feb 2017 19:37:14 +0900] rev 32922
dagop: move blockancestors() and blockdescendants() from context context.py seems not a good place to host these functions. % wc -l mercurial/context.py mercurial/dagop.py 2306 mercurial/context.py 424 mercurial/dagop.py 2730 total
Sun, 16 Oct 2016 18:03:24 +0900 dagop: split module hosting DAG-related algorithms from revset
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Oct 2016 18:03:24 +0900] rev 32921
dagop: split module hosting DAG-related algorithms from revset This module hosts the following functions. They are somewhat similar (e.g. scanning revisions using heap queue or stack) and seem non-trivial in algorithmic point of view. - _revancestors() - _revdescendants() - reachableroots() - _toposort() I was thinking of adding revset._fileancestors() generator for better follow() implementation, but it would be called from context.py as well. So I decided to create new module. Naming is hard. I couldn't come up with any better module name, so it's called "dag operation" now. I rejected the following candidates: - ancestor.py - existing, revlog-level DAG algorithm - ancestorset.py - doesn't always return a set - dagalgorithm.py - hard to type - dagutil.py - existing - revancestor.py - I want to add fileancestors() % wc -l mercurial/dagop.py mercurial/revset.py 339 mercurial/dagop.py 2020 mercurial/revset.py 2359 total
Thu, 15 Jun 2017 17:14:53 -0700 tests: protect tests involving git ext::sh with git-ext-sh
Sean Farley <sean@farley.io> [Thu, 15 Jun 2017 17:14:53 -0700] rev 32920
tests: protect tests involving git ext::sh with git-ext-sh
Thu, 15 Jun 2017 17:13:23 -0700 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io> [Thu, 15 Jun 2017 17:13:23 -0700] rev 32919
hghave: add has_git_range for testing if git understands ext::sh Even on CentOS 7, git is at version 1.8. It seems git 1.9 is when ext::sh was introduced so we a check for that. The way these functions are written follows the same style and format for the way we check svn and bzr versions.
Sat, 17 Jun 2017 23:09:47 -0700 rebase: rewrite "x in y.children()" as "y in x.parents()"
Martin von Zweigbergk <martinvonz@google.com> [Sat, 17 Jun 2017 23:09:47 -0700] rev 32918
rebase: rewrite "x in y.children()" as "y in x.parents()" children() is slow
Sat, 17 Jun 2017 23:09:39 -0700 shelve: rewrite "x in y.children()" as "y in x.parents()"
Martin von Zweigbergk <martinvonz@google.com> [Sat, 17 Jun 2017 23:09:39 -0700] rev 32917
shelve: rewrite "x in y.children()" as "y in x.parents()" children() is slow
Sat, 17 Jun 2017 17:16:28 +0530 py3: use open() instead of file() constructor
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Jun 2017 17:16:28 +0530] rev 32916
py3: use open() instead of file() constructor The file() constructor has been removed in python 3.
Sat, 17 Jun 2017 15:29:26 +0530 py3: convert keys of kwargs back to bytes using pycompat.byteskwargs()
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Jun 2017 15:29:26 +0530] rev 32915
py3: convert keys of kwargs back to bytes using pycompat.byteskwargs()
Sat, 17 Jun 2017 15:05:11 +0530 py3: use pycompat.strkwargs() to convert kwargs keys to str before passing
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Jun 2017 15:05:11 +0530] rev 32914
py3: use pycompat.strkwargs() to convert kwargs keys to str before passing
Sat, 17 Jun 2017 14:53:25 +0530 py3: use '%d' instead of '%s' for integers
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Jun 2017 14:53:25 +0530] rev 32913
py3: use '%d' instead of '%s' for integers Python 3 does not let you use '%s' for integers.
Sat, 17 Jun 2017 14:39:10 +0530 py3: pass the path in hg.repository() as bytes
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Jun 2017 14:39:10 +0530] rev 32912
py3: pass the path in hg.repository() as bytes This make test-ancestor.py pass on Python 3.
Sat, 17 Jun 2017 14:38:02 +0530 py3: pass range() into list() to get one explicitly
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 17 Jun 2017 14:38:02 +0530] rev 32911
py3: pass range() into list() to get one explicitly range() on python 3 returns a generator whereas on python 2 returns a list. So to get a list on python 3, we passed it into list()
Sun, 28 May 2017 00:12:38 +0200 check-concurrency: expose the feature as 'concurrent-push-mode'
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 28 May 2017 00:12:38 +0200] rev 32910
check-concurrency: expose the feature as 'concurrent-push-mode' We move the feature to a proper configuration and document it. The config goes in the 'server' section because it feels like something the server owner would want to decide. We pick and open field because it seems likely that other checking levels will emerge in the future. (eg: server like the mozilla-try server will likely wants a "none" value) The option name contains 'push' since this affects 'push' only. The option value 'check-related' is preferred over one explicitly containing 'allow' or 'deny' because the client still have a strong decision power here. Here, the server is just advising the client on the check mode to use.
Fri, 16 Jun 2017 22:57:31 -0700 exchange: switch to usual way of testing for bundle2-ness
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jun 2017 22:57:31 -0700] rev 32909
exchange: switch to usual way of testing for bundle2-ness We used safehasattr() in one place, but we use isinstance() for this everywhere else, so switch to the latter.
Fri, 16 Jun 2017 21:57:22 -0400 setup: update a comment that blamed py26 for a Windows workaround
Matt Harbison <matt_harbison@yahoo.com> [Fri, 16 Jun 2017 21:57:22 -0400] rev 32908
setup: update a comment that blamed py26 for a Windows workaround
Fri, 16 Jun 2017 20:55:34 -0400 i18n: drop a py25 conditional
Matt Harbison <matt_harbison@yahoo.com> [Fri, 16 Jun 2017 20:55:34 -0400] rev 32907
i18n: drop a py25 conditional I'm not sure how to test this one. `make update-pot` spews all kinds of warnings, though it did before this change too.
Fri, 16 Jun 2017 20:49:32 -0400 perf: ensure HGRCPATH is exported on Windows
Matt Harbison <matt_harbison@yahoo.com> [Fri, 16 Jun 2017 20:49:32 -0400] rev 32906
perf: ensure HGRCPATH is exported on Windows After dropping the garbage collector hack, `hg perfstartup` started yelling about not being able to import the evolve extension, which I have in my user config. Launching `env` shows that an empty HGRCPATH isn't exported to the environment. Since `env` doesn't quote, I have no idea if the variable is trimmed, but Mercurial doesn't complain when processing it.
Fri, 16 Jun 2017 20:35:45 -0400 test-status: glob fixes for Windows
Matt Harbison <matt_harbison@yahoo.com> [Fri, 16 Jun 2017 20:35:45 -0400] rev 32905
test-status: glob fixes for Windows
Fri, 16 Jun 2017 18:42:03 -0400 plan9: drop py26 hacks
Matt Harbison <matt_harbison@yahoo.com> [Fri, 16 Jun 2017 18:42:03 -0400] rev 32904
plan9: drop py26 hacks
Sun, 18 Jun 2017 12:25:23 +0900 revset: fix negative ancestor spec to not return changectx objects
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Jun 2017 12:25:23 +0900] rev 32903
revset: fix negative ancestor spec to not return changectx objects The order was unstable because of this.
Mon, 01 May 2017 05:57:36 +0200 obsolete: use ProgrammingError over assert for volatile set registration
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 01 May 2017 05:57:36 +0200] rev 32902
obsolete: use ProgrammingError over assert for volatile set registration We have ProgrammingError now.
Fri, 16 Jun 2017 10:13:44 -0700 strip: remove a redundant setting of hookargs
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jun 2017 10:13:44 -0700] rev 32901
strip: remove a redundant setting of hookargs bundle2.applybundle() will set both 'source' and 'url'.
Fri, 16 Jun 2017 10:38:14 -0700 unbundle: move streamclone error case away from bundle[12] cases
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jun 2017 10:38:14 -0700] rev 32900
unbundle: move streamclone error case away from bundle[12] cases The bundle1 and bundle2 cases are more similar, and having the streamclone case in between is distracting.
Fri, 16 Jun 2017 10:36:43 -0700 bundle2: use "else" instead of checking condition again
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jun 2017 10:36:43 -0700] rev 32899
bundle2: use "else" instead of checking condition again
Fri, 16 Jun 2017 09:37:22 -0700 wireproto: update reference to deleted addchangegroup()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jun 2017 09:37:22 -0700] rev 32898
wireproto: update reference to deleted addchangegroup() Thanks to Yuya for catching this.
Thu, 15 Jun 2017 13:02:58 +0200 template: add predecessors template
Boris Feld <boris.feld@octobus.net> [Thu, 15 Jun 2017 13:02:58 +0200] rev 32897
template: add predecessors template Add a 'predecessors' template that returns the list of all closest known predecessors for a changectx. The elements of the list are row changectx node id formatted by default as short nodes. The "closest predecessors" are the first locally known revisions encountered while, walking predecessors markers. For example: 1) If a (A, (B)) markers exists and both A and B are locally known A is a closest predecessors of B. 2) If a (A, (B)) and (B, (C)) markers exists and only A and C are known locally, A will be the closest precursors of C. This logic respect repository filtering. So hidden revision will be skipped by this logic unless --hidden is specified. Since we only display the visible predecessors, this template will not display anything in most case. It makes a good candidate for inclusion in the default log output. I added a new test-file for testing the precursors in various scenarios. This test file will also be used for the successors template. A new "obsutil" module has been added to start gathering utility function outside of the large obsolete.py module.
Sat, 22 Apr 2017 20:29:45 +0900 commit: select template by spec.ref name
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 20:29:45 +0900] rev 32896
commit: select template by spec.ref name And load all templates defined in [committemplate] since the selected template is no longer be named as 'changeset'.
Sat, 22 Apr 2017 15:28:29 +0900 commit: do not look up committemplate in template paths (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 15:28:29 +0900] rev 32895
commit: do not look up committemplate in template paths (BC) From 5375ba75df40 and de5cee8ba088, I don't think the current behavior is intended. Commit templates should be processed as literal templates.
Sat, 06 May 2017 17:03:59 +0900 formatter: always store a literal template unnamed
Yuya Nishihara <yuya@tcha.org> [Sat, 06 May 2017 17:03:59 +0900] rev 32894
formatter: always store a literal template unnamed Now spec.ref should be '' if spec.tmpl is specified. Since spec.ref is the option to select the initial template to be rendered, it doesn't make sense to store the given literal template as spec.ref.
Sat, 22 Apr 2017 20:14:55 +0900 formatter: load templates section like a map file
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 20:14:55 +0900] rev 32893
formatter: load templates section like a map file Since a map file has another level to select a template (spec -> mapfile -> topic), this isn't exactly the same as how a map file works. But I believe most users would expect the new behavior. A literal template is stored as an unnamed template so that it will never conflict with the templates defined in [templates] section.
Sat, 06 May 2017 17:41:05 +0900 test-command-template: rewrite recursion tests by using a map file
Yuya Nishihara <yuya@tcha.org> [Sat, 06 May 2017 17:41:05 +0900] rev 32892
test-command-template: rewrite recursion tests by using a map file A literal template will be unnamed soon, so no recursion will be practically made by using -T option.
Sat, 22 Apr 2017 19:56:47 +0900 templater: add simple interface for unnamed template (API)
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 19:56:47 +0900] rev 32891
templater: add simple interface for unnamed template (API) This provides a simpler API for callers which don't need full templating stack. Instead of storing the given template as the name specified by topic, use '' as the default template to be rendered.
Wed, 14 Jun 2017 20:56:34 -0400 ui: add support for a tweakdefaults knob
Augie Fackler <augie@google.com> [Wed, 14 Jun 2017 20:56:34 -0400] rev 32890
ui: add support for a tweakdefaults knob We've been talking for years about a one-stop config knob to opt in to better behavior. There have been a lot of ideas thrown around, but they all seem to be too complicated to get anyone to actually do the work.. As such, this patch is the stupidest thing that can possibly work in the name of getting a good feature to users. Right now it's just three config settings that I think are generally uncontroversial, but I expect to add more soon. That will likely include adding new config knobs for the express purpose of adding them to tweakdefaults.
Thu, 15 Jun 2017 15:13:18 -0700 localrepo: remove unused addchangegroup() (API)
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 15:13:18 -0700] rev 32889
localrepo: remove unused addchangegroup() (API) This completes the cleanup started in d3775db748a0 (localrepo: move the addchangegroup method in changegroup module, 2014-04-01).
Thu, 15 Jun 2017 13:47:54 -0700 changegroup: rename "dh" to the clearer "deltaheads"
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 13:47:54 -0700] rev 32888
changegroup: rename "dh" to the clearer "deltaheads" We have a lot of frequently used abbreviations, but this is not one of them.
Thu, 15 Jun 2017 13:42:41 -0700 changegroup: rename "srccontent" to "cgnodes"
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 13:42:41 -0700] rev 32887
changegroup: rename "srccontent" to "cgnodes" It's the list of nodes in the incoming changegroup, so "cgnodes" made more sense to me.
Thu, 15 Jun 2017 13:42:35 -0700 revlog: rename list of nodes from "content" to "nodes"
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 13:42:35 -0700] rev 32886
revlog: rename list of nodes from "content" to "nodes" It seems like the reason for "content" is that the variable contains the nodes that the changegroup "contains", see e234eda20984 (revlog: make addgroup returns a list of node contained in the added source, 2012-01-13), but "nodes" seems much clearer.
Thu, 15 Jun 2017 13:25:41 -0700 revlog: delete obsolete comment
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 13:25:41 -0700] rev 32885
revlog: delete obsolete comment The comment seems to refer to code that was deleted in 557988c691d1 (revlog.addgroup(): always use _addrevision() to add new revlog entries, 2010-10-08).
Thu, 15 Jun 2017 13:23:21 -0700 revlog: delete dead assignment in addgroup()
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 13:23:21 -0700] rev 32884
revlog: delete dead assignment in addgroup()
Fri, 16 Jun 2017 03:01:22 +0530 pycompat: move the queue related definitions below queue import
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 03:01:22 +0530] rev 32883
pycompat: move the queue related definitions below queue import This helps in understanding why empty and queue are there.
Fri, 16 Jun 2017 02:48:17 +0530 pycompat: move multiline comments above a function to function doc
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 02:48:17 +0530] rev 32882
pycompat: move multiline comments above a function to function doc pycompat.py is unorganized and looks ugly. Next few patches will try to make it look more cleaner so that adding more code is easy and reading code also. This patch moves the multiline comments above functions to function docs. While moving, I improved the comments and make them better suitable for func doc. While I was here I drop a unrequired and misplaced comment.
Fri, 16 Jun 2017 01:46:47 +0530 py3: replace dict.iterkeys() with iter(dict)
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 01:46:47 +0530] rev 32881
py3: replace dict.iterkeys() with iter(dict) dict.iterkeys() does not exists on Python 3.
Fri, 16 Jun 2017 01:28:23 +0530 py3: explicitly convert dict.values() to a list on py3
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 01:28:23 +0530] rev 32880
py3: explicitly convert dict.values() to a list on py3 dict.values() returns a dict_values() object, so we need to pass it into list() explicitly to get one.
Fri, 16 Jun 2017 01:24:31 +0530 py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 01:24:31 +0530] rev 32879
py3: alias long to int and xrange to range in test-ancestor.py on Python 3
Fri, 16 Jun 2017 00:36:17 +0530 py3: add a new bytesurl() to convert a str url into bytes
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 00:36:17 +0530] rev 32878
py3: add a new bytesurl() to convert a str url into bytes
Fri, 16 Jun 2017 00:32:52 +0530 py3: add a new strurl() which will convert a bytes url to str
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 16 Jun 2017 00:32:52 +0530] rev 32877
py3: add a new strurl() which will convert a bytes url to str
Thu, 15 Jun 2017 21:59:42 -0400 killdaemons: fix WaitForSingleObject() error handling logic on Windows
Matt Harbison <matt_harbison@yahoo.com> [Thu, 15 Jun 2017 21:59:42 -0400] rev 32876
killdaemons: fix WaitForSingleObject() error handling logic on Windows The error return is not 0 for this method, so _check() was doing nothing when an error occurred. This forces the error path, much like the check for OpenProcess(). The only unhandled return is now WAIT_ABANDONED, but I don't see how that could happen in this case.
Tue, 06 Jun 2017 20:18:06 -0400 killdaemons: explicitly set the ctypes signatures
Matt Harbison <matt_harbison@yahoo.com> [Tue, 06 Jun 2017 20:18:06 -0400] rev 32875
killdaemons: explicitly set the ctypes signatures When I tried importing util.posixfile to work around removing a file opened by another process on Windows, it brought along the declarations in win32.py, which broke the error handling[1]. It doesn't seem worth hacking killdaemons[2] just to isolate these declarations in win32.py, so just declare them here to prevent any future issues. (win32.py mentions the declarations are required by pypy.) [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-May/097905.html [2] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-May/097907.html
Sun, 07 May 2017 14:58:40 -0400 hghave: enable 'serve' on Windows
Matt Harbison <matt_harbison@yahoo.com> [Sun, 07 May 2017 14:58:40 -0400] rev 32874
hghave: enable 'serve' on Windows I've been using a local hghaveaddon.py to enable this for a couple of months with reasonable success, and 'killdaemons' is already enabled on Windows. There's one failure[1] in test-http-proxy.t that this adds, which I can't figure out. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-April/096987.html
Thu, 15 Jun 2017 11:00:29 -0400 contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 11:00:29 -0400] rev 32873
contrib: add a ratchet for tests in Python 3 This gives us an easy way to automatically update passing tests in Python 3.
Thu, 15 Jun 2017 10:59:48 -0400 contrib: check in a whitelist of passing tests in Python 3
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 10:59:48 -0400] rev 32872
contrib: check in a whitelist of passing tests in Python 3
Thu, 15 Jun 2017 13:13:36 -0400 tests: try and fail more gracefully with broken unicode escapes
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 13:13:36 -0400] rev 32871
tests: try and fail more gracefully with broken unicode escapes
Thu, 15 Jun 2017 12:49:13 -0400 md5sum: adapt for python 3 support
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 12:49:13 -0400] rev 32870
md5sum: adapt for python 3 support
Thu, 15 Jun 2017 11:10:51 -0700 profiling: allow configuring minimum display threshold for hotpath
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jun 2017 11:10:51 -0700] rev 32869
profiling: allow configuring minimum display threshold for hotpath statprof.display_hotpath() accepts a "limit" function to choose the minimum threshold for samples to display. The default is 0.05, which means you don't need individual items contributing less than 5%. I had a need to adjust this threshold. We already have a config option for it. So let's reuse it. check-config.py doesn't like having multiple defaults for the ui.configwith() calls. The behavior is obviously correct. I'm not sure if it is worth teaching check-config.py how to ignore this. So I've just accepted the new output.
Thu, 15 Jun 2017 11:04:46 -0700 config: document profiling.show{min,max}
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jun 2017 11:04:46 -0700] rev 32868
config: document profiling.show{min,max}
Thu, 15 Jun 2017 10:58:36 -0700 check-config: look for ui.configwith
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jun 2017 10:58:36 -0700] rev 32867
check-config: look for ui.configwith We previously weren't looking for this config helper. And, surprise, profiling.py references config options without docs. If I tried hard enough, I could have combined the regexps using a positive lookbehind assertion or something. But I didn't want to make my brain explode. At some point, we should probably do this linting at the tokenizer or ast layer. I'm not willing to open that can of worms right now.
Thu, 15 Jun 2017 10:38:19 -0700 check-config: use named groups in regexp
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jun 2017 10:38:19 -0700] rev 32866
check-config: use named groups in regexp In preparation for making this regexp a bit more complicated.
Thu, 15 Jun 2017 10:36:23 -0700 check-config: use compiled regexp
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jun 2017 10:36:23 -0700] rev 32865
check-config: use compiled regexp And split the regexp across multiple lines to make it easier to read.
Thu, 15 Jun 2017 10:46:39 -0700 tests: add test coverage for check-config
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 15 Jun 2017 10:46:39 -0700] rev 32864
tests: add test coverage for check-config We didn't have explicit test coverage before. I broke check-config.py as part of writing patches and was lucky I realized it.
Thu, 15 Jun 2017 22:57:20 -0700 exchange: use context manager for bundle1 unbundling
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 22:57:20 -0700] rev 32863
exchange: use context manager for bundle1 unbundling The lazy locking is not used for bundle1, so using a regular context manager is clearer.
Thu, 15 Jun 2017 14:47:18 -0700 unbundle: use context manager for transaction
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 14:47:18 -0700] rev 32862
unbundle: use context manager for transaction
Thu, 15 Jun 2017 17:00:32 -0700 clonebundle: use context managers for lock and transaction
Martin von Zweigbergk <martinvonz@google.com> [Thu, 15 Jun 2017 17:00:32 -0700] rev 32861
clonebundle: use context managers for lock and transaction
Tue, 11 Apr 2017 21:38:24 +0900 changeset_templater: render template specified by templatespec tuple
Yuya Nishihara <yuya@tcha.org> [Tue, 11 Apr 2017 21:38:24 +0900] rev 32860
changeset_templater: render template specified by templatespec tuple
Sat, 22 Apr 2017 19:29:41 +0900 formatter: render template specified by templatespec tuple
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 19:29:41 +0900] rev 32859
formatter: render template specified by templatespec tuple
Sat, 22 Apr 2017 19:07:00 +0900 formatter: put topic in templatespec tuple
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 19:07:00 +0900] rev 32858
formatter: put topic in templatespec tuple This will allow us to change the initial template reference depending on how the template is looked up. For example, -Tdefault => (ref='changeset', tmpl=None, mapfile='map-cmdline.default') -T'{rev}' => (ref='', tmpl='{rev}', mapfile=None) A literal template given by -T option will be stored as an unnamed template, which will free up the template namespace so that we can load named templates from [templates] section of user config.
Sat, 22 Apr 2017 19:02:47 +0900 cmdutil: pass templatespec tuple directly to changeset_templater (API)
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 19:02:47 +0900] rev 32857
cmdutil: pass templatespec tuple directly to changeset_templater (API) A fewer number of arguments should be better.
Sat, 22 Apr 2017 18:48:38 +0900 formatter: wrap (tmpl, mapfile) by named tuple
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 18:48:38 +0900] rev 32856
formatter: wrap (tmpl, mapfile) by named tuple I'm going to add more options to the templatespec tuple. cmdutil.logtemplatespec() is just an alias now, but it will be changed to a factory function later.
Sat, 22 Apr 2017 18:42:03 +0900 cmdutil: factor out helper to create changeset_templater with literal template
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 18:42:03 +0900] rev 32855
cmdutil: factor out helper to create changeset_templater with literal template changeset_templater has lots of arguments, but most callers only need to specify a literal template 'tmpl'. "hg debugtemplate" has no diff option, which means 'opts' were effectively {}, so dropped opts.
Wed, 14 Jun 2017 23:56:58 -0400 test-dirstate-race: stabilize for Windows
Matt Harbison <matt_harbison@yahoo.com> [Wed, 14 Jun 2017 23:56:58 -0400] rev 32854
test-dirstate-race: stabilize for Windows Without quoting, the output after "custom merge tool" in the next test is an abort trying to open "C:UsersMattAppData..."
Sat, 06 May 2017 16:24:21 +0900 formatter: document lookuptemplate()
Yuya Nishihara <yuya@tcha.org> [Sat, 06 May 2017 16:24:21 +0900] rev 32853
formatter: document lookuptemplate()
Sat, 22 Apr 2017 15:30:27 +0900 cmdutil: rename gettemplate() to _lookuplogtemplate()
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 15:30:27 +0900] rev 32852
cmdutil: rename gettemplate() to _lookuplogtemplate() This function is only useful when processing log options.
Sat, 22 Apr 2017 15:11:53 +0900 formatter: inline gettemplater()
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 15:11:53 +0900] rev 32851
formatter: inline gettemplater() Since it's highly use-case dependent how template should be looked up, gettemplater() function isn't useful. Keeping it would introduce another bug I've made and fixed earlier in this series.
Sat, 22 Apr 2017 15:06:06 +0900 formatter: factor out function to create templater from literal or map file
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 15:06:06 +0900] rev 32850
formatter: factor out function to create templater from literal or map file (tmpl, mapfile) will be packed into a named tuple later.
Sat, 22 Apr 2017 14:53:05 +0900 graphlog: do not look up graphnodetemplate in template paths (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 22 Apr 2017 14:53:05 +0900] rev 32849
graphlog: do not look up graphnodetemplate in template paths (BC) ui.graphnodetemplate config should be a literal template as ui.logtemplate is. The use of formatter.gettemplater() is valid only for a template string given by -T/--template option.
Sat, 06 May 2017 14:48:47 +0900 formatter: open raw template file in posix semantics
Yuya Nishihara <yuya@tcha.org> [Sat, 06 May 2017 14:48:47 +0900] rev 32848
formatter: open raw template file in posix semantics This should have no effect, but seems good for code consistency.
Sat, 06 May 2017 14:47:31 +0900 formatter: open raw template file in binary mode (BC)
Yuya Nishihara <yuya@tcha.org> [Sat, 06 May 2017 14:47:31 +0900] rev 32847
formatter: open raw template file in binary mode (BC) I believe it was a mistake to open file in text mode. Now '\r' is preserved on Windows, but it should be okay to print '\r\n' as long as users live in such platform.
Sat, 06 May 2017 14:40:22 +0900 formatter: close raw template file explicitly
Yuya Nishihara <yuya@tcha.org> [Sat, 06 May 2017 14:40:22 +0900] rev 32846
formatter: close raw template file explicitly
Tue, 13 Jun 2017 17:43:33 -0400 patchbomb: make getaddrs function easier to work with
Augie Fackler <augie@google.com> [Tue, 13 Jun 2017 17:43:33 -0400] rev 32845
patchbomb: make getaddrs function easier to work with Prior to this the return value was potentially None, a string, or a list of strings. It now always returns a list of strings where each string is always only one email address
Tue, 13 Jun 2017 16:30:50 -0400 patchbomb: look for non-empty publicurl, not a non-None one
Augie Fackler <augie@google.com> [Tue, 13 Jun 2017 16:30:50 -0400] rev 32844
patchbomb: look for non-empty publicurl, not a non-None one Otherwise it's impossible to turn this feature back off, which is making writing of tests awkward.
Tue, 13 Jun 2017 16:30:11 -0400 patchbomb: make variable name for publicurl always be publicurl
Augie Fackler <augie@google.com> [Tue, 13 Jun 2017 16:30:11 -0400] rev 32843
patchbomb: make variable name for publicurl always be publicurl
Wed, 14 Jun 2017 01:43:47 -0400 bisect: simpler approach for option validation message
Brandon McCaig <bamccaig@gmail.com> [Wed, 14 Jun 2017 01:43:47 -0400] rev 32842
bisect: simpler approach for option validation message Yuya Nishihara gave this suggestion on the mailing list after the previous patch was queued, and honestly this seems much simpler and looks more efficient.
Mon, 12 Jun 2017 16:35:57 -0700 pushkey: use False/True for return values from push functions
Martin von Zweigbergk <martinvonz@google.com> [Mon, 12 Jun 2017 16:35:57 -0700] rev 32841
pushkey: use False/True for return values from push functions It was particularly unclear in phases.pushphase() whether the 0/1 returned were the 0/1 for public/draft phase or for False/True
Fri, 10 Apr 2015 00:14:16 +0900 smartset: micro optimize spanset.slice() to narrow range accordingly
Yuya Nishihara <yuya@tcha.org> [Fri, 10 Apr 2015 00:14:16 +0900] rev 32840
smartset: micro optimize spanset.slice() to narrow range accordingly -1ms isn't significant, but seems not bad. revset #0: limit(0:9999, 100, 9000) 6) 0.001145 7) 0.000214 revset #3: last(0:9999, 100) 6) 0.000197 7) 0.000171
Thu, 09 Apr 2015 23:56:06 +0900 smartset: micro optimize baseset.slice() to use slice of list
Yuya Nishihara <yuya@tcha.org> [Thu, 09 Apr 2015 23:56:06 +0900] rev 32839
smartset: micro optimize baseset.slice() to use slice of list -1ms isn't significant, but seems not bad. revset #1: limit(0::9999, 100, 9000) 5) 0.001681 6) 0.000790
Tue, 24 Mar 2015 00:14:53 +0900 smartset: extract method to slice abstractsmartset
Yuya Nishihara <yuya@tcha.org> [Tue, 24 Mar 2015 00:14:53 +0900] rev 32838
smartset: extract method to slice abstractsmartset Sub classes can provide optimized implementations.
Sun, 24 May 2015 11:07:14 +0900 smartset: extract spanset factory to make it constructed without a repo
Yuya Nishihara <yuya@tcha.org> [Sun, 24 May 2015 11:07:14 +0900] rev 32837
smartset: extract spanset factory to make it constructed without a repo This renames the spanset class to _spanset, and moves its __init__ to new spanset() function. spanset() is now a factory function. This allows us to construct a spanset without keeping a repo instance.
Sun, 11 Jun 2017 00:21:38 +0900 smartset: change repr of spanset to show revisions as half-open range
Yuya Nishihara <yuya@tcha.org> [Sun, 11 Jun 2017 00:21:38 +0900] rev 32836
smartset: change repr of spanset to show revisions as half-open range Before, an empty spanset was displayed as '<spanset+ 0:-1>', which seemed confusing.
Mon, 12 Jun 2017 15:34:31 -0700 fsmonitor: don't write out state if identity has changed (issue5581)
Siddharth Agarwal <sid0@fb.com> [Mon, 12 Jun 2017 15:34:31 -0700] rev 32835
fsmonitor: don't write out state if identity has changed (issue5581) Inspired by the dirstate fix in dc7efa2826e4, this should fix any race conditions with the fsmonitor state changing from underneath. Since we now grab the wlock for any non-invalidate writes, the only situation this appears to happen in is with a concurrent invalidation. Test that.
Mon, 12 Jun 2017 15:34:31 -0700 fsmonitor: write state with wlock held and dirstate unchanged (issue5581)
Siddharth Agarwal <sid0@fb.com> [Mon, 12 Jun 2017 15:34:31 -0700] rev 32834
fsmonitor: write state with wlock held and dirstate unchanged (issue5581) This means that the state will not be written if: (1) either the wlock can't be obtained (2) something else came along and changed the dirstate while we were in the middle of a status run.
Mon, 12 Jun 2017 13:56:50 -0700 workingctx: add a way for extensions to run code at status fixup time
Siddharth Agarwal <sid0@fb.com> [Mon, 12 Jun 2017 13:56:50 -0700] rev 32833
workingctx: add a way for extensions to run code at status fixup time Some extensions like fsmonitor need to run code after dirstate.status is called, but while the wlock is held. The extensions could grab the wlock again, but that has its own peculiar race issues. For example, fsmonitor would not like its state to be written out if the dirstate has changed underneath (see issue5581 for what can go wrong in that sort of case). To protect against these sorts of issues, allow extensions to declare that they would like to run some code to run at fixup time. fsmonitor will switch to using this in the next patch in the series.
Mon, 12 Jun 2017 13:56:43 -0700 workingctx: also pass status tuple into poststatusfixup
Siddharth Agarwal <sid0@fb.com> [Mon, 12 Jun 2017 13:56:43 -0700] rev 32832
workingctx: also pass status tuple into poststatusfixup fsmonitor is going to need this to compute its set of notable files to persist.
Mon, 12 Jun 2017 13:54:59 -0700 workingctx: factor out post-status dirstate fixup
Siddharth Agarwal <sid0@fb.com> [Mon, 12 Jun 2017 13:54:59 -0700] rev 32831
workingctx: factor out post-status dirstate fixup We want to allow extensions to be able to add code to run inside the wlock.
Tue, 13 Jun 2017 10:02:34 -0400 merge with stable
Augie Fackler <augie@google.com> [Tue, 13 Jun 2017 10:02:34 -0400] rev 32830
merge with stable
Mon, 12 Jun 2017 17:24:10 +0200 profile: properly propagate exception from the sub-context manager
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:24:10 +0200] rev 32829
profile: properly propagate exception from the sub-context manager Context manager has a mechanism to control extension propagation. It is not used by profiling right now, but making the code correct will help prevent bug in the future.
Mon, 12 Jun 2017 17:25:37 +0200 profile: close 'fp' in all cases
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:25:37 +0200] rev 32828
profile: close 'fp' in all cases There are no way for this to happen today, but better be safe than sorry, no one know how the code will evolve. We now make sure the file pointer is closed even is profiler is None.
Mon, 12 Jun 2017 17:21:41 +0200 profile: close 'fp' on error within '__enter__'
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:21:41 +0200] rev 32827
profile: close 'fp' on error within '__enter__' Previously, error when initialying the profiler would forgot to explicitly close the file. Thank goes to Yuya Nishihara for spotting this.
Mon, 12 Jun 2017 17:20:48 +0200 profile: indent part of '__enter__'
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 12 Jun 2017 17:20:48 +0200] rev 32826
profile: indent part of '__enter__' We are about to introduce a try except. We start with adding the indent to make the next patch clearer.
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 32825
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 32824
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 32823
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 32822
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 32821
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 32820
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 32819
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 32818
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 32817
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 32816
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 32815
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.
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 32814
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 32813
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 32812
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 32811
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 32810
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 32809
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 32808
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 32807
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.
(0) -30000 -10000 -3000 -1000 -120 +120 +1000 +3000 +10000 tip