Yuya Nishihara <yuya@tcha.org> [Sat, 03 Jun 2017 19:12:01 +0900] rev 32658
scmutil: introduce binnode(ctx) as paired function with intrev(ctx)
It seemed silly to convert ctx.hex() back to binary to use node.hex/short(),
or to use [:12] instead of node.short() because ctx.node() could be None.
Eventually I want to change wctx.rev() and wctx.node() to return wdirrev and
wdirid respectively, but that's quite big API breakage and can't be achieved
without some compatibility wrappers.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Jun 2017 19:01:19 +0900] rev 32657
merge: use scmutil.intrev() to sort ctx objects
This moves wctx to the last, but that shouldn't matter. Only the order of
stored revisions is important.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Jun 2017 18:57:28 +0900] rev 32656
scmutil: pass ctx object to intrev()
This makes it slightly easier to sort basectx objects by key=scmutil.intrev.
We're most likely to have ctx objects where changectx/workingctx abstraction
is necessary, so this won't increase the abstraction overhead.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Jun 2017 14:05:52 +0900] rev 32655
setup: do not overwrite local __modulepolicy__.py on out-of-source build
Since the default policy is selected depending on setup options, "make install"
shouldn't overwrite in-source __modulepolicy__.py generated by "make local".
Kevin Bullock <kbullock@ringworld.org> [Sun, 04 Jun 2017 08:16:37 -0500] rev 32654
Added signature for changeset
c850f0ed54c1
Kevin Bullock <kbullock@ringworld.org> [Sun, 04 Jun 2017 08:16:29 -0500] rev 32653
Added tag 4.2.1 for changeset
c850f0ed54c1
Augie Fackler <augie@google.com> [Sat, 03 Jun 2017 16:33:28 -0400] rev 32652
merge with stable
Siddharth Agarwal <sid0@fb.com> [Fri, 02 Jun 2017 22:27:52 -0700] rev 32651
status: don't crash if a lookup file disappears
This can happen if another process (even another hg process!) comes along and
removes the file at that time.
This partly resolves
issue5584, but not completely -- a bogus dirstate update
can still happen. However, the full fix is too involved for stable.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 01 Jun 2017 08:31:21 -0700] rev 32650
match: simplify nevermatcher
Most of it does the same as its superclass, so it can simply be
removed. It also seems to make more sense for it to use relative
paths, as we do for everything except alwaysmatcher, although
nevermatcher.uipath() will probably never get called anyway, so it
won't matter.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Jun 2017 00:25:24 +0900] rev 32649
annotate: restructure formatter output to be nested list (BC)
Annotate data should be in [(file, [line...])...] form, but there was no
API to represent such data structure when I ported it to formatter. Now
we have fm.nested() and the -T option is still experimental, so we can fix
the data format.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Jun 2017 00:05:12 +0900] rev 32648
annotate: rename formatter variable
So we can add a nested 'fm' of narrow scope.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 07 May 2017 23:29:03 -0400] rev 32647
setup: prevent setuptools from laying an egg
Previously, test-hghave.t was failing on Windows (and on Linux if
$FORCE_SETUPTOOLS was set) with the following:
--- c:/Users/Matt/Projects/hg/tests/test-hghave.t
+++ c:/Users/Matt/Projects/hg/tests/test-hghave.t.err
@@ -19,7 +19,11 @@
> foo
> EOF
$ run-tests.py $HGTEST_RUN_TESTS_PURE test-hghaveaddon.t
+ warning: Testing with unexpected mercurial lib: c:\Users\Matt\Projects\hg\mercurial
+ (expected ...\hgtests.mu9rou\install\lib\python\mercurial)
.
+ warning: Tested with unexpected mercurial lib: c:\Users\Matt\Projects\hg\mercurial
+ (expected ...\hgtests.mu9rou\install\lib\python\mercurial)
Augie relayed concerns[1] about the first attempt at this, which also excluded
'install_egg_info'. All that needs to be excluded to avoid the egg and make the
test work is to filter out 'bdist_egg'. (Actually, the body of this class could
simply be 'pass', and 'bdist_egg' still isn't run. But that seems to magical.)
Also note that prior to this (and still now), `make clean` doesn't delete the
'mercurial.egg-info' that is generated by `make install`.
[1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-May/097668.html
# no-check-commit
Martin von Zweigbergk <martinvonz@google.com> [Fri, 02 Jun 2017 10:32:39 -0700] rev 32646
bitmanipulation: add missing include of string.h
That's where memcpy() is declared.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Jun 2017 02:41:19 +0530] rev 32645
py3: add test to show `hg update` and `hg identify` works on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Jun 2017 10:14:00 +0530] rev 32644
py3: add a test to show `hg diff` works on Python 3
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Jun 2017 02:25:18 +0530] rev 32643
py3: implement __bytes__ for committablectx
Before this method, calling bytes on workingctx or memctx calls
basectx.__bytes__ since the magic method was not defined for this class. When it
calls the method from basectx class, it returns TypeError because None is passed
into it.
After this commit `hg update -C` works on Python 3 if eol is not enabled.
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Jun 2017 10:35:21 +0530] rev 32642
py3: convert exception to bytes to pass into ui.warn()
Here encoding.strtolocal() is used because exc maybe an IOError which could
contain a valid non-ascii unicode.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Jun 2017 02:14:26 +0530] rev 32641
py3: convert bool variables to bytes before passing into ui.debug()
We can't pass unicodes to ui.debug() and hence we need to convert things to
bytes before passing them.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Jun 2017 01:14:02 +0530] rev 32640
py3: use dict.update() instead of constructing lists and adding them
dict.items() returned a list on Python 2 and whereas on Python 3 it returns a
view object. So we required a work around. Using dict.update() is better then
constructing lists as it should save us on gc churns.
David Demelier <demelier.david@gmail.com> [Fri, 03 Feb 2017 15:02:27 +0100] rev 32639
patchbomb: add -B option to select a bookmark
Add the -B/--bookmark option to select a bookmark whose changesets
and its ancestors will be selected unless a new bookmark/head is
found.
This is inspired by hg strip -B option.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:27:56 +0200] rev 32638
test: add the mirror push race case for non-contiguous branch head
We check case where the raced push update that a head through another named
branch while the racing push update that same head.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:27:41 +0200] rev 32637
test: add a push race case where non-contiguous branch head are created
We check case where the raced push an update to branch default head while the
racing push update that same head but through another named branch.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:27:09 +0200] rev 32636
test: add a push race case where the raced push touch multiple heads
We check case where the raced push update all heads while the racing push
update one of them.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:26:51 +0200] rev 32635
test: add a push race case where racing push touches multiple heads
We check case where the raced push updates a head while the racing push update
all of them.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:26:35 +0200] rev 32634
test: add a push race case where racing push create a new named branch
This is the mirror case from the previos one. We check case where the raced
push update a head while the racing push create a new named branch as a
children of that updated head.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:26:16 +0200] rev 32633
test: add a push race case where raced push created a new named branch
We check case where the raced push create a new branch on the same head updated
by the racing push.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:25:40 +0200] rev 32632
test: add a push race case where the racing client create a new head
We check case where the raced client push updates an existing head while the
racing client push creates a new one.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:25:20 +0200] rev 32631
test: add a push race case where each client replaces a different head
We check case where the raced push replace one head while the racing push
replaces another unrelated one.
That second test also make sure we synchronise all repositories to the same
state between tests. That will help us when allowing some sort of concurrent
pushes.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 27 May 2017 22:24:58 +0200] rev 32630
test: add a file dedicated to push race between clients
There are very few tests around the detection of push race. This file will be
dedicated to covering these cases more through fully. We start with a simple
case. More complex cases get added in later changesets.
My end goal here is to provide a way for server to accept concurrent push as
long as they are not touching the same heads. However, I want to buff the test
coverage of that code before touching anything.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 20 May 2017 16:19:59 +0200] rev 32629
strip: strip obsmarkers exclusive to the stripped changeset
This is it, `hg strip --rev X` will now also remove obsolescence markers
exclusive to X. Since a previous changeset, the obsmarkers has been backed up
in the strip backup bundle, so it is possible to restore them.
Note: stripping obsmarkers means the precursors of the stripped changeset might no
longer be obsolete after the strip.
Stripping changeset without obsmarkers can be useful when building test case. So
It is possible to disable the stripping of obsmarkers using the
'devel.strip-obsmarkers' config option.
Test change have been carefully validated.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Jun 2017 12:08:49 +0200] rev 32628
strip: do not include obsolescence markers for the temporary bundle
When stripping, we need to put all non-stripped revisions "above" the stripped
ones in a "temporary-bundle" while we strip the targets revision. Then we
reapply that bundle to restore these non-stripped revisions (with a new revision
numbers). We skip the inclusion of obsolescence markers in that bundle. This is
safe since all obsmarkers we plan to strip will be backed-up in the strip backup
bundle. Including the markers would create issue in some case were we try to
strip a prune markers that is "relevant" to a revision in the
"temporary-bundle".
(note: we do not strip obsmarkers yet)
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Jun 2017 08:44:01 +0200] rev 32627
exclusive-markers: update the dedicated test with list of exclusive markers
We now display data about the "exclusive markers" in the test dedicated to
relevant and exclusive markers computation and usage. Each output have been
carefully validated
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 20 May 2017 15:02:30 +0200] rev 32626
obsolete: add a function to compute "exclusive-markers" for a set of nodes
This set will be used to select the obsmarkers to be stripped alongside the
stripped changesets. See the function docstring for details.
More advanced testing is introduced in the next changesets to keep this one
simpler. That extra testing provides more example.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 01 Jun 2017 08:32:24 +0200] rev 32625
test-obsolete-bundle-strip: check all changesets in the isolated prune case
We also want to check the result of the various computations when both
changesets are selected (the pruned changesets and its parents).
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 26 May 2017 03:52:11 +0200] rev 32624
test-obsolete-bundle-strip: add testing of markers backup during strip
When applicable, we strip the revision tested in the test and we check that the
backup bundle contains the appropriate markers.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 20 May 2017 15:06:10 +0200] rev 32623
strip: also backup obsmarkers
We are about to give 'strip' the ability to remove obsmarkers. Before we start
removing data we must make sure it is preserved somewhere. So the backup bundle
created by 'strip' now contains obsmarkers.
Augie Fackler <augie@google.com> [Tue, 30 May 2017 20:48:43 -0400] rev 32622
tests: fix run-tests when there's a bad #if in a test
That has (and still does) caused the test to be skipped, but without
this fix it was possible to exit this block of code without clearing
the output channel, which poisoned the channel list for later test
method runs. Fix this by always clearing the channel in a finally.
The test for this is somewhat unfortunate. Sadly, I couldn't get a way
to reproduce this with less than 2n+1 test cases, nor could I get it
to reproduce reliably without the sleep statements. It's also crucial
that the test with the broken #if be smaller (in terms of byte count)
than the sleeping tests, so that it runs first and would poison the
channel list prior to another test needing that entry from the list.
Augie Fackler <augie@google.com> [Tue, 30 May 2017 20:47:00 -0400] rev 32621
tests: make run-tests fail early if no channel is found
I hit a weird corner case in run-tests where a test that caused an
exception to be raised was breaking everything with an unbound
variable error a few lines down because channel was never getting set
in this for loop. By adding an `else` clause to this for loop, we can
explode right away if we can't find a channel and give the developer a
better chance at figuring out what's going on.
Augie Fackler <raf@durin42.com> [Sun, 28 May 2017 15:47:00 -0400] rev 32620
dispatch: convert exception payload to bytes more carefully
We were previously depending on str() doing something reasonable here,
and we can't depend on the objects in question supporting __bytes__,
so we work around the lack of direct bytes formatting.
Augie Fackler <raf@durin42.com> [Sun, 28 May 2017 15:49:29 -0400] rev 32619
help: convert flag default to bytes portably
We were relying on %s using repr on (for example) integer values. Work
around that for Python 3 while preserving all the prior magic.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Jun 2017 23:08:23 +0900] rev 32618
cmdutil: use isstdiofilename() where appropriate
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Jun 2017 23:05:29 +0900] rev 32617
py3: simply use b'%d\n' to format pid in server.py
Spotted by Martin, thanks.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Jun 2017 22:43:24 +0900] rev 32616
py3: implement __bytes__() on most of our exception classes
We store bytes in exc.args, which should be translated to a byte string
without encode/decode dance.
IOError subclasses are unchanged for now. We'll need to decide how our
IOErrors should be caught.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Jun 2017 22:24:15 +0900] rev 32615
py3: convert __doc__ back to bytes in help.py
pycompat.getdoc() is pretty simple, but we wouldn't want to write handling
of None inline.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Jun 2017 01:41:34 +0530] rev 32614
py3: ensure that we don't concat bytes and str and the end result is bytes
Here obj.__module__ and obj.__name__ are str. Either we can convert them to
bytes or use an r'' and convert back to bytes when concat is done. I preferred
the later one since we are encoding only once here.
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Jun 2017 00:00:10 +0530] rev 32613
py3: make sure we return strings from __str__ and __repr__
On Python 3:
>>> class abc:
... def __repr__(self):
... return b'abc'
...
>>> abc()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __repr__ returned non-string (type bytes)
>>> class abc:
... def __str__(self):
... return b'abc'
...
>>> str(abc())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __str__ returned non-string (type bytes)
So the __str__ and __repr__ must return strings.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 31 May 2017 23:48:52 +0530] rev 32612
py3: replace None with -1 to sort an integer array
In Python 2:
>>> ls = [4, 2, None]
>>> sorted(ls)
[None, 2, 4]
In Python 3:
>>> ls = [4, 2, None]
>>> sorted(ls)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < int()
Therefore we replaced None with -1, and the safe part is that, None and -1 are
only the keys which are used for sorting so we don't need to convert the -1's
back to None.
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 31 May 2017 23:42:58 +0530] rev 32611
py3: pass str in os.sysconf()
os.sysconf() doesn't accepts bytes on Python 3. Adding r'' will make
sure b'' is not added here.