Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Jun 2017 20:28:13 -0700] rev 32739
repoview: remove special casing of "requirements"
At the time this code was introduced (
3a6ddacb7198), the inline comment
was true. This changed in
e3a928bd1cd4. The proxy is no longer needed.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 19:32:16 +0100] rev 32738
bookmarks: move variable initialization earlier
Since we no longer set '_clean = False' during the initialization loop, we can
move the attribute assignment earlier in the function for clarity.
(no speed improvement expected or measured ;-) )
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 19:13:09 +0100] rev 32737
bookmarks: directly use base dict 'setitem'
The bmstore '__setitem__' method is setting an extra flag that is not needed
during initialization. Skipping the method will allow further cleanup and yield
some speedup as a side effect.
Before:
! wall 0.009120 comb 0.010000 user 0.010000 sys 0.000000 (best of 312)
After:
! wall 0.007874 comb 0.010000 user 0.010000 sys 0.000000 (best of 360)
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 19:22:39 +0100] rev 32736
bookmarks: rely on exception for malformed lines
Since we already have an exception context open, for other thing, we can
simplify the code a bit and rely on exception handling for invalid lines.
Speed is not the main motivation for this changes. However as I'm in the middle
of benchmarking things we can see a small positive impact.
Before:
! wall 0.009358 comb 0.000000 user 0.000000 sys 0.000000 (best of 303)
After:
! wall 0.009173 comb 0.010000 user 0.010000 sys 0.000000 (best of 310)
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 22:26:43 +0100] rev 32735
bookmarks: explicitly convert to 'node' during initialization
We know the content of the file is supposed to be full hex. So we can do the
translation ourselves and directly check if the node is known.
As nice side effect we now have proper error handling for invalid node value.
Before:
! wall 0.021580 comb 0.020000 user 0.020000 sys 0.000000 (best of 134)
After:
! wall 0.009342 comb 0.010000 user 0.010000 sys 0.000000 (best of 302)
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 19:21:02 +0100] rev 32734
bookmarks: prefetch 'lookup' outside of the loop
Skipping the attribute lookup up raise a significant speedup.
Example on a repository with about 4000 bookmarks.
Before:
! wall 0.026027 comb 0.020000 user 0.020000 sys 0.000000 (best of 112)
After:
! wall 0.021580 comb 0.020000 user 0.020000 sys 0.000000 (best of 134)
(This is also in its own changeset to clarify the perf win from another coming
changesets)
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 18:22:11 +0100] rev 32733
perf: add a perfbookmarks command
A new command dedicated to benchmark of bookmark initialization.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 23 May 2017 02:27:41 +0200] rev 32732
perfphases: add a flag to also include file access time
The flag purges all phases data so we'll have to read the file from disk again.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 17:31:30 +0100] rev 32731
perf: have a generic "clearstorecache" function
There are multiple places where we will want to purge some store cache. So we
promote the existing _clearobsstore function to a something reusable.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Jun 2017 23:23:37 -0700] rev 32730
localrepo: move filtername to __init__
This is obviously an instance attribute, not a type attribute. The
modern Python style is to use __init__ for defining these.
This exposes statichttprepo as inheriting from localrepository
without calling its __init__. As a result, its __init__ defines
a lot of variables that methods on localrepository's methods need.
But factoring the common bits into a separate class is for another
day.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Jun 2017 21:54:30 -0700] rev 32729
obsolete: move obsstore creation logic from localrepo
This code has more to do with obsolete.py than localrepo.py. Let's
move it there.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Jun 2017 22:18:17 -0700] rev 32728
match: allow pats to be None
match.match already interprets "!bool(patterns)" as matching
everything (but includes and excludes still apply). We might as well
allow None, which lets us simplify some callers a bit.
I originally wrote this patch while trying to change
match.match(patterns=[]) to mean to match no patterns. This patch is
one step towards that goal. I'm not sure it'll be worth the effort to
go all the way there, but I think this patch still makes sense on its
own.
Augie Fackler <augie@google.com> [Tue, 06 Jun 2017 11:16:38 -0400] rev 32727
tests: add a test for installing hg with pip in a virtualenv
Since we're doing so much clever junk in our setup.py, let's have a
test that exercises it.
Thanks to Matt Harbison for testing this on Windows and verifying that
installenv/*/hg would work as a way to work around bin being called
Scripts on Windows.
Augie Fackler <augie@google.com> [Tue, 06 Jun 2017 11:16:10 -0400] rev 32726
hghave: add check for virtualenv
Augie Fackler <augie@google.com> [Tue, 06 Jun 2017 11:02:30 -0400] rev 32725
setup: introduce dummy copies of setuptools flags
Since we're filtering out some egg gunk, we need to emulate these
flags which disable eggs so that pip still works.
Augie Fackler <augie@google.com> [Tue, 06 Jun 2017 10:09:48 -0400] rev 32724
extensions: catch uisetup and extsetup failures and don't let them break hg
Otherwise users of the patience diff extension will be unable to run
anything at all in hg 4.3 until they figure out what's broken.
Augie Fackler <augie@google.com> [Tue, 06 Jun 2017 10:03:16 -0400] rev 32723
tests: add test demonstrating how broken third-party extensions can get
I intend to fix this, but will do the fix as a separate change to make
the behavior change obvious. This was inspired by some users having
the patience diff extension, which broke when we moved bdiff.so so
thoroughly the users can't even run 'hg debuginstall'.
Augie Fackler <augie@google.com> [Thu, 08 Jun 2017 10:44:53 -0400] rev 32722
extensions: move wrapfilecache function from fsmonitor
It makes more sense to put this in core, so other extensions can
trivially get access to it without having to rely on importing
fsmonitor.
Koen Van Hoof <koen.van_hoof@nokia.com> [Wed, 26 Apr 2017 16:05:22 +0200] rev 32721
chmod: create a new file when flags are set on a hardlinked file
For performance reasons we have several repositories where the files in the working
directory of 1 repo are hardlinks to the files of the other repo
When an update in one repo results in a chmod of a such a file, the hardlink
has to be deleted and replaced by a regular file to make sure that the change
does not happen in the other repo
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 21:17:24 -0700] rev 32720
run-tests: make --restart work with output dir
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 21:17:06 -0700] rev 32719
run-tests: output coverage to output dir
There do not appear to be any tests for this, and I've never used either of
these options before, but this works.
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 20:46:43 -0700] rev 32718
run-tests: write JSON reports to output dir
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 20:32:11 -0700] rev 32717
run-tests: write test times to output dir
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 20:30:08 -0700] rev 32716
run-tests: allow specifying an output dir to write .errs to
I'm trying to use run-tests.py on a read-only file system. This series allows
that to happen.
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 15:47:06 -0700] rev 32715
run-tests: add information about skipped tests to XUnit output
The XUnit spec supports skipped tests.
Siddharth Agarwal <sid0@fb.com> [Wed, 07 Jun 2017 15:47:06 -0700] rev 32714
run-tests: wrap failures in an XUnit 'failure' element
This is closer to what most XUnit consumers can understand.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 10:44:11 +0100] rev 32713
discovery: log discovery result in non-trivial cases
We log the discovery summary, the number of roundtrips and the elapsed time.
This is useful to understand where slow push might come from when lloking at
the blackbox.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 07 Jun 2017 10:29:39 +0100] rev 32712
discovery: include timing in the debug output
Having such date easily available is useful. It also prepare the inclusion of
some discovery related data in blackbox.
Augie Fackler <raf@durin42.com> [Sun, 28 May 2017 21:33:33 -0400] rev 32711
tests: remove sys.executable from "required tools"
In practice this doesn't appear to have been true for some time - we
reference Python using the $PYTHON variable in all the tests now
(which we have to for PyPy and Python 3), and I've been using
~/.../python.exe to test with tip of the cpython 3.6 release branch
while working on manifest tests in Python 3 and everything seems to be
just fine. The only real observable difference from this change is
that I stop getting a warning about python.exe not being a thing on
$PATH, which seems like an improvement.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 05 Jun 2017 16:24:01 +0100] rev 32710
perfbranchmap: add an option to purge the revbranch cache
The perf extension needs to be able to reflect this reality too. (eg: 4s vs 60s
on a Million-ish revisions repository).
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2017 05:53:58 +0200] rev 32709
push: add a way to allow concurrent pushes on unrelated heads
Client has a mechanism for the server to check that nothing changed server side
since the client prepared a push. That check is wide and any head changed on
the server will lead to an aborted push. We introduce a way for the client to
send a less strict checking. That logic will check that no heads impacted by
the push have been affected. If other unrelated heads (including named branches
heads) have been affected, the push will proceed.
This is very helpful for repositories with high developers traffic on different
heads, a common setup.
That behavior is currently controlled by an experimental option. The config
should live in the "server" section but bike-shedding of the name will happen
in the next changesets. Servers advertise this capability through a new bundle2
capability 'checkeads', using the value 'related'.
The 'test-push-race.t' is updated to check that new capabilities on the
documented cases.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 29 May 2017 05:52:13 +0200] rev 32708
headsummary: expose the 'discardedheads' set in the headssummary
That information will be useful to detect push race on related part of the
history.
See next changeset for details.