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
Mon, 20 Aug 2018 15:57:03 -0700 index: fix a comment about overflow-checking
Martin von Zweigbergk <martinvonz@google.com> [Mon, 20 Aug 2018 15:57:03 -0700] rev 39225
index: fix a comment about overflow-checking There's no "argument-checking" done in this method. This was a bad copy paste. Differential Revision: https://phab.mercurial-scm.org/D4339
Mon, 20 Aug 2018 16:19:36 -0400 tests: demonstrate a problem with renames on the p2 side of a conversion
Matt Harbison <matt_harbison@yahoo.com> [Mon, 20 Aug 2018 16:19:36 -0400] rev 39224
tests: demonstrate a problem with renames on the p2 side of a conversion I think this is related to the octopus merge being sloppy, and that's having a cascading affect on the fixup merge. If this change is made on p1 (specifically with the 'Added parent file' commit), the failure doesn't occur. The file modification with the rename doesn't seem to be necessary, but it's what's happening in a production repo where I first noticed, so I left it. This is an example of the manifest divergence I'd been seeing, which wasn't fixed by Yuya's recent changes. This is separate from the changelog divergence I was also seeing[1]. Probably nobody cares about bzr anymore, but this will also affect git, since the octopus fixup code is in the hg sink. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2018-August/120473.html
Fri, 13 Jul 2018 15:03:15 -0400 tests: add a test to show the added/modified/removed files in a bzr convert
Matt Harbison <matt_harbison@yahoo.com> [Fri, 13 Jul 2018 15:03:15 -0400] rev 39223
tests: add a test to show the added/modified/removed files in a bzr convert
Fri, 13 Jul 2018 12:33:06 -0400 tests: show added/modified/removed files when logging repos converted from bzr
Matt Harbison <matt_harbison@yahoo.com> [Fri, 13 Jul 2018 12:33:06 -0400] rev 39222
tests: show added/modified/removed files when logging repos converted from bzr There's a bug related to incorrect status values that can be triggered by an octopus fixup merge. Seeing what the current status is (instead of just the aggregate list) will hopefully help track this down.
Mon, 20 Aug 2018 22:04:22 -0400 tests: drop an unnecessary redirect to /dev/null
Matt Harbison <matt_harbison@yahoo.com> [Mon, 20 Aug 2018 22:04:22 -0400] rev 39221
tests: drop an unnecessary redirect to /dev/null This eliminates the need to conditionalize the color output, because NUL on Windows is a tty. Credit to Yuya for recognizing this.
Mon, 20 Aug 2018 11:29:43 -0400 py3: whitelist another test caught by the ratchet
Augie Fackler <augie@google.com> [Mon, 20 Aug 2018 11:29:43 -0400] rev 39220
py3: whitelist another test caught by the ratchet Differential Revision: https://phab.mercurial-scm.org/D4335
Fri, 03 Aug 2018 23:03:13 -0700 index: move raise_revlog_error() further up
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 23:03:13 -0700] rev 39219
index: move raise_revlog_error() further up I will add another caller below it. Differential Revision: https://phab.mercurial-scm.org/D4119
Fri, 06 Jul 2018 07:53:23 -0700 index: make node tree a Python object
Martin von Zweigbergk <martinvonz@google.com> [Fri, 06 Jul 2018 07:53:23 -0700] rev 39218
index: make node tree a Python object Differential Revision: https://phab.mercurial-scm.org/D4118
Sun, 19 Aug 2018 22:30:32 -0700 index: rename _fix_index() since it no longer fixes the index
Martin von Zweigbergk <martinvonz@google.com> [Sun, 19 Aug 2018 22:30:32 -0700] rev 39217
index: rename _fix_index() since it no longer fixes the index Since c0d411ea6639 (index: drop support for negative indexes into the index, 2018-07-20), it always returns the input (unless it raises). Differential Revision: https://phab.mercurial-scm.org/D4334
Sat, 18 Aug 2018 00:01:31 -0700 index: don't include nullid in boundary check in pure code
Martin von Zweigbergk <martinvonz@google.com> [Sat, 18 Aug 2018 00:01:31 -0700] rev 39216
index: don't include nullid in boundary check in pure code Yet another change that should probably have been part of a3dacabd476b (index: don't allow index[len(index)] to mean nullid, 2018-07-20). Differential Revision: https://phab.mercurial-scm.org/D4333
Mon, 20 Aug 2018 16:13:17 -0400 fastannotate: address pyflakes concerns
Augie Fackler <augie@google.com> [Mon, 20 Aug 2018 16:13:17 -0400] rev 39215
fastannotate: address pyflakes concerns Two unused imports, one unused local variable assignment. Differential Revision: https://phab.mercurial-scm.org/D4337
Thu, 09 Aug 2018 15:08:32 -0400 fastannotate: move some global state mutation to extsetup()
Augie Fackler <augie@google.com> [Thu, 09 Aug 2018 15:08:32 -0400] rev 39214
fastannotate: move some global state mutation to extsetup() Differential Revision: https://phab.mercurial-scm.org/D4202
Thu, 09 Aug 2018 15:05:43 -0400 fastannotate: rip out specialized support for remotefilelog
Augie Fackler <augie@google.com> [Thu, 09 Aug 2018 15:05:43 -0400] rev 39213
fastannotate: rip out specialized support for remotefilelog remotefilelog can choose to collaborate with fastannotate for now if it needs to, and in the future when we make good on our longstanding desire to move remotefilelog-like features in-house we'll make sure things are well-supported via a reasonable interface. Differential Revision: https://phab.mercurial-scm.org/D4201
Thu, 09 Aug 2018 14:56:29 -0400 fastannotate: record some TODO items from indygreg's review
Augie Fackler <augie@google.com> [Thu, 09 Aug 2018 14:56:29 -0400] rev 39212
fastannotate: record some TODO items from indygreg's review Some of these I'll address more or less right away, but some will take a while for us to resolve. Differential Revision: https://phab.mercurial-scm.org/D4200
Wed, 01 Aug 2018 11:10:41 -0400 fastannotate: write out files from server in a predictable order
Augie Fackler <augie@google.com> [Wed, 01 Aug 2018 11:10:41 -0400] rev 39211
fastannotate: write out files from server in a predictable order This is mostly for test output stabilization, but it *might* be slightly better with a ton of annotate caches because we'll write to one directory at a time rather than bouncing around randomly. Differential Revision: https://phab.mercurial-scm.org/D3995
Mon, 30 Jul 2018 22:50:00 -0400 fastannotate: initial import from Facebook's hg-experimental
Augie Fackler <augie@google.com> [Mon, 30 Jul 2018 22:50:00 -0400] rev 39210
fastannotate: initial import from Facebook's hg-experimental I made as few changes as I could to get the tests to pass, but this was a bit involved due to some churn in the blame code since someone last gave fastannotate any TLC. There's still follow-up work here to rip out support for old versions of hg and to integrate the protocol with modern standards. Some performance numbers (all on my 2016 MacBook Pro with a 2.6Ghz i7): Mercurial mercurial/manifest.py traditional blame time: real 1.050 secs (user 0.990+0.000 sys 0.060+0.000) build cache time: real 5.900 secs (user 5.720+0.000 sys 0.110+0.000) fastannotate time: real 0.120 secs (user 0.100+0.000 sys 0.020+0.000) Mercurial mercurial/localrepo.py traditional blame time: real 3.330 secs (user 3.220+0.000 sys 0.070+0.000) build cache time: real 30.610 secs (user 30.190+0.000 sys 0.230+0.000) fastannotate time: real 0.180 secs (user 0.160+0.000 sys 0.020+0.000) mozilla-central dom/ipc/ContentParent.cpp traditional blame time: real 7.640 secs (user 7.210+0.000 sys 0.380+0.000) build cache time: real 98.650 secs (user 97.000+0.000 sys 0.950+0.000) fastannotate time: real 1.580 secs (user 1.340+0.000 sys 0.240+0.000) mozilla-central dom/base/nsDocument.cpp traditional blame time: real 17.110 secs (user 16.490+0.000 sys 0.500+0.000) build cache time: real 399.750 secs (user 394.520+0.000 sys 2.610+0.000) fastannotate time: real 1.780 secs (user 1.530+0.000 sys 0.240+0.000) So building the cache is expensive (but might be faster with xdiff enabled), but the blame results are *way* faster. Differential Revision: https://phab.mercurial-scm.org/D3994
Thu, 16 Aug 2018 05:50:49 +0200 util: improve handling of truncated compressed streams
Joerg Sonnenberger <joerg@bec.de> [Thu, 16 Aug 2018 05:50:49 +0200] rev 39209
util: improve handling of truncated compressed streams If the compressed stream is over as marked by the reader providing nothing new and the compression engine is not providing data, bail out. This can happen in practise when the server misbehaves and would result in an infinite loop otherwise. Differential Revision: https://phab.mercurial-scm.org/D4297
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -24 +24 +50 +100 +300 +1000 +3000 +10000 tip