Thu, 02 Aug 2018 09:53:22 -0700 changegroup: move revchunk() from narrow
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 02 Aug 2018 09:53:22 -0700] rev 38925
changegroup: move revchunk() from narrow The monkeypatched revchunk for ellipses serving is a completely independent implementation. We model it as such in the changegroup code. revchunk() is now a simple proxy function. Again, I wish we had better APIs here. Especially since this narrow code is part of cg1packer and cg1packer can't be used with narrow. Class inheritance is wonky. And I will definitely be making changes to changegroup code for delta generation. As part of the code move, `node.nullrev` was replaced by `nullrev`. And a reference to `orig` was replaced to call `self._revchunknormal` directly. Differential Revision: https://phab.mercurial-scm.org/D4063
Thu, 02 Aug 2018 09:40:18 -0700 changegroup: move deltaparent() from narrow
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 02 Aug 2018 09:40:18 -0700] rev 38924
changegroup: move deltaparent() from narrow I'm not keen on performing the attribute sniff to test for presence of ellipses mode: I'd rather we use a separate packer instance that was ellipses mode specific. But I've tried to formalize a better API without narrow in core and I can't make sense of all the monkeypatching. My goal is to inline as much of the monkeypatching as possible then refactor the changegroup generation API. We add this code to the cg2packer because narrow doesn't work with cg1. Differential Revision: https://phab.mercurial-scm.org/D4062
Sat, 28 Jul 2018 17:59:37 -0700 changegroup: move _packellipsischangegroup() from narrow
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Jul 2018 17:59:37 -0700] rev 38923
changegroup: move _packellipsischangegroup() from narrow The behavior here is not ideal, as the function constructs a packer then adds attributes to it. This will be cleaned up in subsequent commits. Moving this code is necessary to move the remainder of the bundle2-level changegroup part generation code into core. Differential Revision: https://phab.mercurial-scm.org/D4061
Sat, 28 Jul 2018 17:52:21 -0700 changegroup: move ellipsisdata() from narrow
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Jul 2018 17:52:21 -0700] rev 38922
changegroup: move ellipsisdata() from narrow This is a pretty straightforward copy of the function. Differential Revision: https://phab.mercurial-scm.org/D4060
Sun, 22 Jul 2018 19:48:50 +0900 fileset: narrow status computation by left-hand-side of 'and' node
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 19:48:50 +0900] rev 38921
fileset: narrow status computation by left-hand-side of 'and' node Timing with warm disk cache: $ hg status --cwd mozilla-central 'set:path:build/ and unknown()' --time (orig) time: real 1.970 secs (user 1.560+0.000 sys 0.410+0.000) (new) time: real 0.330 secs (user 0.310+0.000 sys 0.020+0.000)
Sun, 22 Jul 2018 19:43:57 +0900 fileset: move copy constructor of matchctx near __init__
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 19:43:57 +0900] rev 38920
fileset: move copy constructor of matchctx near __init__
Sun, 22 Jul 2018 11:20:48 +0900 fileset: build status according to 'withstatus' hint
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 11:20:48 +0900] rev 38919
fileset: build status according to 'withstatus' hint _switchcallers is no longer needed since 'withstatus' node is reinserted for arguments of functions like revs(). New matchctx instance is created per 'withstatus' to make sure that status tuple is available only for children of the 'withstatus' node.
Sat, 21 Jul 2018 20:27:53 +0900 fileset: insert hints where status should be computed
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 20:27:53 +0900] rev 38918
fileset: insert hints where status should be computed This will allow us to compute status against a narrowed set of files. For example, "path:build/ & (unknown() + missing())" is rewritten as "path:build/ & <withstatus>(unknown() + missing(), 'unknown missing')", and the status call can be narrowed by the left-hand-side matcher, "path:build/". mctx.buildstatus() calls will be solely processed by getmatchwithstatus().
Sun, 22 Jul 2018 11:12:55 +0900 fileset: move buildstatus() to matchctx method
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 11:12:55 +0900] rev 38917
fileset: move buildstatus() to matchctx method In future patches, file status will be computed while evaluating a parsed tree. This patch provides a matchctx interface to build status.
Sun, 22 Jul 2018 10:58:32 +0900 fileset: keep basectx by matchctx
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 10:58:32 +0900] rev 38916
fileset: keep basectx by matchctx
Sun, 22 Jul 2018 10:55:38 +0900 fileset: pass in basectx to _buildstatus()
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 10:55:38 +0900] rev 38915
fileset: pass in basectx to _buildstatus() I'll make matchctx remember both ctx and basectx so that file status between them can be computed later. This prepares for the change.
Sat, 04 Aug 2018 12:58:08 +0530 resolve: update commands.resolve.confirm help text
Sushil khanchi <sushilkhanchi97@gmail.com> [Sat, 04 Aug 2018 12:58:08 +0530] rev 38914
resolve: update commands.resolve.confirm help text Included --mark and --unmark in the help text of resolve.confirm.config. Differential Revision: https://phab.mercurial-scm.org/D4103
Sat, 04 Aug 2018 12:43:41 +0530 resolve: support confirm config option with --unmark flag
Sushil khanchi <sushilkhanchi97@gmail.com> [Sat, 04 Aug 2018 12:43:41 +0530] rev 38913
resolve: support confirm config option with --unmark flag Now, commands.resolve.confirm also respect --unmark option; and confirm to unresolve all resolved files. It will confirm only when no files pats are passed (same as --mark), because when no pats are passed the default is to mark resolved files as unresolved. And if user has passed file pats then I think there is no need to confirm for that. Differential Revision: https://phab.mercurial-scm.org/D4102
Sun, 05 Aug 2018 00:53:55 -0700 resolve: correct behavior of mark-check=none to match docs
Kyle Lippincott <spectral@google.com> [Sun, 05 Aug 2018 00:53:55 -0700] rev 38912
resolve: correct behavior of mark-check=none to match docs Differential Revision: https://phab.mercurial-scm.org/D4121
Thu, 02 Aug 2018 14:57:20 -0700 narrow: move .hg/narrowspec to .hg/store/narrowspec (BC)
Martin von Zweigbergk <martinvonz@google.com> [Thu, 02 Aug 2018 14:57:20 -0700] rev 38911
narrow: move .hg/narrowspec to .hg/store/narrowspec (BC) The narrowspec is more closely related to the store than to the working copy. For example, if the narrowspec changes, the set of revlogs also needs to change (the working copy may change, but that depends on which commit is checked out). Also, when using the share extension, the narrowspec needs to be shared along with the store. This patch therefore moves the narrowspec into the store/ directory. This is clearly a breaking change, but I haven't bothered trying to fall back to reading the narrowspec from the old location (.hg/), because there are very few users of narrow out there. (We'll add a temporary hack to our Google-internal extension to handle the migration.) Differential Revision: https://phab.mercurial-scm.org/D4099
Fri, 03 Aug 2018 13:53:02 -0700 narrow: drop checkambig=True when restoring backup
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 13:53:02 -0700] rev 38910
narrow: drop checkambig=True when restoring backup IIUC, checkambig is about updating timestamps of the file while renaming. That's important for the dirstate, but we never check the timestamp of the narrowspec file. We can therefore avoid checking passing checkambig=True. Differential Revision: https://phab.mercurial-scm.org/D4098
Thu, 02 Aug 2018 14:30:40 -0700 narrow: remove a repo file-cache invalidation
Martin von Zweigbergk <martinvonz@google.com> [Thu, 02 Aug 2018 14:30:40 -0700] rev 38909
narrow: remove a repo file-cache invalidation It's unclear why this was needed. All tests pass without it. I asked Kyle Lippincott (who added the check) and he also doesn't remember what it was for. Differential Revision: https://phab.mercurial-scm.org/D4097
Fri, 03 Aug 2018 11:09:41 -0700 narrow: call narrowspec.{save,restore,clear}backup directly
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 11:09:41 -0700] rev 38908
narrow: call narrowspec.{save,restore,clear}backup directly I want to move .hg/narrowspec to .hg/store/narrowspec and we need to decouple the narrowspec update from the dirstate update for that. This patch lets the callers call the narrowspec backup functions directly, in addition to the dirstate backup functions. The narrowspec methods are made to check if narrowing is enabled. For that, a repo instance was needed, which all the callers luckily already had available. Differential Revision: https://phab.mercurial-scm.org/D4096
Sat, 04 Aug 2018 23:15:06 -0700 index: don't add 1 to length variables
Martin von Zweigbergk <martinvonz@google.com> [Sat, 04 Aug 2018 23:15:06 -0700] rev 38907
index: don't add 1 to length variables A lot of "+ 1" and "-1" were mechanically added to ease the transition in 781b2720d2ac (index: don't include nullid in len(), 2018-07-20). Let's clean it up now. Differential Revision: https://phab.mercurial-scm.org/D4106
Sat, 04 Aug 2018 22:48:25 -0700 index: drop support for nullid at position len(index) in index_node
Martin von Zweigbergk <martinvonz@google.com> [Sat, 04 Aug 2018 22:48:25 -0700] rev 38906
index: drop support for nullid at position len(index) in index_node I think no callers exist since at least a3dacabd476b (index: don't allow index[len(index)] to mean nullid, 2018-07-20). Differential Revision: https://phab.mercurial-scm.org/D4105
Sat, 04 Aug 2018 23:15:03 -0700 index: return False for "len(index) in index"
Martin von Zweigbergk <martinvonz@google.com> [Sat, 04 Aug 2018 23:15:03 -0700] rev 38905
index: return False for "len(index) in index" Since we no longer accept index[len(index)], we should clearly make "len(index) in index" return False. This should 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/D4104
Sat, 21 Jul 2018 17:19:12 +0900 fileset: combine union of basic patterns into single matcher
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 17:19:12 +0900] rev 38904
fileset: combine union of basic patterns into single matcher This appears to improve query performance in a big repository than I thought. Writing less Python in a hot loop, faster computation we gain. $ hg files --cwd mozilla-central --time 'set:a* + b* + c* + d* + e*' (orig) time: real 0.670 secs (user 0.640+0.000 sys 0.030+0.000) (new) time: real 0.210 secs (user 0.180+0.000 sys 0.020+0.000)
Sat, 21 Jul 2018 17:13:34 +0900 fileset: reorder 'or' expression by weight
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 17:13:34 +0900] rev 38903
fileset: reorder 'or' expression by weight
Sat, 04 Aug 2018 17:08:33 +0900 fileset: introduce weight constants for readability
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Aug 2018 17:08:33 +0900] rev 38902
fileset: introduce weight constants for readability These constants are defined in the filesetlang module since it's the bottommost module depending on WEIGHT_CHECK_FILENAME, and extensions will be likely to import it to process function arguments. Credit for the naming goes to Augie Fackler.
Sat, 04 Aug 2018 17:17:31 +0900 sparse: use named parameters in i18n strings
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Aug 2018 17:17:31 +0900] rev 38901
sparse: use named parameters in i18n strings This should give more hints about what the %s means, and allow reordering.
Sat, 04 Aug 2018 17:11:03 +0900 sparse: do not include operator in i18n strings
Yuya Nishihara <yuya@tcha.org> [Sat, 04 Aug 2018 17:11:03 +0900] rev 38900
sparse: do not include operator in i18n strings
Fri, 03 Aug 2018 16:39:09 -0700 fix: compute changed lines lazily to make whole-file fixer tools faster
Danny Hooper <hooper@google.com> [Fri, 03 Aug 2018 16:39:09 -0700] rev 38899
fix: compute changed lines lazily to make whole-file fixer tools faster Differential Revision: https://phab.mercurial-scm.org/D4100
Sat, 04 Aug 2018 12:23:18 +0530 resolve: support commands.resolve.confirm option with --mark flag
Sushil khanchi <sushilkhanchi97@gmail.com> [Sat, 04 Aug 2018 12:23:18 +0530] rev 38898
resolve: support commands.resolve.confirm option with --mark flag Now, commands.resolve.confirm config option also respect --mark; and confirm to mark all 'unresolved' files as 'resolved'. It will confirm only when you don't pass any pats i.e 'hg resolve -m', because when no file pats are passed then --mark's default functionality is to mark all unresolved files. And if user has given file pats then I think there is no need to confirm. Differential Revision: https://phab.mercurial-scm.org/D4101
Fri, 03 Aug 2018 12:59:01 -0700 resolve: add commands.resolve.mark-check=abort to tweakdefaults
Kyle Lippincott <spectral@google.com> [Fri, 03 Aug 2018 12:59:01 -0700] rev 38897
resolve: add commands.resolve.mark-check=abort to tweakdefaults Differential Revision: https://phab.mercurial-scm.org/D4072
Fri, 03 Aug 2018 12:57:44 -0700 resolve: graduate resolve.mark-check from experimental, add docs
Kyle Lippincott <spectral@google.com> [Fri, 03 Aug 2018 12:57:44 -0700] rev 38896
resolve: graduate resolve.mark-check from experimental, add docs Since this hasn't been in a release yet, I'm not bothering to add an alias for the experimental name of the config variable. Differential Revision: https://phab.mercurial-scm.org/D4071
Mon, 16 Apr 2018 23:49:38 -0700 shortest: use 'x' prefix to disambiguate from revnum if configured
Martin von Zweigbergk <martinvonz@google.com> [Mon, 16 Apr 2018 23:49:38 -0700] rev 38895
shortest: use 'x' prefix to disambiguate from revnum if configured Differential Revision: https://phab.mercurial-scm.org/D4042
Sun, 29 Apr 2018 10:07:40 -0700 revisions: allow "x123" to refer to nodeid prefix "123"
Martin von Zweigbergk <martinvonz@google.com> [Sun, 29 Apr 2018 10:07:40 -0700] rev 38894
revisions: allow "x123" to refer to nodeid prefix "123" When resolving "123" to a revision, we try to interpret it as revnum before we try to interpret it as a nodeid hex prefix. This can lead to the shortest valid prefix being longer than necessary. This patch lets us write such nodeids in a shorter form by prefixing them with "x" instead of adding more hex digits until they're longer than the longest decimal revnum. On my hg repo with almost 69k revisions, turning this feature on saves on average 0.4% on the average nodeid length. That clearly doesn't justify this patch. However, it becomes more usefule when combined with the earlier patches in this series that let you disambiguate nodeid prefixes within a configured revset. Note that we attempt to resolve symbols as nodeid prefixes after we've exhausted all other posibilities, so this is a backwards compatible change (only queries that would previously fail may now succeed). I've still hidden this feature behind an experiemntal config option so we can roll it back if needed. Differential Revision: https://phab.mercurial-scm.org/D4041
Mon, 07 May 2018 16:12:12 -0700 shortest: make isrev() a top-level function
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 May 2018 16:12:12 -0700] rev 38893
shortest: make isrev() a top-level function I'm going to add another caller in the next patch. Differential Revision: https://phab.mercurial-scm.org/D4040
Tue, 17 Apr 2018 11:16:59 -0700 shortest: cache disambiguation revset
Martin von Zweigbergk <martinvonz@google.com> [Tue, 17 Apr 2018 11:16:59 -0700] rev 38892
shortest: cache disambiguation revset This makes it actually useful. In compared the time in my hg repo with 69.6k revisions and with a disambiguation revset of "not public()" that matches 563 visible revisions. I ran "time hg log -T '{shortest(node1,)}' -r 0:1000" (no revisions within the revset in that revision range). Before this patch, it took 57s and after it took 0.7s. Differential Revision: https://phab.mercurial-scm.org/D4039
Fri, 20 Jul 2018 14:36:42 -0700 index: don't allow index[len(index)] to mean nullid
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 14:36:42 -0700] rev 38891
index: don't allow index[len(index)] to mean nullid Now everything else has been cleaned up and we can drop support for getting the nullid from the end of the index (from *past* the end actually, since we reduced the length in the previous patch). Differential Revision: https://phab.mercurial-scm.org/D4023
Fri, 20 Jul 2018 08:10:32 -0700 index: don't include nullid in len()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 08:10:32 -0700] rev 38890
index: don't include nullid in len() I suspect the reason the nullid is in the index in the last position is that it lets index[i] for regular revision number, even when index was just a regular Python list. An alternative solution would have been to reserve revision number 0 for the null revision. I don't know why that wasn't done. Now that we have classes backing the index, we can easily make index[-1] get the nullid without having to put it last in the list and including it in the len(). This patch just hides the nullid -- it will still be accessible at index[len(index)]. I realize that this will be annoying when checking out across this commit for debugging (including bisection). Differential Revision: https://phab.mercurial-scm.org/D4022
Wed, 01 Aug 2018 10:57:14 -0700 index: replace insert(-1, e) method by append(e) method
Martin von Zweigbergk <martinvonz@google.com> [Wed, 01 Aug 2018 10:57:14 -0700] rev 38889
index: replace insert(-1, e) method by append(e) method I want to make index[len(index) - 1] be the tip revision, not null revision as it is today. insert(-1, e) will then make little sense. Since insert() currently requires the first argument to be -1, it seems simpler to replace it by a method that allows insertion only at the end. Note that revlogoldindex already has this method (by virtue of extending list). Differential Revision: https://phab.mercurial-scm.org/D4021
Fri, 20 Jul 2018 14:25:59 -0700 pure: create type for revlog v0 index
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 14:25:59 -0700] rev 38888
pure: create type for revlog v0 index The new type takes care of hiding the nullid entry. This type helps us transition away from including that entry at index[len(index)-1]. Differential Revision: https://phab.mercurial-scm.org/D4020
Fri, 20 Jul 2018 10:02:05 -0700 index: drop support for negative indexes into the index
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 10:02:05 -0700] rev 38887
index: drop support for negative indexes into the index I want index[i] to work for any valid revnum including -1 (as it already does), and I also want len(index) to be the number of revisions in the index (not counting the null revision), so it cannot also support negative revision numbers other than -1 for nullid. I didn't bother removing support for it from revlog v0. Differential Revision: https://phab.mercurial-scm.org/D4019
Fri, 20 Jul 2018 09:53:54 -0700 index: handle index[-1] as nullid more explicitly
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 09:53:54 -0700] rev 38886
index: handle index[-1] as nullid more explicitly I find it more intuitive to check if "pos == -1" than to first add the index length (which includes one extra item for the nullid) and compare that to "length - 1". However, because test-parseindex2.py compares the whole index (up to len(index)-1), we need to also preserve that other check for a little while more. I'll remove it soon. Differential Revision: https://phab.mercurial-scm.org/D4018
Fri, 20 Jul 2018 22:26:28 -0700 index: store nullrev as -1 in nodetree
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 22:26:28 -0700] rev 38885
index: store nullrev as -1 in nodetree Nothing important, it just seems more natural to not map nullrev to INT_MAX. We just need to change the revision encoding a little to make space for the -1. Differential Revision: https://phab.mercurial-scm.org/D4005
Fri, 20 Jul 2018 23:24:14 -0700 index: create function for deleting node from nodetree
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 23:24:14 -0700] rev 38884
index: create function for deleting node from nodetree A node is marked deleted by nt_insert(self, node, -1), but "-1" could mean so many things (notably nullrev), so let's hide it in a function. The function could possibly also remove nodes from the tree in the future (it currently only marks them deleted). Differential Revision: https://phab.mercurial-scm.org/D4004
Fri, 20 Jul 2018 09:58:09 -0700 revlog: remove some knowledge of sentinel nullid in index
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 09:58:09 -0700] rev 38883
revlog: remove some knowledge of sentinel nullid in index I think the "-2" to mean "last position in index, not counting the null revision at the end" is an implementation detail of the index that we should avoid spreading knowledge of. I hope we can even remove support for index[-2]. Differential Revision: https://phab.mercurial-scm.org/D4016
Fri, 13 Apr 2018 23:23:47 -0700 scmutil: make shortest() respect disambiguation revset
Martin von Zweigbergk <martinvonz@google.com> [Fri, 13 Apr 2018 23:23:47 -0700] rev 38882
scmutil: make shortest() respect disambiguation revset The previous patch would let you use a shorter prefix if the prefix is unique within a configured revset. However, that's not very useful if there's no simple way of knowing what that shorter prefix is. This patch adapts the shortest() template function to use the shorter prefixes for nodes in the configured revset. This is currently extremely slow, because it calculates the revset for each call to shortest(). To make this faster, the next patch will start caching the revset instance. Ideally we'd cache a prefix tree instance instead. Differential Revision: https://phab.mercurial-scm.org/D4038
Wed, 28 Mar 2018 09:36:02 -0700 lookup: add option to disambiguate prefix within revset
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Mar 2018 09:36:02 -0700] rev 38881
lookup: add option to disambiguate prefix within revset When resolving a nodeid prefix that is not unique within the repo and the user has configured a revset that they want to disambiguate within, we now try to look up within that revset before we fail. If there is a unique match within the revset, we use that. This is of course most effective at allowing a short prefix if the revset contains few nodes. For most of our internal users at Google, "not public()" is sufficiently small that a hex digit or two is enough. The implementation is currently pretty slow, but good enough for small revsets (which is the expected use case). The scan in the revset is linear. We may want to use a prefix tree if we want to allow users to use a larger revset. Credit for the idea goes to Kyle Lippincott. Differential Revision: https://phab.mercurial-scm.org/D4037
Fri, 13 Apr 2018 23:37:53 -0700 revlog: use specialized exception for ambiguous prefix lookup
Martin von Zweigbergk <martinvonz@google.com> [Fri, 13 Apr 2018 23:37:53 -0700] rev 38880
revlog: use specialized exception for ambiguous prefix lookup It's useful to be able to catch a specific exception for this case. We'll use it soon. Differential Revision: https://phab.mercurial-scm.org/D4036
Thu, 02 Aug 2018 22:44:41 +0300 narrowspec: remove the unused _parsestoredpatterns() function
Pulkit Goyal <pulkit@yandex-team.ru> [Thu, 02 Aug 2018 22:44:41 +0300] rev 38879
narrowspec: remove the unused _parsestoredpatterns() function Previous patch started using sparse.parseconfig() to read narrowspec and now we don't need this function. Differential Revision: https://phab.mercurial-scm.org/D4058
Fri, 03 Aug 2018 22:29:04 +0530 narrowspec: use sparse.parseconfig() to parse narrowspec file (BC)
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 03 Aug 2018 22:29:04 +0530] rev 38878
narrowspec: use sparse.parseconfig() to parse narrowspec file (BC) This also make narrow files use 'include' and 'exclude' instead of plural forms which are 'includes' and 'excludes'. This is BC because existing narrowspecs have to replace excludes, includes words with exclude and include i.e. their singular versions. Differential Revision: https://phab.mercurial-scm.org/D4057
Fri, 03 Aug 2018 22:24:58 +0530 sparse: add an action argument to parseconfig()
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 03 Aug 2018 22:24:58 +0530] rev 38877
sparse: add an action argument to parseconfig() This will help us in reusing this function to parse narrow config files and unfiying the config file parsing logic. Differential Revision: https://phab.mercurial-scm.org/D4056
Fri, 03 Aug 2018 13:00:14 -0700 tests: avoid unnecessarily looking inside .hg/ in test-narrow*
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 13:00:14 -0700] rev 38876
tests: avoid unnecessarily looking inside .hg/ in test-narrow* Many of the narrow tests were looking at .hg/narrowspec. I think most of them were written before we added `hg tracked`, but now that we have that command, we should fix the tests. There were also a few instances of tests looking at .hg/dirstate. I fixed those to use `hg files` instead. Differential Revision: https://phab.mercurial-scm.org/D4093
Fri, 03 Aug 2018 10:56:07 -0700 narrow: extract part of narrowspec backup to core
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 10:56:07 -0700] rev 38875
narrow: extract part of narrowspec backup to core Just a little preparation for the next patch. Differential Revision: https://phab.mercurial-scm.org/D4095
Fri, 03 Aug 2018 11:02:34 -0700 narrow: move requirement constant from changegroup to repository
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 11:02:34 -0700] rev 38874
narrow: move requirement constant from changegroup to repository As suggested by Gregory Szorc. Differential Revision: https://phab.mercurial-scm.org/D4094
Fri, 03 Aug 2018 12:35:23 -0700 merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Fri, 03 Aug 2018 12:35:23 -0700] rev 38873
merge with stable
Sat, 21 Jul 2018 16:49:01 +0900 fileset: optimize 'x and not y' to 'x - y'
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 16:49:01 +0900] rev 38872
fileset: optimize 'x and not y' to 'x - y' 'x - y' is first rewritten to 'x and not y' so that x and y are reordered by weight.
Sat, 21 Jul 2018 16:41:45 +0900 fileset: reorder 'and' expression to evaluate basic patterns first
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 16:41:45 +0900] rev 38871
fileset: reorder 'and' expression to evaluate basic patterns first Timing of a crafted example (when disk cache is warm): $ hg files set:'binary() and path:contrib' (orig) time: real 0.140 secs (user 0.120+0.000 sys 0.020+0.000) (new) time: real 0.040 secs (user 0.030+0.000 sys 0.010+0.000)
Sun, 22 Jul 2018 11:47:29 +0900 fileset: roughly adjust weights of functions
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 11:47:29 +0900] rev 38870
fileset: roughly adjust weights of functions ... in order to move status predicates far away from basic patterns. I don't know if each weight is appropriate, but it should be good enough as a start.
Sat, 21 Jul 2018 15:52:26 +0900 fileset: add stub for weight-based optimization
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 15:52:26 +0900] rev 38869
fileset: add stub for weight-based optimization The main purpose of this change is to group basic patterns, which can be mapped to a plain matcher. I'm not so interested in a weight of each function.
Sat, 21 Jul 2018 16:16:44 +0900 fileset: reject 'negate' node early while transforming parsed tree
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 16:16:44 +0900] rev 38868
fileset: reject 'negate' node early while transforming parsed tree That's how a 'negate' node is processed in revset.
Sat, 21 Jul 2018 16:13:30 +0900 fileset: drop 'group' node from tree to be evaluated
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 16:13:30 +0900] rev 38867
fileset: drop 'group' node from tree to be evaluated This helps rewriting a parsed tree.
Sat, 21 Jul 2018 16:11:36 +0900 fileset: add phase to transform parsed tree
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 16:11:36 +0900] rev 38866
fileset: add phase to transform parsed tree This isn't strictly necessary, but I decided to just follow the strategy of the revset parsing.
Fri, 03 Aug 2018 11:40:15 -0400 py3: whitelist another 3 tests caught by the ratchet
Augie Fackler <augie@google.com> [Fri, 03 Aug 2018 11:40:15 -0400] rev 38865
py3: whitelist another 3 tests caught by the ratchet Differential Revision: https://phab.mercurial-scm.org/D4069
Thu, 08 Feb 2018 13:53:59 -0800 testrunner: allow multiple #testcases
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Feb 2018 13:53:59 -0800] rev 38864
testrunner: allow multiple #testcases This lets you have multiple #testcases declarations and they're taken to be different dimensions of the test, so their cross product becomes the total set of test cases. For example: #testcases obsstore-on obsstore-off #testcases manifest-flat manifest-tree $ hg rebase ... ... #if obsstore-on $ hg log ... #endif Note that this is an excellent way to slow down the test suite, so use it with care. The feature is implemented by replacing most of the "case" variables that were strings before by an array of strings with each item a different dimension of the test case. The file names are created by joining the dimensions by "#" (e.g. test-foo.t#obsstore-on#manifest-flat). Differential Revision: https://phab.mercurial-scm.org/D4049
Wed, 01 Aug 2018 22:32:51 -0700 testrunner: use "#" for "test cases" suffix in .err filename too
Martin von Zweigbergk <martinvonz@google.com> [Wed, 01 Aug 2018 22:32:51 -0700] rev 38863
testrunner: use "#" for "test cases" suffix in .err filename too This seems like a natural follow-up to b865bba56db1 (run-tests: update the test case name format, 2018-05-13). Differential Revision: https://phab.mercurial-scm.org/D4052
Tue, 31 Jul 2018 19:11:17 +0530 resolve: add confirm config option
Sushil khanchi <sushilkhanchi97@gmail.com> [Tue, 31 Jul 2018 19:11:17 +0530] rev 38862
resolve: add confirm config option This config setting gives a functionality to confirm before it re-merge all unresolved files. If this config is enabled, when you run 'hg resolve --all' it will prompt with a msg "re-merge all unresolved files (yn)?" To enable this functionality: [commands] resolve.confirm = True Differential Revision: https://phab.mercurial-scm.org/D3988
Tue, 17 Jul 2018 23:34:55 -0700 revlog: remove side effect from failed nt_init()
Martin von Zweigbergk <martinvonz@google.com> [Tue, 17 Jul 2018 23:34:55 -0700] rev 38861
revlog: remove side effect from failed nt_init() If nt_init() successfully allocates memory for the node tree but then runs out of memory while trying to insert nullid into it, it will leave the node tree pointer set on the index object. That means that future node tree operations will think that the tree is properly initialized. It seems very unlikely to make a difference in practice (if nt_init() runs out of memory, not much else will probably work), but since I spotted it, I figured I might as well fix it. Differential Revision: https://phab.mercurial-scm.org/D4028
Sun, 08 Jul 2018 23:39:32 -0700 revlog: remove micro-optimization for looking up only nullid
Martin von Zweigbergk <martinvonz@google.com> [Sun, 08 Jul 2018 23:39:32 -0700] rev 38860
revlog: remove micro-optimization for looking up only nullid index_find_node() would call nt_find() before initializing the node tree. nt_find() would then return -2 unless the requested revision was the null revision. I can't imagine what scenario that is optimizing for, and doing the initialization earlier makes the code simpler and easier to follow, so that's what this patch does. Differential Revision: https://phab.mercurial-scm.org/D4027
Fri, 20 Jul 2018 23:57:25 -0700 revlog: remove unnecessary output parameter from node_check()
Martin von Zweigbergk <martinvonz@google.com> [Fri, 20 Jul 2018 23:57:25 -0700] rev 38859
revlog: remove unnecessary output parameter from node_check() The "nodelen" output parameter is always set to 20 if the function returns successfully. Differential Revision: https://phab.mercurial-scm.org/D4026
Thu, 02 Aug 2018 23:50:47 -0700 narrow: move status-filtering to core and to ctx
Martin von Zweigbergk <martinvonz@google.com> [Thu, 02 Aug 2018 23:50:47 -0700] rev 38858
narrow: move status-filtering to core and to ctx One of my recent changes from repo.status(ctx1, ctx2) to ctx1.status(ctx2) broke some of our Google-internal tests. The problem turned out to be that the narrow extension was overriding repo.status() to make it filter out paths outside the narrowspec. When I changed to ctx1.status(ctx2), then that filtering obviously got lost. ctx.status() seems like a better method to do the filtering in, so this patch moves the filtering into that method, thereby also moving it out of the extension and into core. Differential Revision: https://phab.mercurial-scm.org/D4068
Tue, 10 Jul 2018 20:23:55 +0530 amend: support "history-editing-backup" config option
Sushil khanchi <sushilkhanchi97@gmail.com> [Tue, 10 Jul 2018 20:23:55 +0530] rev 38857
amend: support "history-editing-backup" config option Now, amend is in the list of those history editing commands which support `history-editing-backup` config option. If you don't want to store any backup then just use this config. [ui] hisotry-editing-backup = False Current status of list of history editing commands which support this config: 1. histedit 2. rebase 3. amend Differential Revision: https://phab.mercurial-scm.org/D3968
Fri, 03 Aug 2018 00:10:52 +0530 rebase: move "backup" flag to rebaseruntime
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 03 Aug 2018 00:10:52 +0530] rev 38856
rebase: move "backup" flag to rebaseruntime It was getting messy to populate "backup" flag to calls of `_finishrebase()` and `_prepareabortorcontinue`, so made some changes to move "backup" flag to rbsrt. Differential Revision: https://phab.mercurial-scm.org/D4055
Mon, 11 Jun 2018 13:00:15 +0900 i18n: format warning of hggettext in standard compiler error style
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 11 Jun 2018 13:00:15 +0900] rev 38855
i18n: format warning of hggettext in standard compiler error style Now, hggettext specific warning messages are formatted in: FILENAME:LINENO:MESSAGE This allows editors to jump into corresponded line easily.
Mon, 11 Jun 2018 12:32:16 +0900 i18n: omit redundant translatable synopsis text to avoid xgettext warning
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 11 Jun 2018 12:32:16 +0900] rev 38854
i18n: omit redundant translatable synopsis text to avoid xgettext warning This empty translatable synopsis text causes xgettext warning below: Empty msgid. It is reserved by GNU gettext: gettext("") returns the header entry with meta information, not the empty string. This "synopsis" argument of @command annotation is omitable.
Thu, 02 Aug 2018 21:07:30 +0900 i18n: avoid substitution of PYFILES at runtime for readability of output
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 02 Aug 2018 21:07:30 +0900] rev 38853
i18n: avoid substitution of PYFILES at runtime for readability of output This substitution decreases readability of "make update-pot" output, because PYFILES consists of many files. This patch makes "make update-pot" show "find mercurial hgext doc -name '*.py'" instead of many *.py files at runtime.
Thu, 02 Aug 2018 20:53:03 +0100 util: make new timedcmstats class Python 3 compatible
Martijn Pieters <mj@zopatista.com> [Thu, 02 Aug 2018 20:53:03 +0100] rev 38852
util: make new timedcmstats class Python 3 compatible
Wed, 01 Aug 2018 16:03:32 -0700 fix: add a monkey-patchable point after all new revisions have been committed
Danny Hooper <hooper@google.com> [Wed, 01 Aug 2018 16:03:32 -0700] rev 38851
fix: add a monkey-patchable point after all new revisions have been committed Differential Revision: https://phab.mercurial-scm.org/D4048
Thu, 02 Aug 2018 13:35:13 -0700 help: add quotes to a few commands we point to
Martin von Zweigbergk <martinvonz@google.com> [Thu, 02 Aug 2018 13:35:13 -0700] rev 38850
help: add quotes to a few commands we point to I didn't know that 'hg help "revsets.x or y"' was valid syntax, so the quoting is extra useful here to make it clear that that is an actual command. Differential Revision: https://phab.mercurial-scm.org/D4059
Wed, 01 Aug 2018 23:25:35 -0400 linelog: port to Python 3
Augie Fackler <augie@google.com> [Wed, 01 Aug 2018 23:25:35 -0400] rev 38849
linelog: port to Python 3 Differential Revision: https://phab.mercurial-scm.org/D4051
Sat, 28 Jul 2018 17:42:36 -0700 exchange: move simple narrow changegroup generation from extension
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Jul 2018 17:42:36 -0700] rev 38848
exchange: move simple narrow changegroup generation from extension The narrow extension completely replaced the function generating the changegroup part when a narrow changegroup was requested. Previous commits have taught the in-core changegroup code how to filter files based on a matcher. This commit teaches the in-core bundle2 part generation code to construct a matcher based on arguments. It will also emit a bundle2 part describing the narrow spec. I believe the changegroup part generation code in the narrow extension is now limited to ellipsis serving mode. i.e. core is now capable of narrow changegroup generation when ellipsis mode is disabled. Differential Revision: https://phab.mercurial-scm.org/D4014
Sat, 28 Jul 2018 17:33:20 -0700 exchange: make narrow ACL presence imply narrow=True
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Jul 2018 17:33:20 -0700] rev 38847
exchange: make narrow ACL presence imply narrow=True And refactor the logic for determining when to invoke our custom changegroup part function so it is only conditional on narrow being set. This makes it more obvious under which conditions we should invoke the custom implementation. Also use raw strings so **kwargs works on Python 3. Differential Revision: https://phab.mercurial-scm.org/D4013
Sat, 28 Jul 2018 14:52:46 -0700 changegroup: inline prune() logic from narrow
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Jul 2018 14:52:46 -0700] rev 38846
changegroup: inline prune() logic from narrow prune() needs to ellide manifests that aren't part of the narrow matcher. The code is violating storage abstractions, so a comment has been added. Keep in mind the impetus for moving this code to core is so changegroup code can be refactored to be storage agnostic. Differential Revision: https://phab.mercurial-scm.org/D4012
Sun, 22 Jul 2018 15:50:45 +0900 fileset: extract language processing part to new module (API)
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 15:50:45 +0900] rev 38845
fileset: extract language processing part to new module (API) I'll add a couple more functions that work on parsed tree. % wc -l mercurial/fileset*.py 559 mercurial/fileset.py 135 mercurial/filesetlang.py 694 total
Sat, 21 Jul 2018 15:23:56 +0900 fileset: flatten 'or' nodes to unnest unionmatchers
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 15:23:56 +0900] rev 38844
fileset: flatten 'or' nodes to unnest unionmatchers This also makes it easier to compile a union of basic patterns into a single regexp pattern.
Sat, 21 Jul 2018 15:14:38 +0900 fileset: flatten arguments list
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 15:14:38 +0900] rev 38843
fileset: flatten arguments list Just prepares for flattening 'or' nodes. This change would have no impact on performance.
Sat, 21 Jul 2018 15:05:40 +0900 debugfileset: add option to show matcher representation
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 15:05:40 +0900] rev 38842
debugfileset: add option to show matcher representation
Sat, 21 Jul 2018 14:52:36 +0900 debugfileset: backport --show-stage option from debugrevspec
Yuya Nishihara <yuya@tcha.org> [Sat, 21 Jul 2018 14:52:36 +0900] rev 38841
debugfileset: backport --show-stage option from debugrevspec I'll add some static optimizations to fileset.
Sun, 22 Jul 2018 16:03:48 +0900 lfs: remove callstatus property from 'lfs()' fileset
Yuya Nishihara <yuya@tcha.org> [Sun, 22 Jul 2018 16:03:48 +0900] rev 38840
lfs: remove callstatus property from 'lfs()' fileset It was added at 91aac8e6604d, but is no longer needed since a fileset expression is now compiled into an "open" matcher. See ff5b6fca1082 for details.
Thu, 05 Jul 2018 10:42:48 +0530 rebase: support "history-editing-backup" config option
Sushil khanchi <sushilkhanchi97@gmail.com> [Thu, 05 Jul 2018 10:42:48 +0530] rev 38839
rebase: support "history-editing-backup" config option If you don't want to store any backup while rebasing, you can use `history-editing-backup` config option. [ui] history-editing-backup = # True or False Current status of list of commands which supports this config: 1. histedit 2. rebase Differential Revision: https://phab.mercurial-scm.org/D3887
Wed, 01 Aug 2018 16:06:53 +0200 extensions: add detailed loading information
Martijn Pieters <mj@zopatista.com> [Wed, 01 Aug 2018 16:06:53 +0200] rev 38838
extensions: add detailed loading information This lets you track down what exactly is happening during extension loading, and how long various steps took.
Wed, 01 Aug 2018 16:05:41 +0200 util: create a context manager to handle timing
Martijn Pieters <mj@zopatista.com> [Wed, 01 Aug 2018 16:05:41 +0200] rev 38837
util: create a context manager to handle timing The context manager is pulled out of the timed decorator function, and refactored to provide a stats instance, with added tests.
Wed, 01 Aug 2018 23:08:18 -0400 linelog: fix import statements to pass the import checker on py3
Augie Fackler <augie@google.com> [Wed, 01 Aug 2018 23:08:18 -0400] rev 38836
linelog: fix import statements to pass the import checker on py3 Differential Revision: https://phab.mercurial-scm.org/D4050
Mon, 30 Jul 2018 10:42:37 -0400 linelog: add a Python implementation of the linelog datastructure
Augie Fackler <augie@google.com> [Mon, 30 Jul 2018 10:42:37 -0400] rev 38835
linelog: add a Python implementation of the linelog datastructure This datastructure was originally developed by Jun Wu at Facebook, inspired by SCCS weaves. It's useful as a cache for blame information, but also is the magic that makes `hg absorb` easy to implement. In service of importing the code to Mercurial, I wanted to actually /understand/ it, and once I did I decided to take a run at implementing it. The help/internals/linelog.txt document is the README from Jun Wu's implementaiton. It all applies to our linelog implementation. Differential Revision: https://phab.mercurial-scm.org/D3990
Sat, 28 Jul 2018 11:40:31 -0700 changegroup: move file matcher from narrow extension
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 Jul 2018 11:40:31 -0700] rev 38834
changegroup: move file matcher from narrow extension Sparse changegroup generation requires the use of a matcher to filter which files are relevant. This commit moves the file matcher from the narrow extension to core and updates the narrow extension to use it. I'm not sure why the narrow extension was storing the matcher as a callable that resolved to a matcher. So I changed it to be a simple matcher instance. In addition, code from narrow to intersect the matcher with the local narrow spec is now performed automatically when the changegroup packer is created. If a matcher is not passed into getbundler() an alwaysmatcher() is assumed. This ensures that a matcher is always defined for all operations. Differential Revision: https://phab.mercurial-scm.org/D4011
Thu, 26 Jul 2018 17:11:03 -0700 resolve: add option to warn/abort on -m with unresolved conflict markers
Kyle Lippincott <spectral@google.com> [Thu, 26 Jul 2018 17:11:03 -0700] rev 38833
resolve: add option to warn/abort on -m with unresolved conflict markers When a user is dropped out of Mercurial to a terminal to resolve files, we emit messages like: conflicts while merging file1! (edit, then use 'hg resolve --mark') conflicts while merging file2! (edit, then use 'hg resolve --mark') We don't mention a file name in the hint, so some users might do something like `$EDITOR file1; hg resolve --mark`, see that it says "(no more unresolved files)" and forget to deal with file2 before running the next command. Even if we did mention a file name in the hint, it's too easy to forget it (maybe the merge spans a couple days or something). This option lets us inform the user that they might have missed something. In the scenario above, the output would be something like: warning: the following files still have conflict markers: file2 (no more unresolved files) Differential Revision: https://phab.mercurial-scm.org/D4035
Mon, 02 Jul 2018 18:39:48 -0700 exchange: refactor control flow of _getbundlechangegrouppart()
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 02 Jul 2018 18:39:48 -0700] rev 38832
exchange: refactor control flow of _getbundlechangegrouppart() The use of early return makes the control flow of this function much easier to reason about IMO. Differential Revision: https://phab.mercurial-scm.org/D4010
Mon, 02 Jul 2018 18:32:20 -0700 exchange: move _computeellipsis() from narrow
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 02 Jul 2018 18:32:20 -0700] rev 38831
exchange: move _computeellipsis() from narrow This is also referenced as part of the narrow changegroup code and therefore needs to move to core before we can integrate the narrow changegroup code into core. Differential Revision: https://phab.mercurial-scm.org/D4009
Mon, 02 Jul 2018 18:24:26 -0700 exchange: move narrow acl functionality into core
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 02 Jul 2018 18:24:26 -0700] rev 38830
exchange: move narrow acl functionality into core This function is called by the custom changegroup generation code in the narrow extension. I want to move that changegroup code into core. That means we need to move this function. The code is kinda hacky in that assumes existence of REMOTE_USER, which is only present on authenticated HTTP requests. I've added a comment indicating that. Differential Revision: https://phab.mercurial-scm.org/D4008
(0) -30000 -10000 -3000 -1000 -300 -100 -96 +96 +100 +300 +1000 +3000 +10000 tip