Gregory Szorc <gregory.szorc@gmail.com> [Wed, 09 Aug 2017 23:35:20 -0700] rev 33767
peer: remove non iterating batcher (API)
The last use of this API was removed in
b6e71f8af5b8 in 2016. While
not formally deprecated, as of the last commit the code is no longer
explicitly tested. I think the new API has existed long enough for
people to transition to it.
I also have plans to more formalize the peer API and removing batch()
makes that work easier.
I'm not convinced the current client-side API around batching is
great. But it's the best we have at the moment.
.. api:: remove peer.batch()
Replace with peer.iterbatch().
Differential Revision: https://phab.mercurial-scm.org/D320
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 09 Aug 2017 23:29:30 -0700] rev 33766
wireproto: overhaul iterating batcher code (API)
The remote batching code is difficult to read. Let's improve it.
As part of the refactor, the future returned by method calls on
batchiter() instances is now populated. However, you still need to
consume the results() generator for the future to be set. But at
least now we can stuff the future somewhere and not have to worry
about aligning method call order with result order since you can
use a future to hold the result.
Also as part of the change, we now verify that @batchable generators
yield exactly 2 values. In other words, we enforce their API.
The non-iter batcher has been unused since
b6e71f8af5b8. And to my
surprise we had no explicit unit test coverage of it! test-batching.py
has been overhauled to use the iterating batcher.
Since the iterating batcher doesn't allow non-batchable method
calls nor local calls, tests have been updated to reflect reality.
The iterating batcher has been used for multiple releases apparently
without major issue. So this shouldn't cause alarm.
.. api::
@peer.batchable functions must now yield exactly 2 values
Differential Revision: https://phab.mercurial-scm.org/D319
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 09 Aug 2017 22:52:05 -0700] rev 33765
wireproto: remove support for local results in @batchable (API)
@peer.batchable decorated generator functions have two forms:
yield value, None
and
yield args, future
yield value
These forms have been present since the decorator was introduced.
There are currently no in-repo consumers of the first form. So this
commit removes support for it.
Note that remoteiterbatcher.submit() asserts the 2nd form. And
b6e71f8af5b8 removed the last user of remotebatcher, forcing everyone
to remoteiterbatcher. So anything relying on this in the wild would
have been broken since
b6e71f8af5b8.
.. api::
@peer.batchable can no longer emit local values
Differential Revision: https://phab.mercurial-scm.org/D318
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 09 Aug 2017 21:51:45 -0700] rev 33764
wireproto: properly implement batchable checking
remoteiterbatcher (unlike remotebatcher) only supports batchable
commands. This claim can be validated by comparing their
implementations of submit() and noting how remoteiterbatcher assumes
the invoked method has a "batchable" attribute, which is set by
@peer.batchable.
remoteiterbatcher has a custom __getitem__ that was trying to
validate that only batchable methods are called. However, it was only
validating that the called method exists, not that it is batchable.
This wasn't a big deal since remoteiterbatcher.submit() would raise
an AttributeError attempting to `mtd.batchable(...)`.
Let's fix the check and convert it to ProgrammingError, which may
not have been around when this was originally implemented.
Differential Revision: https://phab.mercurial-scm.org/D317
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 09 Aug 2017 21:04:03 -0700] rev 33763
largefiles: remove remotestore.batch()
This method was added in
9e1616307c4c. AFAICT it didn't do anything at
inception. If it did, there was no test coverage for it because
changing it to raise doesn't fail any tests at that revision.
b6e71f8af5b8 later refactored all remote.batch() calls to
remote.iterbatch(). So if this was somehow used, it isn't called
any more because there are no calls to .batch() remaining in the
repo.
I suspect the original patch author got confused by the distinction
between the peer/remote interface and the largefiles store. The lf
store is a gateway to a peer instance. It exposes additional
lf-specific methods to execute against a peer. However, it is not
a peer and doesn't need to implement batch() because peer itself
does that.
Differential Revision: https://phab.mercurial-scm.org/D316
André Klitzing <aklitzing@gmail.com> [Fri, 11 Aug 2017 15:20:41 +0200] rev 33762
histedit: check first changeset for verb "roll" or "fold" (
issue5498)
If someone changes "pick" to "roll" or "fold" for the first
changeset in a histedit rule Mercurial could remove a wrong
changeset if the phase is non-public.
roll or fold for the first changeset should be invalid.
Yuya Nishihara <yuya@tcha.org> [Mon, 31 Jul 2017 23:13:47 +0900] rev 33761
encoding: drop circular import by proxying through '<policy>.charencode'
I decided not to split charencode.c to new C extension module because it
would duplicate binary codes unnecessarily.
Yuya Nishihara <yuya@tcha.org> [Mon, 31 Jul 2017 23:40:36 +0900] rev 33760
policy: reroute proxy modules internally
This allows us to split encoding functions from pure.parsers without doing
that for cext.parsers. See the next patch for why.
Yuya Nishihara <yuya@tcha.org> [Mon, 31 Jul 2017 22:58:06 +0900] rev 33759
cext: modernize charencode.c to use Py_ssize_t
Yuya Nishihara <yuya@tcha.org> [Sun, 21 May 2017 14:23:22 +0900] rev 33758
cext: factor out header for charencode.c
This merges a part of util.h with the header which should exist for
charencode.c.
Yuya Nishihara <yuya@tcha.org> [Mon, 31 Jul 2017 22:28:27 +0900] rev 33757
cext: split character encoding functions to new compilation unit
This extracts charencode.c from parsers.c, which seems big enough for me
to hesitate to add new JSON functions. Still charencode.o is linked to
parsers.so to avoid duplication of binary codes.
Yuya Nishihara <yuya@tcha.org> [Mon, 31 Jul 2017 22:12:24 +0900] rev 33756
cext: move _dict_new_presized() to header
Prepares for splitting encoding functions from parsers.c.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 15 Aug 2017 13:04:31 -0700] rev 33755
ui: restore behavior to ignore some I/O errors (
issue5658)
e9646ff34d55 and
1bfb9a63b98e refactored ui methods to no longer
silently swallow some IOError instances. This is arguably the
correct thing to do. However, it had the unfortunate side-effect
of causing StdioError to bubble up to sensitive code like
transaction aborts, leading to an uncaught exceptions and failures
to e.g. roll back a transaction. This could occur when a remote
HTTP or SSH client connection dropped. The new behavior is
resulting in semi-frequent "abandonded transaction" errors on
multiple high-volume repositories at Mozilla.
This commit effectively reverts
e9646ff34d55 and
1bfb9a63b98e to
restore the old behavior.
I agree with the principle that I/O errors shouldn't be ignored.
That makes this change... unfortunate. However, our hands are tied
for what to do on stable. I think the proper solution is for the
ui's behavior to be configurable (possibly via a context manager).
During critical sections like transaction rollback and abort, it
should be possible to suppress errors. But this feature would not
be appropriate on stable.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 14 Aug 2017 13:12:40 -0700] rev 33754
tests: test behavior of IOError during transactions (
issue5658)
ui._write(), ui._write_err(), and ui.flush() all trap IOError and
re-raise as error.StdioError. If a caller doesn't catch StdioError
when writing to stdio, it could bubble all the way to dispatch.
This commit adds tests for I/O failures around various transaction
operations.
The most notable badness is during abort. Here, an uncaught StdioError
will result in incomplete transaction rollback, requiring an
`hg rollback` to recover. This can result in a client "corrupting"
a remote repo via terminated HTTP and SSH socket.
Nathan Goldbaum <ngoldbau@illinois.edu> [Wed, 16 Aug 2017 10:24:49 -0500] rev 33753
log: mention ui.logtemplate in the help text
Tristan Seligmann <mithrandi@mithrandi.net> [Sat, 12 Aug 2017 14:29:22 +0200] rev 33752
hg: avoid relying on errno numbers / descriptions
A few tests hardcode errno numbers and/or descriptions in the output, causing
test failures on platforms where these values are different.
Differential Revision: https://phab.mercurial-scm.org/D362
Tristan Seligmann <mithrandi@mithrandi.net> [Sat, 12 Aug 2017 14:24:25 +0200] rev 33751
hg: tolerate long vs. int in test-context.py
The file times here can be longs instead of ints on some platforms, which will
cause a test failure due to these printing with an L suffix; instead always
format with %d which will produce the same output in either case.
Differential Revision: https://phab.mercurial-scm.org/D361
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:31 +0200] rev 33750
configitems: register the 'notify.test' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:30 +0200] rev 33749
configitems: register the 'notify.template' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:29 +0200] rev 33748
configitems: register the 'notify.style' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:28 +0200] rev 33747
configitems: register the 'notify.strip' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:27 +0200] rev 33746
configitems: register the 'notify.sources' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:26 +0200] rev 33745
configitems: register the 'notify.merge' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:25 +0200] rev 33744
configitems: register the 'notify.mbox' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:24 +0200] rev 33743
configitems: register the 'notify.maxsubject' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:23 +0200] rev 33742
configitems: register the 'notify.maxdiff' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:22 +0200] rev 33741
configitems: register the 'notify.fromauthor' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:20 +0200] rev 33740
configitems: register the 'notify.domain' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:19 +0200] rev 33739
configitems: register the 'notify.diffstat' config
Boris Feld <boris.feld@octobus.net> [Fri, 30 Jun 2017 03:43:18 +0200] rev 33738
configitems: register the 'notify.config' config
Augie Fackler <augie@google.com> [Thu, 10 Aug 2017 18:55:33 -0400] rev 33737
merge with stable
Augie Fackler <augie@google.com> [Thu, 10 Aug 2017 14:23:41 -0400] rev 33736
merge with stable
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:49:57 +0200] rev 33735
obsutil: rename allprecursors into allpredecessors
Use util.nouideprecwarn because obsstore doesn't have easy access to an ui
object.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D247
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:48:06 +0200] rev 33734
obsolete: rename precursor into predecessor in obsolete docstrings
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D246
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:39:08 +0200] rev 33733
obsstore: rename precursors into predecessors
Use util.nouideprecwarn because obsstore doesn't have easy access to an ui
object.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D245
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:34:15 +0200] rev 33732
obsolete: rename _addprecursors into _addpredecessors
Use util.nouideprecwarn because _addpredecessors doesn't have easy access to
an ui object.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D244
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:20:59 +0200] rev 33731
obsmarker: rename precnode into prednode
Rename prednode (predecessors node) into precnode (precursors node) in markers
class. Use util.nouideprecwarn because markers doesn't have easy access to an
ui object.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D243
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:13:56 +0200] rev 33730
context: rename troubled into isunstable
As we changed the meaning of unstable between the old vocabulary and the new
one, we can't reuse the unstable method name at the risk of breaking
extensions calling unstable and getting a wrong result.
Instead rename troubled into isunstable so extensions will continue to work.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D242
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:09:00 +0200] rev 33729
context: rename bumped into phasedivergent
Rename bumped context method into phasedivergent and add a deprecation warning
on bumped.
Only update all callers to keep the patch straightforward.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D241
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 19:02:48 +0200] rev 33728
context: rename divergent into contentdivergent
Rename divergent context method into contentdivergent and add a deprecation
warning on divergent.
Only update all callers to keep the patch straightforward.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D240
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 18:50:32 +0200] rev 33727
context: rename unstable into orphan
Rename unstable context method into orphan and add a deprecation
warning on unstable.
Only update all callers to keep the patch straightforward.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D239
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 18:34:39 +0200] rev 33726
context: rename troubles into instabilities
Rename troubles context method into instabilities.
Copy the old troubles method and add a deprecation warning. This way
extensions calling troubles will see the deprecation warning but will not
break due to new return values.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D238
Durham Goode <durham@fb.com> [Tue, 08 Aug 2017 17:25:38 -0700] rev 33725
repair: move manifest strip to a separate function
This moves manifest stripping to a separate function so implementations of the
manifest that don't support stripping can replace this function with a no-op.
I considered adding a strip api to the manifestlog, so other implementations
could make it a no-op there, but it seems like strip might be unique to the
revlog implementation, and therefore shouldn't be present on the generic api.
Differential Revision: https://phab.mercurial-scm.org/D292
Durham Goode <durham@fb.com> [Tue, 08 Aug 2017 17:25:38 -0700] rev 33724
repair: refactor broken linkrev collection
This refactors broken linkrev collection such that manifest collection is in a
separate function. This allows extensions to replace the manifest collection
with a non-revlog oriented version.
I considered moving the collect changes function onto the manifestlog itself, so
it would be behind the abstraction, but since the store we're building doesn't
even have the concept of strip, embeding that concept in the manifestlog api
seemed odd.
Differential Revision: https://phab.mercurial-scm.org/D291
Augie Fackler <augie@google.com> [Tue, 25 Jul 2017 22:53:44 -0400] rev 33723
tests: update duplicateoptions test to use bytestrings everywhere
Test now passes on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D297
Augie Fackler <augie@google.com> [Tue, 25 Jul 2017 22:48:46 -0400] rev 33722
extensions: attempt to use non-deprecated inspect method
Avoids some deprecation warnings when extension loading breaks.
Differential Revision: https://phab.mercurial-scm.org/D295
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 14:22:25 -0400] rev 33721
tests: clean up many print statements to be print functions instead
Differential Revision: https://phab.mercurial-scm.org/D294
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 13:32:32 -0400] rev 33720
tests: fix simple heredoc print statements to work on Py3
There are a handful left that require some more care.
Differential Revision: https://phab.mercurial-scm.org/D293
Augie Fackler <augie@google.com> [Mon, 24 Jul 2017 10:37:39 -0400] rev 33719
obsolete: use bytes() instead of str() so the node is bytes on py3
I'm not sure this is right, since this should either be bytes or str
to match what's going on in the revlog layer.
Differential Revision: https://phab.mercurial-scm.org/D271
Augie Fackler <augie@google.com> [Mon, 24 Jul 2017 23:56:17 -0400] rev 33718
tests: fix test-notify.t to use $PYTHON
In doing so, I consolidated the filtering logic. This resulted in some
small test output changes, but I think the consistency throughout the
test is worth it.
Differential Revision: https://phab.mercurial-scm.org/D279
Augie Fackler <augie@google.com> [Tue, 25 Jul 2017 00:00:14 -0400] rev 33717
tests: make test-highlight code portable to python3
This is easier than trying to do some sort of check-code shenanigans.
Differential Revision: https://phab.mercurial-scm.org/D278
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 13:32:02 -0400] rev 33716
dagparser: make print statement in doctest Py3 portable
Differential Revision: https://phab.mercurial-scm.org/D277
Augie Fackler <augie@google.com> [Thu, 15 Jun 2017 13:31:33 -0400] rev 33715
i18n: fix check-translation.py to be less broken on Python 3
These are all simple one-argument print statements, so this syntax
works the same way in 2 and 3.
Differential Revision: https://phab.mercurial-scm.org/D276
Augie Fackler <augie@google.com> [Mon, 24 Jul 2017 13:48:32 -0400] rev 33714
ui: refactor extractchoices so it doesn't break on Python 3
Differential Revision: https://phab.mercurial-scm.org/D275
Augie Fackler <augie@google.com> [Mon, 24 Jul 2017 11:29:51 -0400] rev 33713
obsutil: defend against succsmarkers() returning None
I'm not sure if this is a realistic problem, but doing this avoids
some pretty awful test failures on Python 3, and it looks like it
should be harmless.
Differential Revision: https://phab.mercurial-scm.org/D274
Augie Fackler <augie@google.com> [Mon, 24 Jul 2017 11:28:59 -0400] rev 33712
changegroup: more **kwargs
Differential Revision: https://phab.mercurial-scm.org/D273
Augie Fackler <augie@google.com> [Mon, 24 Jul 2017 11:16:32 -0400] rev 33711
bundle2: convert ints to strings using pycompat.bytestring()
Fixes some Python 3 regressions.
We don't use %d here because the part id is actually an
Optional[int]. It should always be initialized to a non-None value by
the time this code executes, but we shouldn't blindly depend on that
being the case.
Differential Revision: https://phab.mercurial-scm.org/D272
Augie Fackler <augie@google.com> [Tue, 08 Aug 2017 15:07:05 -0400] rev 33710
tests: fix up test-run-tests failures on Python 3.6
Some of the recent work on run-tests.py didn't work on Python 3. This
fixes the regressions.
Differential Revision: https://phab.mercurial-scm.org/D270
Boris Feld <boris.feld@octobus.net> [Wed, 02 Aug 2017 11:32:25 +0200] rev 33709
template: rename troubles templatekw into instabilities
Rename troubles template keyword into instabilities and add a deprecation
warning on templatekw.
Update default mapfile and test files to use the new template keyword.
The renaming is done according to
https://www.mercurial-scm.org/wiki/CEDVocabulary.
Differential Revision: https://phab.mercurial-scm.org/D237
Jun Wu <quark@fb.com> [Sun, 06 Aug 2017 11:40:53 -0700] rev 33708
test-rebase: add a brute force test
Rebase is becoming more complex and it looks like a good idea to try some
brute force enumeration to cover cases that are hard to find manually.
Using brute force to generate repos in different shapes and enumerating the
rebase source and destination would generate too many cases that takes too
long to compute. This patch limits the "brute force" to only the "rebase
source" part. Repo and destination are still manual.
The added test cases are crafted manually to reveal some behaviors that are
not covered by other tests:
- "revlog index out of range" crash
- after rebase, p1 == p2, p2 != null
- "nothing to merge" abort
In the future we might want to add more tests here. For now I'm more
interested in revealing interesting behaviors in a minified way. I tried
some more complex cases but didn't find other interesting behaviors.
Differential Revision: https://phab.mercurial-scm.org/D262
Alex Gaynor <agaynor@mozilla.com> [Tue, 08 Aug 2017 18:53:13 +0000] rev 33707
dirstate: simplify dirstate's __iter__
Probably also a performance win, but not measurable in perfdirstate.
Differential Revision: https://phab.mercurial-scm.org/D269
Martin von Zweigbergk <martinvonz@google.com> [Wed, 19 Jul 2017 13:34:06 -0700] rev 33706
repo: skip invalidation of changelog if it has 'delayed' changes (API)
The changelog object can store recently added revisions in memory
until the transaction is committed. We don't want to lose those
changes even if repo.invalidate(clearfilecache=True), so let's skip
the changelog when it has such 'delayed' changes.
Differential Revision: https://phab.mercurial-scm.org/D152
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 06 Aug 2017 17:47:41 -0700] rev 33705
httppeer: make several instance attributes internal (API)
Peer instances are supposed to conform to a well-defined API so
consumers can be agnostic about the underlying peer type.
To reinforce this, this commit renames a handful of instance
attributes on httpeer so they no longer have a "public" name.
Differential Revision: https://phab.mercurial-scm.org/D268
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 06 Aug 2017 10:56:25 -0700] rev 33704
httppeer: remove unused handler attribute
The consumer of this attribute was removed by
b6bd4ee6ed85 in 2008.
Differential Revision: https://phab.mercurial-scm.org/D267