Mon, 13 Feb 2017 02:26:18 -0800 localrepo: cache self.changelog in local variable
Stanislau Hlebik <stash@fb.com> [Mon, 13 Feb 2017 02:26:18 -0800] rev 30905
localrepo: cache self.changelog in local variable Repeated self.changelog lookups can incur overhead. Let's cache it in the separate variable.
Tue, 07 Feb 2017 13:11:30 -0800 destutil: remove dead code about non-linear updates
Martin von Zweigbergk <martinvonz@google.com> [Tue, 07 Feb 2017 13:11:30 -0800] rev 30904
destutil: remove dead code about non-linear updates IIUC, the non-linear updates no longer happen by default since 6b1fc09c699a (update: change default destination to tipmost descendant (issue4673) (BC), 2016-02-02), and it was only if they happened by default that we used to error out, so there is no longer a need to handle this case.
Thu, 09 Feb 2017 09:55:31 -0800 update: fix typo/stale comment to match code
Martin von Zweigbergk <martinvonz@google.com> [Thu, 09 Feb 2017 09:55:31 -0800] rev 30903
update: fix typo/stale comment to match code The comment about "obsolete.background" seems to have been about obsolete.foreground ever since it was introduced in a59e575c6ff8 (update: allow dirty update to foreground (successors), 2013-04-16), so let's change it.
Wed, 08 Feb 2017 23:03:33 -0800 merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com> [Wed, 08 Feb 2017 23:03:33 -0800] rev 30902
merge: remove unused handling of default destination in merge.update() As far as I can tell, all the callers of merge.update() have been migrated over to use destutil to find the default destination when the revision was not specified. So it's time to delete the code for handling a node value of None. Let's add an assertion that node is not None, so any extensions relying on it will not silently misbehave.
Wed, 08 Feb 2017 14:49:37 -0800 update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com> [Wed, 08 Feb 2017 14:49:37 -0800] rev 30901
update: localize logic around which ancestor to use The merge code works by applying the changes between an ancestor and the working copy onto the destination. To achieve an update, it sets the ancestor to be the parent of the working copy. To achieve a clean update (update -C), it sets the ancestor to be the working copy itself (so there are no changes to carry over). The logic for this was spread out a bit. Let's move it all to one place so it's easier to follow the reason for it. Also add some documentation.
Wed, 08 Feb 2017 22:12:27 -0800 tests: add test for updating to null revision
Martin von Zweigbergk <martinvonz@google.com> [Wed, 08 Feb 2017 22:12:27 -0800] rev 30900
tests: add test for updating to null revision While working on merge.py, I realized that we don't (as far as I could tell) have any tests for updating to the null revision with a dirty working copy. This adds some simple tests for that.
Fri, 10 Feb 2017 15:26:03 -0800 import: mention "stdin" (abbreviated) and add example
Martin von Zweigbergk <martinvonz@google.com> [Fri, 10 Feb 2017 15:26:03 -0800] rev 30899
import: mention "stdin" (abbreviated) and add example I actually didn't even think it was possible because I searched the help text for "stdin", and didn't even think of searching for "standard input". Let's mention the abbreviated form too to help others like me. (When importing from stdin, we actually print a message saying "applying patch from stdin".) This patch also adds an example showing how to import from stdin.
Thu, 09 Feb 2017 09:32:25 -0800 merge: print status message before launching external merge tool
Martin von Zweigbergk <martinvonz@google.com> [Thu, 09 Feb 2017 09:32:25 -0800] rev 30898
merge: print status message before launching external merge tool It seems somewhat common that people run into a merge conflict and don't notice the launched merge tool, and instead they think hg just hung. Let's print a message for each file that we launch a GUI merge tool for.
Wed, 08 Feb 2017 07:44:10 -0800 pager: exit cleanly on SIGPIPE (BC)
Simon Farnsworth <simonfar@fb.com> [Wed, 08 Feb 2017 07:44:10 -0800] rev 30897
pager: exit cleanly on SIGPIPE (BC) Changeset aaa751585325 removes SIGPIPE handling completely. This is wrong, as it means that Mercurial does not exit when the pager does. Instead, raise SignalInterrupt when SIGPIPE happens with a pager attached, to trigger the normal exit path. This will cause "killed!" to be printed to stderr (hence the BC warning), but in the normal pager use case (where the pager gets both stderr and stdout), this message is lost as we only get SIGPIPE when the pager quits.
Fri, 10 Feb 2017 04:09:06 -0800 runtests: catch EPROTONOSUPPORT in checkportisavailable
Jun Wu <quark@fb.com> [Fri, 10 Feb 2017 04:09:06 -0800] rev 30896
runtests: catch EPROTONOSUPPORT in checkportisavailable This is a follow-up of "runtests: check ports on IPv6 address". On some platforms, "socket.AF_INET6" exists while that does not necessarily mean the platform support IPv6 - when initializing a socket using "socket.socket", it could fail with EPROTONOSUPPORT. So treat that as "Port unavailable".
Tue, 07 Feb 2017 23:24:47 -0800 zstd: vendor python-zstandard 0.7.0
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 07 Feb 2017 23:24:47 -0800] rev 30895
zstd: vendor python-zstandard 0.7.0 Commit 3054ae3a66112970a091d3939fee32c2d0c1a23e from https://github.com/indygreg/python-zstandard is imported without modifications (other than removing unwanted files). The vendored zstd library within has been upgraded from 1.1.2 to 1.1.3. This version introduced new APIs for threads, thread pools, multi-threaded compression, and a new dictionary builder (COVER). These features are not yet used by python-zstandard (or Mercurial for that matter). However, that will likely change in the next python-zstandard release (and I think there are opportunities for Mercurial to take advantage of the multi-threaded APIs). Relevant to Mercurial, the CFFI bindings are now fully implemented. This means zstd should "just work" with PyPy (although I haven't tried). The python-zstandard test suite also runs all tests against both the C extension and CFFI bindings to ensure feature parity. There is also a "decompress_content_dict_chain()" API. This was derived from discussions with Yann Collet on list about alternate ways of encoding delta chains. The change most relevant to Mercurial is a performance enhancement in the simple decompression API to reuse a data structure across operations. This makes decompression of multiple inputs significantly faster. (This scenario occurs when reading revlog delta chains, for example.) Using python-zstandard's bench.py to measure the performance difference... On changelog chunks in the mozilla-unified repo: decompress discrete decompress() reuse zctx 1.262243 wall; 1.260000 CPU; 1.260000 user; 0.000000 sys 170.43 MB/s (best of 3) 0.949106 wall; 0.950000 CPU; 0.950000 user; 0.000000 sys 226.66 MB/s (best of 4) decompress discrete dict decompress() reuse zctx 0.692170 wall; 0.690000 CPU; 0.690000 user; 0.000000 sys 310.80 MB/s (best of 5) 0.437088 wall; 0.440000 CPU; 0.440000 user; 0.000000 sys 492.17 MB/s (best of 7) On manifest chunks in the mozilla-unified repo: decompress discrete decompress() reuse zctx 1.367284 wall; 1.370000 CPU; 1.370000 user; 0.000000 sys 274.01 MB/s (best of 3) 1.086831 wall; 1.080000 CPU; 1.080000 user; 0.000000 sys 344.72 MB/s (best of 3) decompress discrete dict decompress() reuse zctx 0.993272 wall; 0.990000 CPU; 0.990000 user; 0.000000 sys 377.19 MB/s (best of 3) 0.678651 wall; 0.680000 CPU; 0.680000 user; 0.000000 sys 552.06 MB/s (best of 5) That should make reads on zstd revlogs a bit faster ;) # no-check-commit
Thu, 09 Feb 2017 21:44:32 -0500 tests: exclude python-zstandard from pyflakes analysis
Augie Fackler <augie@google.com> [Thu, 09 Feb 2017 21:44:32 -0500] rev 30894
tests: exclude python-zstandard from pyflakes analysis
Tue, 07 Feb 2017 23:25:37 +0530 py3: fix the way we produce bytes list in store.py
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Feb 2017 23:25:37 +0530] rev 30893
py3: fix the way we produce bytes list in store.py bytes(range(127)) does not produce a list whereas we need a list. This patch fixes that.
Tue, 07 Feb 2017 22:47:24 +0530 py3: convert os.__file__ to bytes
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 07 Feb 2017 22:47:24 +0530] rev 30892
py3: convert os.__file__ to bytes os.__file__ returns unicode path on Python 3. We need to have bytespath. This patch uses pycompat.fsencode() to encode unicode path to bytes path.
Wed, 08 Feb 2017 14:45:30 -0800 commandserver: handle backlog before exiting
Jun Wu <quark@fb.com> [Wed, 08 Feb 2017 14:45:30 -0800] rev 30891
commandserver: handle backlog before exiting Previously, when a chg server is exiting, it does not handle connected clients so clients may get ECONNRESET and crash: 1. client connect() # success 2. server shouldexit = True and exit 3. client recv() # ECONNRESET d7875bfbfccb makes this race condition easier to reproduce if a lot of short chg commands are started in parallel. This patch fixes the above issue by unlinking the socket path to stop queuing new connections and processing all pending connections before exit.
Sat, 11 Feb 2017 00:23:55 +0900 misc: replace domain of mercurial-devel ML address by mercurial-scm.org stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 11 Feb 2017 00:23:55 +0900] rev 30890
misc: replace domain of mercurial-devel ML address by mercurial-scm.org This patch also adds new check-code.py pattern to detect invalid usage of "mercurial-devel@selenic.com".
Sat, 11 Feb 2017 00:23:55 +0900 i18n: update Report-Msgid-Bugs-To property of *.po files stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 11 Feb 2017 00:23:55 +0900] rev 30889
i18n: update Report-Msgid-Bugs-To property of *.po files This patch replaces domain of mercurial-devel ML address by mercurial-scm.org for "Report-Msgid-Bugs-To" property of each *.po files. This avoids releasing 4.1.1 with invalid "Report-Msgid-Bugs-To" in *.mo file, if corresponded *.po file isn't msgmerge-ed with recent hg.pot by translator. These *.po files aren't covered by check-code.py pattern newly added in subsequent patch, because it ignores them.
Sat, 11 Feb 2017 00:23:53 +0900 misc: replace domain of mercurial ML address by mercurial-scm.org stable
FUJIWARA Katsunori <foozy@lares.dti.ne.jp> [Sat, 11 Feb 2017 00:23:53 +0900] rev 30888
misc: replace domain of mercurial ML address by mercurial-scm.org This patch also adds new check-code.py pattern to detect invalid usage of "mercurial@selenic.com". Change for test-convert-tla.t is tested, but similar change for almost same test-convert-baz.t isn't yet tested actually, because I couldn't find out the way to get "GNU Arch baz client". AFAIK, buildbot skips test-convert-baz.t, too. Does anybody have appropriate environment for testing?
Wed, 08 Feb 2017 14:37:38 -0800 commandserver: prevent unlink socket twice
Jun Wu <quark@fb.com> [Wed, 08 Feb 2017 14:37:38 -0800] rev 30887
commandserver: prevent unlink socket twice This patch changes unixforkingservice so it only calls `self._servicehandler.unlinksocket(self.address)` at most once. This is needed by the next patch.
Thu, 09 Feb 2017 05:57:54 -0800 runtests: check ports on IPv6 address
Jun Wu <quark@fb.com> [Thu, 09 Feb 2017 05:57:54 -0800] rev 30886
runtests: check ports on IPv6 address Previously, checkportisavailable only checks ports on the IPv4 address. This patch makes it check IPv6 as well. It'll be useful if "localhost" does not have an IPv4 address, or its IPv4 address does not exist somehow.
Wed, 08 Feb 2017 08:08:41 -0800 zeroconf: fail nicely on IPv6 only system
Simon Farnsworth <simonfar@fb.com> [Wed, 08 Feb 2017 08:08:41 -0800] rev 30885
zeroconf: fail nicely on IPv6 only system zeroconf only knows how to deal with IPv4; I develop on a system where the only IPv4 address is 127.0.0.1. Teach zeroconf to ignore IPv6 addresses when looking for plausible IPv4 connectivity.
Mon, 06 Feb 2017 17:01:06 -0800 chg: verify XDG_RUNTIME_DIR
Jun Wu <quark@fb.com> [Mon, 06 Feb 2017 17:01:06 -0800] rev 30884
chg: verify XDG_RUNTIME_DIR According to the specification [1], $XDG_RUNTIME_DIR should be ignored unless: The directory MUST be owned by the user, and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700. This patch adds a check and ignores it if it does not meet part of the criteria. [1]: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
Sat, 21 Jan 2017 14:43:13 -0800 check-code: permit functools.reduce
Yedidya Feldblum <yfeldblum@fb.com> [Sat, 21 Jan 2017 14:43:13 -0800] rev 30883
check-code: permit functools.reduce
Sat, 04 Feb 2017 08:47:46 -0800 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 04 Feb 2017 08:47:46 -0800] rev 30882
perf: split obtaining chunks from decompression Previously, the code was similar to what revlog._chunks() was doing, which took a raw data segment and delta chain, obtained buffers for the raw revlog chunks within, and decompressed them. This commit splits the "get raw chunks" action from "decompress." The goal of this change is to more accurately measurely decompression performance. On a ~50k deltachain for a manifest in mozilla-central: ! full ! wall 0.430548 comb 0.440000 user 0.410000 sys 0.030000 (best of 24) ! deltachain ! wall 0.016053 comb 0.010000 user 0.010000 sys 0.000000 (best of 181) ! read ! wall 0.008078 comb 0.010000 user 0.000000 sys 0.010000 (best of 362) ! rawchunks ! wall 0.033785 comb 0.040000 user 0.040000 sys 0.000000 (best of 100) ! decompress ! wall 0.327126 comb 0.320000 user 0.320000 sys 0.000000 (best of 31) ! patch ! wall 0.032391 comb 0.030000 user 0.030000 sys 0.000000 (best of 100) ! hash ! wall 0.012587 comb 0.010000 user 0.010000 sys 0.000000 (best of 233)
Sun, 16 Oct 2016 17:28:51 +0900 smartset: move set classes and related functions from revset module (API)
Yuya Nishihara <yuya@tcha.org> [Sun, 16 Oct 2016 17:28:51 +0900] rev 30881
smartset: move set classes and related functions from revset module (API) These classes are pretty large and independent from revset computation. 2961 mercurial/revset.py 973 mercurial/smartset.py 3934 total revset.prettyformatset() is renamed to smartset.prettyformat(). Smartset classes are aliased since they are quite common in revset.py.
Wed, 25 Jan 2017 22:39:17 +0900 help: test if "hg help TOPIC" reference is valid
Yuya Nishihara <yuya@tcha.org> [Wed, 25 Jan 2017 22:39:17 +0900] rev 30880
help: test if "hg help TOPIC" reference is valid It's quite easy to make a reference invalid by mistake.
Wed, 25 Jan 2017 22:35:40 +0900 help: uppercase command placeholder
Yuya Nishihara <yuya@tcha.org> [Wed, 25 Jan 2017 22:35:40 +0900] rev 30879
help: uppercase command placeholder 'command' isn't a valid help topic but a placeholder text. Make it upper case to avoid confusion.
Sun, 05 Feb 2017 18:57:19 +0900 help: show section that couldn't be found
Yuya Nishihara <yuya@tcha.org> [Sun, 05 Feb 2017 18:57:19 +0900] rev 30878
help: show section that couldn't be found For better error indication.
Fri, 03 Feb 2017 16:01:19 -0500 cmdutil: remove forwarding methods per deprecation policy
Augie Fackler <augie@google.com> [Fri, 03 Feb 2017 16:01:19 -0500] rev 30877
cmdutil: remove forwarding methods per deprecation policy
Fri, 03 Feb 2017 15:10:27 -0800 util: always force line buffered stdout when stdout is a tty (BC)
Simon Farnsworth <simonfar@fb.com> [Fri, 03 Feb 2017 15:10:27 -0800] rev 30876
util: always force line buffered stdout when stdout is a tty (BC) pager replaced stdout with a line buffered version to work around glibc deciding on a buffering strategy on the first write to stdout. This is going to make my next patch hard, as replacing stdout will make tracking time spent blocked on it more challenging. Move the line buffering requirement to util.py, and remove it from pager. This means that the abuse of ui.formatted=True and pager set to cat or equivalent no longer results in a line-buffered output to a pipe, hence (BC), although I don't expect anyone to be affected
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip