Mon, 26 Jun 2017 22:27:34 +0900 debugrevlog: align chain length, reach, and compression ratio
Yuya Nishihara <yuya@tcha.org> [Mon, 26 Jun 2017 22:27:34 +0900] rev 33074
debugrevlog: align chain length, reach, and compression ratio I think this is what the max(...) exists for.
Fri, 23 Jun 2017 17:19:29 +0200 configitems: register 'ui.interactive'
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 23 Jun 2017 17:19:29 +0200] rev 33073
configitems: register 'ui.interactive' That item default value is a bit special (None) so this adds a second proof that everything is still working fine.
Sun, 25 Jun 2017 14:41:12 +0200 config: use '_config' within 'configbytes'
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 25 Jun 2017 14:41:12 +0200] rev 33072
config: use '_config' within 'configbytes' This will prevent bugs from using None as the sentinel value (eg: 'ui.interactive')
Sun, 25 Jun 2017 14:38:56 +0200 config: use '_config' within 'configbool'
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 25 Jun 2017 14:38:56 +0200] rev 33071
config: use '_config' within 'configbool' This will prevent bugs from using None as the sentinel value (eg: 'ui.interactive')
Sun, 25 Jun 2017 14:34:34 +0200 config: extract the core config logic into a private method
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 25 Jun 2017 14:34:34 +0200] rev 33070
config: extract the core config logic into a private method This will make it easier for the other 'configxxx' function to detect unset value.
Fri, 23 Jun 2017 01:38:10 +0200 debugrevlog: also display the largest delta chain span
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 23 Jun 2017 01:38:10 +0200] rev 33069
debugrevlog: also display the largest delta chain span Mercurial read all data between the base of the chain and the last delta when restoring content (including unrelated delta). To monitor this, we add data about the size of the "delta chain span" to debugrevlog.
Sat, 24 Jun 2017 21:13:48 -0700 rebase: clean up rebasestate from active transaction
Jun Wu <quark@fb.com> [Sat, 24 Jun 2017 21:13:48 -0700] rev 33068
rebase: clean up rebasestate from active transaction Previously, rebase assumes the following pattern: rebase: with transaction as tr: # top-level ... tr.__close__ writes rebasestate unlink('rebasestate') However it's possible that "rebase" was called inside a transaction: with transaction as tr1: rebase: with transaction as tr2: # not top-level ... tr2.__close__ does not write rebasestate unlink('rebasestate') tr1.__close__ writes rebasestate That leaves a rebasestate on disk incorrectly. This patch adds "removefilegenerator" to notify transaction code that the state file is no longer needed therefore fixes the issue.
Sat, 24 Jun 2017 21:01:28 -0700 test-rebase: add a test showing rebasestate left behind
Jun Wu <quark@fb.com> [Sat, 24 Jun 2017 21:01:28 -0700] rev 33067
test-rebase: add a test showing rebasestate left behind The test demonstrates that .hg/rebasestate is left behind if "rebase" was called inside an existing transaction.
Sun, 25 Jun 2017 17:46:35 -0400 identify: rename 'changed' keyword -> 'dirty'
Matt Harbison <matt_harbison@yahoo.com> [Sun, 25 Jun 2017 17:46:35 -0400] rev 33066
identify: rename 'changed' keyword -> 'dirty' I meant to do this before sending the initial templater support, but forgot. I'm quite surprised that 'dirty' doesn't occur in more user facing contexts, but there are a few, like the help for blackbox. It also more obviously mirrors the '(clean)' state printed by the summary command. I also didn't like that it was just one letter off from {changes} in the {latesttags} sub-keywords, which has a totally different meaning.
Sat, 24 Jun 2017 02:39:21 +0900 dispatch: remove unused _loaded
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 24 Jun 2017 02:39:21 +0900] rev 33065
dispatch: remove unused _loaded Now, there is no user for dispatch._loaded.
Sat, 24 Jun 2017 02:39:20 +0900 extensions: register functions always at loading extension (issue5601)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 24 Jun 2017 02:39:20 +0900] rev 33064
extensions: register functions always at loading extension (issue5601) Before this patch, functions defined in extensions are registered via extra loaders only in _dispatch(). Therefore, loading extensions in other code paths like below omits registration of functions. - WSGI service - operation across repositories (e.g. subrepo) - test-duplicateoptions.py, using extensions.loadall() directly To register functions always at loading new extension, this patch moves implementation for extra loading from dispatch._dispatch() to extensions.loadall(). AFAIK, only commands module causes cyclic dependency between extensions module, but this patch imports all related modules just before extra loading in loadall(), in order to centralize them. This patch makes extensions.py depend on many other modules, even though extensions.py itself doesn't. It should be avoided if possible, but I don't have any better idea. Some other places like below aren't reasonable for extra loading, IMHO. - specific function in newly added module: existing callers of extensions.loadall() should invoke it, too - hg.repository() or so: no-repo commands aren't covered by this. BTW, this patch removes _loaded.add(name) on relocation, because dispatch._loaded is used only for extraloaders (for similar reason, "exts" variable is removed, too).
Sat, 24 Jun 2017 23:09:21 -0400 identify: add template support
Matt Harbison <matt_harbison@yahoo.com> [Sat, 24 Jun 2017 23:09:21 -0400] rev 33063
identify: add template support This is based on a patch proposed last year by Mathias De Maré[1], with a few changes. - Tags and bookmarks are now formatted lists, for more flexible queries. - The templater is populated whether or not [-nibtB] is specified. (Plain output is unchanged.) This seems more consistent with other templated commands. - The 'id' property is a string, instead of a list. - The parents of 'wdir()' have their own list of attributes. I left 'id' as a string because it seems very useful for generating version info. It's also a bit strange because the value and meaning changes depending on whether or not --debug is passed (short vs full hash), whether the revision is a merge or not (one hash or two, separated by a '+'), the working directory or not (node vs p1node), and local or not (remote defaults to tip, and never has '+'). The equivalent string built with {rev} seems much less useful, and I couldn't think of a reasonable name, so I left it out. The discussion seemed to be pointing towards having a list of nodes, with more than one entry for a merge. It seems simpler to give the nodes a name, and use {node} for the actual commit probed, especially now that there is a virtual node for 'wdir()'. Yuya mentioned using fm.nested() in that thread, so I did for the parent nodes. I'm not sure if the plan is to fill in all of the context attributes in these items, or if these nested items should simply be made {p1node} and {p1rev}. I used ':' as the tag separator for consistency with {tags} in the log templater. Likewise, bookmarks are separated by a space for consistency with the corresponding log template. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-August/087039.html
Sat, 24 Jun 2017 15:11:05 -0700 show: show all namespaces in "work" view
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Jun 2017 15:11:05 -0700] rev 33062
show: show all namespaces in "work" view This commit addresses a number of deficiencies in `hg show work`'s output: * Failure to render tags (it just wasn't implemented) * Failure to render names associated with non-built-in namespaces (e.g. remotenames) * Color names were hardcoded instead of coming from the canonical source in the namespace This change has the intended effect of rendering tags and extra namespaces. It solves an immediate need at Mozilla of having names from a custom namespace printed, which is blocking us from switching from a custom `hg wip` revset/template combo to `hg show work`. Note that the order of branches and bookmarks changes. This is because bookmarks are registered before branches in namespaces.py. We may want to register them last, after tags and branches. Or we may want to added a weighted field to the namespace to control display order. Something to think about. I'm not a big fan of the complexity in the templating layer. There is a lot of code to basically filter out the special case of branch=='default' and tag=='tip'. Ideally, we would iterate over a data structure that had irrelevant/unwanted names pre-filtered. However, I wasn't sure how to best implement this. We probably want {namespaces} to emit everything (its current behavior). I was toying with the following: * {namespacesnondefaults} variation that filtered values * A filter function that operated on {namespaces} (I wasn't sure how to implement this since the filtering layer would see a "hybrid" instance as opposed to something that was definitely an iterable of namespaces.) * A namespaces(...) function where you could specify which values to return. I like this the most. But it really wants named arguments to control filtering and we only support named arguments on revsets, not templates. I figure perfect is the enemy of good and we can refine templating support for namespaces in the future. At least now we have a concrete example of a use case.
Sat, 24 Jun 2017 14:44:55 -0700 tests: add more tests for names rendering in `hg show work`
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Jun 2017 14:44:55 -0700] rev 33061
tests: add more tests for names rendering in `hg show work` This demonstrates some missing features. This will also help verify that a subsequent change has the intended effect.
Sat, 24 Jun 2017 14:52:15 -0700 namespaces: record and expose whether namespace is built-in
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Jun 2017 14:52:15 -0700] rev 33060
namespaces: record and expose whether namespace is built-in Currently, the templating layer tends to treat each namespace as a one-off, with explicit usage of {bookmarks}, {tags}, {branch}, etc instead of using {namespaces}. It would be really useful if we could iterate over namespaces and operate on them generically. However, some consumers may wish to differentiate namespaces by whether they are built-in to core Mercurial or provided by extensions. Expected use cases include ignoring non-built-in namespaces or emitting a generic label for non-built-in namespaces. This commit introduces an attribute on namespace instances that says whether the namespace is "built-in" and then exposes this to the templating layer. As part of this, we implement a reusable extension for defining custom names on each changeset for testing. A second consumer will be introduced in a subsequent commit.
Sat, 24 Jun 2017 13:39:20 -0700 templatekw: expose color name in {namespaces} entries
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Jun 2017 13:39:20 -0700] rev 33059
templatekw: expose color name in {namespaces} entries Templates make use of a "log.<namespace>" label. The <namespace> value here differs from the actual namespace name in that the namespace itself is plural but the label/color value is singular. Expose the color name to the templating layer so log.* labels can be emitted for {namespaces}. As part of this, we refactored the logic to eliminate a gnarly comprehension. We store color names in their own dict because the lookup can occur in tight loops and we shouldn't have to go to repo.names[ns] multiple times for every changeset.
Sat, 24 Jun 2017 12:47:25 -0700 show: construct changeset templater during dispatch
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Jun 2017 12:47:25 -0700] rev 33058
show: construct changeset templater during dispatch Previously, we constructed a formatter from a specific template topic. Then from show() we reached into the internals of the formatter to resolve a template string to be used to construct a changeset templater. A downside to this approach was it limited us to having the entire template defined in a single entry in the map file. You couldn't reference other entries in the map file and this would lead to long templates and redundancy in the map file. This commit teaches @showview how to instantiate a changeset templater so we can construct a templater with full access to the map file. To prove it works, we've split "showwork" into components.
Sat, 24 Jun 2017 11:47:26 -0700 cmdutil: use named arguments for changeset_templater.__init__
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Jun 2017 11:47:26 -0700] rev 33057
cmdutil: use named arguments for changeset_templater.__init__ This will make the API more extensible and easier to use.
Thu, 22 Jun 2017 21:45:32 -0700 bundle: inline applybundle1()
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 21:45:32 -0700] rev 33056
bundle: inline applybundle1() We have now gotten rid of all but one caller, so let's inline it there.
Thu, 22 Jun 2017 15:00:19 -0700 bundle: make applybundle() delegate v1 bundles to applybundle1()
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 15:00:19 -0700] rev 33055
bundle: make applybundle() delegate v1 bundles to applybundle1()
Thu, 22 Jun 2017 21:27:57 -0700 bundle: transpose transaction scope with bundle type switch
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 21:27:57 -0700] rev 33054
bundle: transpose transaction scope with bundle type switch This moves the transaction with-statements outside of the per-bundle-version switches, so the next patch will be a little simpler.
Thu, 22 Jun 2017 15:03:13 -0700 unbundle: move BundleUnknownFeatureError exception handling out
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 15:03:13 -0700] rev 33053
unbundle: move BundleUnknownFeatureError exception handling out This just moves the BundleUnknownFeatureError exception handling one level up so we collect the bundle2.applybundle{,1}() calls together. applybundle1() will never throw the exception, so it should have no functional consequence.
Wed, 21 Jun 2017 21:08:48 -0700 bundle: make applybundle1() return a bundleoperation
Martin von Zweigbergk <martinvonz@google.com> [Wed, 21 Jun 2017 21:08:48 -0700] rev 33052
bundle: make applybundle1() return a bundleoperation See previous commit for motivation. It already lets us share a little bit more code in commands.py.
Fri, 16 Jun 2017 10:25:11 -0700 bundle: add a applybundle1() method
Martin von Zweigbergk <martinvonz@google.com> [Fri, 16 Jun 2017 10:25:11 -0700] rev 33051
bundle: add a applybundle1() method This is one step towards removing a bunch of "if isinstance(gen, unbundle20)" by treating bundle1 and bundle2 more similarly. The name may sounds ironic for a method in the bundle2 module, but I didn't think it was worth it yet to create a new 'bundle' module that depends on the 'bundle2' module. Besides, we'll inline the method again later.
Thu, 22 Jun 2017 15:59:07 -0700 bundle: extract _processchangegroup() method
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 15:59:07 -0700] rev 33050
bundle: extract _processchangegroup() method The new method applies the changegroup and fills in op.records, sharing a little bit of code between the two callers. We'll add another caller soon.
Thu, 22 Jun 2017 14:04:13 -0700 bundle: make combinechangegroupresults() take a bundleoperation
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 14:04:13 -0700] rev 33049
bundle: make combinechangegroupresults() take a bundleoperation Both callers have a bundleoperation. Passing it in lets us share a bit more code.
Thu, 22 Jun 2017 13:58:20 -0700 bundle: move combineresults() from changegroup to bundle2
Martin von Zweigbergk <martinvonz@google.com> [Thu, 22 Jun 2017 13:58:20 -0700] rev 33048
bundle: move combineresults() from changegroup to bundle2 The results only need to be combined if they come from a bundle2. More importantly, we'll change its argument to a bundleoperation soon, and then it definitely will no longer belong in changegroup.py.
Wed, 21 Jun 2017 14:42:04 -0700 bundle: remove 'op' argument from applybundle()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 21 Jun 2017 14:42:04 -0700] rev 33047
bundle: remove 'op' argument from applybundle() No callers pass in an operation.
Sat, 24 Jun 2017 10:31:41 -0700 test-rebase-conflicts: add a test case about turning obsstore on and off
Jun Wu <quark@fb.com> [Sat, 24 Jun 2017 10:31:41 -0700] rev 33046
test-rebase-conflicts: add a test case about turning obsstore on and off Turning obsstore and allowunstable on, rebase will skip the "can't remove original changesets with unrebased descendants" check. Then rebase could be interrupted (merge conflict), and the user has a chance to turn off obsstore. If rebase continues, the current code may strip irrelevant commits (in the test case added, "C" got stripped unexpectedly). The test case reproduces issue5606. It will be fixed by the "multidest" rebase refactoring being reviewed. The test case itself is relatively separate from the rebase refactoring, therefore sent separately hoping to reduce the number of patches of the main rebase series.
Sat, 24 Jun 2017 15:50:13 -0400 merge with stable
Augie Fackler <augie@google.com> [Sat, 24 Jun 2017 15:50:13 -0400] rev 33045
merge with stable
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip