Sun, 01 Oct 2017 02:53:10 -0700 deb: install zsh completions to /usr/share/zsh/vendor-completions
Kyle Lippincott <spectral@google.com> [Sun, 01 Oct 2017 02:53:10 -0700] rev 34406
deb: install zsh completions to /usr/share/zsh/vendor-completions This location is used by debian (and ubuntu) to store completions provided by other deb packages. The default fpath appears to have this before any of the zsh-provided instances of the completions, so this should take precedence. Differential Revision: https://phab.mercurial-scm.org/D882
Sun, 01 Oct 2017 14:37:50 +0100 releasenotes: display release notes when no filename is specified
Rishabh Madan <rishabhmadan96@gmail.com> [Sun, 01 Oct 2017 14:37:50 +0100] rev 34405
releasenotes: display release notes when no filename is specified If the filename is not specified while using --rev, the notes for the specified revs will just be displayed on screen. Differential Revision: https://phab.mercurial-scm.org/D877
Sun, 01 Oct 2017 12:29:33 +0100 hgweb: use parsebool for parsing diff query string options
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 01 Oct 2017 12:29:33 +0100] rev 34404
hgweb: use parsebool for parsing diff query string options Differential Revision: https://phab.mercurial-scm.org/D875
Sun, 01 Oct 2017 14:02:47 +0100 hgweb: remove extra </div>
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 01 Oct 2017 14:02:47 +0100] rev 34403
hgweb: remove extra </div> This was accidentally added in 6797f1fbc642. Differential Revision: https://phab.mercurial-scm.org/D880
Sun, 01 Oct 2017 05:21:32 -0700 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com> [Sun, 01 Oct 2017 05:21:32 -0700] rev 34402
tests: add "have" check for dpkg builddeps Differential Revision: https://phab.mercurial-scm.org/D879
Sun, 01 Oct 2017 04:37:56 -0700 tests: expect parsers.so in cext, parsers.py in pure (test-debian-packages)
Kyle Lippincott <spectral@google.com> [Sun, 01 Oct 2017 04:37:56 -0700] rev 34401
tests: expect parsers.so in cext, parsers.py in pure (test-debian-packages) Differential Revision: https://phab.mercurial-scm.org/D878
Sun, 01 Oct 2017 04:10:01 -0700 hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com> [Sun, 01 Oct 2017 04:10:01 -0700] rev 34400
hghave: check for debuild being installed as well Differential Revision: https://phab.mercurial-scm.org/D874
Sun, 01 Oct 2017 03:24:20 -0700 changelog: use attrs instead of namedtuple
Siddharth Agarwal <sid0@fb.com> [Sun, 01 Oct 2017 03:24:20 -0700] rev 34399
changelog: use attrs instead of namedtuple See http://www.attrs.org/en/stable/why.html#namedtuples for why attrs are better than namedtuples. Differential Revision: https://phab.mercurial-scm.org/D868
Sun, 01 Oct 2017 04:14:16 -0700 thirdparty: vendor attrs
Siddharth Agarwal <sid0@fb.com> [Sun, 01 Oct 2017 04:14:16 -0700] rev 34398
thirdparty: vendor attrs The attrs package allows defining namedtuple-like classes with no weird behavior and no runtime performance cost. This patch vendors in attrs 17.2.0. # no-check-commit Differential Revision: https://phab.mercurial-scm.org/D867
Sun, 01 Oct 2017 04:04:18 -0700 python3: don't byte mangle third-party packages
Siddharth Agarwal <sid0@fb.com> [Sun, 01 Oct 2017 04:04:18 -0700] rev 34397
python3: don't byte mangle third-party packages Third-party packages are already expected to be dual-version clean. Differential Revision: https://phab.mercurial-scm.org/D871
Sun, 01 Oct 2017 03:24:19 -0700 tests: disable lints on mercurial/thirdparty
Siddharth Agarwal <sid0@fb.com> [Sun, 01 Oct 2017 03:24:19 -0700] rev 34396
tests: disable lints on mercurial/thirdparty In the next patch, this directory will be used to vendor in some third-party code. Differential Revision: https://phab.mercurial-scm.org/D866
Sun, 01 Oct 2017 03:48:28 -0700 hghave: fix dpkg --version check to work on recent dpkg versions
Kyle Lippincott <spectral@google.com> [Sun, 01 Oct 2017 03:48:28 -0700] rev 34395
hghave: fix dpkg --version check to work on recent dpkg versions Differential Revision: https://phab.mercurial-scm.org/D869
Sun, 01 Oct 2017 11:29:20 +0100 commands: rename clone --uncompressed to --stream and document
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 01 Oct 2017 11:29:20 +0100] rev 34394
commands: rename clone --uncompressed to --stream and document --uncompressed isn't a very good name and its description in the help documentation isn't very useful. We refer to this concept as "stream clones" in a number of places. I think it makes sense to change the user-facing argument to use the mode --stream. So this commit does that. We keep --uncompressed around for backwards compatibility. While we're here, we overhaul the help docs for streaming clones to be somewhat useful. All tests have been updated to reflect the new preferred --stream argument. A test for backwards compatibility of --uncompressed has been added. .. bc:: `hg clone --stream` should now be used instead of --uncompressed. --uncompressed is marked as deprecated and is an alias for --stream. There is no schedule for elimination of --uncompressed. Differential Revision: https://phab.mercurial-scm.org/D864
Sun, 01 Oct 2017 10:17:11 +0100 commands: remove suggestion to clone via `cp -al`
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 01 Oct 2017 10:17:11 +0100] rev 34393
commands: remove suggestion to clone via `cp -al` This was added in 2df98f616645 in 2006. This may be possible but it seems like a bad idea to even suggest it. Differential Revision: https://phab.mercurial-scm.org/D863
Sat, 30 Sep 2017 09:01:36 +0100 hgweb: add HTML elements to control whitespace settings for annotate
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Sep 2017 09:01:36 +0100] rev 34392
hgweb: add HTML elements to control whitespace settings for annotate Building on top of the new URL query string arguments to control whitespace settings for annotate, this commit adds HTML checkboxes reflecting the values of these arguments to the paper and gitweb themes. The actual diff settings are now exported to the templating layer. The HTML templates add these as data-* attributes so they are accessible to the DOM. A new <form> with various <input> elements is added. The <form> is initially hidden via CSS. A shared JavaScript function (which runs after the <form> has been rendered but before the annotate HTML (because annotate HTML could take a while to load and we want the form to render quickly) takes care of setting the checked state of each box from the data-* attributes. It also registers an event handler to modify the URL and refresh the page whenever the checkbox state is changed. I'm using the URLSearchParams interface to perform URL manipulation. https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams tells me this may not be supported on older web browsers. Yes, apparently the web API didn't have a standard API to parse and format query strings until recently. Hence the check for the presence of this feature in the JavaScript. If the browser doesn't support the feature, the <form> will remain hidden and behavior will like it currently is. We could polyfill this feature or implement our own query string parsing. But I'm lazy and this could be done as a follow-up if people miss it. We could certainly expand this feature to support more diff options (such as lines of context). That's why the potentially reusable code is stored in a reusable place. It is also certainly possible to add diff controls to other pages that display diffs. But since Mozillians are making noise about controlling which revisions annotate shows, I figured I'd start there. .. feature:: Control whitespace settings for annotation on hgweb /annotate URLs on hgweb now accept query string arguments to influence how whitespace changes impact results. The arguments "ignorews," "ignorewsamount," "ignorewseol," and "ignoreblanklines" now have the same meaning as their [annotate] config section counterparts. Any provided setting overrides the server default. HTML checkboxes have been added to the paper and gitweb themes to expose current whitespace settings and to easily modify the current view. Differential Revision: https://phab.mercurial-scm.org/D850
Sat, 30 Sep 2017 09:08:01 +0100 hgweb: query string arguments to control whitespace for annotate
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Sep 2017 09:08:01 +0100] rev 34391
hgweb: query string arguments to control whitespace for annotate This feature should hopefully be pretty straightforward. We simply examine some query string arguments to feed into the diff options. The function to obtain the diff options has been factored into its own generic function to facilitate an upcoming change to the HTML interface and to enable diff settings to be controlled via the same query string arguments on other web commands. The test output for "ignoreblanklines" didn't change. I'm not sure why. Our test coverage for --ignore-blank-lines isn't great and I can't figure out how to make this diff setting do anything meaningful. On a very brief examination of the code, it is possible the setting doesn't work because it is operating at the line level and blank lines detection needs to examine multiple lines. But I'm not an expert in this code, so I'm not sure. Differential Revision: https://phab.mercurial-scm.org/D849
Sat, 30 Sep 2017 09:07:00 +0100 tests: add tests for hgweb annotate output
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Sep 2017 09:07:00 +0100] rev 34390
tests: add tests for hgweb annotate output In preparation for adding features to modify whitespace settings. Differential Revision: https://phab.mercurial-scm.org/D848
Thu, 06 Jul 2017 14:46:07 +0200 obsolete: clean createmarkers part about operation
Boris Feld <boris.feld@octobus.net> [Thu, 06 Jul 2017 14:46:07 +0200] rev 34389
obsolete: clean createmarkers part about operation I will add another experiment in createmarkers, add a comment and some blank lines for aesthetic sake. Differential Revision: https://phab.mercurial-scm.org/D532
Sat, 30 Sep 2017 12:58:06 -0400 treediscovery: update test expectation
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 12:58:06 -0400] rev 34388
treediscovery: update test expectation I'm not sure why this needs an update, but the test passes for me both pure and non-pure. Differential Revision: https://phab.mercurial-scm.org/D860
Sat, 30 Sep 2017 12:57:00 -0400 tests: update some clonebundles expectations to pass on both pure and non-pure
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 12:57:00 -0400] rev 34387
tests: update some clonebundles expectations to pass on both pure and non-pure Specifically, zstd isn't available in --pure mode, and we need to glob off the leading comma as well as the absent compression engine. Differential Revision: https://phab.mercurial-scm.org/D859
Sun, 01 Oct 2017 10:41:39 +0100 merge with stable
Kevin Bullock <kbullock+mercurial@ringworld.org> [Sun, 01 Oct 2017 10:41:39 +0100] rev 34386
merge with stable
Fri, 29 Sep 2017 11:55:44 -0400 contrib: add a check to check-code to ban superfluous pass statements
Augie Fackler <augie@google.com> [Fri, 29 Sep 2017 11:55:44 -0400] rev 34385
contrib: add a check to check-code to ban superfluous pass statements These have annoyed me for a long time, and I'm tired of commenting on them in reviews. I'm sorry for how complicated the regular expression is, but I was too lazy to go crack open pylint's code and add the check there.
Sat, 30 Sep 2017 07:45:18 -0400 posix: replace superfluous pass statement with explicit return
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:45:18 -0400] rev 34384
posix: replace superfluous pass statement with explicit return
Sat, 30 Sep 2017 07:45:51 -0400 subrepo: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:45:51 -0400] rev 34383
subrepo: remove superfluous pass statements
Sat, 30 Sep 2017 07:45:41 -0400 registrar: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:45:41 -0400] rev 34382
registrar: remove superfluous pass statements
Sat, 30 Sep 2017 07:45:07 -0400 patch: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:45:07 -0400] rev 34381
patch: remove superfluous pass statements
Sat, 30 Sep 2017 07:44:55 -0400 obsolete: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:44:55 -0400] rev 34380
obsolete: remove superfluous pass statements
Sat, 30 Sep 2017 07:44:45 -0400 match: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:44:45 -0400] rev 34379
match: remove superfluous pass statements
Sat, 30 Sep 2017 07:44:34 -0400 localrepo: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:44:34 -0400] rev 34378
localrepo: remove superfluous pass statements
Sat, 30 Sep 2017 07:44:20 -0400 hgweb: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:44:20 -0400] rev 34377
hgweb: remove superfluous pass statements
Sat, 30 Sep 2017 07:44:08 -0400 formatter: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:44:08 -0400] rev 34376
formatter: remove superfluous pass statements
Sat, 30 Sep 2017 07:43:53 -0400 exchange: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:43:53 -0400] rev 34375
exchange: remove superfluous pass statements
Sat, 30 Sep 2017 07:43:40 -0400 commandserver: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:43:40 -0400] rev 34374
commandserver: remove superfluous pass statements
Sat, 30 Sep 2017 07:43:26 -0400 cmdutil: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:43:26 -0400] rev 34373
cmdutil: remove superfluous pass statements
Sat, 30 Sep 2017 07:43:11 -0400 byterange: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:43:11 -0400] rev 34372
byterange: remove superfluous pass statements
Sat, 30 Sep 2017 07:42:59 -0400 branchmap: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:42:59 -0400] rev 34371
branchmap: remove superfluous pass statements
Sat, 30 Sep 2017 07:42:47 -0400 convert: remove superfluous pass statements
Augie Fackler <augie@google.com> [Sat, 30 Sep 2017 07:42:47 -0400] rev 34370
convert: remove superfluous pass statements
Fri, 29 Sep 2017 11:55:26 -0400 bugzilla: remove superfluous pass statements
Augie Fackler <augie@google.com> [Fri, 29 Sep 2017 11:55:26 -0400] rev 34369
bugzilla: remove superfluous pass statements
Sat, 30 Sep 2017 07:52:48 -0700 merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Sat, 30 Sep 2017 07:52:48 -0700] rev 34368
merge with stable
Fri, 22 Sep 2017 22:45:02 +0900 copytrace: use ctx.mutable() instead of adhoc constant of non-public phases
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Sep 2017 22:45:02 +0900] rev 34367
copytrace: use ctx.mutable() instead of adhoc constant of non-public phases
Sat, 30 Sep 2017 10:09:29 +0100 exchange: fix test for remote support of binary phases
Boris Feld <boris.feld@octobus.net> [Sat, 30 Sep 2017 10:09:29 +0100] rev 34366
exchange: fix test for remote support of binary phases If the remote do not support phases, the "get" call will return None. We change that default return to empty tuple to fix the membership testing. This was a bug in the initial series. Thanks to yuja for catching this.
Thu, 28 Sep 2017 15:24:54 +0100 exchange: perform stream clone with clone bundle with --uncompressed
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 28 Sep 2017 15:24:54 +0100] rev 34365
exchange: perform stream clone with clone bundle with --uncompressed Previously, `hg clone --uncompressed` would always clone from the origin server, even if a streaming clone bundle were available. With this change, we invoke the clone bundle mechanism before the stream clone mechanism, giving clone bundles the opportunity to handle --uncompressed (which is mapped to pullop.streamclonepreferred). The clone bundle filtering code now filters out entries that aren't stream clones when a stream clone is requested. If a stream clone clone bundle entry is present, it will be used. Otherwise, the client will fall back to a server-based streaming clone. .. feature:: `hg clone --uncompressed` uses clone bundles when possible Differential Revision: https://phab.mercurial-scm.org/D833
Thu, 28 Sep 2017 12:17:30 +0200 tests: add tests for clone bundles with --uncompressed
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 28 Sep 2017 12:17:30 +0200] rev 34364
tests: add tests for clone bundles with --uncompressed Currently, --uncompressed will always clone from the origin server, even if a stream clone bundle is present. Let's add tests demonstrating this behavior. Differential Revision: https://phab.mercurial-scm.org/D832
Wed, 27 Sep 2017 19:27:41 +0900 py3: work around bytes/unicode divergence in parsedate()
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Sep 2017 19:27:41 +0900] rev 34363
py3: work around bytes/unicode divergence in parsedate()
Wed, 27 Sep 2017 19:13:43 +0900 py3: replace bytes[n] with slicing in checkwinfilename()
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Sep 2017 19:13:43 +0900] rev 34362
py3: replace bytes[n] with slicing in checkwinfilename()
Wed, 27 Sep 2017 19:11:28 +0900 py3: manually escape control character to be embedded in win filename error
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Sep 2017 19:11:28 +0900] rev 34361
py3: manually escape control character to be embedded in win filename error
Wed, 27 Sep 2017 19:08:23 +0900 py3: replace str(None) with literal in convcmd.py
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Sep 2017 19:08:23 +0900] rev 34360
py3: replace str(None) with literal in convcmd.py
Wed, 27 Sep 2017 19:04:32 +0900 py3: remove use of str() in hgwebdir
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Sep 2017 19:04:32 +0900] rev 34359
py3: remove use of str() in hgwebdir '%d' can't be used here since port may be either integer or byte string.
Wed, 27 Sep 2017 18:07:48 -0700 config: use copy-on-write to improve copy performance
Jun Wu <quark@fb.com> [Wed, 27 Sep 2017 18:07:48 -0700] rev 34358
config: use copy-on-write to improve copy performance Previously, chg's `verify` call could take 30+ms loading and checking new config files. With one socket redirection, that adds up to around 70ms, which is a lot for fast commands (ex. `bookmark --hidden`). When investigating closer, A lot of time was spent on actually spent on ui copying, which is mainly about `config.config` and `dict` copying. This patch makes that 20x faster by adopting copy-on-write. The copy-on-write is performed at config section level. Before: In [1]: %timeit ui.copy() 100 loops, best of 3: 2.32 ms per loop After: In [1]: %timeit ui.copy() 10000 loops, best of 3: 128 us per loop 2ms may look not that bad, but it adds up pretty quickly with multiple calls. A typical chg run may call it 4 times, which is about 10ms. Differential Revision: https://phab.mercurial-scm.org/D808
Sat, 30 Sep 2017 18:19:14 +0530 py3: whitelist 15 more tests passing on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 18:19:14 +0530] rev 34357
py3: whitelist 15 more tests passing on Python 3 We have reached the count of 75 tests passing on Python 3. Differential Revision: https://phab.mercurial-scm.org/D858
Sat, 30 Sep 2017 15:48:08 +0530 py3: use pycompat.bytestr instead of str
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 15:48:08 +0530] rev 34356
py3: use pycompat.bytestr instead of str Differential Revision: https://phab.mercurial-scm.org/D855
Sat, 30 Sep 2017 15:45:15 +0530 py3: explicitly convert dict.keys() and dict.items() into a list
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 15:45:15 +0530] rev 34355
py3: explicitly convert dict.keys() and dict.items() into a list Differential Revision: https://phab.mercurial-scm.org/D853
Sat, 30 Sep 2017 18:02:53 +0530 py3: use '%d' instead of '%s' for integers
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 18:02:53 +0530] rev 34354
py3: use '%d' instead of '%s' for integers Differential Revision: https://phab.mercurial-scm.org/D856
Sat, 30 Sep 2017 15:46:36 +0530 py3: use pycompat.strkwargs() before passing a dict as keyword argument
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 15:46:36 +0530] rev 34353
py3: use pycompat.strkwargs() before passing a dict as keyword argument Differential Revision: https://phab.mercurial-scm.org/D854
Sat, 30 Sep 2017 05:22:22 +0530 py3: return False early while checking whether None is a key in lazymanifest
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Sep 2017 05:22:22 +0530] rev 34352
py3: return False early while checking whether None is a key in lazymanifest In this patch we returns False early if we are trying to check whether None is a key in lazymanifest. The reason I added a diff is that on Python 3, it goes into the lazy manifest code an returns a TypeError. I checked with Durham that whether None can be a possible key in lazymanifest and he said "no". So it's safe to have this if statement. This fixes `hg merge` on Python 3. Differential Revision: https://phab.mercurial-scm.org/D852
Fri, 29 Sep 2017 14:49:05 -0700 dirstate: use keyword arguments to clarify status()'s callers
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Sep 2017 14:49:05 -0700] rev 34351
dirstate: use keyword arguments to clarify status()'s callers The arguments are especially non-obvious because the order is different from dirstate.walk(). Differential Revision: https://phab.mercurial-scm.org/D847
Fri, 29 Sep 2017 14:19:36 -0700 dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Sep 2017 14:19:36 -0700] rev 34350
dirstate: use keyword arguments to clarify walk()'s callers The arguments are especially non-obvious because the order is different from dirstate.status(). Differential Revision: https://phab.mercurial-scm.org/D846
Fri, 29 Sep 2017 14:23:41 -0700 perf: remove fallbacks to ancient versions of dirstate.walk()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 29 Sep 2017 14:23:41 -0700] rev 34349
perf: remove fallbacks to ancient versions of dirstate.walk() If the call to dirstate.walk() failed, we would try to fall back to older versions. These were removed in d3d1d39da2fa (walk: remove cmdutil.walk, 2008-05-12) and f8299c84b5b6 (dirstate: fold statwalk and walk, 2008-06-26). We don't care about testing performance of versions that old versions at this point, so let's clean up. Differential Revision: https://phab.mercurial-scm.org/D845
Tue, 29 Aug 2017 00:21:25 +0530 releasenotes: update docstrings with information on additional flags
Rishabh Madan <rishabhmadan96@gmail.com> [Tue, 29 Aug 2017 00:21:25 +0530] rev 34348
releasenotes: update docstrings with information on additional flags This patch adds documentation related to the two new flags --check and --list for releasenotes extension. Differential Revision: https://phab.mercurial-scm.org/D544
Thu, 28 Sep 2017 13:22:58 +0530 releasenotes: raise error on simultaneous usage of flags
Rishabh Madan <rishabhmadan96@gmail.com> [Thu, 28 Sep 2017 13:22:58 +0530] rev 34347
releasenotes: raise error on simultaneous usage of flags The releasenotes command is supposed to raise an error when --list and --rev/--check flags are used together. This patch adds the above functionality. Differential Revision: https://phab.mercurial-scm.org/D831
(0) -30000 -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 +3000 +10000 tip