Thu, 23 Aug 2018 00:51:38 +0200 shelve: move createcmd next to _docreatecmd
Boris Feld <boris.feld@octobus.net> [Thu, 23 Aug 2018 00:51:38 +0200] rev 39369
shelve: move createcmd next to _docreatecmd It is simpler not to have to jump around the file all the time.
Sun, 05 Aug 2018 13:34:04 +0900 minirst: filter blocks by full path to section
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 13:34:04 +0900] rev 39368
minirst: filter blocks by full path to section
Sun, 05 Aug 2018 13:34:58 +0900 minirst: mark getsections() as an internal helper
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 13:34:58 +0900] rev 39367
minirst: mark getsections() as an internal helper
Sun, 05 Aug 2018 12:42:10 +0900 help: rewrite parsing of help topic to not drop section name with dots
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:42:10 +0900] rev 39366
help: rewrite parsing of help topic to not drop section name with dots A subtopic is no longer lowercased since it should be considered a part of a topic path, not a section filter.
Sun, 05 Aug 2018 12:48:02 +0900 test-help: add tests showing that sections can't be filtered by dotted name
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:48:02 +0900] rev 39365
test-help: add tests showing that sections can't be filtered by dotted name
Sat, 18 Aug 2018 08:41:36 +0200 revlogdeltas: move finddeltainfo filtering inside _candidategroups
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 08:41:36 +0200] rev 39364
revlogdeltas: move finddeltainfo filtering inside _candidategroups Now all "simple" filtering logic is gathered in one place. The `finddeltainfo` method is more straightforward and the `_candidate_groups` function knows more about filtering revisions before we compute a delta against them.
Wed, 29 Aug 2018 09:55:11 -0700 revlogdeltas: split candidate groups selection from the filtering logic
Boris Feld <boris.feld@octobus.net> [Wed, 29 Aug 2018 09:55:11 -0700] rev 39363
revlogdeltas: split candidate groups selection from the filtering logic The group iteration has two main components: * walking candidates, the logic that we are about to extend to build intermediate snapshots, * Making sure we test diffs against interesting bases. No duplicated tests, skipping empty revisions, etc. We split `_candidategroups` to separate the two components. This achieves two goals: * It will be simpler to update the walking logic for intermediate snapshots, * We can gather the filtering logic from `finddeltainfo` into `_candidategroups` to centralize it.
Sat, 18 Aug 2018 07:32:05 +0200 revlogdeltas: pass revision number to _candidatesgroups
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 07:32:05 +0200] rev 39362
revlogdeltas: pass revision number to _candidatesgroups The `_candidates_groups` logic works on revisions, so the nodes are currently just converted to revs at the top of the function. It seems cleaner to instead pass revision numbers to the function. Having this conversion out of the way will help for further cleanups.
Sat, 18 Aug 2018 07:27:34 +0200 revlogdeltas: extract _getcandidaterevs in a function
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 07:27:34 +0200] rev 39361
revlogdeltas: extract _getcandidaterevs in a function The logic barely uses the object it is attached to. This is an important function that we will clean up in the coming changesets. Moving it at the top level helps us with that cleanup.
Thu, 16 Aug 2018 04:38:57 +0200 revlogdeltas: always return a delta info object in finddeltainfo
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 04:38:57 +0200] rev 39360
revlogdeltas: always return a delta info object in finddeltainfo Previously, the method returned `None` when a full snapshot was needed. The caller had to determine how to produce one itself. In practice, building a `_deltainfo` object for a full snapshot is simple. So we build it at the `finddeltainfo` level and always return a `_deltainfo` object. The caller can now simply process the `_deltainfo` return in all cases.
Thu, 16 Aug 2018 04:20:34 +0200 revlogdeltas: move special cases around raw revisions in finddeltainfo
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 04:20:34 +0200] rev 39359
revlogdeltas: move special cases around raw revisions in finddeltainfo The method already contains logic for no-diff cases. Having everything in the same place is more consistent and unlocks other code improvements.
Wed, 29 Aug 2018 09:41:04 -0700 revlogdeltas: extra fulltext building in its own function
Boris Feld <boris.feld@octobus.net> [Wed, 29 Aug 2018 09:41:04 -0700] rev 39358
revlogdeltas: extra fulltext building in its own function The process of building a full text from a delta is complex enough to deserve isolation. The previous function mixed cache management and computation, we now have clearer boundaries and simpler functions/methods.
Thu, 16 Aug 2018 02:53:42 +0200 revlog: split functionality related to deltas computation in a new module
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 02:53:42 +0200] rev 39357
revlog: split functionality related to deltas computation in a new module The revlog module is getting big and this logic is getting more and more advanced. Moving it to `mercurial.revlogutils.deltas` split a lot off revlog.py and will help this logic to become less interleaved with revlog. The code is simply moved without modification (but for namespace changes). Refactoring and improvement will be made in later changesets.
Thu, 16 Aug 2018 02:08:13 +0200 revlog: split constants into a new `revlogutils.constants` module
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 02:08:13 +0200] rev 39356
revlog: split constants into a new `revlogutils.constants` module We want to split some logic out of the main revlog file (the delta computing logic). However, this logic needs access to multiple constants related to the revlog. So we move all revlog related constants into a new module that could be imported from multiple places. We don't copy the file (preserving blame history) because there are only a few moving lines. Also, copying the file would result in annoying merge conflicts with ongoing work from others contributors.
Thu, 12 Jul 2018 12:11:20 -0700 rebase: skip extinct revisions even if it has no successor in rebase set
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Jul 2018 12:11:20 -0700] rev 39355
rebase: skip extinct revisions even if it has no successor in rebase set Differential Revision: https://phab.mercurial-scm.org/D4408
Wed, 11 Jul 2018 12:26:44 -0700 tests: add test showing that rebase of extinct commit with successor fails
Martin von Zweigbergk <martinvonz@google.com> [Wed, 11 Jul 2018 12:26:44 -0700] rev 39354
tests: add test showing that rebase of extinct commit with successor fails As the test case shows, attempting to rebase a commit that has a successor that is not in the rebase set and not in the destination currently fails because it "will cause divergences". However, it doesn't seem like there's any harm in skipping the extinct commit. I suspect this case missed simply because extinct revisions are usually hidden. Differential Revision: https://phab.mercurial-scm.org/D4407
Mon, 27 Aug 2018 10:44:43 -0700 tests: add log output after stripping for context for next test
Martin von Zweigbergk <martinvonz@google.com> [Mon, 27 Aug 2018 10:44:43 -0700] rev 39353
tests: add log output after stripping for context for next test It's not obvious what the repo state will be after stripping some nodes and obsmarkers, so let's include the log output to make it easier to follow the test case that comes after. Differential Revision: https://phab.mercurial-scm.org/D4406
Tue, 28 Aug 2018 15:09:18 -0700 obsutil: make sure "addedmarkers" is not None in getobsoleted()
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Aug 2018 15:09:18 -0700] rev 39352
obsutil: make sure "addedmarkers" is not None in getobsoleted() Similar reasoning as in 52e6171ec822 (obsutil: make sure "addedrevs" is not None in getobsoleted(), 2018-08-25). Differential Revision: https://phab.mercurial-scm.org/D4411
Tue, 28 Aug 2018 13:29:47 -0700 revsetlang: fix position of '-' in spaceless 'a-b' expressions
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Aug 2018 13:29:47 -0700] rev 39351
revsetlang: fix position of '-' in spaceless 'a-b' expressions I don't know if there is an observable difference, but it seems like an obvious fix. Differential Revision: https://phab.mercurial-scm.org/D4410
Wed, 15 Aug 2018 23:05:23 +0000 tests: mark manifestfulltextcache as conditional on revlog store
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 23:05:23 +0000] rev 39350
tests: mark manifestfulltextcache as conditional on revlog store This file is currently specific to the revlog store. Other stores may not implement it. Mark it as such in test output. Differential Revision: https://phab.mercurial-scm.org/D4395
Wed, 15 Aug 2018 20:23:45 +0000 manifest: use fulltextcache instead of _fulltextcache
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 20:23:45 +0000] rev 39349
manifest: use fulltextcache instead of _fulltextcache fulltextcache is part of the documented interface and is aliased to _fulltextcache. Differential Revision: https://phab.mercurial-scm.org/D4394
Wed, 15 Aug 2018 19:58:06 +0000 manifest: rename manifestlog._revlog to _rootstore
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 19:58:06 +0000] rev 39348
manifest: rename manifestlog._revlog to _rootstore Because it may not be a revlog. Differential Revision: https://phab.mercurial-scm.org/D4393
Wed, 15 Aug 2018 19:53:02 +0000 manifest: use public API for obtaining storage object
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 19:53:02 +0000] rev 39347
manifest: use public API for obtaining storage object We should not be accessing private attributes on the manifestlog, since its behavior is governed by an interface. Differential Revision: https://phab.mercurial-scm.org/D4392
Mon, 27 Aug 2018 08:58:25 -0700 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 08:58:25 -0700] rev 39346
perf: add function for obtaining manifest revision This will use the modern API if available or fall back to the legacy direct revlog access case. Without this, the perf command won't work on all code bases. Differential Revision: https://phab.mercurial-scm.org/D4391
Wed, 15 Aug 2018 19:45:39 +0000 perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 19:45:39 +0000] rev 39345
perf: use storage API for resolving manifest node lookup() isn't part of the storage API. And this code shouldn't be accessing manifestlog._revlog directly for the modern code base. So let's port it to the modern API. Note that the previous code was busted for cases where we needed to call lookup() because lookup() isn't exposed by manifestrevlog any more. This change is strictly BC breaking because we no longer support resolving partial nodes. But it is a perf* command and I don't think we should flag the change as such. Differential Revision: https://phab.mercurial-scm.org/D4390
Mon, 27 Aug 2018 08:52:33 -0700 manifest: change terminology for storage in context classes
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 08:52:33 -0700] rev 39344
manifest: change terminology for storage in context classes Storage may not be backed by revlogs. So it is wrong to refer to storage as "revlog" or use abbreviations like "rl." This commit replaces revlog terminology in manifest context classes and starts referring to things as "store" or "storage." Differential Revision: https://phab.mercurial-scm.org/D4389
Mon, 27 Aug 2018 08:55:24 -0700 manifest: don't go through revlog to access node symbols
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 08:55:24 -0700] rev 39343
manifest: don't go through revlog to access node symbols The revlog module re-exports some node.* symbols courtesy of importing them. Let's access the node.* symbols via our local import. Differential Revision: https://phab.mercurial-scm.org/D4388
Wed, 15 Aug 2018 16:50:44 +0000 manifest: make tree a public attribute
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 16:50:44 +0000] rev 39342
manifest: make tree a public attribute changegroup generation accesses this attribute. We should make it public and expose it on the interface. Differential Revision: https://phab.mercurial-scm.org/D4387
Mon, 27 Aug 2018 10:15:15 -0700 manifest: proxy to revlog instance instead of inheriting
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 10:15:15 -0700] rev 39341
manifest: proxy to revlog instance instead of inheriting Previously, manifestrevlog inherited revlog.revlog and therefore exposed all its APIs. This inevitably resulted in consumers calling low-level revlog APIs. As part of abstracting storage, we want to formalize the interface for manifest storage. The revlog API is much too large to define as the interface. Like we did for filelog, this commit divorces the manifest class from revlog so that we can standardize on a smaller API surface. The way I went about this commit was I broke the inheritance, ran tests, and added proxies until all tests passed. Like filelog, there are a handful of attributes that don't belong on the interface. And like filelog, we'll tease these out in the future. As part of this, we formalize an interface for manifest storage and add checks that manifestrevlog conforms to the interface. Adding proxies will introduce some overhead due to extra attribute lookups and function calls. On the mozilla-unified repository: $ hg verify before: real 627.220 secs (user 525.870+0.000 sys 18.800+0.000) after: real 628.930 secs (user 532.050+0.000 sys 18.320+0.000) $ hg serve (for a clone) before: user 223.580+0.000 sys 14.270+0.000 after: user 227.720+0.000 sys 13.920+0.000 $ hg clone before: user 506.390+0.000 sys 29.720+0.000 after: user 513.080+0.000 sys 28.280+0.000 There appears to be some overhead here. But it appears to be 1-2%. I think that is an appropriate price to pay for storage abstraction, which will eventually let us have much nicer things. If the overhead is noticed in other operations (whose CPU time isn't likely dwarfed by fulltext resolution) or if we want to cut down on the overhead, we could dynamically build up a type whose methods are effectively aliased to a revlog instance's. I'm inclined to punt on that problem for now. We may have to do it for the changelog. At which point it could be implemented in a generic way and ported to filelog and manifestrevlog easily enough I would think. .. api:: manifest.manifestrevlog no longer inherits from revlog The manifestrevlog class now wraps a revlog instance instead of inheriting from revlog. Various attributes and methods on instances are no longer available. Differential Revision: https://phab.mercurial-scm.org/D4386
Sun, 26 Aug 2018 13:09:35 -0400 pager: do not enable when TERM=dumb
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Sun, 26 Aug 2018 13:09:35 -0400] rev 39340
pager: do not enable when TERM=dumb Before this, running hg in emacs' M-x shell started `less`, which would complain about the terminal not being fully functional. Differential Revision: https://phab.mercurial-scm.org/D4376
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip