Laura Médioni <laura.medioni@logilab.fr> [Fri, 03 Jun 2016 11:28:22 +0200] rev 29380
templates: add support for filelog webcommand in json style
Modify changelistentry structure to also deliver phase and branch data and use
either 'parents' or 'allparents' depending on what is defined in the view, in
order to reuse it in filelog structure.
liscju <piotr.listkiewicz@gmail.com> [Thu, 09 Jun 2016 12:41:57 +0200] rev 29379
largefiles: make cloning not ask two times about password (issue4883)
Before this commit url.opener overwritten stored password
for connection with given url/user even when
new password for given connection was not filled. This
commit makes opener overwrites saved authentication only
when it contains password.
liscju <piotr.listkiewicz@gmail.com> [Thu, 09 Jun 2016 11:41:36 +0200] rev 29378
url: remember http password database in ui object
This makes http password database stored in ui object.
It allows reusing authentication information when we
use this database for creating password manager for
the new connection.
liscju <piotr.listkiewicz@gmail.com> [Sun, 05 Jun 2016 23:36:23 +0200] rev 29377
url: extract password database from password manager
So far password manager was keeping authentication information so opening
new connection and creating new password manager made all saved authentication
information lost.
This commit separates password manager and password database to make it
possible to reuse saved authentication information.
This commit violates code checker because it adds add_password method (name
with underscore) to passwordmgr object to provide method required by urllib2.
liscju <piotr.listkiewicz@gmail.com> [Wed, 01 Jun 2016 22:58:57 +0200] rev 29376
bookmarks: add 'hg pull -B .' for pulling the active bookmark (issue5258)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 19 Jun 2016 02:17:33 +0900] rev 29375
demandimport: delay loading for "from a import b" with absolute_import
Before this patch, "from a import b" doesn't delay loading module "b",
if absolute_import is enabled, even though "from . import b" does.
For example:
- it is assumed that extension X has "from P import M" for module M
under package P with absolute_import feature
- if importing module M is already delayed before loading extension
X, loading module M in extension X is delayed until actually
referring
util, cmdutil, scmutil or so of Mercurial itself should be
imported by "from . import M" style before loading extension X
- otherwise, module M is loaded immediately at loading extension X,
even if extension X itself isn't used at that "hg" command invocation
Some minor modules (e.g. filemerge or so) of Mercurial itself
aren't imported by "from . import M" style before loading
extension X. And of course, external libraries aren't, too.
This might cause startup performance problem of hg command, because
many bundled extensions already enable absolute_import feature.
To delay loading module for "from a import b" with absolute_import
feature, this patch does below in "from a (or .a) import b" with
absolute_import case:
1. import root module of "name" by system built-in __import__
(referred as _origimport)
2. recurse down the module chain for hierarchical "name"
This logic can be shared with non absolute_import
case. Therefore, this patch also centralizes it into chainmodules().
3. and fall through to process elements in "fromlist" for the leaf
module of "name"
Processing elements in "fromlist" is executed in the code path
after "if _pypy: .... else: ..." clause. Therefore, this patch
replaces "if _pypy:" with "elif _pypy:" to share it.
At 4f1144c3c72b introducing original "work around" for "from a import
b" case, elements in "fromlist" were imported with "level=level". But
"level" might be grater than 1 (e.g. level=2 in "from .. import b"
case) at demandimport() invocation, and importing direct sub-module in
"fromlist" with level grater than 1 causes unexpected result.
IMHO, this seems main reason of "errors for unknown reason" described
in 4f1144c3c72b, and we don't have to worry about it, because this
issue was already fixed by 78d05778907b.
This is reason why this patch removes "errors for unknown reasons"
comment.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sun, 19 Jun 2016 02:15:09 +0900] rev 29374
import-checker: increase portability for python 2.6.x
Before this patch, fromlocalfunc() assumes that "module" attribute of
ast.ImportFrom is None for "from . import a", and Python 2.7.x
satisfies this assumption.
On the other hand, with Python 2.6.x, "module" attribute of
ast.ImportFrom is an empty string for "from . import a", and this
causes failure of test-check-module-imports.t.
Martijn Pieters <mjpieters@fb.com> [Fri, 17 Jun 2016 20:06:09 +0100] rev 29373
scmutil: allow access to filecache descriptor on class
To make it easier to patch the wrapped function, make it possible to access the
filecache descriptor directly on the class (rather than have to use
ClassObject.__dict__['attributename']). Returning `self` when the first
argument to `__get__` is `None` makes the descriptor behave the same way
`property` objects do.
Kostia Balytskyi <ikostia@fb.com> [Fri, 17 Jun 2016 16:59:08 +0100] rev 29372
rebase: do not abort if all changesets have equivalents in the destination
Martin von Zweigbergk <martinvonz@google.com> [Thu, 16 Jun 2016 15:15:33 -0700] rev 29371
changegroup: don't send empty subdirectory manifest groups
When grafting/rebasing, it is common for multiple changesets to make
the same change to a subdirectory. When writing the revlog for the
directory, the revlog code already takes care of not writing the entry
again. In 0c2a088ffcc5 (changegroup: prune subdirectory dirlogs too,
2016-02-12), I added the corresponding code in changegroup (not
sending entries the client already has), but I forgot to avoid sending
the entire changegroup if no nodes remained in the pruned
set. Although that's harmless besides the wasted network traffic, the
receiving side was checking for it (copied from the changegroup code
for handling files). This resulted in the client crashing with:
abort: received dir revlog group is empty
Fix by simply not emitting a changegroup for the directory if there
were no changes is it. This matches how files are handled.
Yuya Nishihara <yuya@tcha.org> [Wed, 15 Jun 2016 23:49:56 +0900] rev 29370
chg: ignore SIGINT while waiting pager termination
Otherwise the terminal would be left with unclean state. This is what
fcc4b55876c3 does.
Yuya Nishihara <yuya@tcha.org> [Wed, 15 Jun 2016 23:32:00 +0900] rev 29369
chg: reset signal handlers to default before waiting pager
Our signal handlers forward signals to the server process, but it will
disappear soon after hgc_close(). So we should unregister handlers before
hgc_close(). Otherwise chg would abort due to kill(perrpid, sig) failure.
The problem is spotted by SIGWINCH while waiting pager termination.
Mike Miller <mike@mtmxr.com> [Thu, 16 Jun 2016 09:15:12 -0700] rev 29368
help: document that [subpaths] may rewrite relative paths
The subpaths substitution logic first attempts to match the absolute
repository path, then the relative subrepository path if that failed.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 13 Jun 2016 05:11:56 +0900] rev 29367
doc: describe detail about checkambig optional argument
This is followup for patches below, which add checkambig argument to
existing function.
- 731ced087a4b
- 76f1ea360c7e
- ce2d81aafbae
- a109bf7e0dc2
Yuya Nishihara <yuya@tcha.org> [Sun, 12 Jun 2016 14:07:26 +0900] rev 29366
ui: provide official way to reset internal state per command
This will allow us to clear in-memory password storage per runcommand().
I've updated commandserver to call resetstate() of both ui and repo.ui because
they may have different states in theory.
Yuya Nishihara <yuya@tcha.org> [Sat, 11 Jun 2016 10:17:49 +0900] rev 29365
revset: extract function that validates sort() arguments
This function will be used in _optimize() to get rid of noop sort() call while
validating its arguments.
Yuya Nishihara <yuya@tcha.org> [Wed, 15 Jun 2016 21:26:45 +0900] rev 29364
revset: build dict of extra sort options before evaluating set
Prepares for extracting a function that only validates sort options.
Yuya Nishihara <yuya@tcha.org> [Sat, 11 Jun 2016 10:15:40 +0900] rev 29363
revset: build list of (key, reverse) pairs before sorting
Prepares for extracting a function that only validates sort options.
Yuya Nishihara <yuya@tcha.org> [Wed, 15 Jun 2016 20:37:24 +0900] rev 29362
revset: fix crash on empty sort key
Make it noop as before 2188f170f5b6. We could change it to an error, but
allowing empty key makes some sense for scripting that builds a key string
programmatically.
Kostia Balytskyi <ikostia@fb.com> [Mon, 13 Jun 2016 22:41:45 +0100] rev 29361
rebase: move local variable 'targetancestors' to the RR class
Kostia Balytskyi <ikostia@fb.com> [Mon, 13 Jun 2016 22:40:59 +0100] rev 29360
rebase: move local variable 'skipped' to the RR class
Kostia Balytskyi <ikostia@fb.com> [Mon, 13 Jun 2016 22:38:54 +0100] rev 29359
rebase: move local variable 'target' to the RR class
Kostia Balytskyi <ikostia@fb.com> [Mon, 13 Jun 2016 22:36:13 +0100] rev 29358
rebase: introduce a rebaseruntime (RR) class
rebaseruntime is a class that will in future contain all of the state
necessary to perform rebase operation and have pieces of rebase logic as
its methods.
This commit introduces the class and moves the following local variables to
be its fields:
- originalwd
- external
- state
- activebookmark
Jun Wu <quark@fb.com> [Wed, 15 Jun 2016 21:36:31 +0100] rev 29357
chg: change default connect timeout to 60 seconds
As discussed at
https://www.mercurial-scm.org/pipermail/mercurial-devel/2016-June/085290.html
The default 10-second timeout is not enough if the machine is overloaded.
Let's increase it to 60 seconds.
Durham Goode <durham@fb.com> [Tue, 14 Jun 2016 18:14:42 -0700] rev 29356
tests: increase test-https malform error glob
The recently introduced (ecc9b788fd690a0a) test around malformed pem files hard
codes an error message which doesn't appear to be cross platform agnostic. On
our machines (centos6 if it matters) the test output differs:
- abort: error: unknown error* (glob)
+ abort: error: _ssl.c:330: error:00000000:lib(0):func(0):reason(0)
This patch increases the glob to cover the entire error message.
liscju <piotr.listkiewicz@gmail.com> [Tue, 14 Jun 2016 11:21:41 +0200] rev 29355
largefiles: make storefactory._openstore public
In storefactory opening store is the main functionality,
so it shouldn't be marked as private with underscore.
liscju <piotr.listkiewicz@gmail.com> [Mon, 13 Jun 2016 23:50:26 +0200] rev 29354
bookmarks: abort 'push -B .' when no active bookmark
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 13 Jun 2016 05:11:56 +0900] rev 29353
transaction: avoid ambiguity of file stat at restoring from backup
In some cases below, copying from backup is used to restore original
contents of a file, which is backuped via addfilegenerator(). If
copying keeps ctime, mtime and size of a file, restoring is
overlooked, and old contents cached before restoring isn't invalidated
as expected.
- failure of transaction (from '.hg/journal.backup.*')
- rollback of previous transaction (from '.hg/undo.backup.*')
To avoid ambiguity of file stat at restoring, this patch invokes
util.copyfile() with checkambig=True.
This patch is a part of "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 13 Jun 2016 05:11:56 +0900] rev 29352
localrepo: make restoring from backup at rollback avoid ambiguity of file stat
Rollback of previous transaction restores contents of files below by
renaming from 'undo.*' file. If renaming keeps ctime, mtime and size
of a file, restoring is overlooked, and old contents cached before
restoring isn't invalidated as expected.
- .hg/bookmarks
- .hg/phaseroots
To avoid ambiguity of file stat at restoring, this patch invokes
vfs.rename() with checkambig=True.
BTW, .hg/dirstate is also restored at rollback. But it is restored by
dirstate.restorebackup(), and previous patch already made it invoke
vfs.rename() with checkambig=True.
This patch is a part of "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Mon, 13 Jun 2016 05:11:56 +0900] rev 29351
dirstate: make restoring from backup avoid ambiguity of file stat
File .hg/dirstate is restored by renaming from backup in failure
inside scopes below. If renaming keeps ctime, mtime and size of a
file, restoring is overlooked, and old contents cached before
restoring isn't invalidated as expected.
- dirstateguard scope (from '.hg/dirstate.SUFFIX')
- transaction scope (from '.hg/journal.dirstate')
To avoid ambiguity of file stat at restoring, this patch invokes
vfs.rename() with checkambig=True.
This patch is a part of "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
Denis Laxalde <denis.laxalde@logilab.fr> [Sat, 11 Jun 2016 20:59:49 +0200] rev 29350
tests: drop a duplicated instruction
Matt Mackall <mpm@selenic.com> [Tue, 14 Jun 2016 14:52:58 -0500] rev 29349
merge with stable
Martijn Pieters <mjpieters@fb.com> [Mon, 13 Jun 2016 18:20:00 +0100] rev 29348
revset: add new topographical sort
Sort revisions in reverse revision order but grouped by topographical branches.
Visualised as a graph, instead of:
o 4
|
| o 3
| |
| o 2
| |
o | 1
|/
o 0
revisions on a 'main' branch are emitted before 'side' branches:
o 4
|
o 1
|
| o 3
| |
| o 2
|/
o 0
where what constitutes a 'main' branch is configurable, so the sort could also
result in:
o 3
|
o 2
|
| o 4
| |
| o 1
|/
o 0
This sort was already available as an experimental option in the graphmod
module, from which it is now removed.
This sort is best used with hg log -G:
$ hg log -G "sort(all(), topo)"
Martijn Pieters <mjpieters@fb.com> [Mon, 13 Jun 2016 18:20:00 +0100] rev 29347
revset: move groupbranchiter over from graphmod
This move is to prepare the adaptation of this function into a toposort
predicate.
Martijn Pieters <mjpieters@fb.com> [Tue, 14 Jun 2016 11:05:36 +0100] rev 29346
revset: record if a set is in topographical order
A later revision adds actual topographical sorting. Recording if a set is in
this order allows hg log -G to avoid re-sorting the revset.
Jun Wu <quark@fb.com> [Mon, 13 Jun 2016 21:30:14 +0100] rev 29345
chg: make timeout adjustable
Before this patch, chg will give up when it cannot connect to the new server
within 10 seconds. If the host has high load during that time, 10 seconds
is not enough.
This patch makes it adjustable using the CHGTIMEOUT environment variable.
Jun Wu <quark@fb.com> [Sat, 11 Jun 2016 20:25:49 +0100] rev 29344
chg: exec pager in child process
Before this patch, chg uses the old pager behavior (pre 369741ef7253), which
executes pager in the main process. The user will see the exit code of the
pager, instead of the hg command.
Like 369741ef7253, this patch fixes the behavior by executing the pager in
the child process, and wait for it at the end of the main process.
Jun Wu <quark@fb.com> [Mon, 13 Jun 2016 13:16:17 +0100] rev 29343
tests: move chg pager test to test-pager.t
The test is valid for both hg and chg. Since we are adding another chg-related
pager test, let's put them together.
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:13:23 -0400] rev 29342
util: drop local aliases for md5, sha1, sha256, and sha512
This used to be needed to paper over hashlib not being in all Pythons
we support, but that's not a problem anymore, so we can simplify
things a little bit.
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:12:33 -0400] rev 29341
cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
All versions of Python we support or hope to support make the hash
functions available in the same way under the same name, so we may as
well drop the util forwards.
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:25:07 -0400] rev 29340
pathencode: use hashlib.sha1 directly instead of indirecting through util
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:10:34 -0400] rev 29339
revlog: use hashlib.sha1 directly instead of through util
Also remove module-local _sha alias, which was barely used.
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:10:06 -0400] rev 29338
store: use hashlib.sha1 directly instead of through util
Also remove module-local alias to _sha, since it's not used that much.
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:14:43 -0400] rev 29337
similar: delete extra newline at EOF
Spotted by my emacs config that cleans up extra whitespace.
Augie Fackler <raf@durin42.com> [Fri, 10 Jun 2016 00:14:10 -0400] rev 29336
scmutil: delete extra newline at EOF
Spotted by my emacs config that cleans up extra whitespace.
Martijn Pieters <mjpieters@fb.com> [Wed, 08 Jun 2016 16:18:43 +0100] rev 29335
graphmod: avoid sorting when already sorted
This is somewhat redundant now, but allows us to add a toposort that should not
be re-sorted either.
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 07 Jun 2016 20:29:54 -0700] rev 29334
sslutil: per-host config option to define certificates
Recent work has introduced the [hostsecurity] config section for
defining per-host security settings. This patch builds on top
of this foundation and implements the ability to define a per-host
path to a file containing certificates used for verifying the server
certificate. It is logically a per-host web.cacerts setting.
This patch also introduces a warning when both per-host
certificates and fingerprints are defined. These are mutually
exclusive for host verification and I think the user should be
alerted when security settings are ambiguous because, well,
security is important.
Tests validating the new behavior have been added.
I decided against putting "ca" in the option name because a
non-CA certificate can be specified and used to validate the server
certificate (commonly this will be the exact public certificate
used by the server). It's worth noting that the underlying
Python API used is load_verify_locations(cafile=X) and it calls
into OpenSSL's SSL_CTX_load_verify_locations(). Even OpenSSL's
documentation seems to omit that the file can contain a non-CA
certificate if it matches the server's certificate exactly. I
thought a CA certificate was a special kind of x509 certificate.
Perhaps I'm wrong and any x509 certificate can be used as a
CA certificate [as far as OpenSSL is concerned]. In any case,
I thought it best to drop "ca" from the name because this reflects
reality.
Yuya Nishihara <yuya@tcha.org> [Fri, 27 May 2016 23:18:38 +0900] rev 29333
tests: add basic tests for SMTP over SSL
SSL handling in mail.py wasn't covered by our test suite, therefore it was
sometimes broken. This patch introduces pretty minimal tests that only cover
the default path. We can extend it later.
Tested with python 2.6.9 and 2.7.11 on Debian sid.
Yuya Nishihara <yuya@tcha.org> [Fri, 27 May 2016 22:43:47 +0900] rev 29332
tests: add dummy SMTP daemon for SSL tests
Currently it only supports SMTP over SSL since SMTPS should be simpler than
handling StartTLS.
Since we don't need asynchronous server for our tests, it does TLS handshake
in blocking way. But asyncore is required by Python smtpd module.
Yuya Nishihara <yuya@tcha.org> [Fri, 27 May 2016 22:40:09 +0900] rev 29331
tests: extract SSL certificates from test-https.t
They can be reused in SMTPS tests.
Yuya Nishihara <yuya@tcha.org> [Tue, 31 May 2016 21:49:49 +0900] rev 29330
check-code: make 'ls' pattern less invasive
I got false positive at "--tls smtps --certificate ...".
Henrik Stuart <henriks@unity3d.com> [Tue, 07 Jun 2016 08:32:33 +0200] rev 29329
largefiles: fix support for local largefiles while using share extension
Prior to revision 2a3f24786d09, largefiles were saved in the local repository,
even if it was using the share extension. After that change, all largefiles are
now stored in the shared repository. However, the backward compatibility for
existing largefiles already placed in the local repository was never tested,
and has been broken since.
Matt Mackall <mpm@selenic.com> [Thu, 09 Jun 2016 13:47:42 -0500] rev 29328
merge with stable
Denis Laxalde <denis.laxalde@logilab.fr> [Tue, 07 Jun 2016 11:57:11 +0200] rev 29327
crecord: drop unused "operation" parameter from filterpatch function
Denis Laxalde <denis.laxalde@logilab.fr> [Tue, 07 Jun 2016 10:37:19 +0200] rev 29326
patch: define full messages for interactive record/revert
Followup 14eee72c8d52 to provide complete context for proper localization.
Also update cmdutil.recordfilter docstring to remove recommendation that
"operation" argument should be translated. Indeed, for record/revert, we
either go to patch.filterpatch or crecord.filterpatch (in curses mode) ; the
former now build the full ui message from the operation parameter and the
latter does not use this parameter (removing in a followup patch). For shelve,
operation is not specified and this thus falls back to "record".
Denis Laxalde <denis.laxalde@logilab.fr> [Wed, 01 Jun 2016 15:16:38 +0200] rev 29325
hgweb: remove unused code in annotate web command
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 04 Jun 2016 14:38:00 +0530] rev 29324
py3: conditionalize cPickle import by adding in util
The cPickle is renamed to _pickle in python3 and this C extension is available
in pickle which was not included in earlier versions. So imports are conditionalized
to import cPickle in py2 and pickle in py3. Moreover the use of pickle in py2 is
switched to cPickle as the C extension is faster. The hack is added in util.py and
the modules import util.pickle
Matt Mackall <mpm@selenic.com> [Thu, 02 Jun 2016 17:11:32 -0500] rev 29323
bdiff: remove effectively dead code
Now that we extend matches backwards in the inner loop, the final
adjustment has no effect.
(A similar extension for the forward direction is trickier and has
less benefit.)
Matt Mackall <mpm@selenic.com> [Thu, 02 Jun 2016 17:09:06 -0500] rev 29322
bdiff: extend matches across popular lines
For very large diffs that have large numbers of identical lines (JSON
dumps) that also have large blocks of identical text, bdiff could become
confused about which block matches which because it can only match
very limited regions. The result is very large diffs for small sets of edits.
The earlier recursion rebalancing fix made this behavior more frequent because
it's now more prone to match block 1 to block 2. One frequent user of
large JSON files reported being unable to pass the resulting diffs
through their code review system.
Prior to this change, bdiff would calculate the length of a match at
(i, j) as 1 + length found at (i-1, j-1). With large number of popular
(ignored) lines, this often meant matches couldn't be extended
backwards at all and thus all matching regions were very small.
Disabling the popularity threshold is not an option because it brings
back quadratic behavior.
Instead, we extend a match backwards until we either found a previously
discovered match or we find a mismatching line. This thus successfully
bridges over any popular lines inside and before a matching region.
The larger regions then significant reduce the probability of confusion.
Yuya Nishihara <yuya@tcha.org> [Fri, 03 Jun 2016 21:49:26 +0900] rev 29321
test-revset: fix test vector for ordering issue of matching()
592e0beee8b0 fixed matching() to preserve the order of the input set, but
the test was incorrect. Given "A and B", "A" should be the input set to "B".
But thanks to our optimizer, the test expression was rewritten as
"(2 or 3 or 1) and matching(1 or 2 or 3)", therefore it was working well.
Since I'm going to fix the overall ordering issue, the test needs to be
adjusted to do the right thing.
liscju <piotr.listkiewicz@gmail.com> [Fri, 20 May 2016 01:42:04 +0200] rev 29320
largefiles: rename match_ to matchmod import in lfutil
liscju <piotr.listkiewicz@gmail.com> [Thu, 12 May 2016 11:49:23 +0200] rev 29319
largefiles: rename match_ to matchmod import in reposetup
liscju <piotr.listkiewicz@gmail.com> [Thu, 12 May 2016 11:48:39 +0200] rev 29318
largefiles: rename match_ to matchmod import in overrides
liscju <piotr.listkiewicz@gmail.com> [Thu, 12 May 2016 11:36:51 +0200] rev 29317
largefiles: rename match_ to matchmod import in lfcommands