Sune Foldager <cryo@cyanite.org> [Wed, 04 Jul 2018 14:19:13 +0200] rev 38533
windows: fix incorrect detection of broken pipe when writing to pager
Paging e.g. hg incoming on Windows and quitting the pager before the
output is consumed will print 'abort: Invalid argument'. This is
because the windows error 0xE8 (ERROR_NO_DATA) is mapped to EINVAL
even though it is documented as 'The pipe is being closed'.
Note that this fix assumes that Windows' last error code is still
valid in the exception handler. It works correctly in all my tests.
A simpler fix would be to just map EINVAL to EPIPE, like was done is
flush previously, but that would be less precise.
This error was not observed previously, when pager was an extension.
Boris Feld <boris.feld@octobus.net> [Tue, 19 Jun 2018 19:10:31 +0100] rev 38532
test: stop passing --quiet in a run dedicated to debug output
The goal of the run is to display some debug output. Passing --quiet in this
case is strange.
Sandu Turcan <idlsoft@gmail.com> [Fri, 15 Jun 2018 14:07:13 -0400] rev 38531
acl: add bookmarks support
Originally submitted at
https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-March/080650.html
as an RFC by timeless.
.. feature::
The `acl` extension now has support for bookmarks as well as branches.
Differential Revision: https://phab.mercurial-scm.org/D3750
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 18:34:33 -0700] rev 38530
repository: define manifest interfaces
The long march towards declaring interfaces for repository
primitives continues.
This commit essentially defines interfaces based on the following
types:
* manifest.manifestdict -> imanifestdict
* manifest.manifestlog -> imanifestlog
* manifest.memmanifestctx -> imanifestrevisionwritable
* manifest.manifestctx -> imanifestrevisionstored
* manifest.memtreemanifestctx -> imanifestrevisionwritable
* manifest.treemanifestctx -> imanifestrevisionstored
* util.dirs -> idirs
The interfaces are thoroughly documented. Their documentation is
now better than the documentation in manifest.py in many cases.
With the exception of util.dirs, classes have been annotated with
their interfaces. (I didn't feel like util.dirs needed the
proper interface treatment.)
Tests have been added demonstrating that all classes and instances
conform to their interfaces.
This work was much easier than filelogs. That's because Durham
did an excellent job formalizing the manifest API a while back.
There are still some minor kludges with the interfaces that should
probably be addressed. But the primary goal with interface
declarations is getting something established. Once we have an
interface, we can modify it later easily enough.
Differential Revision: https://phab.mercurial-scm.org/D3869
Augie Fackler <augie@google.com> [Tue, 12 Jun 2018 11:31:20 -0400] rev 38529
narrowbundle2: when we handle a widen, mark the operation as unsafe
We have to manually drive the context manager here since the logic is
awkwardly split between a couple of places.
Differential Revision: https://phab.mercurial-scm.org/D3719
Augie Fackler <augie@google.com> [Mon, 11 Jun 2018 17:06:29 -0400] rev 38528
narrow: mark the critical chunks of narrowing/widening as unsafe
I'm _mostly_ sure these are the only unsafe chunks here.
Differential Revision: https://phab.mercurial-scm.org/D3718
Augie Fackler <augie@google.com> [Mon, 11 Jun 2018 17:03:29 -0400] rev 38527
repair: mark the critical section of strip() as unsafe
When our experimental nointerrupt feature is enabled, this will
help prevent users from corrupting their repo during a strip.
Differential Revision: https://phab.mercurial-scm.org/D3717
Augie Fackler <augie@google.com> [Wed, 27 Jun 2018 10:47:14 -0400] rev 38526
ui: add an uninterruptable context manager that can block SIGINT
The blocking of SIGINT is not done by default, but my hope is that we
will one day. This was inspired by Facebook's "nointerrupt" extension,
which is a bit more heavy-handed than this (whole commands are treated
as unsafe to interrupt). A future patch will enable this for varying
bits of Mercurial that are performing unsafe operations.
It's intentional that the KeyboardInterrupt is raised as the context
manager exits: during the span of the context manager interrupting
Mercurial could lead to data loss, but typically those spans are
fairly narrow, so we can let the unsafe block complete and then
terminate hg (which will leave the repo in a consistent state, even if
it's not the user's desired state).
.. api::
New context manager ``ui.uninterruptable()`` to mark portions of a command
as potentially unsafe places to interrupt Mercurial with Control-C or
similar.
Differential Revision: https://phab.mercurial-scm.org/D3716
Augie Fackler <augie@google.com> [Tue, 03 Jul 2018 12:22:37 -0400] rev 38525
merge with stable
Augie Fackler <raf@durin42.com> [Tue, 03 Jul 2018 12:10:22 -0400] rev 38524
Added signature for changeset
0b63a6743010
Augie Fackler <raf@durin42.com> [Tue, 03 Jul 2018 12:10:21 -0400] rev 38523
Added tag 4.6.2 for changeset
0b63a6743010
Yuya Nishihara <yuya@tcha.org> [Fri, 29 Jun 2018 23:13:23 +0900] rev 38522
revset: add partial support for ancestor(wdir())
It's easy, so let's make it happen. I'm not certain if 'wdir() &' should
be required. ancestors(wdir()) works without it, but ancestor(wdir()) doesn't
as of now. That's the issue of fullreposet.__contains__() vs __and__().
Boris Feld <boris.feld@octobus.net> [Sat, 23 Jun 2018 13:19:03 +0100] rev 38521
context: also accept diff option directly
For now we accept both diff option and dictionary. This will let us upgrade
internal users gradually before we drop the old API at the end of this series.
Boris Feld <boris.feld@octobus.net> [Wed, 23 May 2018 15:31:40 +0200] rev 38520
context: also take all other arguments than `patch.diff` accept
This is needed to use `context.diff` as a full replacement of `patch.diff`
Boris Feld <boris.feld@octobus.net> [Tue, 22 May 2018 15:02:52 +0200] rev 38519
context: explicitly take diffopts in `context.diff` (API)
To provide a proper replacement for the `patch.diff(…)` function, the
`context.diff(…)` method needs to be able to take more parameters. To
distinguish the diff options from the new other arguments, we upgrade the diff
options to its own explicit argument.
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 01:00:39 +0530] rev 38518
rebase: check whether the rebasestate exists or not a bit early
Converted the else part into `if True` because that part will soon be under a
except part.
Differential Revision: https://phab.mercurial-scm.org/D3876
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 00:52:25 +0530] rev 38517
rebase: use staeobj to check whether interrupted rebase exists
This cleans up the code a bit.
Differential Revision: https://phab.mercurial-scm.org/D3875
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 00:46:59 +0530] rev 38516
rebase: add a stateobj variable to rebaseruntime class
The stateobj variable is an object of state.cmdstate() and will be used in
upcoming patches to clean up the logic a bit and also use cbor format to write
data to rebasestate class.
Differential Revision: https://phab.mercurial-scm.org/D3874
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 01 Jul 2018 00:31:57 +0530] rev 38515
rebase: refactor logic to read rebasestate in a separate function
This will help us in plugging the use of state.cmdstate() to read rebasestate.
Differential Revision: https://phab.mercurial-scm.org/D3873
Boris Feld <boris.feld@octobus.net> [Fri, 22 Jun 2018 00:07:22 +0100] rev 38514
revlog: reuse 'descendant' implemention in 'isancestor'
The two functions do the same thing, but one takes nodes while the other takes
revs. Using one to implement the other make sense.
We should probably cleanup the API at some point to avoid having so many similar
functions. However, we focus on an efficient implementation for now.
Boris Feld <boris.feld@octobus.net> [Fri, 22 Jun 2018 00:05:20 +0100] rev 38513
revlog: efficient implementation of 'descendant'
Iterating over descendants is costly, because there are no "parent -> children"
pointers. Walking the other way around is much more efficient, especially on
large repositories, where descendant walks can cost seconds. And the other hand,
common ancestors code follows links in the right direction and has a compiled
implementation.
In real life usage, this saved up to 80s during some pull operations, where
descendant test happens in extension code.
Boris Feld <boris.feld@octobus.net> [Thu, 21 Jun 2018 23:56:51 +0100] rev 38512
revlog: refactor out the rev-oriented part of commonancestorheads
We plan to use this in a function taking revs as argument. Round trips to nodes
seem silly.
Boris Feld <boris.feld@octobus.net> [Thu, 21 Jun 2018 23:53:43 +0100] rev 38511
revlog: do inclusive descendant testing (API)
In many other places, a revision is considered a descendant of itself. We
update the behavior of `revlog.descendant()` to match this. (for example.
`revlog.isancestor` does inclusive testing).
No tests break, so it seems safe to do so.
This will make it easier to use a more efficient implementation in a later
changeset.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 16:06:05 -0700] rev 38510
manifest: make cachesize a private attribute
AFAICT this isn't accessed outside the class. It is a private
attribute and its naming should reflect that.
Differential Revision: https://phab.mercurial-scm.org/D3868
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 30 Jun 2018 15:51:04 -0700] rev 38509
repository: document that file() return value conforms to interface
Differential Revision: https://phab.mercurial-scm.org/D3867
Yuya Nishihara <yuya@tcha.org> [Sun, 01 Jul 2018 21:40:55 +0900] rev 38508
cleanup: pass in overwrite flag to hg.updaterepo() as named argument
For clarity.
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:23:02 +0530] rev 38507
histedit: use self.stateobj to check whether interrupted histedit exists
self.stateobj is an instance of state.cmdstate() class which has an .exists()
function which is used to check whether there exists an interrupted statefile or
not.
Differential Revision: https://phab.mercurial-scm.org/D3865
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:21:21 +0530] rev 38506
histedit: add a stateobj variable to histeditstate class
The stateobj variable will be an instance of state.cmdstate() class. The
stateobj variable will be used in upcoming patches to simplify the code a bit
and start using cbor to write state files.
Differential Revision: https://phab.mercurial-scm.org/D3864
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:10:49 +0530] rev 38505
histedit: factor out logic of processing state data in separate fn
The new function will serve as the point from where we always get a dictionary
of data stored in the statefile and will be helpful in integrating
state.cmdstate.read() to write statefile in cbor.
Differential Revision: https://phab.mercurial-scm.org/D3863
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 30 Jun 2018 07:05:36 +0530] rev 38504
histedit: use hg.updaterepo() to avoid ui.{push|pop}buffer() hack
In some parts of code, we call hg.update() and surround that with
ui.pushbuffer() and ui.popbuffer() to suppress the output returned by
hg.update().
We have hg.updaterepo() which does not writes to UI and can be used instead.
Differential Revision: https://phab.mercurial-scm.org/D3862