Boris Feld <boris.feld@octobus.net> [Wed, 06 Jun 2018 01:03:10 +0200] rev 39400
shelve: handle shelved node on unfiltered repository
To build a version of shelve that use hiding instead of stripping, we need
shelve to be able to find these revisions. This it does not hurt the bundle
version, so we introduce the necessary code in the relevant place.
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 11:47:32 +0200] rev 39399
shelve: store shelved node in a new data file
It is useful for a version of shelve not based on bundle and strip. Having
more data does not hurt the bundle based case so we introduce it in all cases
before doing more rework.
We also keep storing the patch using another method.
note: We could have this metadata file list all the file involved in the
shelve and use that for cleanup. This would be more future proof than having a
hard-coded list of file to purge. However, this is an adventure for another
series.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 16:33:30 +0900] rev 39398
templatekw: add {path} keyword to host documentation
It's hidden since I'm not sure if filectx templates can be a thing. The plan
is to add {status}, {size}, etc., which are usable within {files % ...}
context.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 16:51:25 +0900] rev 39397
status: rename {copy} to {source} for compatibility with {file_copies} (BC)
.. bc::
``{copy}`` in status command template is renamed to ``{source}``.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 16:44:16 +0900] rev 39396
formatter: rename {abspath}/{file} to {path}, and drop relative {path} (BC)
Note that {path} in status is either relative-to-cwd or repository-absolute
depending on the command argument and config knob, which can't be reproduced
by using the {path|relpath} filter. The default template is updated to always
use a relative path.
.. bc::
``{abspath}`` and ``{file}`` in generic templates are renamed to ``{path}``.
Any ``{path}`` is a repository-absolute path. Use ``{path|relpath}`` to
convert it to a filesystem path.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 16:27:09 +0900] rev 39395
templatekw: alias {name} of file copies dict to {path}
For the same reason as the previous patch. We might want some hack to
support {source.path}, {source.rev}, etc., but that's a different issue.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 16:14:18 +0900] rev 39394
templatekw: alias {file} of files list to {path}
This is a part of the name unification. All {path}s will be changed to
repository-absolute (i.e. canonical) paths.
https://www.mercurial-scm.org/wiki/GenericTemplatingPlan#Dictionary
Pulkit Goyal <pulkit@yandex-team.ru> [Wed, 29 Aug 2018 18:52:09 +0300] rev 39393
copies: improve logic of deciding copytracing on based of config options
Few months ago or maybe a year ago, I imported Fb's heuristics based copytracing
algorithms. While importing that, I renamed `experimental.disablecopytrace` with
`experimental.copytrace` and the behavior of the new config option was like
this:
* "heuristics" : Fb's heuristic copytracing algorithm
* "off" : copytracing is turned off
* something else: copytracing is on
This is the behavior right now also and this is bad because it hardcodes the
string 'off' to turn off the copytracing. On big repositories, copytracing is
very slow and people wants to turn copytracing off. However if the user sets it
to 'False', 'Off', '0', none of them is going to disbale copytracing while they
should.
I lacked the understanding of why this can be bad when I coded it.
After this patch, the new behavior of the config option will be:
* "heuristics": Fb's heuristic copytracing algorithm
* '0', 'false', 'off', 'never', 'no', 'NO', all the values which
repo.ui.configbool() evaluates to False: copytracing in turned off
* something else: copytracing is on
Since 'off' still evaluates to copytracing being turned off, this is not BC.
Also the config option is experimental.
Differential Revision: https://phab.mercurial-scm.org/D4416
Pulkit Goyal <pulkit@yandex-team.ru> [Thu, 30 Aug 2018 13:29:03 +0300] rev 39392
relnotes: enable extension when running releasenotes command
Last night, when I was working on different machine, the test worked, now on a
different machine it does not. Looks like we should make sure releasenotes
extension is loaded.
Differential Revision: https://phab.mercurial-scm.org/D4425
Pulkit Goyal <pulkit@yandex-team.ru> [Thu, 30 Aug 2018 13:11:15 +0300] rev 39391
narrow: rename getbundlechangegrouppart_nonellipsis function
The function is renamed to getbundlechangegrouppart_widen as per suggestion in
D4383. The motivation is such that we can evolve the function into a handler for
new wire-protocol command.
Differential Revision: https://phab.mercurial-scm.org/D4424
Pulkit Goyal <pulkit@yandex-team.ru> [Thu, 30 Aug 2018 13:05:59 +0300] rev 39390
tests: rename test-narrow-widen-non-ellipsis to match current names
The test is renamed to test-narrow-widen-no-ellipsis (note non -> no), to match
with test-narrow-clone-no-ellipsis.t.
Follows up on D4382.
Differential Revision: https://phab.mercurial-scm.org/D4423
Pulkit Goyal <pulkit@yandex-team.ru> [Wed, 29 Aug 2018 20:38:38 +0300] rev 39389
contrib: byteify perf.py file
This is done using contrib/byteify-strings.py. There is just one extra change
done to make sure lines don't get longer than 80 chars.
# skip-blame because just b'' prefixes.
Differential Revision: https://phab.mercurial-scm.org/D4422
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Aug 2018 16:57:18 -0700] rev 39388
tests: use {rev} instead of {node|short} and (glob) in narrow tests
I think we used {node|short} because they were first written for only
flat manifests and we didn't think to change the format when we
started testing tree manifests.
Differential Revision: https://phab.mercurial-scm.org/D4421
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Aug 2018 15:49:11 -0700] rev 39387
shortest: fix an off-by-1 when disambiguating against revnums
Revision "5" is an unambiguous hex prefix in a repo with 5 revisions;
it's only "4" and lower that are ambiguous.
Differential Revision: https://phab.mercurial-scm.org/D4420
Matt Harbison <matt_harbison@yahoo.com> [Wed, 29 Aug 2018 22:53:44 -0400] rev 39386
filemerge: fix an i18n comment typo
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 27 Aug 2018 14:08:18 +0300] rev 39385
tests: add flat manifest case in test-narrow-widen-non-ellipsis.t
We had this test with tree manifest only because the tests were broken and we
were fixing them and maintaing two different cases of broken tests was bit hard.
Now that things work fine, let's add the flat manifest case.
The test shows that things work fine in both cases.
Differential Revision: https://phab.mercurial-scm.org/D4385
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 27 Aug 2018 14:02:48 +0300] rev 39384
narrow: update the narrowspecs to new ones after pulling when widening
The ellipsis case updates the new narrowspecs at bundle2 handling code, and
non-ellipsis widening didn't use to work and never set the new narrowpats.
Previous pacth added server side logic for widening without ellipsis. This patch
adds the missing repo.setnarrowpats() so that we set the new narrowpats after
widening in non-ellipsis cases also.
This makes widening with non-ellipsis case work but there are certain things
which we can improve.
Differential Revision: https://phab.mercurial-scm.org/D4384
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 26 Aug 2018 20:20:34 +0300] rev 39383
narrow: add server logic to send cg while widening without ellipsis
Before this patch, if you try to widen a narrow clone without ellipsis enabled,
it will be broken and the exchange.pull() done by tracked command to widen the
clone will be no-op because no custom logic exists for this and server sees that
we have all csets and it says `no changes found`.
The widening with ellipsis send KILL for existing changegroups and send new
changegroups because of the change in ellipsis hash, but we can prevent that in
non-ellipsis cases.
This patch adds server side logic to send the changegroups for the changesets
which are on the client again with filelogs and manifests for the new includes.
This is a very starting implementation and we send changegroups and manifests
too while we can prevent them.
Following things can definitely be improved in the logic this patch adds:
1) Send just the filelogs and treemanifests
2) Send the filelogs only for the additions in the include
I tried 1) here but the code is coupled tightly and the way I was able to do
that was hacking into the changegroup generation code in a very dirty way, like
adding conditionals and preventing the yield.
This patch also adds a 'widen' kwarg to prevent other commands except widening
to go through that codepath.
The test changes demonstrate that the new implementation is correct and fixes
things.
Differential Revision: https://phab.mercurial-scm.org/D4383
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 27 Aug 2018 13:30:08 +0300] rev 39382
tests: add test to show widening is broken without ellipsis
This patch adds a test to show that widening a narrow clone is broken if
ellipsis is disabled.
I don't think I can add cases to existing test-narrow-widen.t and check-in a
failing version of that. So I created a copy. Once the test is fixed, we can
merge this new test file back into the original one using testcases.
Also, this is just testing treemanifest case because having two cases and both
or are failing with different outputs is a bit hard to manage.
This is important because upcoming patches will try to fix the broken part.
Differential Revision: https://phab.mercurial-scm.org/D4382
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 09:05:56 -0700] rev 39381
stringutil: emit multiple chunks when pretty printing
This avoids concatenating output inside pprintgen() itself. But
the real reason for this is it will make it easier to add
indentation, as we'll need to account for indentation when emitting
each individual object in a collection.
The verbosity of this code compared to the original is a bit
unfortunate. But I suppose this is the price to pay for having
nice things (streaming and indenting).
We could probably abstract the "print a collection" bits into a
generic function to avoid some duplication. But I'm not
overly inclined to do this.
Differential Revision: https://phab.mercurial-scm.org/D4398
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 09:02:39 -0700] rev 39380
stringutil: refactor core of pprint so it emits chunks
This commit splits the core of pprint() to a new function that is
a generator of chunks instead of a function returning a single
value. This will make it possible to stream output without waiting for
all data to be formatted first. And it will make it easier to
implement support for indenting.
Differential Revision: https://phab.mercurial-scm.org/D4397
Augie Fackler <augie@google.com> [Wed, 25 Jul 2018 13:28:36 -0400] rev 39379
contrib: import the relnotes script from the release-tools repo
I figure this makes more sense to keep in the main repo, as it's a
guide of sorts on how to use the releasenotes extension in the
presence of commits that don't get relnotes annotations.
Ported to Python 3, cleaned up some logic in a few places, but for the
most part it's what we've been using for years.
Differential Revision: https://phab.mercurial-scm.org/D4291
Augie Fackler <augie@google.com> [Wed, 25 Jul 2018 13:45:28 -0400] rev 39378
hghave: move from requiring the PYTHON3 env var to looking for `python3`
We're starting to write new utility scripts in Python 3, and I think
it's reasonable to expect `python3` to be something we should use if
it's present. I wrote the regex to specifically ban Python 3 prior to
Python 3.5 because we won't ever support that.
I moved the only test that was using $PYTHON3 to just using `python3`
directly.
Differential Revision: https://phab.mercurial-scm.org/D4290
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Aug 2018 09:59:08 -0700] rev 39377
rename: return error status if any rename/copy failed
Ever since 447ea621e50e (copy: propagate errors properly, 2007-12-06),
we have returned an error status if the source file did not
exist. That commit did not return error status for any other errors,
and it's unclear if that was on purpose or not. It seems to me like we
should return an error in the other cases to, so that's what this
patch does.
Differential Revision: https://phab.mercurial-scm.org/D4419
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Aug 2018 09:54:50 -0700] rev 39376
rename: emit hint about using --after consistently
Both the code and the message for the case where the source file was
missing was inconsistent with the other similar messages.
Differential Revision: https://phab.mercurial-scm.org/D4418
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Aug 2018 09:50:39 -0700] rev 39375
rename: quote hg commands in warnings
I think we usally use single quotes around hg commands in messages.
Differential Revision: https://phab.mercurial-scm.org/D4417
Anton Shestakov <av6@dwimlabs.net> [Tue, 21 Aug 2018 21:05:01 +0800] rev 39374
zsh_completion: complete hg files
Differential Revision: https://phab.mercurial-scm.org/D4361
Anton Shestakov <av6@dwimlabs.net> [Tue, 21 Aug 2018 14:49:02 +0800] rev 39373
zsh_completion: adjust usage of common options
addremove, remove and serve accept -S/--subrepos, and purge actually doesn't.
qnew accepts -I/--include and -X/--exclude.
qrefresh accepts -D/--currentdate, -U/--currentuser, -d/--date and -u/--user.
rebase accepts -n/--dry-run.
Differential Revision: https://phab.mercurial-scm.org/D4360
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Sun, 26 Aug 2018 15:23:03 -0400] rev 39372
resolve: make condition clearer, and able to handle a new flag
Differential Revision: https://phab.mercurial-scm.org/D4377
Boris Feld <boris.feld@octobus.net> [Wed, 06 Jun 2018 00:48:24 +0200] rev 39371
shelve: drop mention of obsshelve file
Core shelve extension does not use obsolescence, we clean up this unused file
before adding a new info file.
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 11:40:40 +0200] rev 39370
shelve: rename method for data write/read
There are no user of this code nor any code related to obsshelve in the
extensions right now, so we rename the function before using them.
Note: The shelvedfile looks a bit strange. We should probably refactor it,
however, this is an adventure for another series.
Boris Feld <boris.feld@octobus.net> [Thu, 23 Aug 2018 00:51:38 +0200] rev 39369
shelve: move createcmd next to _docreatecmd
It is simpler not to have to jump around the file all the time.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 13:34:04 +0900] rev 39368
minirst: filter blocks by full path to section
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 13:34:58 +0900] rev 39367
minirst: mark getsections() as an internal helper
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:42:10 +0900] rev 39366
help: rewrite parsing of help topic to not drop section name with dots
A subtopic is no longer lowercased since it should be considered a part of
a topic path, not a section filter.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:48:02 +0900] rev 39365
test-help: add tests showing that sections can't be filtered by dotted name
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 08:41:36 +0200] rev 39364
revlogdeltas: move finddeltainfo filtering inside _candidategroups
Now all "simple" filtering logic is gathered in one place. The `finddeltainfo`
method is more straightforward and the `_candidate_groups` function knows more
about filtering revisions before we compute a delta against them.
Boris Feld <boris.feld@octobus.net> [Wed, 29 Aug 2018 09:55:11 -0700] rev 39363
revlogdeltas: split candidate groups selection from the filtering logic
The group iteration has two main components:
* walking candidates, the logic that we are about to extend to build
intermediate snapshots,
* Making sure we test diffs against interesting bases. No duplicated tests,
skipping empty revisions, etc.
We split `_candidategroups` to separate the two components. This achieves two
goals:
* It will be simpler to update the walking logic for intermediate snapshots,
* We can gather the filtering logic from `finddeltainfo` into
`_candidategroups` to centralize it.
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 07:32:05 +0200] rev 39362
revlogdeltas: pass revision number to _candidatesgroups
The `_candidates_groups` logic works on revisions, so the nodes are currently
just converted to revs at the top of the function. It seems cleaner to instead
pass revision numbers to the function.
Having this conversion out of the way will help for further cleanups.
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 07:27:34 +0200] rev 39361
revlogdeltas: extract _getcandidaterevs in a function
The logic barely uses the object it is attached to. This is an important
function that we will clean up in the coming changesets. Moving it at the top
level helps us with that cleanup.
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 04:38:57 +0200] rev 39360
revlogdeltas: always return a delta info object in finddeltainfo
Previously, the method returned `None` when a full snapshot was needed. The
caller had to determine how to produce one itself.
In practice, building a `_deltainfo` object for a full snapshot is simple. So
we build it at the `finddeltainfo` level and always return a `_deltainfo`
object.
The caller can now simply process the `_deltainfo` return in all cases.
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 04:20:34 +0200] rev 39359
revlogdeltas: move special cases around raw revisions in finddeltainfo
The method already contains logic for no-diff cases. Having everything in the
same place is more consistent and unlocks other code improvements.
Boris Feld <boris.feld@octobus.net> [Wed, 29 Aug 2018 09:41:04 -0700] rev 39358
revlogdeltas: extra fulltext building in its own function
The process of building a full text from a delta is complex enough to deserve
isolation. The previous function mixed cache management and computation, we
now have clearer boundaries and simpler functions/methods.
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 02:53:42 +0200] rev 39357
revlog: split functionality related to deltas computation in a new module
The revlog module is getting big and this logic is getting more and more
advanced. Moving it to `mercurial.revlogutils.deltas` split a lot off
revlog.py and will help this logic to become less interleaved with revlog.
The code is simply moved without modification (but for namespace changes).
Refactoring and improvement will be made in later changesets.
Boris Feld <boris.feld@octobus.net> [Thu, 16 Aug 2018 02:08:13 +0200] rev 39356
revlog: split constants into a new `revlogutils.constants` module
We want to split some logic out of the main revlog file (the delta computing
logic). However, this logic needs access to multiple constants related to the
revlog. So we move all revlog related constants into a new module that could
be imported from multiple places.
We don't copy the file (preserving blame history) because there are only a few
moving lines. Also, copying the file would result in annoying merge conflicts
with ongoing work from others contributors.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 12 Jul 2018 12:11:20 -0700] rev 39355
rebase: skip extinct revisions even if it has no successor in rebase set
Differential Revision: https://phab.mercurial-scm.org/D4408
Martin von Zweigbergk <martinvonz@google.com> [Wed, 11 Jul 2018 12:26:44 -0700] rev 39354
tests: add test showing that rebase of extinct commit with successor fails
As the test case shows, attempting to rebase a commit that has a
successor that is not in the rebase set and not in the destination
currently fails because it "will cause divergences". However, it
doesn't seem like there's any harm in skipping the extinct commit. I
suspect this case missed simply because extinct revisions are usually
hidden.
Differential Revision: https://phab.mercurial-scm.org/D4407
Martin von Zweigbergk <martinvonz@google.com> [Mon, 27 Aug 2018 10:44:43 -0700] rev 39353
tests: add log output after stripping for context for next test
It's not obvious what the repo state will be after stripping some
nodes and obsmarkers, so let's include the log output to make it
easier to follow the test case that comes after.
Differential Revision: https://phab.mercurial-scm.org/D4406
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Aug 2018 15:09:18 -0700] rev 39352
obsutil: make sure "addedmarkers" is not None in getobsoleted()
Similar reasoning as in 52e6171ec822 (obsutil: make sure "addedrevs"
is not None in getobsoleted(), 2018-08-25).
Differential Revision: https://phab.mercurial-scm.org/D4411
Martin von Zweigbergk <martinvonz@google.com> [Tue, 28 Aug 2018 13:29:47 -0700] rev 39351
revsetlang: fix position of '-' in spaceless 'a-b' expressions
I don't know if there is an observable difference, but it seems like
an obvious fix.
Differential Revision: https://phab.mercurial-scm.org/D4410
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 23:05:23 +0000] rev 39350
tests: mark manifestfulltextcache as conditional on revlog store
This file is currently specific to the revlog store. Other stores
may not implement it. Mark it as such in test output.
Differential Revision: https://phab.mercurial-scm.org/D4395
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 20:23:45 +0000] rev 39349
manifest: use fulltextcache instead of _fulltextcache
fulltextcache is part of the documented interface and is aliased
to _fulltextcache.
Differential Revision: https://phab.mercurial-scm.org/D4394
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 19:58:06 +0000] rev 39348
manifest: rename manifestlog._revlog to _rootstore
Because it may not be a revlog.
Differential Revision: https://phab.mercurial-scm.org/D4393
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 19:53:02 +0000] rev 39347
manifest: use public API for obtaining storage object
We should not be accessing private attributes on the manifestlog,
since its behavior is governed by an interface.
Differential Revision: https://phab.mercurial-scm.org/D4392
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 08:58:25 -0700] rev 39346
perf: add function for obtaining manifest revision
This will use the modern API if available or fall back to the
legacy direct revlog access case. Without this, the perf command
won't work on all code bases.
Differential Revision: https://phab.mercurial-scm.org/D4391
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 19:45:39 +0000] rev 39345
perf: use storage API for resolving manifest node
lookup() isn't part of the storage API. And this code shouldn't
be accessing manifestlog._revlog directly for the modern code base.
So let's port it to the modern API.
Note that the previous code was busted for cases where we needed
to call lookup() because lookup() isn't exposed by manifestrevlog
any more.
This change is strictly BC breaking because we no longer support
resolving partial nodes. But it is a perf* command and I don't
think we should flag the change as such.
Differential Revision: https://phab.mercurial-scm.org/D4390
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 08:52:33 -0700] rev 39344
manifest: change terminology for storage in context classes
Storage may not be backed by revlogs. So it is wrong to refer
to storage as "revlog" or use abbreviations like "rl."
This commit replaces revlog terminology in manifest context classes
and starts referring to things as "store" or "storage."
Differential Revision: https://phab.mercurial-scm.org/D4389
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 08:55:24 -0700] rev 39343
manifest: don't go through revlog to access node symbols
The revlog module re-exports some node.* symbols courtesy of
importing them. Let's access the node.* symbols via our local
import.
Differential Revision: https://phab.mercurial-scm.org/D4388
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 15 Aug 2018 16:50:44 +0000] rev 39342
manifest: make tree a public attribute
changegroup generation accesses this attribute. We should make it
public and expose it on the interface.
Differential Revision: https://phab.mercurial-scm.org/D4387
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 27 Aug 2018 10:15:15 -0700] rev 39341
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
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Sun, 26 Aug 2018 13:09:35 -0400] rev 39340
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
Yuya Nishihara <yuya@tcha.org> [Wed, 22 Aug 2018 20:52:36 +0900] rev 39339
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.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 13:13:06 +0900] rev 39338
minirst: remove unused function decorateblocks()
It was added at ee6988aea74e "minirst: add decorateblocks search helper",
but it's been unused since then.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:11:19 +0900] rev 39337
minirst: make format() simply return a formatted text
It's a source of bugs to change the type of the return value conditionally.
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:20:43 +0900] rev 39336
help: reorder section filtering flow to not format help text twice
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 12:06:07 +0900] rev 39335
help: inline minirst.format()
I'm going to make minirst.format() always returns a formatted text, not
text | (text, pruned).
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 11:43:05 +0900] rev 39334
minirst: extract function that formats parsed blocks as plain text
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 11:39:52 +0900] rev 39333
minirst: unindent "if True" block in filtersections()
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Aug 2018 11:38:56 +0900] rev 39332
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.
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 20:19:27 +0900] rev 39331
bookmarks: adjust exception type so present(bookmark(.)) works as expected
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 20:16:28 +0900] rev 39330
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.
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 15:33:15 +0900] rev 39329
pycompat: remove membershiprange which is no longer used
Backed out changeset 45e05d39d9ce
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 15:28:48 +0900] rev 39328
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.
Yuya Nishihara <yuya@tcha.org> [Sat, 25 Aug 2018 15:19:43 +0900] rev 39327
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.
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 18:13:19 +0200] rev 39326
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.
Boris Feld <boris.feld@octobus.net> [Thu, 24 May 2018 09:59:10 +0200] rev 39325
phases: add a repository requirement about internal phase
For internal changeset to be properly hidden, the client version needs to
support it. So we introduce a new repository requirement that will make sure
clients touching a repository that uses internal phase supports the feature.
Boris Feld <boris.feld@octobus.net> [Sat, 25 Aug 2018 01:19:48 +0200] rev 39324
phases: add an internal phases
The phase is meant to be used for internal commit that are a byproduct of
command operation (eg:shelve).
This changeset focus on getting the most important feature in, more advanced
API is to be introduced in later changesets.
The phase approach to handle internal has multiple advantages:
* simple to implement, reuse optimized code,
* fits well with existing phases. We don't want internal changeset to be
exchanged or served.
* easy to extend to for lifecycle handling.
More thinking about internal changeset at https://www.mercurial-scm.org/wiki/InternalsPlan
We add this new phases with a high number to leave some room to possible other
phases. We also try out playing with the idea of "flag" for phases, each flag
would convey a distinct meaning. We can drop the flag idea in the future
(keeping the existing numbers). The flag property should still move in a
monotonic direction (enabled -> disabled) or be immutable like the "internal"
flag.
To simplify the addition of this new phase, we introduce many placeholder
phases. They are not meant to be used for now. Keeping `allphases` as a list
ensure existing algorithm works fine.
The full performance impact of adding that many hollow phases is unclear so
far. The impact on phase computation is visible but not worrisome.
Runnin `hg perfphase` in my mercurial development repository.
Before: ! wall 0.001807 comb 0.000000 user 0.000000 sys 0.000000 (median of 1597)
after: ! wall 0.001906 comb 0.000000 user 0.000000 sys 0.000000 (median of 1521)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 22 Aug 2018 11:58:36 -0700] rev 39323
stringutil: teach pprint() to recognize generators
Otherwise they get serialized as e.g.
<generator object X at 0x7f543d3d68c0>
Differential Revision: https://phab.mercurial-scm.org/D4396
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Mon, 27 Aug 2018 16:03:00 -0400] rev 39322
commitextras: no need to special case extras=[]
Differential Revision: https://phab.mercurial-scm.org/D4405
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Mon, 27 Aug 2018 16:01:55 -0400] rev 39321
commitextras: work nicely with other extensions
Before this change, it doesn't add these extra fields when loaded
alongside another extension that does a bunch of things, including
wrapping commit.
I did not investigate exactly why, but
- the documentation of extensions.wrapfunction says to use subclassing
to play nicely with other extensions
- using subclassing does make commitextras work when loaded alongside
my other extension
Differential Revision: https://phab.mercurial-scm.org/D4404
Boris Feld <boris.feld@octobus.net> [Sat, 25 Aug 2018 11:20:13 +0200] rev 39320
phases: simplify revset in updatephases
(Pointed by Yuya Nishihara)
Anton Shestakov <av6@dwimlabs.net> [Tue, 28 Aug 2018 00:32:10 +0800] rev 39319
context: use new names for unstable changesets in docstrings
Plus slight corrections.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Aug 2018 08:45:18 -0700] rev 39318
index: embed nodetree in index object to avoid reference cycle
Since the index has a reference to a nodetree and the nodetree has a
reference back to the index, there is a reference cycle, so the index
(and its nodetree) can never be freed. This patch fixes that by making
"nodetree" a plan C struct that the index can embed, and also
introduces a new "nodetreeObject" that is a Python type wrapping the
nodetree struct.
Thanks to Yuya for noticing this and for suggesting the solution.
All tests passed on the first attempt once it compiled (I guess C is
like Haskell in this regard?).
Differential Revision: https://phab.mercurial-scm.org/D4372
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 27 Aug 2018 20:45:52 +0300] rev 39317
catapipe: make the file executable
This silences test-check-execute.t.
Differential Revision: https://phab.mercurial-scm.org/D4403
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 27 Aug 2018 20:41:31 +0300] rev 39316
run-tests: fix the remaining failure of test-run-tests.py
Looks like durin42 misindented this. This makes test-run-tests.py passes but I
cannot reason why.
Differential Revision: https://phab.mercurial-scm.org/D4402
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 27 Aug 2018 20:39:32 +0300] rev 39315
run-tests: don't append rtendtracing logs if pipe is /dev/null
If HGCATAPULTSERVERPIPE is not set, we set it to /dev/null, so we need to make
sure the value is not /dev/null before appending logs.
This fixes some of test-run-tests.t failures.
Differential Revision: https://phab.mercurial-scm.org/D4401
Sushil khanchi <sushilkhanchi97@gmail.com> [Mon, 27 Aug 2018 04:31:09 +0530] rev 39314
cmdutil: fix typo in revert()
Differential Revision: https://phab.mercurial-scm.org/D4381
Kyle Lippincott <spectral@google.com> [Thu, 23 Aug 2018 13:33:19 -0700] rev 39313
log: respect graphshorten on terminal nodes (collapsing o-~ to just o~)
Internally we have a custom template that's inspired by ones that we have seen
in the community. Normally, this looks something like:
o 0834ec17 spectral tip
| crecord: support x to toggle single, X to toggle a range
o ee932990 spectral @
| filemerge: allow specifying $hgeditor as merge-tools.X.executable
@ 66f04611 matt_harbison
| cext: fix truncation warnings in revlog on Windows
o 42cc76d0 matt_harbison
| cext: fix revlog compiler error on Windows
~
o bd63ada7 stable boris
| phases: drop dead code in `newheads`
~
With graphshorten on, and the descriptions of the public nodes hidden, it looks
like this, note that the commits right before the ~ are still "full height":
o 0834ec17 spectral tip
| crecord: support x to toggle single, X to toggle a range
o ee932990 spectral @
| filemerge: allow specifying $hgeditor as merge-tools.X.executable
@ 66f04611 matt_harbison
o 42cc76d0 matt_harbison
|
~
o bd63ada7 stable boris
|
~
This patch makes them look like this, removing the | but keeping the ~:
o 0834ec17 spectral tip
| crecord: support x to toggle single, X to toggle a range
o ee932990 spectral @
| filemerge: allow specifying $hgeditor as merge-tools.X.executable
@ 66f04611 matt_harbison
o 42cc76d0 matt_harbison
~
o bd63ada7 stable boris
~
This originally removed the ~s entirely, but this was determined to be too much
information loss and potentially confusing. This would have looked like the
following (note that the last commit is on a different branch than all of the
ones above it, and they are *not* linearly related):
o 0834ec17 spectral tip
| crecord: support x to toggle single, X to toggle a range
o ee932990 spectral @
| filemerge: allow specifying $hgeditor as merge-tools.X.executable
@ 66f04611 matt_harbison
o 42cc76d0 matt_harbison
o bd63ada7 stable boris
Differential Revision: https://phab.mercurial-scm.org/D4363
Pulkit Goyal <pulkit@yandex-team.ru> [Sun, 26 Aug 2018 19:14:26 +0300] rev 39312
filemerge: fix the wrong placements of messages in prompt
Mistakenly, the local-changed-other-deleted-message was put in
other-change-local-deleted and vice versa. This followups on D4336.
Thanks to Yuya who spotted this.
Differential Revision: https://phab.mercurial-scm.org/D4375
Pulkit Goyal <pulkit@yandex-team.ru> [Sat, 25 Aug 2018 21:17:34 +0300] rev 39311
filemerge: print the filename in quotes in prompt
This is better as the filename is in quotes and user can understand better what
the filename is and what is important part in the prompt.
Differential Revision: https://phab.mercurial-scm.org/D4373
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 14 Aug 2018 17:00:32 +0000] rev 39310
filelog: remove proxies to revlog
These proxy attributes and methods were added to facilitate various
debug* and perf* commands. Now that cmdutil.openrevlog() returns
an actual revlog, we no longer need these on the filelog class.
There's probably a few other attributes that could be removed. But
this feels like a worthy start.
Differential Revision: https://phab.mercurial-scm.org/D4359
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 21 Aug 2018 00:01:54 +0000] rev 39309
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 39308
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 39307
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 39306
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 39305
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 39304
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 39303
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 39302
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 39301
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 39300
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 39299
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 39298
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 39297
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 39296
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.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 22 Aug 2018 14:22:59 +0900] rev 39295
help: revise explanation about capability check while selecting merge tool
This is follow up of 7c6044634957 and cded904f7acc.
This patch adds explanations about:
- notation in capability columns in the table
- how capabilities of external merge tools are treated
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 22 Aug 2018 14:08:27 +0900] rev 39294
filemerge: avoid putting translated text into docstring
This is follow up of my mistake in e09fad982ef5.
There is no merge tool, which has only one of binary or symlink
capabilities, but this patch lists up all combinations of them for
safety in the future. Maybe, it is too paranoid, though.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Wed, 22 Aug 2018 13:57:01 +0900] rev 39293
filemerge: make capability check for internal tools ignore merge-tools section
This is follow up of 4d7b11877dd0.
Before this patch, capability check of internal merge tools falls back
to _toolbool(), which examines configurations in "merge-tools" section.
But "hg help config" explicitly says that "merge-tools" section
configures external merge tools.
Therefore, this patch makes capability check for internal tools in
hascapability() always ignore configurations in merge-tools section.
In this patch, command line configurations below are added at tests in
tests/test-merge-tools.t, in order to confirm that explicit
configuration is intentionally ignored at tool selection.
--config merge-tools.:INTERNAL_TOOL.CAPABILITY=true
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Aug 2018 22:21:04 -0700] rev 39292
merge with stable
Kyle Lippincott <spectral@google.com> [Wed, 15 Aug 2018 14:41:27 -0700] rev 39291
copies: correctly skip directories that have already been considered
Previously, `if dsrc in invalid` would never be true, since we added
`dsrc +"/"` to invalid, not `dsrc` itself. Since it's much more common for
individual files (not whole directories) to be moved, it seemed cleaner to
delay appending the "/" until we know we have some directory moves to
actually consider.
I haven't benchmarked this, but I imagine this is a mild performance win.
Differential Revision: https://phab.mercurial-scm.org/D4284
Martin von Zweigbergk <martinvonz@google.com> [Fri, 24 Aug 2018 12:55:05 -0700] rev 39290
merge with stable
Kyle Lippincott <spectral@google.com> [Fri, 24 Aug 2018 10:19:31 -0700] rev 39289
match: make exactmatcher.visitchildrenset return file children as well
Previously, if we had an exactmatcher like ['foo.txt', 'a/bar.txt', 'a/b/c/baz.txt'], we'd
get back the following data:
'.': {'a'}
'a': {'b'}
'a/b': {'c'}
'a/b/c': 'this'
'a/b/c/d': set()
This was incorrect, since visitchildrenset explicitly says not to pay attention
to 'foo.txt' and 'a/bar.txt' by not returning them or 'this'. Given the near
impossibility of making visitchildrenset reliabbly produce only subdirectories,
a previous commit has made it documented and expected that visitchildrenset can
return a set containing both files and subdirectories to visit, instead of
implying/requiring that visitchildrenset() return 'this' if there are files to
visit. This makes the code for exactmatcher match this clarified documentation.
Differential Revision: https://phab.mercurial-scm.org/D4365
Kyle Lippincott <spectral@google.com> [Thu, 23 Aug 2018 18:04:15 -0700] rev 39288
match: document that visitchildrenset might return files
At least when using includematcher, and probably most matchers, we do not know
if a/b/f refers to a file 'f' in a/b, or a subdirectory 'f' in a/b, so most
matchers will return {'f'} for visitchildrenset('a/b'). Arguably, all matchers
could/should - for exactmatcher, we know that 'f' is a file, but there's no
reason to return 'this' for visitchildrenset('a/b') causing code to investigate
'a/b/x', for example.
Differential Revision: https://phab.mercurial-scm.org/D4364
Augie Fackler <augie@google.com> [Fri, 24 Aug 2018 10:13:27 -0700] rev 39287
util: make timedcm require the label (API)
Differential Revision: https://phab.mercurial-scm.org/D4350
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 17:15:51 -0400] rev 39286
cleanup: make all uses of timedcm specify what they're timing
It's not used in the timing itself, but it's valuable for the trace
events we emit.
Differential Revision: https://phab.mercurial-scm.org/D4349
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 17:13:35 -0400] rev 39285
util: make timedcm context manager also emit trace events
Differential Revision: https://phab.mercurial-scm.org/D4348
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:27:30 -0400] rev 39284
demandimport: instrument python 2 code with trace events
This causes the evaluation of an import in Python 3 to emit some trace
data. There's some interesting wrinkles in here, like the fact that
before we even hit dispatch we've demand-imported `sys` several times,
despite the fact that `sys` was already fully loaded as one of the
first few statements in the `hg` script. I don't think that's actually
costing us a ton of performance, but it's probably something we should
investigate fixing some day.
Differential Revision: https://phab.mercurial-scm.org/D4347
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:25:07 -0400] rev 39283
dispatch: have dispatch.dispatch and dispatch._runcatch emit trace events
Differential Revision: https://phab.mercurial-scm.org/D4345
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:24:20 -0400] rev 39282
tracing: new module to make tracing events in hg easier
This lives in hgdemandimport because I want to instrument a bunch of
low-level stuff including the bare `hg` script and demandimport, so it
can't live at a higher layer.
Differential Revision: https://phab.mercurial-scm.org/D4344
Augie Fackler <augie@google.com> [Tue, 21 Aug 2018 15:23:01 -0400] rev 39281
tests: add support for emitting trace events to run-tests
Right now this is pretty basic, but it's a start.
Differential Revision: https://phab.mercurial-scm.org/D4343