Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 May 2016 11:58:28 -0700] rev 29262
sslutil: calculate host fingerprints from additional algorithms
Currently, we only support defining host fingerprints with SHA-1.
A future patch will introduce support for defining fingerprints
using other hashing algorithms. In preparation for that, we
rewrite the fingerprint verification code to support multiple
fingerprints, namely SHA-256 and SHA-512 fingerprints.
We still only display the SHA-1 fingerprint. We'll have to revisit
this code once we support defining fingerprints with other hash
functions.
As part of this, I snuck in a change to use range() instead of
xrange() because xrange() isn't necessary for such small values.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 May 2016 12:57:28 -0700] rev 29261
util: add sha256
Upcoming patches will teach host fingerprint checking to verify
non-SHA1 fingerprints.
Many x509 certificates these days are SHA-256. And modern browsers
often display the SHA-256 fingerprint for certificates. Since
SHA-256 fingerprints are highly visible and easy to obtain, we
want to support them for fingerprint pinning. So add SHA-256
support to util.
I did not add SHA-256 to DIGESTS and DIGESTS_BY_STRENGTH because
this will advertise the algorithm on the wire protocol. I wasn't
sure if that would be appropriate. I'm playing it safe by leaving
it out for now.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 May 2016 12:53:33 -0700] rev 29260
sslutil: move CA file processing into _hostsettings()
The CA file processing code has been moved from _determinecertoptions
into _hostsettings(). As part of the move, the logic has been changed
slightly and the "cacerts" variable has been renamed to "cafile" to
match the argument used by SSLContext.load_verify_locations().
Since _determinecertoptions() no longer contains any meaningful
code, it has been removed.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 May 2016 11:41:21 -0700] rev 29259
sslutil: move SSLContext.verify_mode value into _hostsettings
_determinecertoptions() and _hostsettings() are redundant with each
other. _hostsettings() is used the flexible API we want.
We start the process of removing _determinecertoptions() by moving
some of the logic for the verify_mode value into _hostsettings().
As part of this, _determinecertoptions() now takes a settings dict
as its argument. This is technically API incompatible. But since
_determinecertoptions() came into existence a few days ago as part
of this release, I'm not flagging it as such.
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 28 May 2016 11:12:02 -0700] rev 29258
sslutil: introduce a function for determining host-specific settings
This patch marks the beginning of a series that introduces a new,
more configurable, per-host security settings mechanism. Currently,
we have global settings (like web.cacerts and the --insecure argument).
We also have per-host settings via [hostfingerprints].
Global security settings are good for defaults, but they don't
provide the amount of control often wanted. For example, an
organization may want to require a particular CA is used for a
particular hostname.
[hostfingerprints] is nice. But it currently assumes SHA-1.
Furthermore, there is no obvious place to put additional per-host
settings.
Subsequent patches will be introducing new mechanisms for defining
security settings, some on a per-host basis. This commits starts
the transition to that world by introducing the _hostsettings
function. It takes a ui and hostname and returns a dict of security
settings. Currently, it limits itself to returning host fingerprint
info.
We foreshadow the future support of non-SHA1 hashing algorithms
for verifying the host fingerprint by making the "certfingerprints"
key a list of tuples instead of a list of hashes.
We add this dict to the hgstate property on the socket and use it
during socket validation for checking fingerprints. There should be
no change in behavior.
Danek Duvall <danek.duvall@oracle.com> [Fri, 27 May 2016 15:20:03 -0700] rev 29257
tests-subrepo-git: emit a different "pwned" message based on the test
Having a single "pwned" message which may or may not be emitted during the
tests for CVE-2016-3068 leads to extra confusion. Allow each test to emit
a more detailed message based on what the expectations are.
In both cases, we expect a version of git which has had the vulnerability
plugged, as well as a version of mercurial which also knows about
GIT_ALLOW_PROTOCOL. For the first test, we make sure GIT_ALLOW_PROTOCOL is
unset, meaning that the ext-protocol subrepo should be ignored; if it
isn't, there's either a problem with mercurial or the installed copy of
git.
For the second test, we explicitly allow ext-protocol subrepos, which means
that the subrepo will be accessed and a message emitted confirming that
this was, in fact, our intention.
Danek Duvall <danek.duvall@oracle.com> [Fri, 27 May 2016 15:10:38 -0700] rev 29256
tests-subrepo-git: make the "pwned" message output in a stable order
The "pwned" message from this test gets gets sent to stderr, and so may get
emitted in different places from run to run in the rest of mercurial's
output. This patch forces the message to go to a specific file instead,
whose existence and contents we can examine at a stable point in the test's
execution.
Danek Duvall <danek.duvall@oracle.com> [Fri, 27 May 2016 11:14:29 -0700] rev 29255
test-cache-abuse: correct for different hunk headers between Solaris and GNU
When diffing against an empty file, Solaris diff uses 1 to designate the
first line of the empty file (either -1,0 on the left or +1,0 on the right)
while GNU diff uses 0 (-0,0 and +0,0). We use a glob here to make sure the
test passes with either toolchain.
I've not added tests to check-code because there are scads of places in the
tests where the GNU format is used due to that being the format that "hg
diff" and "hg export" use, and changing those to use globs seems wrong.
Javi Merino <merino.jav@gmail.com> [Fri, 27 May 2016 21:24:05 +0200] rev 29254
lazymanifest: fix typo s/typles/tuples/
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 May 2016 19:57:31 -0700] rev 29253
sslutil: remove sslkwargs() (API)
It is now unused.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 May 2016 19:57:02 -0700] rev 29252
url: remove use of sslkwargs
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 May 2016 19:56:20 -0700] rev 29251
mail: remove use of sslkwargs
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 May 2016 19:54:06 -0700] rev 29250
httpconnection: remove use of sslkwargs
It now does nothing.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 May 2016 19:52:02 -0700] rev 29249
sslutil: move sslkwargs logic into internal function (API)
As the previous commit documented, sslkwargs() doesn't add any
value since its return is treated as a black box and proxied
to wrapsocket().
We formalize its uselessness by moving its logic into a
new, internal function and make sslkwargs() return an empty
dict.
The certificate arguments that sslkwargs specified have been
removed from wrapsocket() because they should no longer be
set.
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 May 2016 19:43:22 -0700] rev 29248
sslutil: remove ui from sslkwargs (API)
Arguments to sslutil.wrapsocket() are partially determined by
calling sslutil.sslkwargs(). This function receives a ui and
a hostname and determines what settings, if any, need to be
applied when the socket is wrapped.
Both the ui and hostname are passed into wrapsocket(). The
other arguments to wrapsocket() provided by sslkwargs() (ca_certs
and cert_reqs) are not looked at or modified anywhere outside
of sslutil.py. So, sslkwargs() doesn't need to exist as a
separate public API called before wrapsocket().
This commit starts the process of removing external consumers of
sslkwargs() by removing the "ui" key/argument from its return.
All callers now pass the ui argument explicitly.
Mateusz Kwapich <mitrandir@fb.com> [Wed, 25 May 2016 16:09:07 -0700] rev 29247
dirstate: remove file from copymap on drop
As the copymap is short-lived object regenerated from dirstate on each
read this didn't affect us in any serious way. But since I've started working
on permanent storage of copymap in my experiments with sqldirstate[1] I've seen
this bug leaving the copy information in copymap after reverting the file
moves and copies.
[1] https://www.mercurial-scm.org/wiki/SQLDirstatePlan
timeless <timeless@mozdev.org> [Thu, 26 May 2016 02:35:44 +0000] rev 29246
run-tests: use json.dumps(separators=)
Followup to
daff05dcd184 per Martijn Pieters
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29245
debugignore: make messages translatable
These messages have been overlooked by check-code, because they start
with non-alphabet character ('%' or '(').
Making these messages translatable seems reasonable, because messages
for ui.note(), ui.status(), ui.progress() and descriptive messages for
ui.write() in "debug" commands are already translatable in many cases.
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29244
grep: make a message translatable
This message has been overlooked by check-code, because it starts with
non-alphabet character (' ').
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29243
subrepo: make a message translatable
This message has been overlooked by check-code, because it starts with
non-alphabet character ('%').
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29242
merge: make messages translatable
These messages have been overlooked by check-code, because they start
with non-alphabet character (' ').
Making these messages translatable seems reasonable, because all other
'ui.note()'-ed messages in calculateupdates() are already
translatable.
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29241
httppeer: make a message translatable
This message has been overlooked by check-code, because it starts with
non-alphabet character ('(').
Making this message translatable seems reasonable, because exception
message below in same function is already translatable
- 'cannot create new http repository'
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29240
notify: make a message translatable
This message has been overlooked by check-code, because it starts with
non-alphabet character ('\').
Making this message translatable seems reasonable, because messages
below in same function are already translatable
- '\ndiffs (truncated from %d to %d lines):\n\n'
- '\ndiffs (%d lines):\n\n'
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 26 May 2016 01:57:34 +0900] rev 29239
gpg: make a message translatable
This message has been overlooked by check-code, because it starts with
non-alphabet character ('%').
This is also a part of preparation for making "missing _() in ui
message" detection of check-code more exact.
Martijn Pieters <mjpieters@fb.com> [Mon, 23 May 2016 14:09:50 -0700] rev 29238
revset: use getargsdict for sort()
This makes it possible to use keyword arguments to specify per-sort options.
For example, a hypothetical 'first' option for the user sort could sort certain
users first with:
sort(all(), user, user.first=mpm@selenic.com)
Matt Mackall <mpm@selenic.com> [Wed, 25 May 2016 15:32:35 -0500] rev 29237
merge with stable
Augie Fackler <augie@google.com> [Thu, 12 May 2016 22:29:05 -0400] rev 29236
changegroup: extract method that sorts nodes to send
The current implementation of narrowhg needs to influence the order in
which nodes are sent to the client. adgar@ and I think this is
fixable, but it's going to require pretty substantial time investment,
so in the interim we'd like to extract this method.
I think it makes the group() code a little more obvious, as it took us
a couple of tries to isolate the exact behavior we were observing.
timeless <timeless@mozdev.org> [Wed, 11 May 2016 23:24:41 +0000] rev 29235
hg: disable demandimport for py3
Yuya Nishihara <yuya@tcha.org> [Sun, 15 May 2016 10:48:05 +0900] rev 29234
tests: enable import checker for all python files (including no .py files)
i18n/posplit is excluded as it couldn't be trivially fixed. That's the same
as
99a2bdad0fda.
Yuya Nishihara <yuya@tcha.org> [Sun, 15 May 2016 10:45:32 +0900] rev 29233
tests: make 'f' utility import hashlib unconditionally
It must exist on Python 2.5+.
Yuya Nishihara <yuya@tcha.org> [Sun, 15 May 2016 10:41:01 +0900] rev 29232
tests: fix typo of shebang prefix in test-check-pyflakes.t
Yuya Nishihara <yuya@tcha.org> [Sun, 15 May 2016 10:40:26 +0900] rev 29231
hghave: silence future pyflakes warning of unused import
Yuya Nishihara <yuya@tcha.org> [Sun, 15 May 2016 10:39:44 +0900] rev 29230
tests: remove unused import from 'f' utility
It should have been caught by pyflakes.
liscju <piotr.listkiewicz@gmail.com> [Tue, 24 May 2016 23:36:27 +0200] rev 29229
bookmarks: allow pushing active bookmark on new remote head (
issue5236)
Before 'hg push -B .' on new remote head complained with:
abort: push creates new remote head ...
It was because _nowarnheads was not expanding active bookmark
name, so it didn't add active bookmark "proper" name to no
warn heads list.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 15 May 2016 11:50:49 -0700] rev 29228
sslutil: remove redundant check of sslsocket.cipher()
We are doing this check in both wrapsocket() and validatesocket().
The check was added to the validator in
4bb59919c905 and the commit
message justifies the redundancy with a "might." The check in
wrapsocket() was added in
0cc4ad757c77, which appears to be part of
the same series. I'm going to argue the redundancy isn't needed.
I choose to keep the check in wrapsocket() because it is working
around a bug in Python's wrap_socket() and I feel the check for
the bug should live next to the function call exhibiting the bug.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 15 May 2016 11:38:38 -0700] rev 29227
sslutil: convert socket validation from a class to a function (API)
Now that the socket validator doesn't have any instance state,
we can make it a generic function.
The "validator" class has been converted into the "validatesocket"
function and all consumers have been updated.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 15 May 2016 11:32:11 -0700] rev 29226
sslutil: store and use hostname and ui in socket instance
Currently, we pass a hostname and ui to sslutil.wrap_socket()
then create a separate sslutil.validator instance also from
a hostname and ui. There is a 1:1 mapping between a wrapped
socket and a validator instance. This commit lays the groundwork
for making the validation function generic by storing the
hostname and ui instance in the state dict attached to the
socket instance and then using these variables in the
validator function.
Since the arguments to sslutil.validator.__init__ are no longer
used, we make them optional and make __init__ a no-op.
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 15 May 2016 11:25:07 -0700] rev 29225
sslutil: use a dict for hanging hg state off the wrapped socket
I plan on introducing more state on the socket instance. Instead
of using multiple variables, let's just use one to minimize risk
of name collision.
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 05 May 2016 19:10:18 -0700] rev 29224
sslutil: require serverhostname argument (API)
All callers now specify it. So we can require it.
Requiring the argument means SNI will always work if supported
by Python.
The main reason for this change is to store state on the socket
instance to make the validation function generic. This will be
evident in subsequent commits.
Matt Mackall <mpm@selenic.com> [Wed, 18 May 2016 16:37:32 -0500] rev 29223
annotate: optimize line counting
We used len(text.splitlines()) to count lines. This allocates, copies, and
deallocates an object for every line in a file. Instead, we use
count("\n") to count newlines and adjust based on whether there's a
trailing newline.
This improves the speed of annotating localrepo.py from 4.2 to 4.0
seconds.
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 16 May 2016 14:21:39 -0700] rev 29222
purge: use opts.get()
Most commands use opts.get() to retrieve values for options
that may not be explicitly passed. purge wasn't.
This makes it easier to call purge() from 3rd party extensions.
timeless <timeless@mozdev.org> [Wed, 11 May 2016 15:20:25 +0000] rev 29221
test-run-tests: clean up inuse server eagerly
timeless <timeless@mozdev.org> [Wed, 11 May 2016 16:40:16 +0000] rev 29220
tests: refactor run-tests helpers
test-run-tests-rev.t will need them
timeless <timeless@mozdev.org> [Wed, 11 May 2016 04:49:27 +0000] rev 29219
tests: silence test-repo obsolete warning
refactoring test-check-commit.t HGRCPATH bits as helpers-testrepo.sh
liscju <piotr.listkiewicz@gmail.com> [Mon, 09 May 2016 10:05:32 +0200] rev 29218
largefiles: send statlfile remote calls only for nonexisting locally files
Files that are already in local store should be checked locally. The problem
with this implementation is how difference in messages between local and remote
checks should look like. For now local errors for file missing and content
corrupted looks like this:
'changeset cset: filename references missing storepath\n'
'changeset cset: filename references corrupted storepath\n'
for remote it looks like:
'changeset cset: filename missing\n'
'changeset cset: filename: contents differ\n'
Contents differ error for remote calls is never raised currently - for now
statlfile implementation lacks checking file content.
timeless <timeless@mozdev.org> [Mon, 16 May 2016 21:18:59 +0000] rev 29217
check-code: reject .next(...)
timeless <timeless@mozdev.org> [Mon, 16 May 2016 21:30:53 +0000] rev 29216
py3: convert to next() function
next(..) was introduced in py2.6 and .next() is not available in py3
https://docs.python.org/2/library/functions.html#next
timeless <timeless@mozdev.org> [Mon, 16 May 2016 21:30:32 +0000] rev 29215
revset: rename variable to avoid shadowing with builtin next() function
https://docs.python.org/2/library/functions.html#next
Sean Farley <sean@farley.io> [Fri, 06 May 2016 18:12:36 -0700] rev 29214
histedit: add experimental config for using the first word of the commit
This allows users to start a commit with "verb! ..." so that when this is
opened in histedit, the default action will be "verb". For example, "roll! foo"
will default to the action "roll". Currently, we'll allow any known verb to be
used but this is experimental.
Sean Farley <sean@farley.io> [Fri, 06 May 2016 18:00:03 -0700] rev 29213
histedit: add optional parameter for determining intial editor line
A simple refactor to allow us to change the default verb for the initial editor
display.
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 14:16:43 +0900] rev 29212
tests: enable import checker for all **.py files
Several known-bad files are excluded as they couldn't be trivially fixed.
That's the same as
99a2bdad0fda.
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 14:33:45 +0900] rev 29211
py3: make contrib/import-checker.py get along with itself
Indent these imports to disable the rule of "not lexically sorted."
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 14:23:04 +0900] rev 29210
py3: make contrib/revsetbenchmarks.py not import symbols from stdlib modules
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 14:18:15 +0900] rev 29209
py3: make contrib/bdiff-torture.py conform to our import style
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 13:39:33 +0900] rev 29208
import-checker: extend check of symbol-import order to all local modules
It doesn't make sense that (a) is allowed whereas (b) is disallowed.
a) from mercurial import hg
from mercurial.i18n import _
b) from . import hg
from .i18n import _
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 13:20:13 +0900] rev 29207
import-checker: always build a list of imported symbols
The next patch will rely on it.
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 13:49:46 +0900] rev 29206
import-checker: fix test to make a real package
Otherwise "testpackage" wouldn't be counted as a package when building a
list of imported symbols.
Yuya Nishihara <yuya@tcha.org> [Sat, 14 May 2016 14:03:12 +0900] rev 29205
py3: move up symbol imports to enforce import-checker rules
Since (b) is banned, we should do the same for (a) for consistency.
a) from mercurial import hg
from mercurial.i18n import _
b) from . import hg
from .i18n import _
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 19 May 2016 00:20:38 +0900] rev 29204
util: make copyfile avoid ambiguity of file stat if needed
In some cases below, copying from backup is used to restore original
contents of a file. 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 before closing (from '.hg/journal.backup.*')
- rollback of previous transaction (from '.hg/undo.backup.*')
To avoid such problem, this patch makes copyfile() avoid ambiguity of
file stat, if needed.
Ambiguity check is executed, only if:
- checkambig=True is specified (not all copying needs ambiguity check), and
- destination file exists before copying
This patch also adds 'not (copystat and checkambig)' assertion,
because combination of copystat and checkambig is meaningless.
This patch is a part of preparation for "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 19 May 2016 00:20:38 +0900] rev 29203
vfs: make rename avoid ambiguity of file stat if needed
In some cases below, renaming from backup is used to restore original
contents of a 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.
- failure of transaction before closing (only from '.hg/journal.dirstate')
- rollback of previous transaction (from '.hg/undo.*')
- failure in dirstateguard scope (from '.hg/dirstate.SUFFIX')
To avoid such problem, this patch makes vfs.rename() avoid ambiguity
of file stat, if needed.
Ambiguity check is executed, only if:
- checkambig=True is specified (not all renaming needs ambiguity check), and
- destination file exists before renaming
This patch is a part of preparation for "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 19 May 2016 00:20:38 +0900] rev 29202
vfs: make atomictempfile avoid ambiguity of file stat if needed
This patch is a part of preparation for "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 19 May 2016 00:20:38 +0900] rev 29201
util: make atomictempfile avoid ambiguity of file stat if needed
Ambiguity check is executed at close(), only if:
- atomictempfile is created with checkambig=True, and
- target file exists before renaming
This restriction avoids performance decrement by needless examination
of file stat (for example, filelog doesn't need exact cache
validation, even though it uses atomictempfile to write changes out).
See description of filestat class for detail about why the logic in
this patch works as expected.
This patch is a part of preparation for "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Thu, 19 May 2016 00:20:37 +0900] rev 29200
util: add filestat class to detect ambiguity of file stat
Current posix.cachestat implementation might overlook change of a
file, if changing keeps ctime, mtime and size of file. Comparison of
inode number also overlooks changing in such situation, because inode
number is rapidly reused.
Contents of a file cached before changing isn't invalidated as
expected, if change of a file is overlooked for this "ambiguity" of
file stat.
This patch adds filestat class to detect ambiguity of file stat.
This patch is a part of preparation for "Exact Cache Validation Plan":
https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan
timeless <timeless@mozdev.org> [Thu, 05 May 2016 23:17:19 +0000] rev 29199
run-tests: handle json.dumps divergence
In py2, json.dumps includes a trailing space after a comma at the
end of lines. The py3 behavior which omits the trailing space is
preferable, so we're going to strip it.