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 39314
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 39313
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
Wed, 22 Aug 2018 20:52:36 +0900 localrepo: do not cache auditor/nofsauditor which would make reference cycle
Yuya Nishihara <yuya@tcha.org> [Wed, 22 Aug 2018 20:52:36 +0900] rev 39312
localrepo: do not cache auditor/nofsauditor which would make reference cycle Before, self.auditor and self.nofsauditor held self through self._checknested, and the following code couldn't free a repo by ref-counting. def main(): repo = localrepo.localrepository(uimod.ui(), '../testrepos/hello') main() With this change, the cache of the nofsauditor is limited to a single match session. I think that's okay as the nofsauditor doesn't do any filesystem access. Alternatively, maybe we can remove the callback from nofsauditor since it isn't used unless realfs=True, but I have no idea whether it is a bug or not.
Sun, 05 Aug 2018 13:13:06 +0900 minirst: remove unused function decorateblocks()
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 13:13:06 +0900] rev 39311
minirst: remove unused function decorateblocks() It was added at ee6988aea74e "minirst: add decorateblocks search helper", but it's been unused since then.
Sun, 05 Aug 2018 12:11:19 +0900 minirst: make format() simply return a formatted text
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:11:19 +0900] rev 39310
minirst: make format() simply return a formatted text It's a source of bugs to change the type of the return value conditionally.
Sun, 05 Aug 2018 12:20:43 +0900 help: reorder section filtering flow to not format help text twice
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:20:43 +0900] rev 39309
help: reorder section filtering flow to not format help text twice
Sun, 05 Aug 2018 12:06:07 +0900 help: inline minirst.format()
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:06:07 +0900] rev 39308
help: inline minirst.format() I'm going to make minirst.format() always returns a formatted text, not text | (text, pruned).
Sun, 05 Aug 2018 11:43:05 +0900 minirst: extract function that formats parsed blocks as plain text
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 11:43:05 +0900] rev 39307
minirst: extract function that formats parsed blocks as plain text
Sun, 05 Aug 2018 11:39:52 +0900 minirst: unindent "if True" block in filtersections()
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 11:39:52 +0900] rev 39306
minirst: unindent "if True" block in filtersections()
Sun, 05 Aug 2018 11:38:56 +0900 minirst: extract function that filters parsed blocks by section name
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 11:38:56 +0900] rev 39305
minirst: extract function that filters parsed blocks by section name I'll move some bits from minirst.format() to caller to make the function interface simpler.
Sat, 25 Aug 2018 20:19:27 +0900 bookmarks: adjust exception type so present(bookmark(.)) works as expected
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 20:19:27 +0900] rev 39304
bookmarks: adjust exception type so present(bookmark(.)) works as expected
Sat, 25 Aug 2018 20:16:28 +0900 revset: expand bookmark(.) to the active bookmark
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 20:16:28 +0900] rev 39303
revset: expand bookmark(.) to the active bookmark We do that in several places. I'm not pretty sure if "literal:." should be expanded or not, so it's disabled for now.
Sat, 25 Aug 2018 15:33:15 +0900 pycompat: remove membershiprange which is no longer used
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 15:33:15 +0900] rev 39302
pycompat: remove membershiprange which is no longer used Backed out changeset 45e05d39d9ce
Sat, 25 Aug 2018 15:28:48 +0900 transaction: remember original len(repo) instead of tracking added revs (API)
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 15:28:48 +0900] rev 39301
transaction: remember original len(repo) instead of tracking added revs (API) It's silly to keep updating xrange(len(changelog), len(changelog) + 1) for each added revision. Instead, let's simply remember the first revision to be added. The test output slightly changed as the branch cache is also warmed up by stream clone, which seems more consistent. .. api:: ``tr.changes['revs']`` is replaced by ``tr.changes['origrepolen']`` which is the first revision number to be added.
Sat, 25 Aug 2018 15:19:43 +0900 obsutil: make sure "addedrevs" is not None in getobsoleted()
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 15:19:43 +0900] rev 39300
obsutil: make sure "addedrevs" is not None in getobsoleted() If it were None, "rev in addedrevs" would crash. So tr.changes["revs"] should be a mandatory parameter here.
Tue, 29 May 2018 18:13:19 +0200 phases: enforce internal phase support
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 18:13:19 +0200] rev 39299
phases: enforce internal phase support We should not use the internal phase for repository without the requirement. Otherwise, older clients could have a look at the repository and see the internal changesets. For now, we introduce a low-level Programming error, more UI friendly error will be introduced later.
(0) -30000 -10000 -3000 -1000 -300 -100 -16 +16 +100 +300 +1000 +3000 +10000 tip