Denis Laxalde <denis@laxalde.org> [Fri, 29 Nov 2019 21:34:54 +0100] rev 43739
tests: check that 'log --line-range' follows uncommitted changes
The reason we start walking revisions from the working directory (None
revision) in logcmdutil.getlinerangerevs() is because we can follow
uncommitted changes. Adding a test to illustrate this based on an
uncommitted rename as there was none before. This helps understand the
fix in next changeset.
Julien Cristau <jcristau@debian.org> [Fri, 29 Nov 2019 18:49:59 +0100] rev 43738
test: don't put $BINDIR in $PATH for test-merge-tools.t
We call $BINDIR/hg explicitly anyway, so don't need it in $PATH. This
fixes failures when running the test --with-hg=/usr/bin/hg, where we
pick up /usr/bin/false as merge tool when we expected not to find it.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 23 Nov 2019 23:02:26 -0500] rev 43737
webutil: add missing argument to join()
Differential Revision: https://phab.mercurial-scm.org/D7516
Augie Fackler <augie@google.com> [Thu, 21 Nov 2019 23:35:29 -0500] rev 43736
cleanup: update references to /help/ that should now be /helptext/
I noticed this only because the WiX build was broken after
2e017696181f. I haven't tested this change with WiX, but it seems
pretty obvious by inspection this should fix it.
Differential Revision: https://phab.mercurial-scm.org/D7472
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Nov 2019 21:42:04 +0900] rev 43735
merge with stable
Georges Racinet <georges.racinet@octobus.net> [Wed, 20 Nov 2019 19:07:02 +0100] rev 43734
singlehead: making config item a bool again
with the use of `configsuboptions`, the main config item has become
a string (unless it's just the default value).
This makes it in particular hard to override in a cascade of HGRC files,
as we do in Heptapod to re-allow multiple heads on specific repositories
while the default behaviour is to forbid them. The added test case reflects
that use-case
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 15:46:35 -0500] rev 43733
tests: byteify a few more things in simplestorerepo.py
Differential Revision: https://phab.mercurial-scm.org/D7471
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 15:39:03 -0500] rev 43732
profiling: add a missing argument to the ProgrammingError constructor
Differential Revision: https://phab.mercurial-scm.org/D7470
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 15:38:23 -0500] rev 43731
profiling: disable the import-error warning for the flamegraph module
The module being missing is properly handled, but pytype was complaining.
Differential Revision: https://phab.mercurial-scm.org/D7469
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 15:31:33 -0500] rev 43730
phases: make `allphases` a list on py3 also
Pytype complained that `range` doesn't support slicing, so make this a list like
it was on py2.
Differential Revision: https://phab.mercurial-scm.org/D7468
Matt Harbison <matt_harbison@yahoo.com> [Wed, 20 Nov 2019 09:55:59 -0500] rev 43729
wireprotov1server: capture Abort type before accessing the `hint` attribute
Although the previous code worked, pytypes complained because `exc` is caught
above as `BundleValueError, Abort, PushRaced`, and the other two don't have this
attribute.
Differential Revision: https://phab.mercurial-scm.org/D7463
Denis Laxalde <denis@laxalde.org> [Wed, 20 Nov 2019 08:55:24 +0100] rev 43728
tests: add more tests for "hg shelve --delete"
It appears that the only tests for "hg shelve --delete" concern command
errors (e.g. incompatible command options). Adding some more to check
that non-existent names are handled and a success case.
Differential Revision: https://phab.mercurial-scm.org/D7460
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Nov 2019 14:13:04 -0500] rev 43727
scmutil: add assertions to help pytype
Differential Revision: https://phab.mercurial-scm.org/D7456
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Nov 2019 14:04:09 -0500] rev 43726
revset: add an assertion to help pytype
Differential Revision: https://phab.mercurial-scm.org/D7455
Denis Laxalde <denis.laxalde@logilab.fr> [Thu, 21 Nov 2019 09:25:50 +0100] rev 43725
import: add a --secret option
Similarly to "hg commit", we add a --secret option to "hg import" for
committing with the secret phase. The option has no short form since
there already is a "-s" for "--similarity".
.. feature::
``hg import`` has a new --secret option for committing with the
secret phase.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 17:25:24 -0500] rev 43724
util: convert an exception to bytes when passing to Abort()
I happened to notice this searching for how to convert an exception to bytes in
the previous patch. I'm pretty sure I've got a bunch of other instances that
use `pycompat.bytestr()` suppressed locally.
Differential Revision: https://phab.mercurial-scm.org/D7467
Matt Harbison <matt_harbison@yahoo.com> [Thu, 21 Nov 2019 14:28:28 -0500] rev 43723
patch: fix a str + bytes issue in an exception handler
Flagged by pytype.
Differential Revision: https://phab.mercurial-scm.org/D7466
Martin von Zweigbergk <martinvonz@google.com> [Wed, 20 Nov 2019 08:11:21 -0800] rev 43722
py3: wrap a __func__ in sysbytes() before logging as bytes
Differential Revision: https://phab.mercurial-scm.org/D7461
Daniel Ploch <dploch@google.com> [Wed, 20 Nov 2019 19:16:11 -0800] rev 43721
py3: make doc strings containing deprecated '\.' escape sequence raw strings
Differential Revision: https://phab.mercurial-scm.org/D7462
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Nov 2019 14:59:23 -0500] rev 43720
shelve: add the missing `create` parameter to the bundlerepo constructor
Caught by pytype.
Differential Revision: https://phab.mercurial-scm.org/D7458
Matt Harbison <matt_harbison@yahoo.com> [Tue, 19 Nov 2019 14:36:22 -0500] rev 43719
shelve: fix a missing variable in the exception handler for delete
Caught by pytype. I haven't paid much attention to the progress of this
extension, but I *think* this was the intent.
Differential Revision: https://phab.mercurial-scm.org/D7457
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Nov 2019 15:58:56 -0500] rev 43718
hgweb: add diffs to the json changeset template
While it's possible to get the diff for each file individually via an
obscure url that I'm not even sure is documented, (e.g.
diff/{rev}/{filename}?style=json ), it is more convenient to provide
the full diff from the changeset view. This is already normally
computed for other non-JSON templates, so it seems like an oversight
to omit it for the JSON one.
The output format is a bit unwieldy but it's consistent with the
existing format output by the aforementioned obscure url.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Nov 2019 15:56:25 -0500] rev 43717
hgweb: add files to the json changeset template
As far as I can tell, it's currently impossible via JSON to figure out
what files are touched by a particular revision. Reusing the
filenodelink and filenolink templates from the other hgweb templates
should provide this information.
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Nov 2019 16:02:01 -0500] rev 43716
hgweb: add a status property to file list context
The web templates merely indicate if files touched by this revision
are in the commit or not, i.e. if they are removed. It would be
helpful to have more context and also indicate whether the files are
added, modified, or removed.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Nov 2019 14:50:13 -0800] rev 43715
match: remove explicitdir attribute
No one sets it or reads it anymore.
Differential Revision: https://phab.mercurial-scm.org/D7441
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Nov 2019 15:36:14 -0800] rev 43714
dirstate: stop caring about match.explicitdir
No one passes it in anymore.
Differential Revision: https://phab.mercurial-scm.org/D7440
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Nov 2019 15:36:09 -0800] rev 43713
dirstate: include explicit matches in match.traversedir calls
The caller should not have to register to get both explicit and
non-explicit matches.
Differential Revision: https://phab.mercurial-scm.org/D7439
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Nov 2019 14:47:31 -0800] rev 43712
commit: drop unused "vdirs" argument from repo.checkcommitpatterns()
Differential Revision: https://phab.mercurial-scm.org/D7438
Martin von Zweigbergk <martinvonz@google.com> [Fri, 15 Nov 2019 14:41:00 -0800] rev 43711
commit: rewrite check for `hg ci <path>` being a directory
The matcher API is complicated by match.bad, match.explicitdir, and
match.traversedir. We already have very few users of
match.explicitdir. By rewriting this check we get close to being able
to remove match.explicitdir.
This may make the check slower, but I think that will be very
marginal.
Disclosure: I actually wrote this patch to solve a bug we've seen with
an internal extension. The internal extension overrides the dirstate
walk to only walk the files that our FUSE tells us are modified. That
led to "vdirs" not getting populated as this code expected. I have
wanted to get rid of match.explicitdir for a very long time, though.
Differential Revision: https://phab.mercurial-scm.org/D7437
Manuel Jacob <me@manueljacob.de> [Tue, 19 Nov 2019 11:59:43 +0100] rev 43710
py3: use pycompat.bytestr() instead of pycompat.sysstr()
pycompat.sysstr() doesn’t work because it doesn’t accept arguments of type
`type` and returns a unicode object on Python3, while the format string wants
a bytes-like object.
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Mon, 18 Nov 2019 20:10:38 -0800] rev 43709
lock: fix race in lock-breaking code
With low frequency, I see hg pulls fail with output like:
abort: no such file or directory: .hg/store/lock
I think what happens is, in lock.py, in:
def _testlock(self, locker):
if not self._lockshouldbebroken(locker):
return locker
# if locker dead, break lock. must do this with another lock
# held, or can race and break valid lock.
try:
with lock(self.vfs, self.f + b'.break', timeout=0):
self.vfs.unlink(self.f)
except error.LockError:
return locker
if a lock is breakable on disk, and two hg processes concurrently get
to the "if locker dead" comment, a possible interleaving is: process1
finishes executing the function and then process2 finishes executing
the function. If that happens, process2 will either get ENOENT in
self.vfs.unlink (resulting in the spurious failure above), or break a
valid lock and potentially cause repository corruption.
The fix is simple enough: make sure the lock is breakable _inside_ the
critical section, because only then can we know that no other process
can invalidate our knowledge on the lock on disk.
I don't think there are tests for this. I've tested this manually
with:
diff --git a/mercurial/lock.py b/mercurial/lock.py
--- a/mercurial/lock.py
+++ b/mercurial/lock.py
@@ -351,6 +351,8 @@ class lock(object):
if not self._lockshouldbebroken(locker):
return locker
+ import random
+ time.sleep(1. + random.random())
# if locker dead, break lock. must do this with another lock
# held, or can race and break valid lock.
try:
@@ -358,6 +360,7 @@ class lock(object):
self.vfs.unlink(self.f)
except error.LockError:
return locker
+ time.sleep(1)
def testlock(self):
"""return id of locker if lock is valid, else None.
and I see this change of behavior before/after this commit:
$ $hg init repo
$ cd repo
$ ln -s $HOSTNAME/
effffffc:
987654321 .hg/wlock
$ touch a
$ $hg commit -Am_ & $hg commit -Am _; wait
-abort: No such file or directory: '/tmp/repo/.hg/wlock'
adding a
+warning: ignoring unknown working parent
679a8959a8ca!
+nothing changed
Differential Revision: https://phab.mercurial-scm.org/D7199
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Fri, 01 Nov 2019 19:59:07 -0400] rev 43708
lock: refactor in preparation for next commit
Differential Revision: https://phab.mercurial-scm.org/D7198