Gregory Szorc <gregory.szorc@gmail.com> [Tue, 21 Aug 2018 00:01:54 +0000] rev 39282
debugcommands: introduce debugrevlogindex (BC)
`hg debugindex` was originally invented for displaying revlog index
data and is highly tailored towards that. e.g. it accepts a --format
option to display index data for a particular revlog version and
displays things like offset and length.
As we support non-revlog storage, it makes sense for `hg debugindex`
to display generic index data and for there to exist storage-specific
or storage-aware debug* commands for dumping non-generic index data.
This commit effectively renames `hg debugindex` to
`hg debugrevlogindex` and replaces `hg debugindex` with a version that
is storage agnostic.
Tests using --format have been updated to use `hg debugrevlogindex`.
Output is backwards compatible. The replacement command uses the
formatter, which means output can be templatized.
At some point, we may want to tweak output (e.g. to add the revision
size). But I don't feel like taking a bigger BC break at the moment.
The renamed command/function had to be moved because check-code
enforces alphabetical ordering of commands in this file.
Differential Revision: https://phab.mercurial-scm.org/D4358
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 20 Aug 2018 23:08:57 +0000] rev 39281
debugcommands: use openstorage() in debugdata (BC)
Nothing we're doing here requires a revlog. So use openstorage().
.. bc::
`hg debugdata` no longer accepts the path to a revlog file.
Differential Revision: https://phab.mercurial-scm.org/D4357
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 20 Aug 2018 23:06:47 +0000] rev 39280
tests: use inline Python for revlog test
`hg debugdata` will soon stop accepting the raw path to a revlog file.
Adjust a test accordingly.
The changed test is for a security bug. So this should be reviewed
with scrutiny.
Differential Revision: https://phab.mercurial-scm.org/D4356
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 20 Aug 2018 21:01:05 +0000] rev 39279
debugcommands: use openstorage() in debugindexdot
And add test coverage for changelog and manifests.
Differential Revision: https://phab.mercurial-scm.org/D4355
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 14 Aug 2018 16:28:21 +0000] rev 39278
cmdutil: return a revlog from openrevlog() and split function
The filelog class is a wrapper around a revlog instance. I have plans
to give manifests and the changelog a similar treatment.
When filelog was ported away from revlog and when I started writing
patches to do the same for manifests, I noticed that a lot of
debug* and perf* commands were relying on low-level revlog APIs
like start(), end(), deltaparent(), etc. For filelog, I added these
to the interface, even though I didn't want to because they don't
belong on a generic storage interface.
For manifest (and eventually changelog), the pain is too much to bear.
We need to cut the tight coupling.
These debug* and perf* commands use cmdutil.openrevlog() to obtain
a revlog instance.
This commit effectively renames openrevlog() to openstorage(), adds
an argument to ensure a revlog instance is returned, and introduces a
replacement openrevlog() that calls openstorage() such that a revlog
instance is returned.
By doing things this way, we allow the debug* and perf* commands to
still work on revlog-based repositories without having to expose
low-level revlog APIs in the storage interfaces.
The practical side-effect of this on the current code base is we return
a revlog instance instead of a filelog. The manifest and changelog are
not affected at this time.
Some of filelog's storage APIs are different from revlog. For example,
read() strips the optional header containing copy/rename metadata. This
may impact some perf* commands. But I don't think the impact is
worth worrying about.
Upcoming commits will port existing consumers to openstorage(), where
appropriate.
This commit does cause some test regressions when using the simple
store. These will be fixed as commands are ported to use storage APIs.
.. api:: cmdutil.openrevlog() now returns a revlog instance or aborts
Previously, it would return a storage object, which may not be a
revlog instance.
Use the new cmdutil.openstorage() API to return an object conforming
to the storage interface of the thing you are accessing if you don't
need a revlog instance.
Differential Revision: https://phab.mercurial-scm.org/D4354
Augie Fackler <augie@google.com> [Mon, 20 Aug 2018 13:29:48 -0400] rev 39277
merge: improve interactive one-changed one-deleted message (
issue5550)
I like the wording from the bug, so I figured I'd package it up in a
change and see what people think.
Differential Revision: https://phab.mercurial-scm.org/D4336
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 17:19:27 +0200] rev 39276
bookmark: add an --active flag to display the active bookmark
There is currently no official simple way to retrieve the current bookmark. In
particular for automation.
We add a `--active` flag to the `hg bookmarks` command. When set, the command
display the current bookmark name if any or return 1.
For now, this flag is read-only. However sensible combinations exist with
`--delete`, `--rename` and `--rev` and can be implemented later.
Boris Feld <boris.feld@octobus.net> [Thu, 23 Aug 2018 01:48:39 +0200] rev 39275
phase: use `_phase` revset instead of string interpolation
The previous code was hackyer and assume all phases had an associated revset.
The later might no longer be true once we introduce more internal phase.
Boris Feld <boris.feld@octobus.net> [Thu, 23 Aug 2018 01:48:26 +0200] rev 39274
phase: expose a `_phase(idx)` revset
Internally phase related revset are calling the `_phase` function. We expose
it as an internal revset. This is useful to refer to phase in revset doing
debatable things around the phase name.
Boris Feld <boris.feld@octobus.net> [Thu, 23 Aug 2018 01:15:19 +0200] rev 39273
phase: handle phase with no command flag
Before this changeset, all existing phases have a corresponding flag on the `hg
phase` command. (eg: `hg phase --draft`).
After this changeset, a phase can exists without having an associated flag.
This is useful to introduce a new internal phase that we do not want to expose
to user.
Boris Feld <boris.feld@octobus.net> [Tue, 05 Jun 2018 20:47:52 +0200] rev 39272
phase: explicitly exclude secret phase and above
The comment explicitly mention the secret phase so we should as well use that in
the code.
Boris Feld <boris.feld@octobus.net> [Tue, 05 Jun 2018 18:16:07 +0200] rev 39271
phase: use `trackedphases` in `_getphaserevsnative`
Instead of manually listing secret and draft, simply use the `trackedphases`
constant. The constant is already used by `_getphaserevsnative`.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 24 Aug 2018 17:45:46 -0400] rev 39270
lfs: add a progress bar when searching for blobs to upload
The search itself can take an extreme amount of time if there are a lot of
revisions involved. I've got a local repo that took 6 minutes to push 1850
commits, and 60% of that time was spent here (there are ~70K files):
\ 58.1% wrapper.py: extractpointers line 297: pointers = extractpointers(...
| 57.7% wrapper.py: pointersfromctx line 352: for p in pointersfromctx(ct...
| 57.4% wrapper.py: pointerfromctx line 397: p = pointerfromctx(ctx, f, ...
\ 38.7% context.py: __contains__ line 368: if f not in ctx:
| 38.7% util.py: __get__ line 82: return key in self._manifest
| 38.7% context.py: _manifest line 1416: result = self.func(obj)
| 38.7% manifest.py: read line 472: return self._manifestctx.re...
\ 25.6% revlog.py: revision line 1562: text = rl.revision(self._node)
\ 12.8% revlog.py: _chunks line 2217: bins = self._chunks(chain, ...
| 12.0% revlog.py: decompressline 2112: ladd(decomp(buffer(data, ch...
\ 7.8% revlog.py: checkhash line 2232: self.checkhash(text, node, ...
| 7.8% revlog.py: hash line 2315: if node != self.hash(text, ...
| 7.8% revlog.py: hash line 2242: return hash(text, p1, p2)
\ 12.0% manifest.py: __init__ line 1565: self._data = manifestdict(t...
\ 16.8% context.py: filenode line 378: if not _islfs(fctx.filelog(...
| 15.7% util.py: __get__ line 706: return self._filelog
| 14.8% context.py: _filelog line 1416: result = self.func(obj)
| 14.8% localrepo.py: file line 629: return self._repo.file(self...
| 14.8% filelog.py: __init__ line 1134: return filelog.filelog(self...
| 14.5% revlog.py: __init__ line 24: censorable=True)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 22 Aug 2018 14:37:56 +0900] rev 39269
i18n: merge i18n comments of translatable texts correctly
Before this patch, i18n comments of translatable texts are lost at
creation of hg.pot file, if:
- same translatable text appears multiple times,
- the 1st appearance does not have i18n comment, and
- any of rest has it
For example, previous patch for filemerge.py adds translatable texts
with i18n comments, but these comments are lost, because:
- automatically added texts in docstring of internal merge tools are
picked up earlier than these translatable texts, because of
location in filemerge.py
- but docstring has no i18n comment
This patch makes addentry() of posplit merge i18n comments of later
translatable texts, in order to keep them at creation of hg.pot.