Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 15:55:50 -0700] rev 24940
revset: avoid returning duplicates when returning ancestors
Before this patch, _revancestors were giving false result when a revision was
duplicated in the input. Duplicated entry are rare but may happen when using the
`%lx` notation internally.
This series has no visible impact on the performance of the function according
to benchmark.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 16:21:30 -0700] rev 24939
revset: use an iterator instead of a dequeue in ancestors()
The dequeue was actually just used to be able to pop value one at a time.
Building the dequeue means we are reading all the input value at once at the
beginning of the evaluation. This defeat the lazyness of revset.
We replace the deque with iterator usage for the sake of simplicity and
lazyness.
This provide massive speedup to get the first result if the input set is big
max(::all())
before) wall 0.001917 comb 0.000000 user 0.000000 sys 0.000000 (best of 1115)
after) wall 0.000107 comb 0.000000 user 0.000000 sys 0.000000 (best of 22222)
Martin von Zweigbergk <martinvonz@google.com> [Wed, 06 May 2015 11:29:09 -0700] rev 24938
revset: return early when revs is empty
By introducing an early return in _revancestors() when revs is empty,
we make it so inputrev is never None, which simplifies the subsequent
code.
Pierre-Yves David <pierre-yves.david@fb.com> [Wed, 26 Mar 2014 16:14:30 -0700] rev 24937
revset: rename 'revsnode' to 'inputrev' in ancestors
We usually use 'node' for variable containing 20 bytes hash. There is nothing
nodish in this variable, so we rename it to "inputrev" as it old the next entry
of the iteration.
Pierre-Yves David <pierre-yves.david@fb.com> [Mon, 04 May 2015 12:36:48 -0700] rev 24936
revset: make generatorset.__nonzero__ lazy
The 'for r in self:' call could trigger full consumption of the generator while
we only need a single value. We also fast path if a single value got already
computed. See inline comment for more details.
This provide massive speedup for lazy operation using boolean testing.
max(::tip)
e5b507efb36e) wall 0.055609 comb 0.060000 user 0.060000 sys 0.000000 (best of 100)
after change) wall 0.000109 comb 0.000000 user 0.000000 sys 0.000000 (best of 19146)
Drew Gottlieb <drgott@google.com> [Tue, 05 May 2015 15:33:01 -0700] rev 24935
tests: test that we can convert to manifestv2 with clone
This just adds a test to ensure that we can convert a manifestv1 repo to a
manifestv2 repo (for future commits only) by means of a local clone.
Drew Gottlieb <drgott@google.com> [Mon, 13 Apr 2015 18:11:47 -0400] rev 24934
requires: move requires file writing func from localrepo to scmutil
The logic to read a requires file resides in scmutil, so it's only logical that
the logic to write the file should be there too.
And now I've typed logic too many times it no longer looks like a word.
Logically.
Durham Goode <durham@fb.com> [Tue, 05 May 2015 11:15:17 -0700] rev 24933
histedit: fix test-histedit-edit on vfat
test-histedit-edit was broken because it relied on the HGEDITOR script being
executable. Instead, lets just execute 'sh' and pass it the script to run. This
seems to be the pattern followed in other tests.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Sun, 03 May 2015 12:28:15 -0400] rev 24932
revset: don't error out if tokens parse as existing symbols
It makes perfect sense for tokens to parse as existing revset symbols
(revset functions), and doesn't break anything, since parsing symbols
as functions works correctly in the presence of parens. For example,
if "only" is a bookmark, this used to error out,
hg log -r "only(only, @)"
which shouldn't, as the inner "only" is unambiguously not a function.
So we just remove the symbolset function and replace its calling site
with the stringset function.
For the tests, we confirm that "date" and "only" are both parsed as
revision names both inside revset expressions (e.g. an expression
containing ::) and inside old-style revision expressions (e.g. those
containing the name of the revision alone).
Matt Mackall <mpm@selenic.com> [Tue, 05 May 2015 12:33:26 -0500] rev 24931
merge with stable
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Sun, 26 Apr 2015 13:43:01 -0400] rev 24930
test-command-template: minor clarification in comment
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Tue, 28 Apr 2015 15:29:15 -0400] rev 24929
test-command-template: test the phase template more precisely
The current test that greps for "phase:" only checks that the word
"phase" is in the output, but does not test that nothing else gets
added by this template. This improves these tests by showing a unified
Laurent Charignon <lcharignon@fb.com> [Tue, 28 Apr 2015 16:51:23 -0700] rev 24928
obsolete: speed up unstable computation
Speed up the computation of the unstable revset by using the not public()
revset. In another series of patches, we optimize the not public() revset and
together it leads to a 50-100x speedup on the computation of unstable() for
our big repos.
Laurent Charignon <lcharignon@fb.com> [Fri, 24 Apr 2015 14:46:30 -0700] rev 24927
obsolete: speed up computation of bumped revset
Speed up the computation of the bumped revset by using the not public() revset.
In another patch series, we optimized the not public() revset. Together,
this cuts the cost of the computation of bumped() from 17% of the total time of
smartlog on our big repo to under 0.1% of the total time.
Pierre-Yves David <pierre-yves.david@fb.com> [Thu, 19 Mar 2015 13:15:20 -0700] rev 24926
run-test: include test name in the return vlog
Otherwise using --verbose and --jobs gives useless output.
Augie Fackler <augie@google.com> [Tue, 28 Apr 2015 12:31:30 -0400] rev 24925
manifest: document return type of readfast()
I keep having to ponder out what readfast() means, and it always
surprises me. Document the return type in the docstring so that future
readers won't have to puzzle this out again.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 04 May 2015 22:33:29 -0400] rev 24924
archive: always use portable path component separators with subrepos
The previous behavior when archiving a subrepo 's' on Windows was to internally
name the file under it 's\file', due to the use of vfs.reljoin(). When printing
the file list from the archive on Windows or Linux, the file was named
's\\file'. The archive extracted OK on Windows, but if the archive was brought
to a Linux system, it created a file named 's\file' instead of a directory 's'
containing 'file'.
*.zip format achives seemed not to have the problem, but this was definitely an
issue with *.tgz archives.
Largefiles actually got this right, but a test is added to keep this from
regressing. The subrepo-deep-nested-change.t test was repurposed to archive to
a file, since there are several subsequent tests that archive to a directory.
The output change is losing the filesystem prefix '../archive_lf' and not
listing the directories 'sub1' and 'sub1/sub2'.
Pierre-Yves David <pierre-yves.david@fb.com> [Sat, 11 Oct 2014 01:17:40 -0700] rev 24923
revset: narrow the subset using smartset operation in roots()
We were manually creating a base with explicit subset testing. We should let
smartset magic happen and optimise that logic if needed.
benchmark show some massive speedup when "parents set" is huge and "subset" is
small.
revset: 42:68 and roots(42:tip)
0) wall 0.011322 comb 0.010000 user 0.010000 sys 0.000000 (best of 161)
1) wall 0.002282 comb 0.010000 user 0.010000 sys 0.000000 (best of 1082)
Minor speedup in simple case (were fullreposet helps)
revset: roots(0::tip)
0) wall 0.095688 comb 0.100000 user 0.100000 sys 0.000000 (best of 85)
1) wall 0.084448 comb 0.080000 user 0.080000 sys 0.000000 (best of 95)
revset: roots((0:tip)::)
0) wall 0.146752 comb 0.140000 user 0.140000 sys 0.000000 (best of 58)
1) wall 0.143538 comb 0.140000 user 0.140000 sys 0.000000 (best of 59)
And small overhead then the "parents set" is fairly complicated (transforming it
into a revset once and for all appears to be faster).
revset: roots((tip~100::) - (tip~100::tip))
0) wall 0.004652 comb 0.010000 user 0.010000 sys 0.000000 (best of 544)
1) wall 0.004878 comb 0.010000 user 0.010000 sys 0.000000 (best of 479)
revset: roots((0::) - (0::tip))
0) wall 0.146587 comb 0.150000 user 0.150000 sys 0.000000 (best of 53)
1) wall 0.157192 comb 0.160000 user 0.160000 sys 0.000000 (best of 53)
revset: first(roots((0::) - (0::tip)))
0) wall 0.152924 comb 0.150000 user 0.150000 sys 0.000000 (best of 57)
1) wall 0.153192 comb 0.160000 user 0.160000 sys 0.000000 (best of 55)
Laurent Charignon <lcharignon@fb.com> [Mon, 04 May 2015 10:38:45 -0700] rev 24922
context: make warning message for hidden revision extensible
Extensions might want to create new filternames and change what revisions
are considered hidden or shown. This is the case for inhibit that enables
direct access to hidden hashes with the visible-directaccess-nowarn filtername.
By using startswith instead of a direct comparison with 'visible' we
allow extensions to do that and not work directly on the 'visible' filtername
used by core.
Martin von Zweigbergk <martinvonz@google.com> [Sun, 03 May 2015 14:18:32 -0700] rev 24921
bundlerepo: remove unused 'repo' parameter
Revision
7c231754a621 (filelog: add file function to open other
filelogs, 2011-05-10) added a _file() method to revlog, which also
required a 'repo' parameter to be added to bundlefilelog's
constructor. The _file() method was then removed in
b95a5bb58653
(filelog: remove unused _file method, 2015-01-22), which made the
constructor parameter unused, so let's remove that too.
Durham Goode <durham@fb.com> [Wed, 22 Apr 2015 15:53:03 -0700] rev 24920
histedit: fix --edit-plan
--edit-plan was completely broken from the command line because it used an old
api that was not updated (it would crash with a stack trace). Let's update it
and add tests to catch this.
Matt Mackall <mpm@selenic.com> [Mon, 04 May 2015 13:15:15 -0500] rev 24919
merge with stable
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:33:08 -0700] rev 24918
localrepo: eliminate local requirements var in init
Localrepo's __init__ function creates a local requirements set to add to before
it replaces the instance's set with it. This is unnecessary, so let's just
use the instance's set directly.
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:16:19 -0700] rev 24917
localrepo: rename requirements parameter in stream_in()
To avoid confusion from overloading of the variable name "requirements", the
requirements is renamed to remotereqs for localrepo's stream_in() function.
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:59:12 -0700] rev 24916
localrepo: have stream_in() not modify its argument
Localrepo's stream_in function modified its requirements argument. This is not
good practice because it may be unexpected behavior to the caller.
Drew Gottlieb <drgott@google.com> [Wed, 22 Apr 2015 12:06:44 -0700] rev 24915
localrepo: make _applyrequirements more specific
Localrepo's _applyrequirements function isn't very straightforward about what
it does. Its purpose is to both act as a setter for the requirements attribute,
and to apply appropriate requirements to the opener's configuration.
This change makes the function just focus on the latter responsibility. We
rename it as such, and make setting the requirements attribute the
responsibility of the caller.
Drew Gottlieb <drgott@google.com> [Tue, 21 Apr 2015 17:16:10 -0700] rev 24914
localrepo: make requirements always be a set in localrepo.__init__
The init function used to create a local list, and then convert it to a set
before assigning it as a data attribute. This change simplifies the function by
having it always be a set, requiring no conversion.
Drew Gottlieb <drgott@google.com> [Tue, 21 Apr 2015 16:55:30 -0700] rev 24913
localrepo: eliminate requirements class variable (API)
Localrepo's requirements class variable was introduced in
b090601a80d1 to make
requirements modifiable by extensions. A main access point, _baserequirements,
still exists, but this change undoes making the class variable to begin with.
Without this simplification, there is a class variable with a default value
that is only copied, but never directly used. This behavior is moved directly
into the _baserequirements function.
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Apr 2015 10:30:58 -0700] rev 24912
changegroup.group: drop 'reorder' parameter
Since we always pass self._reorder to self.group(), let's drop the
parameter and let group() read from self._reorder itself. There are no
other in-tree callers to group().
Martin von Zweigbergk <martinvonz@google.com> [Wed, 29 Apr 2015 10:38:45 -0700] rev 24911
cg2packer: set reorder=False in __init__ instead of in group()
The difference between reorder=None (bundle.reorder=auto) and
reorder=False is that the generaldelta revlogs get reordered with the
former. In cg2packer, group() we check if the revlog uses generaldelta
and if reorder=None and then convert that to reorder=False. We are
effectively saying that whether or not generaldelta is used, we want
reorder=None to mean reorder=False for changegroup 2. To make this
clearer, check if reorder=None in the constructor and change it to
False there and drop the overriding of group(). Also document the
reason for turning reordering off.