Martin Tietze <mtietze@gmx.com> [Wed, 12 Jul 2017 10:11:02 +0200] rev 33434
zsh_completion: add '--partial' flag to completions for 'import' (
issue5618)
When using the 'import' command running ZSH together with its
Mercurial-specific completions the flag '--partial' (introduced in Mercurial
3.1, 2014-08-01) is not offered as completion option.
This patch adds it to the list of completions for the 'import' command.
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:05 +0200] rev 33433
configitems: register the 'bugzilla.password' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:03 +0200] rev 33432
configitems: register the 'bugzilla.mocklog' config
Matt Harbison <matt_harbison@yahoo.com> [Thu, 13 Jul 2017 22:57:11 -0400] rev 33431
test-amend: fix HGEDITOR shell script to run on Windows
Windows doesn't know how to launch *.sh directly. This workaround is used in
several other tests.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 13 Jul 2017 22:47:35 -0400] rev 33430
test-paths: mask out JSON specific path differences for Windows
The backslashes in the local paths were being escaped with another backslash,
and $TESTTMP doesn't match against the double backslashed path. This doesn't
happen without the 'json' filter.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:59 +0900] rev 33429
tests: categorize entries in blacklist for fsmonitor for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:59 +0900] rev 33428
tests: avoid tests related to directory permission if running with fsmonitor
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:58 +0900] rev 33427
tests: add extra output for fsmonitor at checking under .hg
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:58 +0900] rev 33426
tests: add extra output for fsmonitor at showconfig
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:58 +0900] rev 33425
tests: take extra care for fsmonitor at enabling incompatible extension
This is worthwhile, because these tests don't focus mainly on using
incompatible extensions itself.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:57 +0900] rev 33424
tests: remove meaningless entries from blacklist for fsmonitor
IMHO, these tests were listed up in blacklist at
3b67f27bb908, because
fsmonitor extension wasn't correctly installed before actual testing
at that revision (this issue was fixed by
776fd2e2cf5a).
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 13 Jul 2017 03:17:57 +0900] rev 33423
tests: remove meaningless comment from blacklist for fsmonitor
These tests can run successfully since
fe0667cc521e.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 11 Jul 2017 22:06:57 -0400] rev 33422
test-https: stabilize for Windows
A leading '/' without a following drive letter is resolved to the location of
the MSYS installation. These could be collapsed into a single line of output,
but this seems more self documenting.
Phil Cohen <phillco@fb.com> [Tue, 11 Jul 2017 16:48:15 -0700] rev 33421
tagmerge: use workingfilectx to write merged tags
This function already does an excellent job of reading from context objects;
we simply need to change the single write call to eliminate all uses of the
wvfs.
As with past changes, the effect should be a no-op but opens the door to
in-memory merge later by using different context objects.
Matthieu Laneuville <matthieu.laneuville@octobus.net> [Thu, 29 Jun 2017 20:45:12 +0900] rev 33420
run-tests: add color to output if pygments is available
The output of run-tests has no formatting by default, which hampers readability.
This patch colors the diff output when pygments is available. To avoid coloring
even when pygments is available, use --color never.
Matt Harbison <matt_harbison@yahoo.com> [Thu, 30 Mar 2017 00:33:00 -0400] rev 33419
win32: work around a WinError problem handling HRESULT types
I ran into this ctypes bug while working with the Crypto API. While this could
be an issue with any Win32 API in theory, the handful of things that we call are
older functions that are unlikely to return COM errors, so I didn't retrofit
this everywhere.
Jun Wu <quark@fb.com> [Wed, 12 Jul 2017 15:27:56 -0700] rev 33418
test-check-pyflakes: do not leave test.py in the repo
Differential Revision: https://phab.mercurial-scm.org/D67
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Jul 2017 13:15:17 +0900] rev 33417
revset: add experimental ancestors/descendants relation subscript
The relation name is 'generations' now, which may be changed in future.
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Jul 2017 13:07:59 +0900] rev 33416
revset: add experimental relation and subscript operators
The proposed syntax [1] was originally 'set{n rel}', but it seemed slightly
confusing if template is involved. On the other hand, we want to keep 'set[n]'
for future extension. So this patch introduces 'set#rel[n]' ternary operator.
I chose '#' just because it looks like applying an attribute.
This also adds stubs for 'set[n]' and 'set#rel' operators since these syntax
elements are fundamental for constructing 'set#rel[n]'.
[1]: https://www.mercurial-scm.org/wiki/RevsetOperatorPlan#ideas_from_mpm
Yuya Nishihara <yuya@tcha.org> [Sat, 08 Jul 2017 12:49:46 +0900] rev 33415
revset: do not compute weight for integer literal argument
In x^n and x~n, n isn't a set expression. There's no need to optimize the
right-hand side.
Yuya Nishihara <yuya@tcha.org> [Thu, 13 Jul 2017 00:35:54 +0900] rev 33414
templatekw: export ui.paths as {peerpaths}
It's sometimes useful to show hyperlinks in log output.
"{get(peerpaths, "default")}/rev/{node}"
Since each path may have sub options, "{peerpaths}" is structured as a dict
of dicts, but the inner dict is rendered as if it were a string URL. The
implementation is ad-hoc, so there are some weird behaviors described in
the test. We might need to introduce a proper way of handling a hybrid
scalar object.
This patch adds _hybrid.__getitem__() so d['path']['url'] works.
The keyword is named as "peerpaths" since "paths" seemed too generic in
log context.
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:13:04 +0900] rev 33413
summary: fix type of empty unresolved list
It was okay because tested as a boolean prior to calling len(), but looked
incorrect.
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:40:00 +0900] rev 33412
vfs: rename auditvfs to proxyvfs
Since we've removed mustaudit property, auditvfs has no auditing business.
It's just a utility class for vfs wrappers.
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:19:31 +0900] rev 33411
streamclone: comment why path auditing is disabled in generatev1()
Copied from
39c6e349dfff. I wasn't sure whether it's for optimization or
suppressing unwanted error.
Yuya Nishihara <yuya@tcha.org> [Fri, 07 Jul 2017 23:25:16 +0900] rev 33410
streamclone: close large revlog files explicitly in generatev1()
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 05:06:01 +0200] rev 33409
bundle2: no longer use 'retractboundary' in updatephases
The new 'phase-heads' forced all added node to secret before advancing the
boundary to work around the fact changesets were added as draft by default.
This is no longer necessary since the changegroup part can now use the
'targetphase' parameter.
Not doing this retract boundary call has a couple of advantages:
* This makes implementing phases change tracking in the transaction much
simpler since retract boundary can become a rare case.
* Bundling secret changesets is not the norm. Exchange never does that and
even for strip, the use-case is not common.Skipping the retract boundary
will avoid useless work here.
* Sending phase update on push can be simplified since we can rely on the
behavior of 'cg.apply' for most of it.
This means less phases update send for example.
* We no longer needs to track and use the addednodes during unbundling. This
make it possible to have multiple 'changegroup' and 'phase-heads' parts in the
same bundle without them interfering with each others.
The new part has not been part of any release yet so we do not offer backward
compatibility yet. It is important to update this semantic before the 4.3
freeze happens.
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 05:12:03 +0200] rev 33408
bundle2: automatically add 'targetphase' parameter in writenewbundle
If we are bundling secret changeset and the bundle will contain phase, we
request the changegroup to be applied as secret.
It will be useful for next patch as we are now sure that secrets changesets
are applied as secret and not applied as draft then forced to secret.
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 05:11:52 +0200] rev 33407
bundle2: support the 'targetphase' parameter for the changegroup part
By default unbundled changesets are drafts. We want to reduce the number of
phases changes during unbundling by giving the possibility to the bundle to
indicate the phase of unbundled changesets.
The longer terms goal is to add phase movement tracking in tr.changes and the
'retractboundary' call is making it more complicated than we want.
Boris Feld <boris.feld@octobus.net> [Tue, 11 Jul 2017 04:52:56 +0200] rev 33406
changegroup: stop treating strip as special when dealing with phases
Since
8e3021fd1a44, the strip bundle includes the phases of the stripping
node. Hence we don't need this special case anymore.
Dropping it will helps make the phase behavior more consistent across all
exchanges medium.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 09:42:32 -0700] rev 33405
match: inverse _anypats(), making it _prefix()
Jun Wu <quark@fb.com> [Tue, 11 Jul 2017 20:53:55 -0700] rev 33404
amend: new extension providing the amend command
Various third parties have implemented the `amend` command, which is in high
demand. This patch adds it as an experimental extension so its interface
could be formalized in core directly.
Since `commit --amend` is basically what `amend` should do. The command is
just a thin wrapper around `commit --amend` and just prevent the editor from
popping up by passing `--message`.
Martin von Zweigbergk <martinvonz@google.com> [Tue, 11 Jul 2017 11:21:04 -0700] rev 33403
py3: make localrepo filtered repo cache work on py3
I don't know if this is the right fix, but it makes
test-py3-commands.t pass again.
Differential Revision: https://phab.mercurial-scm.org/D56
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:04:01 +0200] rev 33402
configitems: register the 'bugzilla.host' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:57 +0200] rev 33401
configitems: register the 'bugzilla.fixstatus' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:05:40 +0200] rev 33400
configitems: register the 'bugzilla.fixresolution' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:36 +0200] rev 33399
configitems: register the 'bugzilla.fixregexp' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:34 +0200] rev 33398
configitems: register the 'bugzilla.db' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:31 +0200] rev 33397
configitems: register the 'bugzilla.bzuser' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:28 +0200] rev 33396
configitems: register the 'bugzilla.bzurl' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:26 +0200] rev 33395
configitems: register the 'bugzilla.bzemail' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:24 +0200] rev 33394
configitems: register the 'bugzilla.bzdir' config
Boris Feld <boris.feld@octobus.net> [Fri, 07 Jul 2017 10:03:22 +0200] rev 33393
configitems: register the 'bugzilla.apikey' config
Alex Gaynor <agaynor@mozilla.com> [Mon, 10 Jul 2017 16:41:13 -0400] rev 33392
revlog: use struct.Struct instances for slight performance wins
Differential Revision: https://phab.mercurial-scm.org/D32
Alex Gaynor <agaynor@mozilla.com> [Mon, 10 Jul 2017 16:39:28 -0400] rev 33391
revlog: micro-optimize the computation of hashes
Differential Revision: https://phab.mercurial-scm.org/D31
Denis Laxalde <denis.laxalde@logilab.fr> [Mon, 03 Jul 2017 13:49:03 +0200] rev 33390
hgweb: re-implement followlines UI selection using buttons
This changeset attempts to solve two issues with the "followlines" UI in
hgweb. First the "followlines" action is currently not easily discoverable
(one has to hover on a line for some time, wait for the invite message to
appear and then perform some action). Second, it gets in the way of natural
line selection, especially in filerevision view.
This changeset introduces an additional markup element (a <button
class="btn-followlines">) alongside each content line of the view. This button
now holds events for line selection that were previously plugged onto content
lines directly. Consequently, there's no more action on content lines, hence
restoring the "natural line selection" behavior (solving the second problem).
These buttons are hidden by default and get displayed upon hover of content
lines; then upon hover of a button itself, a text inviting followlines section
shows up. This solves the first problem (discoverability) as we now have a
clear visual element indicating that "some action could be perform" (i.e. a
button) and that is self-documented.
In followlines.js, all event listeners are now attached to these <button>
elements. The custom "floating tooltip" element is dropped as <button>
elements are now self-documented through a "title" attribute that changes
depending on preceding actions (selection started or not, in particular).
The new <button> element is inserted in followlines.js script (thus only
visible if JavaScript is activated); it contains a "+" and "-" with a
"diff-semantics" style; upon hover, it scales up.
To find the parent element under which to insert the <button> we either rely
on the "data-selectabletag" attribute (which defines the HTML tag of children
of class="sourcelines" element e.g. <span> for filerevision view and <tr> for
annotate view) or use a child of the latter elements if we find an element
with class="followlines-btn-parent" (useful for annotate view, for which we
have to find the <td> in which to insert the <button>).
On noticeable change in CSS concerns the "margin-left" of span:before
pseudo-elements in filelog view that has been increased a bit in order to
leave space for the new button to appear between line number column and
line content one.
Also note the "z-index" addition for "annotate-info" box so that the latter
appears on top of new buttons (instead of getting hidden).
In some respect, the UI similar to line commenting feature that is implemented
in popular code hosting site like GitHub, BitBucket or Kallithea.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 01 Jul 2017 20:51:19 -0700] rev 33389
localrepo: cache types for filtered repos (
issue5043)
Python introduces a reference cycle on dynamically created types
via __mro__, making them very easy to leak. See
https://bugs.python.org/
issue17950.
Previously, repo.filtered() created a type on every invocation.
Long-running processes (like `hg convert`) could call this
function thousands of times, leading to a steady memory leak.
Since we're Unable to stop the leak because this is a bug in
Python, the next best thing is to contain it.
This patch adds a cache of of the dynamically generated repoview/filter
types on the localrepo object. Since we only generate each type
once, we cap the amount of memory that can leak to something
reasonable.
After this change, `hg convert` no longer leaks memory on every
revision. The process will likely grow memory usage over time due
to e.g. larger manifests. But there are no leaks.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 11 Jul 2017 02:10:04 +0900] rev 33388
convert: transcode CVS log messages by specified encoding (
issue5597)
Converting from CVS to Mercurial assumes that CVS log messages in "cvs
rlog" output are encoded in UTF-8 (or basic Latin-1). But cvs itself
is usually unaware of encoding of log messages, in practice.
Therefore, if there are commits, of which log message is encoded in
other than UTF-8, log message of corresponded revisions in the
converted repository will be broken.
To avoid such broken log messages, this patch transcodes CVS log
messages by encoding specified via "convert.cvsps.logencoding"
configuration.
This patch accepts multiple encoding for convenience, because
"multiple encoding mixed in a repository" easily occurs. For example,
UTF-8 (recent POSIX), cp932 (Windows), and EUC-JP (legacy POSIX) are
well known encoding for Japanese.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 10 Jul 2017 23:09:52 +0900] rev 33387
fsmonitor: execute setup procedures only if dirstate is already instantiated
Before this patch, reposetup() of fsmonitor executes setup procedures
for dirstate, even if it isn't yet instantiated at that time.
On the other hand, dirstate might be already instantiated before
reposetup() intentionally (prefilling by chg, for example, see
bf3af0eced44 for detail). If so, just discarding already instantiated
one in reposetup() causes issue.
To resolve both issues above, this patch executes setup procedures,
only if dirstate is already instantiated.
BTW, this patch removes "del repo.unfiltered().__dict__['dirstate']",
because it is responsibility of the code path, which causes
instantiation of dirstate before reposetup(). After this patch, using
localrepo.isfilecached() should avoid creating the corresponded entry
in repo.unfiltered().__dict__.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 10 Jul 2017 23:09:52 +0900] rev 33386
fsmonitor: centralize setup procedures for dirstate
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 10 Jul 2017 23:09:52 +0900] rev 33385
fsmonitor: avoid needless instantiation of dirstate
Using repo.local() instead of util.safehasattr(repo, 'dirstate') also
avoids executing setup procedures for remote repository (including
statichttprepo).
This is reason why this patch also removes a part of subsequent
comment, and try/except for AttributeError at accessing to repo.wvfs.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 10 Jul 2017 23:09:51 +0900] rev 33384
journal: use wrapfilecache instead of wrapfunction on func of filecache
wrapfilecache() on filecache-ed property works more strictly than
wrapfunction() directly on func() of filecache.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 10 Jul 2017 23:09:51 +0900] rev 33383
journal: execute setup procedures for already instantiated dirstate
If dirstate is instantiated before reposetup() of journal extension,
it doesn't have "journalstorage" property, even if it is instantiated
via wrapdirstate() wrapping repo.dirstate(), because wrapdirstate()
works as same as original one before marking repo as "journal"-ing in
reposetup().
This issue can be reproduced by running test-journal.t or
test-journal-share.t with fsmonitor-run-tests.py.
On the other hand, just discarding already instantiated dirstate in
reposetup() prevents chg from filling dirstate before reposetup() (see
bf3af0eced44 for detail).
Therefore, this patch executes setup procedures for already
instantiated dirstate explicitly in reposetup().
To centralize setup procedures for dirstate, this patch also factors
them out from wrapdirstate().
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 10 Jul 2017 23:09:51 +0900] rev 33382
localrepo: add isfilecached to check filecache-ed property is already cached
isfilecached() encapsulates internal implementation of filecache-ed
property.
"name in repo.unfiltered().__dict__" or so can't be used for this
purpose, because corresponded entry in __dict__ might be discarded by
repo.invalidate(), repo.invalidatedirstate() or so (fsmonitor does so,
for example).
This patch makes isfilecached() return not only whether filecache-ed
property is already cached, but also already cached value (or None),
in order to avoid subsequent access to cached object via "repo.NAME",
which prevents main Mercurial procedure after reposetup() from
validating cache.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 10 Jul 2017 21:09:46 -0700] rev 33381
sslutil: check for missing certificate and key files (
issue5598)
Currently, sslutil._hostsettings() performs validation that web.cacerts
exists. However, client certificates are passed in to the function
and not all callers may validate them. This includes
httpconnection.readauthforuri(), which loads the [auth] section.
If a missing file is specified, the ssl module will raise a generic
IOException. And, it doesn't even give us the courtesy of telling
us which file is missing! Mercurial then prints a generic
"abort: No such file or directory" (or similar) error, leaving users
to scratch their head as to what file is missing.
This commit introduces explicit validation of all paths passed as
arguments to wrapsocket() and wrapserversocket(). Any missing file
is alerted about explicitly.
We should probably catch missing files earlier - as part of loading
the [auth] section. However, I think the sslutil functions should
check for file presence regardless of what callers do because that's
the only way to be sure that missing files are always detected.
Martin von Zweigbergk <martinvonz@google.com> [Fri, 07 Jul 2017 08:55:12 -0700] rev 33380
match: override matchfn instead of __call__ for consistency
The matchers that were recently moved into core from the sparse
extension override __call__, while the previously existing matchers
override matchfn. Let's switch to the latter for consistency.
Martin von Zweigbergk <martinvonz@google.com> [Sun, 09 Jul 2017 17:02:09 -0700] rev 33379
match: express anypats(), not prefix(), in terms of the others
When I added prefix() in
9789b4a7c595 (match: introduce boolean
prefix() method, 2014-10-28), we already had always(), isexact(), and
anypats(), so it made sense to write it in terms of them (a prefix
matcher is one that isn't any of the other types). It's only now that
I realize that it's much more natural to define prefix() explicitly
(it's one that uses path: patterns, roughly speaking) and let
anypats() be defined in terms of the others. Remember that these
methods are all used for determining which fast paths are
possible. anypats() simply means that no fast paths are possible (it
could be called complex() instead). Further evidence is that
rootfilesin:some/dir does not have any patterns, but it's still
considered to be an anypats() matcher. That's because anypats() really
just means that it's not a prefix() matcher (and not always() and not
isexact()).
This patch thus changes prefix() to return False by default and
anypats() to return True only if the other three are False. Having
anypats() be True by default also seems like a good thing, because it
means forgetting to override it will lead only to performance bugs,
not correctness bugs.
Since the base class's implementation changes, we're also forced to
update the subclasses. That change exposed and fixed a bug in the
differencematcher: for example when both its two input matchers were
prefix matchers, we would say that the result was also a prefix
matcher, which is incorrect, because e.g "path:dir - path:dir/foo" no
longer matches everything under "dir" (which is what prefix() means).
Martin von Zweigbergk <martinvonz@google.com> [Sun, 09 Jul 2017 15:19:27 -0700] rev 33378
match: make nevermatcher an exact matcher and a prefix matcher
The m.isexact() and m.prefix() methods are used by callers to
determine whether m.files() can be used for fast paths. It seems safe
to let callers to any fast paths it can that rely on the empty
m.files().
Jun Wu <quark@fb.com> [Mon, 10 Jul 2017 10:56:40 -0700] rev 33377
revset: define successors revset
This revset returns all successors, including transit nodes and the source
nodes (to be consistent with existing revsets like "ancestors").
To filter out transit nodes, use `successors(X)-obsolete()`.
To filter out divergent case, use `successors(X)-divergent()-obsolete()`.
The revset could be useful to define rebase destination, like:
`max(successors(BASE)-divergent()-obsolete())`. The `max` is to deal with
splits.
There are other implementations where `successors` returns just one level of
successors, and `allsuccessors` returns everything. I think `successors`
returning all successors by default is more user friendly. We have seen
cases in production where people use 1-level `successors` while they really
want `allsuccessors`. So it seems better to just have one single revset
returning all successors by default to avoid user errors.
In the future we might want to add `depth` keyword argument to it and for
other revsets like `ancestors` etc. Or even build some flexible indexing
syntax [1] to satisfy people having the depth limit requirement.
[1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-July/101140.html
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 10 Jul 2017 21:55:43 -0700] rev 33376
sparse: shorten try..except block in updateconfig()
It now only covers refreshwdir(). This is what importfromfiles()
does. I think it is the more appropriate behavior.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 10 Jul 2017 21:43:19 -0700] rev 33375
sparse: clean up updateconfig()
* Use context manager for wlock
* Rename oldsparsematch to oldmatcher
* Always call parseconfig() because parsing an empty string yields
the same result as the old code