Bryan O'Sullivan <bryano@fb.com> [Fri, 12 Apr 2013 17:16:37 -0700] rev 18914
worker: add missing import of errno
Found using Cython.
Bryan O'Sullivan <bryano@fb.com> [Fri, 12 Apr 2013 16:01:18 -0700] rev 18913
histedit: support editing of the first commit (
issue3767)
Augie Fackler <raf@durin42.com> [Fri, 12 Apr 2013 17:00:42 -0400] rev 18912
test-commit-amend.t: fix check-code violation from
3a72c89a83ec
Mads Kiilerich <mads@kiilerich.com> [Mon, 11 Feb 2013 00:43:12 +0100] rev 18911
util: improve doc for checkcase
Mads Kiilerich <madski@unity3d.com> [Thu, 11 Apr 2013 14:41:22 +0200] rev 18910
scheme: don't crash on invalid URLs
Brodie Rao <brodie@sf.io> [Fri, 08 Feb 2013 21:08:34 +0000] rev 18909
amend: support amending merge changesets (
issue3778)
Bryan O'Sullivan <bryano@fb.com> [Thu, 11 Apr 2013 13:30:31 -0700] rev 18908
worker: catch all exceptions, try to exit usefully/safely
Bryan O'Sullivan <bryano@fb.com> [Thu, 11 Apr 2013 13:30:27 -0700] rev 18907
lock: if we fork, ensure that only the parent releases
This prevents us from having a bunch of errant worker processes all try
to release a lock if a problem occurs. (Releasing the lock more than once
is harmless; it's invoking the associated callbacks we want to avoid.)
Mads Kiilerich <madski@unity3d.com> [Thu, 11 Apr 2013 14:44:22 +0200] rev 18906
tag: clarify cryptic error message when tagging null revision
Mads Kiilerich <mads@kiilerich.com> [Fri, 12 Apr 2013 16:55:34 -0400] rev 18905
setup: make error message for missing Python headers more helpful
Pierre-Yves David <pierre-yves.david@ens-lyon.org> [Mon, 11 Feb 2013 11:20:12 +0100] rev 18904
obsolete: ensure all markers have a date
Obsolescence creates a sparse DAG mostly composed of a lot of small independent
chain of markers. Date is the only simple and "reliable" way to sort them. The
existence of a date is now enforced at creation time as I'm more and more
convinced that date will have a key role in obsolescence markers exchange.
Nikolaj Sjujskij <sterkrig@myopera.com> [Mon, 08 Apr 2013 16:51:38 +0400] rev 18903
zsh_completion: make use of `debuglabelcomplete` command
Use `debuglabelcomplete` command when populating labels list, instead of
calling `hg` three times: for branches, bookmarks and tags. Do not pass string
being completed to `hg debuglabelcomplete` (as `$words[$CURRENT]`), since it
breaks `_hg_revrange` completion (`--rev 2.5:2.5.<Tab>`) for no apparent
benefit.
Also complete `hg view` with labels, not just tags, and drop unused `_hg_tags`.
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:08:28 -0700] rev 18902
dirs: use mutable strings internally
perfdirs results for a working dir with 170,000 files:
Python 638 msec
C 244
C+int 192
C+int+str 168
In the large repo above, the nearly 0.5 second time improvement is
visible in commands like "hg add" and "hg update".
hg add
Python 1100 msec
C+int+str 600
hg update (with nothing to do)
Python 2800 msec
C+int+str 2240
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:08:27 -0700] rev 18901
dirs: use mutable integers internally
These integers are not visible to Python code, so this is safe.
perfdirs results for a working dir with 170,000 files:
Python 638 msec
C 244
C+int 192
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:08:27 -0700] rev 18900
scmutil: rewrite dirs in C, use if available
This is over twice as fast as the Python dirs code. Upcoming changes
will nearly double its speed again.
perfdirs results for a working dir with 170,000 files:
Python 638 msec
C 244
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:08:26 -0700] rev 18899
scmutil: use new dirs class in dirstate and context
The multiset-of-directories code was open coded in each of these
modules; this change gets rid of the duplication.
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:08:26 -0700] rev 18898
scmutil: add a dirs class
This encapsulates the "multiset of directories" structures that are
currently open-coded (and duplicated) in both the dirstate and
context modules.
This will be used, and optionally replaced by a C implementation,
in upcoming changes.
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:08:25 -0700] rev 18897
scmutil: migrate finddirs from dirstate
Bryan O'Sullivan <bryano@fb.com> [Wed, 10 Apr 2013 15:05:06 -0700] rev 18896
merge
Siddharth Agarwal <sid0@fb.com> [Wed, 10 Apr 2013 12:34:42 -0700] rev 18895
manifestmerge: handle workdir removed, remote removed with flags
This can happen when a file with flags is removed or deleted in the working
directory and also not present in m2. The obvious solution is to add a
__delitem__ override to manifestdict that removes the file from flags if
necessary, but that has a significant performance cost in some cases, e.g.
hg status --rev rev1 --rev rev2 <file>.
Siddharth Agarwal <sid0@fb.com> [Wed, 10 Apr 2013 12:31:07 -0700] rev 18894
dicthelpers.diff: compare against default for missing values
This is not only a bit faster, but also aligns with callers' expectations
better since we can legitimately have manifestdict's _flags set to '' instead
of unset.
hg perfmergecalculate -r .
before: ! wall 0.139582 comb 0.140000 user 0.140000 sys 0.000000 (best of 59)
after: ! wall 0.126154 comb 0.120000 user 0.120000 sys 0.000000 (best of 74)
hg perfmergecalculate -r .^
before: ! wall 0.236333 comb 0.240000 user 0.240000 sys 0.000000 (best of 36)
after: ! wall 0.212265 comb 0.210000 user 0.210000 sys 0.000000 (best of 45)
Brendan Cully <brendan@kublai.com> [Tue, 09 Apr 2013 21:38:08 -0700] rev 18893
templater: back out
0615b22da148, it breaks schemes ({1})
Bryan O'Sullivan <bryano@fb.com> [Tue, 09 Apr 2013 09:40:40 -0700] rev 18892
debuglabelcomplete: compute active branch heads correctly
The previous computation was simply wrong.
Matt Mackall <mpm@selenic.com> [Mon, 08 Apr 2013 17:57:42 -0500] rev 18891
merge with i18n
Note: i18n work should normally be done on stable
Stefano Tortarolo <stefano.tortarolo@gmail.com> [Fri, 05 Apr 2013 17:04:37 +0200] rev 18890
hg-i18n-it: minor fixes
Bryan O'Sullivan <bryano@fb.com> [Mon, 08 Apr 2013 15:04:17 -0700] rev 18889
templater: fix check-code error
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 26 Mar 2013 02:28:10 +0900] rev 18888
smtp: verify the certificate of the SMTP server for STARTTLS/SMTPS
Before this patch, the certificate of the SMTP server for STARTTLS or
SMTPS isn't verified.
This may cause man-in-the-middle security problem (stealing
authentication information), even though SMTP channel itself is
encrypted by SSL.
When "[smtp] tls" is configured as "smtps" or "starttls", this patch:
- uses classes introduced by preceding patches instead of "SMTP" or
"SMTP_SSL" of smtplib, and
- verifies the certificate of the SMTP server, if "[smtp]
verifycert" is configured as other than False
"[smtp] verifycert" can be configured in 3 levels:
- "strict":
This verifies peer certificate, and aborts if:
- peer certification is not valid, or
- no configuration in "[hostfingerprints]" and "[web] cacerts"
This is default value of "[smtp] verifycert" for security.
- "loose":
This verifies peer certificate, and aborts if peer certification is
not valid.
This just shows warning message ("certificate not verified"), if
there is no configuration in "[hostfingerprints]" and "[web]
cacerts".
This is as same as verification for HTTPS connection.
- False(no verification):
Peer certificate is not verified.
This is as same as the behavior before this patch series.
"hg email --insecure" uses "loose" level, and ignores "[web] cacerts"
as same as push/pull/etc... with --insecure.
Ignoring "[web] cacerts" configuration for "hg email --insecure" is
already done in "dispatch._dispatch()" by looking "insecure" up in the
table of command options.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 26 Mar 2013 02:28:10 +0900] rev 18887
sslutil: abort if peer certificate is not verified for secure use
Before this patch, "sslutil.validator" may returns successfully, even
if peer certificate is not verified because there is no information in
"[hostfingerprints]" and "[web] cacerts".
To prevent from sending authentication credential to untrustable SMTP
server, validation should be aborted if peer certificate is not
verified.
This patch introduces "strict" optional argument, and
"sslutil.validator" will abort if it is True and peer certificate is
not verified.
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 26 Mar 2013 02:27:43 +0900] rev 18886
smtp: add the class to verify the certificate of the SMTP server for SMTPS
Original "smtplib.SMTP_SSL" has no route to pass "ca_certs" and
"cert_reqs" arguments to underlying SSL socket creation. This causes
that "getpeercert()" on SSL socket returns empty dict, so the peer
certificate for SMTPS can't be verified.
This patch introduces the "SMTPS" class derived from "smtplib.SMTP" to
pass "ca_certs" and "cert_reqs" arguments to underlying SSL socket
creation.
"SMTPS" class is derived directly from "smtplib.SMTP", because amount
of "smtplib.SMTP_SSL" definition derived from "smtplib.SMTP" is as
same as one needed to override it.
This patch defines "SMTPS" class, only when "smtplib.SMTP" class has
"_get_socket()" method, because this makes using SSL socket instead of
normal socket easy.
"smtplib.SMTP" class of Python 2.5.x or earlier doesn't have this
method. Omitting SMTPS support for them is reasonable, because
"smtplib.SMTP_SSL" is already unavailable for them before this patch.
Almost all code of "SMTPS" class is imported from "smtplib.SMTP_SSL"
of Python 2.7.3, but it differs from original code in point below:
- "ssl.wrap_socket()" is replaced by "sslutil.ssl_wrap_socket()" for
compatibility between Python versions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Tue, 26 Mar 2013 02:27:23 +0900] rev 18885
smtp: add the class to verify the certificate of the SMTP server for STARTTLS
Original "smtplib.SMTP" has no route to pass "ca_certs" and
"cert_reqs" arguments to underlying SSL socket creation. This causes
that "getpeercert()" on SSL socket returns empty dict, so the peer
certificate for STARTTLS can't be verified.
This patch introduces the "STARTTLS" class derived from "smtplib.SMTP"
to pass "ca_certs" and "cert_reqs" arguments to underlying SSL socket
creation.
Almost all code of "starttls()" in this class is imported from
"smtplib.SMTP" of Python 2.7.3, but it differs from original code in
points below:
- "self.ehlo_or_helo_if_needed()" invocation is omitted, because:
- "ehlo_or_helo_if_needed()" is available with Python 2.6 or later, and
- "ehlo()" is explicitly invoked in "mercurial.mail._smtp()"
- "if not _have_ssl:" check is omitted, because:
- "_have_ssl" is available with Python 2.6 or later, and
- same checking is done in "mercurial.sslutil.ssl_wrap_socket()"
- "ssl.wrap_socket()" is replaced by "sslutil.ssl_wrap_socket()" for
compatibility between Python versions
- use "sock.recv()" also as "sock.read()", if "sock" doesn't have
"read()" method
with Python 2.5.x or earlier, "sslutil.ssl_wrap_socket()" returns
"httplib.FakeSocket"-ed object, and it doesn't have "read()"
method, which is invoked via "smtplib.SSLFakeFile".
Brendan Cully <brendan@kublai.com> [Sun, 07 Apr 2013 23:25:50 -0700] rev 18884
template: allow unquoted int function arguments
Brendan Cully <brendan@kublai.com> [Mon, 08 Apr 2013 09:44:26 -0700] rev 18883
Merge with main