Tue, 04 Sep 2018 11:59:09 -0400 Added tag 4.7.1 for changeset ede3bf31fe63 stable
Augie Fackler <raf@durin42.com> [Tue, 04 Sep 2018 11:59:09 -0400] rev 38781
Added tag 4.7.1 for changeset ede3bf31fe63
Fri, 31 Aug 2018 21:44:24 +0900 hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972) stable 4.7.1
Yuya Nishihara <yuya@tcha.org> [Fri, 31 Aug 2018 21:44:24 +0900] rev 38780
hgweb: load revcount + 1 entries to fill nextentry in log page (issue5972) "revcount + 1" is moved to the call site to make it clearer.
Fri, 24 Aug 2018 18:21:55 -0700 scmutil: avoid quadratic membership testing (issue5969) stable
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 24 Aug 2018 18:21:55 -0700] rev 38779
scmutil: avoid quadratic membership testing (issue5969) tr.changes['revs'] is an xrange, which has an O(n) __contains__ implementation. The `rev not in newrevs` lookup a few lines below will therefore be O(n^2) if all incoming changesets are public. This issue isn't present on @ because 45e05d39d9ce introduced a custom type implementing an xrange primitive with O(1) contains and switched tr.changes['revs'] to be an instance of that type. We work around the problem on the stable branch by casting the xrange to a set. This is a bit hacky because it requires allocating memory to hold each integer in the range. But we are already holding the full set of pulled revision numbers in memory multiple times (such as in `tr.changes['phases']`). So this is a relatively minor problem. This issue has been present since the phases reporting code was introduced in the 4.7 cycle by eb9835014d20. This change should be reverted/ignored when stable is merged into default. On the mozilla-unified repository with 483492 changesets, `hg clone` time improves substantially: before: 1843.700s user; 29.810s sys after: 461.170s user; 29.360s sys
Sat, 18 Aug 2018 10:24:57 +0200 phases: drop dead code in `newheads` stable
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 10:24:57 +0200] rev 38778
phases: drop dead code in `newheads` There are new code earlier in the function achieving the same result. Spotted by Yuya Nishihara.
Sat, 18 Aug 2018 10:24:16 +0200 phases: fix `nullid` reference in newheads stable
Boris Feld <boris.feld@octobus.net> [Sat, 18 Aug 2018 10:24:16 +0200] rev 38777
phases: fix `nullid` reference in newheads Spotted by Yuya Nishihara.
Mon, 20 Aug 2018 16:33:48 -0400 beautifygraph: don't warn about busted terminal if HGPLAIN is set stable
Augie Fackler <augie@google.com> [Mon, 20 Aug 2018 16:33:48 -0400] rev 38776
beautifygraph: don't warn about busted terminal if HGPLAIN is set This was breaking some automation for users that discovered the extension and turned it on. Differential Revision: https://phab.mercurial-scm.org/D4338
Sun, 19 Aug 2018 13:27:02 +0900 merge: do not delete untracked files silently (issue5962) stable
Yuya Nishihara <yuya@tcha.org> [Sun, 19 Aug 2018 13:27:02 +0900] rev 38775
merge: do not delete untracked files silently (issue5962) 37450a122128, 2a774cae3a03, and 656ac240f392 weren't enough to prevent data loss. No unknown "files" weren't deleted before 7a8a16f8ea22, "context: also consider path conflicts when clearing unknown files."
Sat, 18 Aug 2018 10:33:03 +0900 perf: fix typo in perfphasesremote() stable
Yuya Nishihara <yuya@tcha.org> [Sat, 18 Aug 2018 10:33:03 +0900] rev 38774
perf: fix typo in perfphasesremote()
Fri, 17 Aug 2018 20:35:52 +0200 remotephase: avoid full changelog iteration (issue5964) stable
Boris Feld <boris.feld@octobus.net> [Fri, 17 Aug 2018 20:35:52 +0200] rev 38773
remotephase: avoid full changelog iteration (issue5964) Changeset 88efb7d6bcb6 introduced a performance regression by triggering a full ancestors walk. This changeset reworks this logic so that we no longer walk down the full changelog. The motivation for 88efb7d6bcb6, issue5939, is still fixed. mercurial compared to a draft repository ---------------------------------------- 8eeed92475d5: 0.012637 seconds 88efb7d6bcb6: 0.202699 seconds (x16) 46da52f4b820: 0.215551 seconds (+6%) this code: 0.008397 seconds (-33% from base) The payload size reduction we see in `test-bookmarks-pushpull.t` comes from a more aggressive filter of nullid and is harmless.
Fri, 17 Aug 2018 16:00:32 -0700 remotephase: fast path newheads computation in simple case (issue5964) stable
Boris Feld <boris.feld@octobus.net> [Fri, 17 Aug 2018 16:00:32 -0700] rev 38772
remotephase: fast path newheads computation in simple case (issue5964) Changeset 88efb7d6bcb6 fixed the logic of `phases.newheads` but greatly regressed its performance (up to many order of magnitude). The first step to fix the regression is to exit early when there is no work to do. If there are no heads to filter or not roots to filter them, we don't have to do any work. This fixes the regression when talking to an all public changeset. The performance is even better than before. pypy, compared to an all public repo ------------------------------------ 8eeed92475d5: 0.005758 seconds 88efb7d6bcb6: 0.602517 seconds (x104) this code: 0.001508 seconds (-74% from base) mercurial compared to an all public repo ---------------------------------------- 8eeed92475d5: 0.000577 seconds 88efb7d6bcb6: 0.185316 seconds (x321) this code: 0.000150 seconds (-74% from base) The performance of newheads, when actual computations are required, is fixed in the next changeset.
Fri, 17 Aug 2018 17:51:06 +0200 perf: add a perfphasesremote command stable
Boris Feld <boris.feld@octobus.net> [Fri, 17 Aug 2018 17:51:06 +0200] rev 38771
perf: add a perfphasesremote command This command measure the time we spend analysing remote phase during push and pull and display some information relevant to this computation. The `test-contrib-perf.t` expected output has to be updated but I do need these module for this perf command.
Wed, 15 Aug 2018 14:43:40 +0200 sparse-revlog: fix delta validity computation stable
Boris Feld <boris.feld@octobus.net> [Wed, 15 Aug 2018 14:43:40 +0200] rev 38770
sparse-revlog: fix delta validity computation When considering the validity of a delta with sparse-revlog, we check the size of the largest read. To do so, we use some regular logic with the extra delta information. Some of this logic was not handling this extra delta properly, confusing it with "nullrev". This confusion with nullrev lead to wrong results for this computation but preventing a crash. Changeset 781b2720d2ac on default revealed this error, crashing. This changeset fixes the logic on stable so that the computation is correct (and the crash is averted). The fix is made on stable as this will impact 4.7 clients interacting with sparse-revlog repositories (eg: created by later version).
Tue, 14 Aug 2018 14:00:35 -0400 convert: don't drop missing or corrupt tag entries stable
Matt Harbison <matt_harbison@yahoo.com> [Tue, 14 Aug 2018 14:00:35 -0400] rev 38769
convert: don't drop missing or corrupt tag entries Cleaning up the tags file could be a useful feature in some cases, so maybe there should be a switch for this. However, the default hg -> hg convert tries to maintain identical hashes (thus convert.hg.saverev is off by default, but is on by default for other source types). It looks like _rewritesubstate() has a `continue` in it, and therefore a similar problem. I ran into this conversion divergence when a coworker "merged" two repositories by copy/pasting all of the files from the source repo and massaging the code, and forgetting to revert the .hg* files. That silently emptied the .hgtags file after the conversion. (This isn't the manifest node bug Yuya has been helping with- this occurred well after the bzr -> hg conversion and wasn't a merge commit, which made it extra puzzling. That bug is still an issue.)
Thu, 09 Aug 2018 13:04:52 +0800 hgweb: catch ParseError that's raised by revset.match() stable
Anton Shestakov <av6@dwimlabs.net> [Thu, 09 Aug 2018 13:04:52 +0800] rev 38768
hgweb: catch ParseError that's raised by revset.match() Some queries, like the demonstrated "first(::)", fail earlier than we call mfunc(), and that results in a "500 Internal Server Error". To prevent it, revset.match() also needs to be in a try-except block.
Fri, 03 Aug 2018 15:09:19 -0400 tests: update test expectations in pre-2.7.9 branch of this test stable
Augie Fackler <augie@google.com> [Fri, 03 Aug 2018 15:09:19 -0400] rev 38767
tests: update test expectations in pre-2.7.9 branch of this test As far as I can tell this is the only spot that got overlooked. Rough test methodology (run inside an hg working copy): docker run --rm -v `pwd`:/hg -it debian:wheezy bash apt-get update apt-get install python python-dev build-essential unzip mercurial \ wget libbz2-dev make testpy-2.7.8 You could try and use the system Python, but it's 2.7.3 and has lots of issues for hg these days that are not worth fixing. Differential Revision: https://phab.mercurial-scm.org/D4070
Wed, 01 Aug 2018 12:24:52 -0700 packaging: always execute builddeb from source root stable
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 01 Aug 2018 12:24:52 -0700] rev 38766
packaging: always execute builddeb from source root Without this, dockerdeb and the make targets that invoke it may fail depending on the pwd at the time of invocation.
Wed, 01 Aug 2018 10:20:19 -0400 Added signature for changeset 33ac6a72308a stable
Augie Fackler <raf@durin42.com> [Wed, 01 Aug 2018 10:20:19 -0400] rev 38765
Added signature for changeset 33ac6a72308a
Wed, 01 Aug 2018 10:20:18 -0400 Added tag 4.7 for changeset 33ac6a72308a stable
Augie Fackler <raf@durin42.com> [Wed, 01 Aug 2018 10:20:18 -0400] rev 38764
Added tag 4.7 for changeset 33ac6a72308a
Wed, 01 Aug 2018 10:23:48 +0200 revlog: fix descendant deprecated method stable 4.7
Boris Feld <boris.feld@octobus.net> [Wed, 01 Aug 2018 10:23:48 +0200] rev 38763
revlog: fix descendant deprecated method Fix the descendant deprecated method introduced earlier in this cycle. This was caught by Yuya, thank you.
Tue, 31 Jul 2018 13:46:57 -0700 ui: remove commands.status.terse=u from ui.tweakdefaults stable
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 31 Jul 2018 13:46:57 -0700] rev 38762
ui: remove commands.status.terse=u from ui.tweakdefaults commands.status.terse=u can add significant overhead when operating on large repositories. Using the Firefox repository: HGRCPATH= hg --time status time: real 1.340 secs (user 0.960+0.000 sys 0.380+0.000) HGRCPATH= hg --time --config commands.status.terse=u status time: real 2.420 secs (user 2.070+0.000 sys 0.360+0.000) HGRCPATH= hg --time --config extensions.fsmonitor= status time: real 0.080 secs (user 0.050+0.010 sys 0.040+0.000) HGRCPATH= ~/src/hg/hg --time --config extensions.fsmonitor= --config commands.status.terse=u status time: real 2.470 secs (user 2.080+0.000 sys 0.390+0.000) The performance regression - especially when fsmonitor is being used - is too much to stomach for the 4.7 release. We've decided to remove commands.status.terse=u from ui.tweakdefaults until we can improve its performance, hopefully in the 4.8 cycle. This commit effectively backs out 6acf41bb8d40.
Wed, 25 Jul 2018 21:19:06 +0300 context: safegaurd against 'lx' being passed as file flag in manifest stable
Pulkit Goyal <pulkit@yandex-team.ru> [Wed, 25 Jul 2018 21:19:06 +0300] rev 38761
context: safegaurd against 'lx' being passed as file flag in manifest Subversion can have a file as executable link. When using hgsubversion, we will have both islink and isexec True. This will lead to _flags being set to `lx`. However, manifest expects flag to be one-byte so it will crash if 'lx' is passed. Also it's impossible to have an executable link. This patch will safegaurd us from having 'lx' being a possible value. This was authored by Ivan Lezhankin from Yandex. Differential Revision: https://phab.mercurial-scm.org/D3985
Tue, 31 Jul 2018 13:53:06 -0700 localrepo: unconditionally enable general delta with sparse revlogs stable
Boris Feld <boris.feld@octobus.net> [Tue, 31 Jul 2018 13:53:06 -0700] rev 38760
localrepo: unconditionally enable general delta with sparse revlogs This come as an extra security, better safe than sorry.
Mon, 30 Jul 2018 15:53:47 +0200 sparse-revlog: also use sparse-revlog config as a general delta trigger stable
Boris Feld <boris.feld@octobus.net> [Mon, 30 Jul 2018 15:53:47 +0200] rev 38759
sparse-revlog: also use sparse-revlog config as a general delta trigger Sparse revlog rely on general delta, so we should make sure it is used.
Sun, 29 Jul 2018 16:25:51 +0900 fileset: suppress EACCES while reading arbitrary paths via filectx API stable
Yuya Nishihara <yuya@tcha.org> [Sun, 29 Jul 2018 16:25:51 +0900] rev 38758
fileset: suppress EACCES while reading arbitrary paths via filectx API On Windows, EACCES is raised in place of EISDIR. This patch simply adds EACCES to the list of errors to be ignored since I think it's okay for filesets to treat inaccessible working-copy files as not existing.
Fri, 27 Jul 2018 14:56:10 +0300 merge: do the trivial resolution after updating sparse checkout stable
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 27 Jul 2018 14:56:10 +0300] rev 38757
merge: do the trivial resolution after updating sparse checkout In merge, we do trivial resolution for files which were deleted on one side and changed on other. When sparse extension in involved that file might not be present in wdir and trivial resolution can lead to file not found error. This patch make sure we updates the sparse checkout before doing the trivial resolution. This fixes the test failure demonstrated in previous patch. Differential Revision: https://phab.mercurial-scm.org/D3984
Fri, 27 Jul 2018 14:53:28 +0300 sparse: add test showing `hg merge` is broken while using sparse extension stable
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 27 Jul 2018 14:53:28 +0300] rev 38756
sparse: add test showing `hg merge` is broken while using sparse extension This patch adds a test to demonstrate that `hg merge` is broken in some cases while using sparse extension. The case is when you have a file which is: * modified between current wdir parent and merge base * deleted between merge base and merge destination * excluded from sparse checkout Doing `hg merge` results in file not found error. Next patch will fix this. Differential Revision: https://phab.mercurial-scm.org/D3983
Mon, 30 Jul 2018 14:36:42 -0700 context: use hex nodeid in error about filtered node stable
Martin von Zweigbergk <martinvonz@google.com> [Mon, 30 Jul 2018 14:36:42 -0700] rev 38755
context: use hex nodeid in error about filtered node I went a little too far in my cleanup in 9231148ea599 (context: convert to hex for error message only for 20-byte changeid, 2018-04-06). I missed that the case where a binary nodeid refers to a filtered node. Differential Revision: https://phab.mercurial-scm.org/D3987
Tue, 31 Jul 2018 10:55:14 +0200 doc: fix underline length for config title (issue5949) stable
Boris Feld <boris.feld@octobus.net> [Tue, 31 Jul 2018 10:55:14 +0200] rev 38754
doc: fix underline length for config title (issue5949) This was an error in the initial commit. Thanks go to Marcel Svitalský for reporting the bug.
Mon, 30 Jul 2018 15:36:04 +0200 clone: process 'lookup' return as an arbitrary symbol stable
Boris Feld <boris.feld@octobus.net> [Mon, 30 Jul 2018 15:36:04 +0200] rev 38753
clone: process 'lookup' return as an arbitrary symbol In theory, checkout is expected to be a node here because it was returned by peer.lookup. In practice, multiple important extensions (like hg-git, hg-subversion) use peers not backed by a mercurial repository where lookup cannot return a node. Allowing arbitrary symbols is necessary to make these extensions working with 4.7. We should probably introduce a new API in Core to have these extensions to work without abusing the lookup API. In the meantime, a small change to restore compatibility in 4.7 seems in order.
Mon, 30 Jul 2018 10:18:29 -0400 tests: use inline Python instead of sed to add trailing whitespace stable
Augie Fackler <augie@google.com> [Mon, 30 Jul 2018 10:18:29 -0400] rev 38752
tests: use inline Python instead of sed to add trailing whitespace The sed invocation was failing on OS X and FreeBSD. I'm far too lazy to diagnose that, so just use some inline Python to fix the build.
Mon, 30 Jul 2018 09:50:32 -0400 context: add missing b prefix stable
Augie Fackler <augie@google.com> [Mon, 30 Jul 2018 09:50:32 -0400] rev 38751
context: add missing b prefix This fixes mercurial/context.py:593: SyntaxError: cannot mix bytes and nonbytes literals (context.py, line 593) in Python 3.
Sat, 28 Jul 2018 16:36:35 +0900 doctest: convert matcher root to native path stable
Yuya Nishihara <yuya@tcha.org> [Sat, 28 Jul 2018 16:36:35 +0900] rev 38750
doctest: convert matcher root to native path Otherwise it wouldn't be caught by a fast path of pathutil.canonpath(), and fall back to file identity checks.
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -32 +32 +50 +100 +300 +1000 +3000 +10000 tip