Wed, 06 Dec 2017 15:46:41 +0100 phases: drop the list with phase of each rev, always comput phase sets
Joerg Sonnenberger <joerg@bec.de> [Wed, 06 Dec 2017 15:46:41 +0100] rev 35309
phases: drop the list with phase of each rev, always comput phase sets Change the C implementation of phasecache.loadphaserevs to provide only the sets for draft and secret phase as well as the number of revisions seen. Change the pure Python implementation of the same functino to compute the sets instead of the list of phases for each revision. Change phasecache.phase to check the phase sets and assume public if the revision is in neither draft nor secret set. This is computationally slightly more expensive. Change phasecache.getrevset for public() based queries to compute the set of non-matching revisions and return the result as filtered fullreposet. A shortcut is taken when no draft or secret revision exists. Bump the module version for the changed interface contract. Overall, this saves around 16 Bytes per revision whenever the phasecache is used, for the test case in issue5691 it is around 3MB. getrevset() for a large repository is around 13% slower here, that seems an acceptable trade off. Performance impact for phase() should be similar. Differential Revision: https://phab.mercurial-scm.org/D1606
Fri, 08 Dec 2017 01:23:34 +0100 transaction: build changes['revs'] as range instead of a set
Joerg Sonnenberger <joerg@bec.de> [Fri, 08 Dec 2017 01:23:34 +0100] rev 35308
transaction: build changes['revs'] as range instead of a set Revisions are added consecutively, so a range can easily represent them in the changes list. This saves around 45 Bytes / revision on 64bit platforms and reduces the memory footprint of issue5691 by 15MB. Don't copy changes['revs'] in getobsoleted. Ranges have a very efficient contains implementation already. Differential Revision: https://phab.mercurial-scm.org/D1615
Wed, 06 Dec 2017 16:43:07 -0500 ui: add diff.showfunc to tweakdefaults
Augie Fackler <augie@google.com> [Wed, 06 Dec 2017 16:43:07 -0500] rev 35307
ui: add diff.showfunc to tweakdefaults This is a little risky, as I think we can have some encoding weirdness crop up. showfunc also isn't the most robust feature, but it's still often useful context... Differential Revision: https://phab.mercurial-scm.org/D1610
Wed, 06 Dec 2017 16:42:24 -0500 ui: add curses interface to tweakdefaults
Augie Fackler <augie@google.com> [Wed, 06 Dec 2017 16:42:24 -0500] rev 35306
ui: add curses interface to tweakdefaults This was part of the original proposal, and while *I* don't like the curses interface, most users anecdotally seem to greatly prefer it to plain text interfaces. Differential Revision: https://phab.mercurial-scm.org/D1609
Wed, 06 Dec 2017 23:33:01 +0100 push: restrict common discovery to the pushed set
Boris Feld <boris.feld@octobus.net> [Wed, 06 Dec 2017 23:33:01 +0100] rev 35305
push: restrict common discovery to the pushed set This changeset make use of the ability of the set discovery to only search common changeset for a subset of the repository. Restricting that search to the pushed set avoid potential waste of time finding out the status of many unrelated related revision. Repository with many heads were especially badly affected by this. Here is an example of findcommonhead discovery for pushing 11 outgoing changeset on a repository with tens of thousand of unrelated heads. (discovery run over a ssh link to localhost). Before: queries: 92 time: 44.1996s After: queries: 3 time: 0.6938s A x63 speedup even with a network link without latency.
Wed, 06 Dec 2017 22:44:51 +0100 setdiscover: allow to ignore part of the local graph
Boris Feld <boris.feld@octobus.net> [Wed, 06 Dec 2017 22:44:51 +0100] rev 35304
setdiscover: allow to ignore part of the local graph Currently, the push discovery first determines the full set of common nodes before looking into what changesets are outgoing. When pushing a specific subset, this can lead to pathological situations where we search for the status of thousand of local heads that are unrelated to the requested pushes. To fix this, we need to teach the discovery to ignores part of the graph. Most of the necessary pieces were already in place. This changeset just makes them available to higher level API and tests them. Change actually impacting pushes are coming in a later changeset.
Thu, 07 Dec 2017 01:53:14 +0100 largefiles: allow to run 'debugupgraderepo' on repo with largefiles
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 01:53:14 +0100] rev 35303
largefiles: allow to run 'debugupgraderepo' on repo with largefiles The extensions wrap the necessary function to ensure the 'largefiles' requirements won't be dropped. It is now possible to run `hg debugupgraderepo` on a repository with largefiles.
Thu, 07 Dec 2017 01:51:54 +0100 upgraderepo: allow extension to register preserved requirements
Boris Feld <boris.feld@octobus.net> [Thu, 07 Dec 2017 01:51:54 +0100] rev 35302
upgraderepo: allow extension to register preserved requirements Some requirement does not directly result from config and needs more advanced logic to be preserved. The current example is 'largefiles'. We add a hook point in the upgrade code so that extensions can handle these cases. The 'largefiles' extension will use it in the next changeset.
Thu, 22 Sep 2016 19:41:42 +0900 revset: make follow() accept empty startrev
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 19:41:42 +0900] rev 35301
revset: make follow() accept empty startrev This is the same behavior as ancestors(emptyset).
Thu, 22 Sep 2016 19:40:07 +0900 revset: alias follow(startrev=rev) to ancestors(rev)
Yuya Nishihara <yuya@tcha.org> [Thu, 22 Sep 2016 19:40:07 +0900] rev 35300
revset: alias follow(startrev=rev) to ancestors(rev) This seems natural given 'log -frREV' (with no file pattern) is equivalent to 'log -frREV *'.
(0) -30000 -10000 -3000 -1000 -300 -100 -10 +10 +100 +300 +1000 +3000 +10000 tip