Tue, 21 Aug 2018 17:13:35 -0400 util: make timedcm context manager also emit trace events
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 17:13:35 -0400] rev 39257
util: make timedcm context manager also emit trace events Differential Revision: https://phab.mercurial-scm.org/D4348
Tue, 21 Aug 2018 15:27:30 -0400 demandimport: instrument python 2 code with trace events
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:27:30 -0400] rev 39256
demandimport: instrument python 2 code with trace events This causes the evaluation of an import in Python 3 to emit some trace data. There's some interesting wrinkles in here, like the fact that before we even hit dispatch we've demand-imported `sys` several times, despite the fact that `sys` was already fully loaded as one of the first few statements in the `hg` script. I don't think that's actually costing us a ton of performance, but it's probably something we should investigate fixing some day. Differential Revision: https://phab.mercurial-scm.org/D4347
Tue, 21 Aug 2018 15:25:07 -0400 dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:25:07 -0400] rev 39255
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events Differential Revision: https://phab.mercurial-scm.org/D4345
Tue, 21 Aug 2018 15:24:20 -0400 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:24:20 -0400] rev 39254
tracing: new module to make tracing events in hg easier This lives in hgdemandimport because I want to instrument a bunch of low-level stuff including the bare `hg` script and demandimport, so it can't live at a higher layer. Differential Revision: https://phab.mercurial-scm.org/D4344
Tue, 21 Aug 2018 15:23:01 -0400 tests: add support for emitting trace events to run-tests
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:23:01 -0400] rev 39253
tests: add support for emitting trace events to run-tests Right now this is pretty basic, but it's a start. Differential Revision: https://phab.mercurial-scm.org/D4343
Tue, 21 Aug 2018 15:01:09 -0400 contrib: new script to read events from a named pipe and emit catapult traces
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:01:09 -0400] rev 39252
contrib: new script to read events from a named pipe and emit catapult traces I'm starting to get more serious about getting some insight into where we're spending our time, both in hg itself but also in the test suite. As a first pass, I'm going to try and produce catapult traces[0] that can be viewed with Chrome's `about:tracing` tool. 0: https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit#heading=h.nso4gcezn7n1 Differential Revision: https://phab.mercurial-scm.org/D4342
Tue, 21 Aug 2018 22:49:08 -0400 fastannotate: pconvert paths from the server for Windows
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Aug 2018 22:49:08 -0400] rev 39251
fastannotate: pconvert paths from the server for Windows I'm guessing that the right thing to do here is to convert the paths on the server, but I know this is a WIP, and I don't know where that needs to happen. I'm just trying to eliminate the malicious path warnings in the tests.
Tue, 21 Aug 2018 22:34:32 -0400 test-fastannotate: close fd before unlinking to keep Windows happy
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Aug 2018 22:34:32 -0400] rev 39250
test-fastannotate: close fd before unlinking to keep Windows happy
Tue, 21 Aug 2018 21:43:44 -0400 test-fastannotate: fix trivial output differences on Windows
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Aug 2018 21:43:44 -0400] rev 39249
test-fastannotate: fix trivial output differences on Windows
Tue, 21 Aug 2018 21:29:10 -0400 fastannotate: make the default value for `fastannotate.useflock` dynamic
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Aug 2018 21:29:10 -0400] rev 39248
fastannotate: make the default value for `fastannotate.useflock` dynamic fcntl.flock isn't available on Windows.
Wed, 08 Aug 2018 13:56:53 +0300 narrow: add a --narrowspec flag to clone command
Pulkit Goyal <pulkit@yandex-team.ru> [Wed, 08 Aug 2018 13:56:53 +0300] rev 39247
narrow: add a --narrowspec flag to clone command This patch adds a --narrowspec flag to `hg clone` command in narrow extension which can be used to read a file and parse narrowspecs from it and use it while cloning a repository. The --narrowspec flag assumes that the user wanted to narrow the clone. Tests are added both for ellipsis and non-ellipsis mode. Differential Revision: https://phab.mercurial-scm.org/D4156
Fri, 10 Aug 2018 16:01:19 -0700 manifest: use rev() instead of nodemap.__contains__
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 16:01:19 -0700] rev 39246
manifest: use rev() instead of nodemap.__contains__ nodemap is an implementation detail of revlogs and isn't appropriate to expose on the manifest storage API. While revlogs don't have a __contains__, they do have lookup() for resolving a value to a node. And this calls rev(), whose API is documented to raise LookupError if a node doesn't exist. And the parameters to LookupError are identical to what was being raised here. So this change should be backwards compatible. Differential Revision: https://phab.mercurial-scm.org/D4279
Fri, 10 Aug 2018 15:06:41 -0700 manifest: rename manifestlog._treeinmem to ._treemanifests
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 15:06:41 -0700] rev 39245
manifest: rename manifestlog._treeinmem to ._treemanifests Not sure what "inmem" was supposed to indicate. This object is an interface to manifest data on disk as well as "in memory" (assuming that's what "inmem" means). Differential Revision: https://phab.mercurial-scm.org/D4278
Fri, 10 Aug 2018 15:01:06 -0700 manifest: add getstorage() to manifestlog and use it globally
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 15:01:06 -0700] rev 39244
manifest: add getstorage() to manifestlog and use it globally It is a common pattern to obtain a directory manifest storage instance (a manifestrevlog) by going through manifestlog._revlog.dirlog(). Why access to storage and caching of other manifests is done through manifestrevlog instead of manifestlog, I don't know. This commit establishes a getstorage(tree) API on manifestlog and imanifestlog that provides a public API for accessing manifest storage. All consumers previously using private attributes have been updated to use this new method. .. api:: manifestlog now has a getstorage(tree) method It should be used for obtaining an object representing the manifest's storage implementation. Accessing manifestlog._revlog should be avoided. Differential Revision: https://phab.mercurial-scm.org/D4277
Fri, 10 Aug 2018 14:44:50 -0700 manifest: rename dir argument and attribute to tree
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 14:44:50 -0700] rev 39243
manifest: rename dir argument and attribute to tree dir shadows a built-in. We use it throughout the manifest code, which is unfortunate. This commit updates just manifestrevlog to be more well behaved. .. api:: renamed manifest.manifestrevlog.__init__ dir argument to tree Differential Revision: https://phab.mercurial-scm.org/D4276
Fri, 10 Aug 2018 14:40:02 -0700 manifest: set appropriate cache entry when clearing _dirlogcache()
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 14:40:02 -0700] rev 39242
manifest: set appropriate cache entry when clearing _dirlogcache() manifestrevlog applies to any manifest, not just the root manifest. Resetting the cache and populating its root entry with self is not correct when the instance does not refer to the root manifest. This has no test fallout. So I'm guessing we only ever call clearcaches() on the root manifest. Or we have no test coverage that are impacted by a bad cache on a non-root manifestrevlog. Differential Revision: https://phab.mercurial-scm.org/D4275
Fri, 10 Aug 2018 14:20:47 -0700 manifest: remove addgroup() from manifestlog and imanifestlog
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 14:20:47 -0700] rev 39241
manifest: remove addgroup() from manifestlog and imanifestlog addgroup() is part of the storage interface for manifests. Unfortunately, we don't yet have a formal storage interface for manifests. (One will be established in subsequent commits.) One thing is for sure, addgroup() doesn't belong on imanifestlog - at least not unless we extend that interface to encompass storage. For now, let's access addgroup() on the _revlog attribute, just like we do for tree manifests. Even though this violates visibility, it is consistent. Differential Revision: https://phab.mercurial-scm.org/D4274
Fri, 10 Aug 2018 13:59:27 -0700 repository: clarify role of imanifestlog
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 13:59:27 -0700] rev 39240
repository: clarify role of imanifestlog Looking at the implementation of manifest.manifestlog, it is highly tailored towards servicing the root manifest. So clarify that in the interface docstring. Differential Revision: https://phab.mercurial-scm.org/D4273
Fri, 10 Aug 2018 13:43:26 -0700 changegroup: change topics during generation
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 13:43:26 -0700] rev 39239
changegroup: change topics during generation Changegroup generation and consumption currently uses different sets of topics. Generation uses "bundling" and consumption uses the name of the thing being consumed. This commit makes the topic and unit names consistent on both ends. The reason I chose to change the generation side is because when "bundling" is used for 3 different stages, it is unclear which stage of changegroup generation we're in. By making the topics "changesets," "manifests," and "files," one can get a better feel for how far along in the bundling process we are. Differential Revision: https://phab.mercurial-scm.org/D4272
Fri, 10 Aug 2018 12:44:15 -0700 changegroup: rename mfs to manifests
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 12:44:15 -0700] rev 39238
changegroup: rename mfs to manifests In the name of readability. Differential Revision: https://phab.mercurial-scm.org/D4271
Fri, 10 Aug 2018 12:42:00 -0700 changegroup: clean up changelog callback
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 12:42:00 -0700] rev 39237
changegroup: clean up changelog callback changelog.read() calls changelog.changelogrevion() then turns it into a tuple. Let's call changelogrevision() directly and used named attributes to make code easier to read. While we're here, also change some variable names to make code easier to read. Differential Revision: https://phab.mercurial-scm.org/D4270
Fri, 10 Aug 2018 12:08:45 -0700 changegroup: call rev() on manifestlog instance
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 12:08:45 -0700] rev 39236
changegroup: call rev() on manifestlog instance rev() is part of the imanifestlog interface and should be used instead of using the private revlog instance, which is an implementation detail. Differential Revision: https://phab.mercurial-scm.org/D4269
Fri, 10 Aug 2018 11:00:06 -0700 manifest: rename dir to tree to avoid shadowing built-in
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 10 Aug 2018 11:00:06 -0700] rev 39235
manifest: rename dir to tree to avoid shadowing built-in And update the argument name in the imanifestlog interface. Differential Revision: https://phab.mercurial-scm.org/D4268
Thu, 09 Aug 2018 19:27:54 -0700 repository: remove candelta() from ifileindex
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 09 Aug 2018 19:27:54 -0700] rev 39234
repository: remove candelta() from ifileindex candelta() was previously called by changegroup code. With delta generation moved to the storage API, there are no more external consumers of this method and it can be removed from the storage interface. Differential Revision: https://phab.mercurial-scm.org/D4236
Thu, 09 Aug 2018 19:30:36 -0700 changegroup: rename dir to tree to avoid shadowing a built-in
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 09 Aug 2018 19:30:36 -0700] rev 39233
changegroup: rename dir to tree to avoid shadowing a built-in Differential Revision: https://phab.mercurial-scm.org/D4235
Thu, 09 Aug 2018 16:11:24 -0700 repository: remove storedeltachains from ifilestorage
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 09 Aug 2018 16:11:24 -0700] rev 39232
repository: remove storedeltachains from ifilestorage The ifilestorage interface was bootstrapped from requirements of callers outside the storage implementation (revlogs). I believe we even made some members public so they could be part of the interface! Historically, the changegroup code was a gross offender when it came to accessing low-level storage primitives. There are a handful of members on the ifilestorage interface that are/were used only for changegroup code. With the recent refactor of changegroup code and the establishment of a formal API on the storage interface for producing revision deltas, the changegroup code is no longer accessing these low-level primitives related to delta generation directly. Instead, things are abstracted away in the storage implementation. This means we can remove elements from the storage interface that are no longer needed. We start with "storedeltachains." We remove it from the interface. Then we make it a private attribute and update all references. .. api:: storedeltachains has been dropped from ifilestorage interface .. api:: storedeltachains on revlog classes is now _storedeltachains Differential Revision: https://phab.mercurial-scm.org/D4227
Thu, 09 Aug 2018 16:02:14 -0700 repository: establish API for emitting revision deltas
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 09 Aug 2018 16:02:14 -0700] rev 39231
repository: establish API for emitting revision deltas With our revision delta and revision delta request interfaces defined, it is now time to define a method on storage interfaces for using them. So far, the only storage interface that is well-defined and used is file storage. So that is the only interface we need to add a method on. We define an ``emitrevisiondeltas()`` method that takes an iterable of ``irevisiondeltarequest``s and turns them into ``irevisiondelta`` instances. changegroup._handlerevisiondeltarequest() and the looping logic from changegroup.deltagroup() has effectively been moved to revlog.emitrevisiondeltas(). Our filelog wrapper class proxies its emitrevisiondeltas() to the internal revlog instance. The simple store test extension used to verify sanity of storage abstractions has also implemented emitrevisiondeltas() for file storage and the test harness when run with this extension doesn't seem to exhibit any regressions. Rather than create a shared type to represent revision deltas, each storage backend has its own type and the class name identifies where the revision delta was derived from. Differential Revision: https://phab.mercurial-scm.org/D4226
Thu, 09 Aug 2018 15:40:14 -0700 repository: formalize interfaces for revision deltas and requests
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 09 Aug 2018 15:40:14 -0700] rev 39230
repository: formalize interfaces for revision deltas and requests Now that we've sufficiently abstracted how revision deltas are produced in changegroup code, we can now start the process of formalizing that as part of the interfaces defined in the repository module. This commit essentially converts the revisiondelta and revisiondeltarequest classes into well-defined interfaces. This is not strictly necessary. But I want all types formalized by the storage interface to have interfaces. This makes it much easier to test for interface conformance and for implementing new storage backends. Because the interface is documented, comments and docstrings from changegroup.py have been dropped. Differential Revision: https://phab.mercurial-scm.org/D4225
Thu, 09 Aug 2018 14:31:25 -0700 changegroup: move node sorting into deltagroup()
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 09 Aug 2018 14:31:25 -0700] rev 39229
changegroup: move node sorting into deltagroup() The 3 callers of deltagroup() all sort nodes and convert to integer revs immediately before calling deltagroup(). Stepping back a bit, aside from the constraints on node ordering that always apply (namely that a node must follow its ancestor), it makes sense for sorting to be an implementation detail of the store. Moving the sorting into deltagroup() will open the door for moving sorting into a storage API. The test for the changelog in deltagroup() to impact the sorting method is a bit hacky. I suspect this will be resolved once we establish a formal interface for delta group generation and port changelog to it. Differential Revision: https://phab.mercurial-scm.org/D4224
Tue, 21 Aug 2018 21:05:15 -0400 cext: fix truncation warnings in revlog on Windows
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Aug 2018 21:05:15 -0400] rev 39228
cext: fix truncation warnings in revlog on Windows
Tue, 21 Aug 2018 20:57:58 -0400 cext: fix revlog compiler error on Windows
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Aug 2018 20:57:58 -0400] rev 39227
cext: fix revlog compiler error on Windows
Sun, 05 Aug 2018 00:42:07 -0700 shortest: use nodetree for finding shortest node within revset
Martin von Zweigbergk <martinvonz@google.com> [Sun, 05 Aug 2018 00:42:07 -0700] rev 39226
shortest: use nodetree for finding shortest node within revset This speeds up `hg log -T '{shortest(node,1)}\n'` in my repo from 12s to 4.5s. That's very close to the 4.1s it takes without the disambiguation revset configured. My repo has 69.5k revisions, of which 550 were in the configured revset ("not public()"). Differential Revision: https://phab.mercurial-scm.org/D4120
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -32 +32 +50 +100 +300 +1000 +3000 +10000 tip