Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 16:32:05 +0100] rev 35761
pull: reorganize bundle2 argument bundling
We are about to add the ability to use stream bundle with bundle2. Before doing
so, we need to gather some code that will not be used in the bundle2 case. There
is no behavior change within this changeset.
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 16:38:32 +0100] rev 35760
clone: allow bundle2's stream clone with 'server.disablefullbundle'
The previous check was a bit too strict and would not recognize a get bundle
not requesting changegroup.
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 16:36:23 +0100] rev 35759
bundle2: add support for a 'stream' parameter to 'getbundle'
This parameter can be used to request a stream bundle.
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 16:35:22 +0100] rev 35758
bundle2: add a 'stream' part handler for stream cloning
The part contains the necessary arguments and payload to handle a stream bundle
v2. It will be put to use in later changesets.
Boris Feld <boris.feld@octobus.net> [Thu, 18 Jan 2018 00:45:27 +0100] rev 35757
streamclone: rework canperformstreamclone
There is code about bundle2 laying around in `canperformstreamclone` but not
put to any uses. As we discovered with the previous patch, streambundle 'v1'
won't work on bundle2 because they are readline based. So we jump to 'v2' as
the first expected supported version.
Boris Feld <boris.feld@octobus.net> [Thu, 18 Jan 2018 00:48:56 +0100] rev 35756
streamclone: define first iteration of version 2 of stream format
(This patch is based on a first draft from Gregory Szorc, with deeper rework)
Version 1 of the stream clone format was invented many years ago and suffers
from a few deficiencies:
1) Filenames are stored in store-encoded (on filesystem) form rather than in
their internal form. This makes future compatibility with new store
filename encodings more difficult.
2) File entry "headers" consist of a newline of the file name followed by the
string file size. Converting strings to integers is avoidable overhead. We
can't store filenames with newlines (manifests have this limitation as
well, so it isn't a major concern). But the big concern here is the
necessity for readline(). Scanning for newlines means reading ahead and
that means extra buffer allocations and slicing (in Python) and this makes
performance suffer.
3) Filenames aren't compressed optimally. Filenames should be compressed well
since there is a lot of repeated data. However, since they are scattered
all over the stream (with revlog data in between), they typically fall
outside the window size of the compressor and don't compress.
4) It can only exchange stored based content, being able to exchange caches
too would be nice.
5) It is limited to a stream-based protocol and isn't suitable for an on-disk
format for general repository reading because the offset of individual file
entries requires scanning the entire file to find file records.
As part of enabling streaming clones to work in bundle2, #2 proved to have a
significant negative impact on performance. Since bundle2 provides the
opportunity to start fresh, Gregory Szorc figured he would take the
opportunity to invent a new streaming clone data format.
The new format devised in this series addresses #1, #2, and #4. It punts on #3
because it was complex without yielding a significant gain and on #5 because
devising a new store format that "packs" multiple revlogs into a single
"packed revlog" is massive scope bloat. However, this v2 format might be
suitable for streaming into a "packed revlog" with minimal processing. If it
works, great. If not, we can always invent stream format when it is needed.
This patch only introduces the bases of the format. We'll get it usable through
bundle2 first, then we'll extend the format in future patches to bring it to its
full potential (especially #4).
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 19 Jan 2018 22:52:35 +0100] rev 35755
util: implement varint functions
This will be useful in an incoming version-2 of the stream format.
Boris Feld <boris.feld@octobus.net> [Fri, 19 Jan 2018 20:51:35 +0100] rev 35754
util: move 'readexactly' in the util module
This function is used in multiple place, having it in util would be better.
(existing caller will be migrated in another series)
Matt Harbison <matt_harbison@yahoo.com> [Fri, 19 Jan 2018 19:13:11 -0500] rev 35753
lfs: separate a debug message from the subsequent abort message
Siddharth Agarwal <sid0@fb.com> [Fri, 19 Jan 2018 14:25:09 -0800] rev 35752
sshserver: add a couple of tests for argument parsing
I noticed that we didn't have any unit tests covering wire protocol argument
parsing.
Augie Fackler <augie@google.com> [Fri, 19 Jan 2018 16:28:11 -0500] rev 35751
merge with stable
Joerg Sonnenberger <joerg@bec.de> [Fri, 12 Jan 2018 10:59:58 +0100] rev 35750
wireproto: split streamres into legacy and modern case
A couple of commands currently require transmission of uncompressed
frames with the old MIME type. Split this case from streamres into
a new streamres_legacy class. Streamline the remaining code accordingly.
Add a new flag to streamres to request uncompressed streams. This is
useful for sending data that is already compressed like a pre-built
bundle. Expect clients to support uncompressed data. For older clients,
zlib will still be used.
Differential Revision: https://phab.mercurial-scm.org/D1862
Martin von Zweigbergk <martinvonz@google.com> [Fri, 19 Jan 2018 12:33:03 -0800] rev 35749
localrepo: run cache-warming transaction callback before report callback
See in-code comment for details.
Differential Revision: https://phab.mercurial-scm.org/D1918
Martin von Zweigbergk <martinvonz@google.com> [Fri, 19 Jan 2018 11:35:55 -0800] rev 35748
scmutil: 0-pad transaction report callback category
Before this patch, the transaction name was '%2i-txnreport', which
means the first one would be ' 0-txnreport'. It seems more intuitive
for sorting purposes (the callbacks are called in lexicographical
order) to make it 0-padded.
Differential Revision: https://phab.mercurial-scm.org/D1917
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 16:01:06 +0100] rev 35747
stream: add a test showing we also clone bookmarks
Bookmarks are not stored in `.hg/store`. We need to make sure they are cloned
with `--stream`.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 19 Jan 2018 18:45:20 +0530] rev 35746
branch: allow changing branch name to existing name if possible
With the functionality added in previous patch we can change branches of a
revision but not everytime even if it's possible to do so. For example cosider
the following case:
o 3 added a (foo)
o 2 added b (foo)
o 1 added c (bar)
o 0 added d (bar)
Here if I want to change the branch of rev 2,3 to bar, it was not possible and
it will say, "a branch with same name exists".
This patch allows us to change branch of 2,3 to bar. The underlying logic for
changing branch finds the changesets from the revs passed which have no parents
in revs. We only support revsets which have only one such root, so to support
this we check whether the parent of the root has the same name as that of the
new name and if so, we can use the new name to change branches.
Differential Revision: https://phab.mercurial-scm.org/D1913
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 15 Oct 2017 23:08:45 +0530] rev 35745
branch: add a --rev flag to change branch name of given revisions
This patch adds a new --rev flag to hg branch which can be used to change branch
of revisions. This is motivated from topic extension where you can change topic
on revisions but this one has few restrictions which are:
1) You cannot change branch name in between the stack
2) You cannot change branch name and set it to an existing name
3) You cannot change branch of non-linear set of commits
4) You cannot change branch of merge commits.
Tests are added for the same.
.. feature::
An experimental flag `--rev` to `hg branch` which can be used to change
branch of changesets.
Differential Revision: https://phab.mercurial-scm.org/D1074
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Jan 2018 23:50:01 +0900] rev 35744
templater: fix crash by empty group expression
'exp' may be None because of '(group None)' node. The error message is copied
from revset.py.
Yuya Nishihara <yuya@tcha.org> [Tue, 16 Jan 2018 21:46:17 +0900] rev 35743
log: fix typo in comment about _matchfiles()
Hollis Blanchard <hollis_blanchard@mentor.com> [Thu, 18 Jan 2018 13:33:21 -0800] rev 35742
sparse: --include 'dir1/dir2' should not include 'dir1/*'
In 2015 there was a workaround added (f39bace2d6cad32907c0d7961b3c0dbd64a1b7ad)
to sparse in the hg-experimental repo. That workaround:
a) no longer seems to be needed, since its testcase passes even with the code
removed, and
b) caused a new problem: --include 'dir1/dir2' ended up including dir1/*
too. (--include 'glob:dir1/dir2' is a user-level workaround.)
Remove the offending code, and add a testcase for situation B.
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Jan 2018 13:29:15 +0900] rev 35741
fileset: add kind:pat operator
":" isn't taken as a symbol character but an infix operator so we can write
e.g. "path:'foo bar'" as well as "'path:foo bar'". An invalid pattern kind
is rejected in the former form as we know a kind is specified explicitly.
The binding strength is copied from "x:y" range operator of revset. Perhaps
it can be adjusted later if we want to parse "foo:bar()" as "(foo:bar)()",
not "foo:(bar())". We can also add "kind:" postfix operator if we want.
One possible confusion is that the scope of the leading "set:" vs "kind:pat"
operator. The former is consumed by a matcher so applies to the whole fileset
expression:
$ hg files 'set:foo() or kind:bar or baz'
^^^^^^^^^^^^^^^^^^^^^^^^
Whereas the scope of kind:pat operator is narrow:
$ hg files 'set:foo() or kind:bar or baz'
^^^
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Jan 2018 13:33:56 +0900] rev 35740
minifileset: unify handling of symbol and string patterns
They must be identical for fileset compatibility.
Yuya Nishihara <yuya@tcha.org> [Sun, 14 Jan 2018 13:28:20 +0900] rev 35739
fileset: move import of match module to top
Actually there was no circular import issue.
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 21:28:12 +0100] rev 35738
revlog: group delta computation methods under _deltacomputer object
Extracting these methods from revlog will allow changing the implementation of
the deltacomputer, by providing this interface:
__init__(self, revlog) - constructor that initialize the object from a given
revlog
buildtext(self, revinfo, fh) - builds the fulltext version of a revision from
a _revisioninfo object and the file handle to
the .d (or .i for inline mode) file.
finddeltainfo(self, revinfo, fh) - find a revision in the revlog against
which it is acceptable to build a delta,
and build the corresponding _deltainfo.
It should now be easier to write an experimental feature that would replace
_deltacomputer by another object, for example one that would know how to
parallelize the delta computation in order to quicken the storage of multiple
revisions.
Paul Morelle <paul.morelle@octobus.net> [Sun, 14 Jan 2018 14:36:22 +0100] rev 35737
revlog: refactor out _finddeltainfo from _addrevision
Splicing the code into smaller chunks should help understanding it,
and eventually override some parts in experimental branches to try
optimization.
Yuya Nishihara <yuya@tcha.org> [Fri, 19 Jan 2018 21:39:11 +0900] rev 35736
localrepo: micro-optimize __len__() to bypass repoview
Since len(changelog) isn't overridden, we don't have to validate a cache of
unfiltered changelog.
$ python -m timeit -n 10000 \
-s 'from mercurial import hg, ui; repo = hg.repository(ui.ui());' \
'len(repo)'
orig) 10000 loops, best of 3: 32.1 usec per loop
new) 10000 loops, best of 3: 1.79 usec per loop
Spotted by Jordi GutiƩrrez Hermoso.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 18 Jan 2018 21:18:10 -0500] rev 35735
lfs: defer registering the pre-push hook until blobs are committed
The hook searches outgoing commits for blobs, and uploads them before letting
the push occur. No reason to search for that which isn't there.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 18 Jan 2018 18:04:56 -0500] rev 35734
lfs: dump the full response on httperror in debug mode
This was immensely helpful in diagnosing the 500: Internal Server Error when
using workers to upload. It's a nasty wall of html, so we really can't do
anything else with it.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 18 Jan 2018 15:59:21 -0500] rev 35733
lfs: default the User-Agent header for blob transfers to 'git-lfs'
The custom User-Agent for blob transfers was added in e7bb5fc4570c. Now I've
hit another incompatibility with a server wanting the string to start with
'git' or 'git-lfs' [1]. I don't feel strongly about this either way, but a
Wireshark trace of git shows that when the Batch API is hit, the User-Agent is
'git-lfs/2.3.4'. So this would probably ensure maximum interoperability.
This still leaves the experimental knob in, just in case.
[1] https://bitbucket.org/sdorra/scm-manager/src/095a027178888bc2b819aebfae3d2c192c858030/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java?at=default&fileviewer=file-view-default#GitUserAgentProvider.java-117
Matt Harbison <matt_harbison@yahoo.com> [Thu, 18 Jan 2018 15:11:34 -0500] rev 35732
lfs: default to not using workers for upload/download
I ran into truncated uploads with this defaulting to on. Wojciech Lis diagnosed
it as creating keepalive connections prior to forking, and illegally
multiplexing the same connection. [1] I didn't notice a problem with the couple
of downloads I tried, but disabled both for simplicity and safety.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2018-January/109916.html
Matt Harbison <matt_harbison@yahoo.com> [Sun, 14 Jan 2018 17:00:24 -0500] rev 35731
lfs: add the '{lfsattrs}' template keyword to '{lfs_files}'
This provides access to the metadata dictionary contained within the tracked
pointer file. The OID is probably the most important attribute, and has its own
keyword. But we might as well have this for completeness.
I liked {pointer} better, but couldn't make it work with the singular/plural
forms.
Boris Feld <boris.feld@octobus.net> [Thu, 18 Jan 2018 16:47:14 +0100] rev 35730
debugdownload: read repository hgrc if there is one
The command does not require a repository, but will use it if there is one.
This simplifies the reading of the remote destination when testing for
largefile based url.
Matt Harbison <matt_harbison@yahoo.com> [Fri, 19 Jan 2018 00:18:45 -0500] rev 35729
test-blackbox: stabilize for Windows
This goes with 853bf7d90804.
Paul Morelle <paul.morelle@octobus.net> [Fri, 19 Jan 2018 08:35:22 +0100] rev 35728
debugdeltachain: cleanup the double call to _slicechunk
Follow-up to Yuya's review on 43154a76f3927c4f0c8c6b02be80f0069c7d8fdb:
> Nit: hasattr() isn't necessary. revlog._slicechunk() is used in the previous
> block.
hasattr() isn't necessary indeed, as we are protected by the withsparseread
option, which was introduced at the same time as revlog._slicechunk, in
e2ad93bcc084b97c48f54c179365376edb702858.
And, as Yuya noticed, _slicechunk could be called only once.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 19 Jan 2018 14:10:18 +0530] rev 35727
blackbox: don't unpack the list while passing into str.join()
The current state may result in error TypeError.
Caught using evolve-tests.
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 17:07:55 +0100] rev 35726
atomicupdate: add an experimental option to use atomictemp when updating
In some cases Mercurial truncating files when updating causes problems. It can
happens when processes are currently reading the file or with big file or on
NFS mounts.
We add an experimental option to use the atomictemp option of vfs.__call__ in
order to avoid the problem.
The localrepository.wwrite seems to assume the files are created without the
`x` flag; with atomictempfile, the new file might inherit the `x` flag from
the destination. We force remove it afterward. This code could be refactored
and the flag processing could be moved inside vfs.
This patch should be tested with
`--extra-config-opt experimental.update.atomic-file=True`
as we disabled the option by default.
Differential Revision: https://phab.mercurial-scm.org/D1882
Boris Feld <boris.feld@octobus.net> [Wed, 17 Jan 2018 16:52:13 +0100] rev 35725
write: add the possibility to pass keyword argument from batchget to vfs
We are going to pass atomictemp keyword argument from merge.baychget to
vfs.__call__. Update all the frames to accept **kwargs and pass it to the next
function.
Differential Revision: https://phab.mercurial-scm.org/D1881
Joerg Sonnenberger <joerg@bec.de> [Thu, 18 Jan 2018 12:55:19 +0100] rev 35724
blackbox: if --debug is used, also trace ui.debug() calls
Differential Revision: https://phab.mercurial-scm.org/D1880
Alex Gaynor <agaynor@mozilla.com> [Thu, 18 Jan 2018 14:43:04 +0000] rev 35723
bdiff: handle the possibility of overflow when computing allocation size
Differential Revision: https://phab.mercurial-scm.org/D1904
Tom Prince <mozilla@hocat.ca> [Tue, 02 Jan 2018 10:09:08 -0700] rev 35722
phabricator: add a template item for linking to a differential review
Differential Revision: https://phab.mercurial-scm.org/D1802
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 14 Jan 2018 11:19:45 -0800] rev 35721
githelp: don't reference 3rd party commands for `git show`
`hg show` is a Facebook-ism. Reference functionality in core.
The logic here isn't terrific. But it is better than nothing.
Differential Revision: https://phab.mercurial-scm.org/D1729
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 21:09:08 -0800] rev 35720
githelp: improve help for "reset"
The previous help referenced a `hg reset`, which is a Facebook-ism.
We convert that to `hg update`. We also recognize --soft.
Differential Revision: https://phab.mercurial-scm.org/D1728
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 21:02:49 -0800] rev 35719
githelp: clean up reflog help
This referenced commands that don't exist in core. The new help
isn't great since it references an experimental extension. But
it is better than nothing.
While we're here, also add test coverage.
Differential Revision: https://phab.mercurial-scm.org/D1727
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:58:00 -0800] rev 35718
githelp: replace suggestion of `hg record`
`hg record` is deprecated in favor of `hg commit --interactive`.
Differential Revision: https://phab.mercurial-scm.org/D1726
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:56:01 -0800] rev 35717
githelp: remove reference to tweakdefaults
This is a Facebook-ism.
Differential Revision: https://phab.mercurial-scm.org/D1725
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 22 Dec 2017 18:38:29 -0700] rev 35716
githelp: recommend `hg import` for `git am`
This referenced a third party extension. It doesn't feel appropriate
to do that from a core extension. Reference `hg import` instead.
Differential Revision: https://phab.mercurial-scm.org/D1724
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:51:20 -0800] rev 35715
githelp: improve help for `git add`
The old code was referencing record and crecord, which are
deprecated. `hg commit --interactive` is the preferred mechanism
to use.
In addition, there was duplicate code in this function. It has
been removed.
Tests have been added to cover this function.
Differential Revision: https://phab.mercurial-scm.org/D1723
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 18 Dec 2017 20:44:59 -0800] rev 35714
githelp: vendor Facebook authored extension
This commit vendors the Facebook-authored "githelp" extension. This
extension provides a "githelp" command that can be used to try to
convert a `git` command to its Mercurial equivalent. This functionality
is useful for Git users learning Mercurial.
The extension was copied from the
repository at revision 32ceeccb832c433b36e9af8196814b8e5a526775. The
following modifications were made:
* The "testedwith" value has been changed to match core's conventions.
* Support for a custom footer has been removed, as it is Facebook
specific. The feature is useful. But the implementation wasn't
appropriate for core.
* A test referencing "tweakdefaults" has been removed.
* Imports changed to match Mercurial's style convention.
* Double newlines in test removed.
* Pager activation changed to ui.pager().
* Initial line of githelp.py changed to add description of file.
The removal of the custom footer code was the only significant
source change. The rest were mostly cosmetic.
There are still some Facebook-isms in the extension. I'll address
these as follow-ups.
.. feature:: githelp extension
The "githelp" extension provides the ``hg githelp`` command. This
command attempts to convert a ``git`` command to its Mercurial
equivalent. The extension can be useful to Git users new to
Mercurial.
Differential Revision: https://phab.mercurial-scm.org/D1722
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 18 Jan 2018 19:40:17 +0530] rev 35713
merge: use public interface ms.localctx instead of ms._local
Boris Feld <boris.feld@octobus.net> [Tue, 16 Jan 2018 14:28:57 +0100] rev 35712
bookmarks: display the obsfate of hidden revision we create a bookmark on
Display the same message we added recently to the filtered error message
create a bookmark on an hidden revision.
Differential Revision: https://phab.mercurial-scm.org/D1870
Boris Feld <boris.feld@octobus.net> [Tue, 16 Jan 2018 14:08:54 +0100] rev 35711
update: display the obsfate of hidden revision we update to
Display the same message we added recently to the filtered error message when
updating to a hidden obsolete changeset.
Differential Revision: https://phab.mercurial-scm.org/D1869
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 00:02:40 -0800] rev 35710
evolution: make reporting of new unstable changesets optional
This makes it possible to turn off the reporting of unstable
changesets (e.g. "1 new orphan changesets"), just in case it's too
slow for some users. Anyone who's been using the evolve extension has
already been accepting the cost of the reporting, so this is just for
the few users who have turned on obsmarkers but not been using the
evolve extension (as I believe Facebook has).
Differential Revision: https://phab.mercurial-scm.org/D1868
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 23:59:17 -0800] rev 35709
evolution: report new unstable changesets
This adds a transaction summary callback that reports the number of
new orphan, content-divergent and phase-divergent changesets.
The code for reporting it is based on the code from the evolve
extension, but simplified a bit. It simply counts the numbers for each
kind of instability before and after the transaction. That's obviously
not very efficient, but it's easy to reason about, so I'm doing this
as a first step that can make us quite confident about the test case
changes. We can optimize it later and make sure that the tests are not
affected. The code has been used in the evolve extension for a long
time and has apparently been sufficiently fast, so it doesn't seem
like a pressing issue.
Unlike the evolve extension's version of this report, this version
applies to all commands (or all transactions run as part of any
command, to be exact).
Differential Revision: https://phab.mercurial-scm.org/D1867
Martin von Zweigbergk <martinvonz@google.com> [Wed, 10 Jan 2018 14:00:23 -0800] rev 35708
transaction: register summary callbacks only at start of transaction (BC)
We currently register summary callbacks every time
localrepo.transaction() is called, so both when the transaction is
started and when a nested transaction is created. That seems a little
weirdly asymmetric, because the summary callbacks are thus not
necessarily registred at the beginning of the outermost transaction,
but they are only called when the outermost transaction closes (not
when a nested transaction closes).
I want to add another summary callback that records the repo state at
the beginning of the transaction and compares to that when the
transaction closes. However, because of the registration that happens
when a nested transaction is created, that would need to go through
extra trouble to not overwrite the callback and report the difference
from the start time of the innermost transaction to the close of the
outermost transaction.
Also, the callbacks are registered with a name based on the order they
are defined in the registersummarycallback(). For example, if both the
"new changesets %s" and the "obsoleted %i changesets" hooks are
registered, the first would be called 00-txnreport and the second
would be called 01-txnreport. That gets really weird if
registersummarycallback() gets called multiple times, because the last
one wins, and a depending on which of the two callbacks get
registered, we might hypothetically even overwrite on type of callback
with another. For example, if when the outer transaction was started,
we registered the "new changesets %s" callback first, and when the
inner transaction was started, we registered only the "obsoleted %i
changesets" callback, then only the latter message would get
printed. What makes it hypothetical is that what gets registered
depends on the transaction name, and the set of transaction names that
we match on for the former latter message is a subset of the set of
names we match on for the former. Still, that seems like a bug waiting
to happen.
That second issue could be solved independently, but the first issue
seems enough for me to consider it a bug (affecting developers, not
users), so this patch simply drops that extra registration.
Note that this affects "hg transplant" in a user-visible way. When "hg
transplant" is asked to transplant from a remote repo so it involves a
pull, then the outermost transaction name is "transplant" and an inner
transaction is created for "pull". That inner transaction is what led
us to sometimes report "new changesets %s" from "hg transplant". After
this patch, that no longer happens. That seems fine to me. We can make
it instead print the message for all "hg transplant" invocations if we
want (not just those involving a remote), but I'll leave that for
someone else to do if they think it's important.
Differential Revision: https://phab.mercurial-scm.org/D1866
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 14:39:17 -0800] rev 35707
repair: filter out unknown revisions from phasecache within transaction
I'm about to add another summary report callback that needs to access
phase information. These callbacks run at the end of the transaction
and some of them failed because they tried to get the phase for
stripped commits. The solution is to filter out unknown revisions
before the transaction is closed.
Differential Revision: https://phab.mercurial-scm.org/D1865
Martin von Zweigbergk <martinvonz@google.com> [Sun, 14 Jan 2018 23:37:06 -0800] rev 35706
repair: drop unnecessary phase cache invalidation
After stripping the revlogs, we have been invalidating the phase cache
since bf7b8157c483. Later, in 8e3021fd1a44, I added a call to
phasecache.filterunknown(). I apparently didn't realize it then, but I
now think that that call made the existing phasecache.invalidate()
call unnecessary, so this patch drops it. Both the test added in
bf7b8157c483 and the entire evolve extension test suite indeed still
pass.
Differential Revision: https://phab.mercurial-scm.org/D1864
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 15 Jan 2018 15:20:02 -0800] rev 35705
wireproto: drop support for reader interface from streamres (API)
2add671bf55b and later commits overhauled support for compression
and output handling in the wire protocol.
Fast forward 14 months and all wire protocol commands except
the legacy "changegroup" and "changegroupsubset" commands feed
a generator to streamres.
I no longer think it is worth maintaining support for the old
"reader" API (which allows you to specify an object having a
read() method to obtain data).
This commit refactors the legacy wire protocol commands to feed
a generator to the streamres. We also drop support for the "reader"
argument and the code that was using it.
As part of the change, chunks over the SSH protocol have increased
in size for these commands. But these commands are really ancient,
so I doubt anyone will notice.
.. api::
wireproto.streamres.__init__ no longer accepts a "reader" argument.
Use the "gen" argument instead.
Differential Revision: https://phab.mercurial-scm.org/D1861
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 08 Jan 2018 19:41:47 +0530] rev 35704
merge: add `--abort` flag which can abort the merge
Currently we don't have a good functionality to abort the merge and tell user to
do `hg update -C .` which can leads to different results if user missed the '.'
and moreover does not align with other abort functionalities like rebase, shelve
etc.
This patch adds `hg merge --abort` which will abort the ongoing merge and take
us back to the chagneset where we started from. Works in both cases when merge
resulted in conflicts and when there were no conflicts.
.. feature::
A `--abort` flag to merge command to abort the ongoing merge.
Differential Revision: https://phab.mercurial-scm.org/D1829
Phil Cohen <phillco@fb.com> [Thu, 04 Jan 2018 21:37:03 -0800] rev 35703
filemerge: only write in-memory backup during premerge
This wasn't broken, but should mirror the non-in memory case to save an extra
write.
Differential Revision: https://phab.mercurial-scm.org/D1807
Phil Cohen <phillco@fb.com> [Thu, 04 Jan 2018 21:36:58 -0800] rev 35702
filemerge: fix backing up an in-memory file to a custom location
If the user specifies a ui.origbackuppath, we used to always copy the file
there, but if the source file is in memory we must write it instead of copying.
Differential Revision: https://phab.mercurial-scm.org/D1806