Fri, 18 Oct 2019 17:52:19 -0700 largefiles: allow "lfstatus" context manager to set value to False
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Oct 2019 17:52:19 -0700] rev 43631
largefiles: allow "lfstatus" context manager to set value to False Differential Revision: https://phab.mercurial-scm.org/D7140
Fri, 18 Oct 2019 17:46:37 -0700 largefiles: move lfstatus context manager to lfutil
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Oct 2019 17:46:37 -0700] rev 43630
largefiles: move lfstatus context manager to lfutil Differential Revision: https://phab.mercurial-scm.org/D7139
Fri, 08 Nov 2019 14:35:53 -0800 revlog: delete references to deleted nullid sentinel value
Martin von Zweigbergk <martinvonz@google.com> [Fri, 08 Nov 2019 14:35:53 -0800] rev 43629
revlog: delete references to deleted nullid sentinel value We stopped keeping the nullid in the index in 781b2720d2ac (index: don't include nullid in len(), 2018-07-20). I forgot to update some comments about it. Differential Revision: https://phab.mercurial-scm.org/D7366
Sun, 10 Nov 2019 18:15:54 +0100 revlog: remove the, now unused, `revlog._nodepos` attribute
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 10 Nov 2019 18:15:54 +0100] rev 43628
revlog: remove the, now unused, `revlog._nodepos` attribute Spotted by Yuya Nishihara.
Sun, 10 Nov 2019 18:12:50 +0100 nodemap: use bytes for the error message
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 10 Nov 2019 18:12:50 +0100] rev 43627
nodemap: use bytes for the error message Spotted by Yuya Nishihara.
Sat, 09 Nov 2019 16:16:31 +0100 py3: use native strings when forming email headers in patchbomb
Denis Laxalde <denis@laxalde.org> [Sat, 09 Nov 2019 16:16:31 +0100] rev 43626
py3: use native strings when forming email headers in patchbomb Per previous changesets, encoded header's values are native str. We complete the change in patchbomb extension to have literal header values native str as well. Then we can also change headers' keys to be str. In _msgid(), we still need to use encoding.strfromlocal() because usage of os.environ is not allowed by check-code. This finally removes the "if pycompat.ispy3:" TODO.
Sat, 09 Nov 2019 16:54:33 +0100 mail: convert addr to str early in addrlistencode()
Denis Laxalde <denis@laxalde.org> [Sat, 09 Nov 2019 16:54:33 +0100] rev 43625
mail: convert addr to str early in addrlistencode()
Sat, 09 Nov 2019 15:16:52 +0100 mail: let addressencode() / addrlistencode() return native strings
Denis Laxalde <denis@laxalde.org> [Sat, 09 Nov 2019 15:16:52 +0100] rev 43624
mail: let addressencode() / addrlistencode() return native strings Avoids conversion to "str" on py3.
Sat, 09 Nov 2019 12:45:14 +0100 mail: let headencode() return a native string
Denis Laxalde <denis@laxalde.org> [Sat, 09 Nov 2019 12:45:14 +0100] rev 43623
mail: let headencode() return a native string This is to avoid conversion to/from str on py3.
Sat, 09 Nov 2019 13:23:55 +0100 revlog: deprecate direct `nodemap` access
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:55 +0100] rev 43622
revlog: deprecate direct `nodemap` access Now that all in-core user have been updated to the new API, we can deprecated direct access to nodemap. Differential Revision: https://phab.mercurial-scm.org/D7362
Sat, 09 Nov 2019 13:23:55 +0100 revlog: drop special hack in the `nodemap` property
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:55 +0100] rev 43621
revlog: drop special hack in the `nodemap` property This code does not seems necessary anymore. Differential Revision: https://phab.mercurial-scm.org/D7361
Sat, 09 Nov 2019 13:23:55 +0100 perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:55 +0100] rev 43620
perf: make `perfrevlogindex` use the new `index.rev` api if available Differential Revision: https://phab.mercurial-scm.org/D7360
Sat, 09 Nov 2019 13:23:54 +0100 perf: make `perfnodemap` use the new `index.get_rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:54 +0100] rev 43619
perf: make `perfnodemap` use the new `index.get_rev` api if available Differential Revision: https://phab.mercurial-scm.org/D7358
Sat, 09 Nov 2019 13:23:54 +0100 index: use `index.get_rev` in `remotefilelog`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:54 +0100] rev 43618
index: use `index.get_rev` in `remotefilelog` Differential Revision: https://phab.mercurial-scm.org/D7357
Sat, 09 Nov 2019 13:23:54 +0100 index: use `index.get_rev` in `histedit.processreplacement`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:54 +0100] rev 43617
index: use `index.get_rev` in `histedit.processreplacement` Differential Revision: https://phab.mercurial-scm.org/D7354
Sat, 09 Nov 2019 13:23:54 +0100 index: use `index.get_rev` in `histedit.adjustreplacementsfrommarkers`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:54 +0100] rev 43616
index: use `index.get_rev` in `histedit.adjustreplacementsfrommarkers` Differential Revision: https://phab.mercurial-scm.org/D7353
Sat, 09 Nov 2019 13:23:54 +0100 index: use `index.get_rev` in `rebase._computeobsoletenotrebased`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:54 +0100] rev 43615
index: use `index.get_rev` in `rebase._computeobsoletenotrebased` Differential Revision: https://phab.mercurial-scm.org/D7350
Sat, 09 Nov 2019 13:23:53 +0100 index: use `index.get_rev` in `rebase.successorrevs`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:53 +0100] rev 43614
index: use `index.get_rev` in `rebase.successorrevs` The code is slightly updated in the process for simplicity. Differential Revision: https://phab.mercurial-scm.org/D7349
Sat, 09 Nov 2019 13:23:52 +0100 index: use `index.get_rev` in `unionrepo.unionrevlog`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:52 +0100] rev 43613
index: use `index.get_rev` in `unionrepo.unionrevlog` Differential Revision: https://phab.mercurial-scm.org/D7338
Sat, 09 Nov 2019 13:23:53 +0100 index: use `index.rev` in `bundlerepo.bundlerevlog`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:53 +0100] rev 43612
index: use `index.rev` in `bundlerepo.bundlerevlog` Differential Revision: https://phab.mercurial-scm.org/D7340
Sat, 09 Nov 2019 13:23:53 +0100 index: use `index.get_rev` in `exchange._pullapplyphases`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:53 +0100] rev 43611
index: use `index.get_rev` in `exchange._pullapplyphases` Differential Revision: https://phab.mercurial-scm.org/D7347
Sat, 09 Nov 2019 13:23:53 +0100 index: use `index.rev` in `exchange.fallbackheads`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:53 +0100] rev 43610
index: use `index.rev` in `exchange.fallbackheads` Differential Revision: https://phab.mercurial-scm.org/D7345
Sat, 09 Nov 2019 13:23:53 +0100 index: use `index.get_rev` in `revset._mapbynodefunc`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:53 +0100] rev 43609
index: use `index.get_rev` in `revset._mapbynodefunc` We slightly update the code in the process. Differential Revision: https://phab.mercurial-scm.org/D7343
Sat, 09 Nov 2019 13:23:53 +0100 index: use `index.get_rev` in `discovery._postprocessobsolete`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:53 +0100] rev 43608
index: use `index.get_rev` in `discovery._postprocessobsolete` Differential Revision: https://phab.mercurial-scm.org/D7341
Sat, 09 Nov 2019 13:23:52 +0100 index: use `index.get_rev` in `repoview.pinnedrevs`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:52 +0100] rev 43607
index: use `index.get_rev` in `repoview.pinnedrevs` We simplify the code in the process Differential Revision: https://phab.mercurial-scm.org/D7337
Sat, 09 Nov 2019 13:23:52 +0100 index: use `index.get_rev` in `obsolete._computephasedivergentset`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:52 +0100] rev 43606
index: use `index.get_rev` in `obsolete._computephasedivergentset` Differential Revision: https://phab.mercurial-scm.org/D7336
Sat, 09 Nov 2019 13:23:52 +0100 index: use `index.get_rev` in `obsutil.getobsoleted`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:52 +0100] rev 43605
index: use `index.get_rev` in `obsutil.getobsoleted` Differential Revision: https://phab.mercurial-scm.org/D7335
Sat, 09 Nov 2019 13:23:52 +0100 index: use `index.get_rev` in `phases.newheads`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:52 +0100] rev 43604
index: use `index.get_rev` in `phases.newheads` Differential Revision: https://phab.mercurial-scm.org/D7332
Sat, 09 Nov 2019 13:23:51 +0100 index: use `index.get_rev` in `localrepo.known`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:51 +0100] rev 43603
index: use `index.get_rev` in `localrepo.known` Differential Revision: https://phab.mercurial-scm.org/D7327
Sat, 09 Nov 2019 13:23:51 +0100 index: add a `get_rev` method (API)
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:51 +0100] rev 43602
index: add a `get_rev` method (API) The new `index.getrev(node)` is to be preferred over using: `index.nodemap.get(node)`. This get us closer to be able to remove the `nodemap` attribute of the index. Differential Revision: https://phab.mercurial-scm.org/D7326
Sat, 09 Nov 2019 13:23:51 +0100 index: use `index.rev` in `revlog.rev`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:51 +0100] rev 43601
index: use `index.rev` in `revlog.rev` Differential Revision: https://phab.mercurial-scm.org/D7325
Sat, 09 Nov 2019 13:23:51 +0100 index: add a `rev` method (API)
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 13:23:51 +0100] rev 43600
index: add a `rev` method (API) The new `index.rev(node)` is to be preferred over using `node index.nodemap[node]`. This get us closer to be able to remove the `nodemap` attribute of the index. Differential Revision: https://phab.mercurial-scm.org/D7324
Fri, 08 Nov 2019 13:26:55 +0100 perf: make `perfphasesremote` use the new `index.has_node` api
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 13:26:55 +0100] rev 43599
perf: make `perfphasesremote` use the new `index.has_node` api (If available) Differential Revision: https://phab.mercurial-scm.org/D7359
Fri, 08 Nov 2019 17:08:24 +0100 index: use `index.has_node` in `infinitypush`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 17:08:24 +0100] rev 43598
index: use `index.has_node` in `infinitypush` Differential Revision: https://phab.mercurial-scm.org/D7356
Fri, 08 Nov 2019 13:26:33 +0100 index: use `index.has_node` in `phabricator.getoldnodedrevmap`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 13:26:33 +0100] rev 43597
index: use `index.has_node` in `phabricator.getoldnodedrevmap` Differential Revision: https://phab.mercurial-scm.org/D7355
Fri, 08 Nov 2019 15:09:09 +0100 index: use `index.has_node` in `histedit.cleanupnode`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 15:09:09 +0100] rev 43596
index: use `index.has_node` in `histedit.cleanupnode` Differential Revision: https://phab.mercurial-scm.org/D7352
Fri, 08 Nov 2019 15:08:27 +0100 index: use `index.has_node` in `histedit._finishhistedit
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 15:08:27 +0100] rev 43595
index: use `index.has_node` in `histedit._finishhistedit Differential Revision: https://phab.mercurial-scm.org/D7351
Fri, 08 Nov 2019 13:25:25 +0100 index: use `index.has_node` in `exchangev2._pullchangesetdiscovery`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 13:25:25 +0100] rev 43594
index: use `index.has_node` in `exchangev2._pullchangesetdiscovery` Differential Revision: https://phab.mercurial-scm.org/D7348
Fri, 08 Nov 2019 16:00:47 +0100 index: use `index.has_node` in `exchange._pulldiscoverychangegroup`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 16:00:47 +0100] rev 43593
index: use `index.has_node` in `exchange._pulldiscoverychangegroup` Differential Revision: https://phab.mercurial-scm.org/D7346
Fri, 08 Nov 2019 13:36:02 +0100 index: use `index.has_node` in `bookmarks.bmstore`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 13:36:02 +0100] rev 43592
index: use `index.has_node` in `bookmarks.bmstore` Differential Revision: https://phab.mercurial-scm.org/D7344
Fri, 08 Nov 2019 11:44:23 +0100 index: use `index.has_node` in `tags.findglobaltags`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 11:44:23 +0100] rev 43591
index: use `index.has_node` in `tags.findglobaltags` Differential Revision: https://phab.mercurial-scm.org/D7342
Fri, 08 Nov 2019 13:24:54 +0100 index: use `index.has_node` in `bundlerepo.bundlerevlog`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 13:24:54 +0100] rev 43590
index: use `index.has_node` in `bundlerepo.bundlerevlog` Differential Revision: https://phab.mercurial-scm.org/D7339
Fri, 08 Nov 2019 14:20:48 +0100 index: use `index.has_node` in `obsutil.foreground`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 14:20:48 +0100] rev 43589
index: use `index.has_node` in `obsutil.foreground` Differential Revision: https://phab.mercurial-scm.org/D7334
Fri, 08 Nov 2019 14:19:53 +0100 index: use `index.has_node` in `obsutil.exclusivemarkers`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 14:19:53 +0100] rev 43588
index: use `index.has_node` in `obsutil.exclusivemarkers` Differential Revision: https://phab.mercurial-scm.org/D7333
Fri, 08 Nov 2019 14:17:03 +0100 index: use `index.has_node` in `phases.filterunknown`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 14:17:03 +0100] rev 43587
index: use `index.has_node` in `phases.filterunknown` Differential Revision: https://phab.mercurial-scm.org/D7331
Fri, 08 Nov 2019 14:16:24 +0100 index: use `index.has_node` in `analyzeremotephases`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 14:16:24 +0100] rev 43586
index: use `index.has_node` in `analyzeremotephases` Differential Revision: https://phab.mercurial-scm.org/D7330
Fri, 08 Nov 2019 14:00:22 +0100 index: use `index.has_node` in `repo._rollback`
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 14:00:22 +0100] rev 43585
index: use `index.has_node` in `repo._rollback` Differential Revision: https://phab.mercurial-scm.org/D7329
Sun, 03 Nov 2019 00:49:55 +0100 index: use `index.has_node` in `revlog.addgroup`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 03 Nov 2019 00:49:55 +0100] rev 43584
index: use `index.has_node` in `revlog.addgroup` Differential Revision: https://phab.mercurial-scm.org/D7328
Sun, 03 Nov 2019 00:05:20 +0100 index: use `index.has_node` in `revlog.addrevision`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 03 Nov 2019 00:05:20 +0100] rev 43583
index: use `index.has_node` in `revlog.addrevision` Differential Revision: https://phab.mercurial-scm.org/D7323
Sun, 03 Nov 2019 00:01:09 +0100 index: add a `has_node` method (API)
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 03 Nov 2019 00:01:09 +0100] rev 43582
index: add a `has_node` method (API) The new `index.has_node(node)` is to be preferred over: `node in index.nodemap`. This get us closer to be able to remove the `nodemap` attribute of the index. Differential Revision: https://phab.mercurial-scm.org/D7322
Sat, 09 Nov 2019 05:54:22 +0100 revlog: deal with nodemap deletion within the index
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 09 Nov 2019 05:54:22 +0100] rev 43581
revlog: deal with nodemap deletion within the index Since the nodemap data now live in the index, it should be the index responsibility to ensure the data are up to date. The C version of the index is already dealing with such deletion. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7321
Fri, 08 Nov 2019 10:01:10 +0100 revlog: clean up the node of all revision stripped in the C code
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 08 Nov 2019 10:01:10 +0100] rev 43580
revlog: clean up the node of all revision stripped in the C code For some obscure reason, the loop cleaning up node was skipping the first element… I cannot see a reason for it. The overall code is running fine nevertheless because the node are also explicitly deleted from python. We want to delete this explicit deletion, so we need to fix that code first. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7320
Sun, 03 Nov 2019 00:15:12 +0100 revlog: move nodemap update within the index code
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 03 Nov 2019 00:15:12 +0100] rev 43579
revlog: move nodemap update within the index code Since the nodemap data now live in the index, it should be the index responsibility to ensure the data are up to date. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7319
Sat, 02 Nov 2019 15:46:47 +0100 revlog: deprecate the _nodecache attribute (API)
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Nov 2019 15:46:47 +0100] rev 43578
revlog: deprecate the _nodecache attribute (API) This attribute have been the same object for a long time. Code should directly access the nodemap in case of need. (Or the final API when this will be done). This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7318
Sat, 02 Nov 2019 15:25:31 +0100 revlog: access the nodemap through the index
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Nov 2019 15:25:31 +0100] rev 43577
revlog: access the nodemap through the index The `revlog.rev` method now access the nodemap through `self.index.nodemap`, instead of using the `_nodecache` attribute that we are trying to remove. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7317
Sat, 02 Nov 2019 15:21:28 +0100 revlog: return the nodemap as the nodecache
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Nov 2019 15:21:28 +0100] rev 43576
revlog: return the nodemap as the nodecache Ultimately, the nodecache is the nodemap. To stop having this disctinction, we start using the nodemap where the nodecache was used. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7316
Sat, 02 Nov 2019 14:45:57 +0100 revlog: clarify which version use the older API in perf
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 02 Nov 2019 14:45:57 +0100] rev 43575
revlog: clarify which version use the older API in perf This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7315
Wed, 06 Nov 2019 14:13:19 +0100 revlog: no longer return the nodemap after parsing
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Nov 2019 14:13:19 +0100] rev 43574
revlog: no longer return the nodemap after parsing Now that both pure and cext version have a `nodemap` attribute, we do not need to return the `nodemap` object after parsing. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7314
Wed, 06 Nov 2019 14:13:19 +0100 revlog: move the nodemap into the index object (for pure)
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Nov 2019 14:13:19 +0100] rev 43573
revlog: move the nodemap into the index object (for pure) This make the pure code closer to the C extension one. The ultimate goal is to merge the two into a single object and offer a unified API. This changeset focus on gathering the data on the same object. For now the code for `revlogoldindex` and `BaseIndexObject` index object are quite similar. However, there will be larger divergence later on, so I don't think is worth doing a base case. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. Differential Revision: https://phab.mercurial-scm.org/D7313
Wed, 06 Nov 2019 14:13:19 +0100 revlog: introduce an explicit NodeMap class for pure code
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Nov 2019 14:13:19 +0100] rev 43572
revlog: introduce an explicit NodeMap class for pure code This class make the "pure" nodemap raise the same exception than the C-extension one. This is a step toward unifying nodemap and index, the class is not meant to survive on the long run. This work is part of a refactoring to unify the revlog index and the nodemap. This unification prepare the use of a persistent nodemap. There is a new `isinstance` call, it will be cleaned up in coming changesets. Differential Revision: https://phab.mercurial-scm.org/D7312
(0) -30000 -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 +3000 tip