Mon, 11 Feb 2019 19:41:37 +0300 narrow: fix command name in error messsage
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 11 Feb 2019 19:41:37 +0300] rev 41734
narrow: fix command name in error messsage Differential Revision: https://phab.mercurial-scm.org/D5982
Fri, 15 Feb 2019 14:43:31 -0500 templatekw: add a {negrev} keyword
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Fri, 15 Feb 2019 14:43:31 -0500] rev 41733
templatekw: add a {negrev} keyword Revision numbers are getting much maligned for two reasons: they are too long in large repos and users get confused by their local-only nature. It just occurred to me that negative revision numbers avoid both of those problems. Since negative revision numbers change whenever the repo changes, it's much more obvious that they are a local-only convenience. Additionally, for the recent commits that we usually care about the most, negative revision numbers are always near zero. This commit adds a negrev templatekw to more easily expose negative revision numbers. It's not easy to reliably produce this output with existing keywords due to hidden commits while at the same time ensuring good performance.
Sun, 17 Feb 2019 22:39:12 -0500 tests: correct the remaining fallout from recent path style changes on Windows
Matt Harbison <matt_harbison@yahoo.com> [Sun, 17 Feb 2019 22:39:12 -0500] rev 41732
tests: correct the remaining fallout from recent path style changes on Windows Per @martinvonz, `ui.slash` set by the test runner is now capable of playing a more active role.[1] I verified that both of these work by setting `ui.slash` to False, but these changes seem cleaner. The problem with check-perf-code.py was that the proper imports were not being whitelisted due to '\' vs '/'. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2019-February/128701.html
Wed, 13 Feb 2019 18:34:08 -0800 templates: adding a config() function for template customization
rdamazio@google.com [Wed, 13 Feb 2019 18:34:08 -0800] rev 41731
templates: adding a config() function for template customization This allows templates to be written such that users can customize them easily, or that they can be customized based on other configuration of the system. For enterprise deployments, we often have complex template aliases, and right now the only way individual users can customize those is by replacing the whole template alias (which means they won't get company-wide updates to it anymore, plus most users don't want to have to get a complex template right). With this change, they can just set a config option which feeds into our templates for common changes (e.g. whether to limit commit descriptions to the width of their terminal or not). To work around the issue of having to register the config options, I declared a dedicated section [templateconfig] for these options to be dynamically declared. They can still reference any other config option that's registered elsewhere. I only did string, bool and int at this time - list and date would add other complications with parsing the default so I'll leave that as an exercise to the reader :) Differential Revision: https://phab.mercurial-scm.org/D5959
Thu, 31 Jan 2019 20:11:16 +0300 changegroup: don't try to prune manifest nodes if not ellipses
Pulkit Goyal <pulkit@yandex-team.ru> [Thu, 31 Jan 2019 20:11:16 +0300] rev 41730
changegroup: don't try to prune manifest nodes if not ellipses In non-ellipses case, the number of manifest nodes can be very big, and finding whether one of them can be pruned or not is very costly. For each node, we try to find the rev and the linkrev, which is expensive. Sending bit more manifest nodes seems better and much faster here. On our internal repository, this saves around 5 seconds on `hg tracked --addinclude <some_path>` on a narrow repo with ellipses disabled. Differential Revision: https://phab.mercurial-scm.org/D5782
Mon, 11 Feb 2019 16:34:48 +0300 branchmap: improve doc about BranchMapCache class
Pulkit Goyal <pulkit@yandex-team.ru> [Mon, 11 Feb 2019 16:34:48 +0300] rev 41729
branchmap: improve doc about BranchMapCache class It was confusing that we are having two different branchcache and BranchMapCache classes. The doc in BranchMapCache class was not much helpful to understand the difference. This patch improves the doc there. Differential Revision: https://phab.mercurial-scm.org/D5933
Mon, 04 Feb 2019 19:46:57 +0100 rust: itering less on MissingAncestors.bases for max()
Georges Racinet <georges.racinet@octobus.net> [Mon, 04 Feb 2019 19:46:57 +0100] rev 41728
rust: itering less on MissingAncestors.bases for max() Instead of iterating on the whole `self.bases` each time to find its max, we keep the latter in a separate member attribute and keep it up to date in `add_bases()` On a perfdiscovery done on PyPy, with repos prepared with `contrib/discovery-helper.sh 50 100`, this gives a slight improvement (around 0.5% on wall time, but 10% on CPU) before: ! wall 0.172801 comb 0.180000 user 0.180000 sys 0.000000 (median of 541) after: ! wall 0.171798 comb 0.160000 user 0.160000 sys 0.000000 (median of 551) (perf command run time upped because of bigger variability during this test). Differential Revision: https://phab.mercurial-scm.org/D5945
Tue, 05 Feb 2019 10:28:32 +0100 rust: stop putting NULL_REVISION in MissingAncestors.bases
Georges Racinet <georges.racinet@octobus.net> [Tue, 05 Feb 2019 10:28:32 +0100] rev 41727
rust: stop putting NULL_REVISION in MissingAncestors.bases As noted in initial review of MissingAncestors, adding NULL_REVISION in constructor in case the given `bases` is empty wasn't really useful, yet it's been kept for identity with the Python implementation Differential Revision: https://phab.mercurial-scm.org/D5944
Mon, 04 Feb 2019 12:04:59 +0100 rust: less set lookups in MissingAncestors
Georges Racinet <georges.racinet@octobus.net> [Mon, 04 Feb 2019 12:04:59 +0100] rev 41726
rust: less set lookups in MissingAncestors using the return values of HashSet::remove(), we can factor pairs of `contains()/remove()` into a single `remove()`. On a perfdiscovery run done on the PyPy repository, prepared with contrib/discovery-helper.sh 50 100, I do get a modest improvement with this (mean of medians of three runs is better by 2%) Sample readings, before this change: ! wall 0.175609 comb 0.180000 user 0.180000 sys 0.000000 (median of 58) With this change: ! wall 0.171662 comb 0.180000 user 0.170000 sys 0.010000 (median of 60) Differential Revision: https://phab.mercurial-scm.org/D5943
Mon, 04 Feb 2019 11:39:28 +0100 rust: less set lookups in AncestorsIterator
Georges Racinet <georges.racinet@octobus.net> [Mon, 04 Feb 2019 11:39:28 +0100] rev 41725
rust: less set lookups in AncestorsIterator This uses the boolean return of `HashSet::insert()` to factor pairs of contains()/insert() into a single insert() On the mozilla-central repository (450k changesets), I get about a bit more than 10% better medians in perfancestors (taking the mean of three runs) Best run for parent changeset: ! wall 0.106474 comb 0.110000 user 0.110000 sys 0.000000 (median of 93) Best run for this changeset: ! wall 0.093191 comb 0.090000 user 0.090000 sys 0.000000 (median of 100) Differential Revision: https://phab.mercurial-scm.org/D5942
Fri, 15 Feb 2019 17:36:57 +0300 obsutil: don't assume leftctx and rightctx repo as same
Pulkit Goyal <pulkit@yandex-team.ru> [Fri, 15 Feb 2019 17:36:57 +0300] rev 41724
obsutil: don't assume leftctx and rightctx repo as same Backed out changeset 520514af2d93. hgsubversion can pass leftctx and rightctx which are instances of two different repositories. This was making tests fail on hgsubversion with 4.9. The two different instances are: (Pdb) p rightctx.repo() <filteredrepo:served <hgsubversion.svnrepo.svnlocalrepo object at 0x7fe29d296d10>> (Pdb) p leftctx.repo() <filteredrepo:visible <hgsubversion.svnrepo.svnlocalrepo object at 0x7fe29d494590>> Differential Revision: https://phab.mercurial-scm.org/D5968
Fri, 15 Feb 2019 13:46:30 -0800 tests: add more wildcards to test-extdiff.t
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:46:30 -0800] rev 41723
tests: add more wildcards to test-extdiff.t The diff tool (which is `echo`) runs in the background and output order can therefore be non-deterministic. We need to glob over the file names to account for this. Differential Revision: https://phab.mercurial-scm.org/D5976
Fri, 15 Feb 2019 13:22:01 -0800 url: don't pass strict argument on Python 3
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:22:01 -0800] rev 41722
url: don't pass strict argument on Python 3 The argument was removed in Python 3.4. Differential Revision: https://phab.mercurial-scm.org/D5975
Fri, 15 Feb 2019 13:16:07 -0800 url: always use str for proxy configuration
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:16:07 -0800] rev 41721
url: always use str for proxy configuration Previously, proxies didn't work on Python 3 for various reasons. First, the keys to the "proxies" dict are fed into a `setattr(self, "%s_open", ...)` call and passing bytestrings results in setting an oddly named attribute due to the b'' in %s formatting. This resulted in "http_open" and "https_open" not being properly overridden and proxies not being used. Second, the standard library was expecting proxy URLs to be str. And various operations (including our custom code in url.py) would fail to account for the str/bytes mismatch. This commit normalizes everything to str and adjusts our proxy code in url.py to account for the presence of str on Python 3. Differential Revision: https://phab.mercurial-scm.org/D5952
Tue, 12 Feb 2019 14:29:56 -0800 py3: port tinyproxy.py to work with Python 3
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 12 Feb 2019 14:29:56 -0800] rev 41720
py3: port tinyproxy.py to work with Python 3 There were various str/bytes mismatches in the code. This caused the proxy server to misbehave at run-time. The manifestation was typically premature socket disconnect from the perspective of the client. Differential Revision: https://phab.mercurial-scm.org/D5951
Tue, 12 Feb 2019 12:13:56 -0800 url: always access req._tunnel_host
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 12 Feb 2019 12:13:56 -0800] rev 41719
url: always access req._tunnel_host The getattr() was there to handle Python versions before 2.6, which lacked this attribute. We /might/ be able to further delete some code here. However, the behavior here is extremely hard to follow because large parts of this code duplicate code from the Python standard library and it is difficult to understand what is actually needed. Differential Revision: https://phab.mercurial-scm.org/D5950
Fri, 15 Feb 2019 13:07:07 -0800 tests: double escape \ in test-import-eol.t and test-mq-eol.t
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:07:07 -0800] rev 41718
tests: double escape \ in test-import-eol.t and test-mq-eol.t The shell eats the \\. Differential Revision: https://phab.mercurial-scm.org/D5974
Fri, 15 Feb 2019 13:05:01 -0800 tests: use raw string in test-impexp-branch.t
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 13:05:01 -0800] rev 41717
tests: use raw string in test-impexp-branch.t On first glance, the escaping of \s seems correct. However, the shell eats the escape and we're left with '\s` in the written file. Let's use a raw string so we don't have to double escape. Differential Revision: https://phab.mercurial-scm.org/D5973
Mon, 11 Feb 2019 16:27:20 +0100 phabricator: make user searches case-insensitive
Julien Cristau <jcristau@mozilla.com> [Mon, 11 Feb 2019 16:27:20 +0100] rev 41716
phabricator: make user searches case-insensitive User names in conduit are case insensitive, but when looking for "FOO" it would return "foo" instead and we'd think the user didn't exist. So lower case both the query and the response when comparing them. Differential Revision: https://phab.mercurial-scm.org/D5934
Fri, 15 Feb 2019 11:31:17 -0800 exchange: raise error.Abort instead of ValueError
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 11:31:17 -0800] rev 41715
exchange: raise error.Abort instead of ValueError Raising ValueError results in an uncaught exception and a traceback being printed. In the context of servers, it can result in an HTTP 500 and an exception being logged in the error log. I don't think this is proper behavior. The bundle2 code paths have a mechanism for translating an error.Abort into an error message reported to the clients. I think we should use that instead. This commit replaces some ValueError with Abort so that servers can error more gracefully. Differential Revision: https://phab.mercurial-scm.org/D5972
Fri, 15 Feb 2019 11:42:54 -0800 tests: remove -q from test-lfs-serve.t
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 15 Feb 2019 11:42:54 -0800] rev 41714
tests: remove -q from test-lfs-serve.t This will make it easier to observe a behavior change in the next commit. Differential Revision: https://phab.mercurial-scm.org/D5971
Wed, 13 Feb 2019 16:58:24 -0500 chistedit: use magenta for current line as in crecord (issue6071)
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Wed, 13 Feb 2019 16:58:24 -0500] rev 41713
chistedit: use magenta for current line as in crecord (issue6071) It was inconsistent in the UI to have different way to show the current line.
Thu, 14 Feb 2019 20:57:26 +0530 chistedit: improve proper username in histedit curses interface
Akshit Jain <Akshjain.jain74@gmail.com> [Thu, 14 Feb 2019 20:57:26 +0530] rev 41712
chistedit: improve proper username in histedit curses interface in changeset section (issue6072) Differential Revision: https://phab.mercurial-scm.org/D5967
Thu, 14 Feb 2019 10:41:47 -0500 crecord: remove obsolete version check
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Thu, 14 Feb 2019 10:41:47 -0500] rev 41711
crecord: remove obsolete version check An internal function shouldn't be checking compatibility with Mercurial versions.
Wed, 13 Feb 2019 16:02:44 -0500 histedit: remove "chistedit" mention from interface
Jordi Gutiérrez Hermoso <jordigh@octave.org> [Wed, 13 Feb 2019 16:02:44 -0500] rev 41710
histedit: remove "chistedit" mention from interface "chisted" is internal jargon. The end user should not need to be aware that it's different from histedit.
Wed, 13 Feb 2019 18:17:42 +0530 revset: improve documentation on expectsize()
Navaneeth Suresh <navaneeths1998@gmail.com> [Wed, 13 Feb 2019 18:17:42 +0530] rev 41709
revset: improve documentation on expectsize() This is a follow-up patch to D5813. It improves the documentation of `expectsize(set, size)`. Differential Revision: https://phab.mercurial-scm.org/D5953
Wed, 13 Feb 2019 12:09:36 -0800 scmutil: fix a comment that doesn't match the code
Martin von Zweigbergk <martinvonz@google.com> [Wed, 13 Feb 2019 12:09:36 -0800] rev 41708
scmutil: fix a comment that doesn't match the code Differential Revision: https://phab.mercurial-scm.org/D5956
Thu, 14 Feb 2019 13:16:36 -0800 remotefilelog: remove strkwargs()
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 14 Feb 2019 13:16:36 -0800] rev 41707
remotefilelog: remove strkwargs() The previous commit activated previously unused code paths on Python 3 and revealed that we were calling strkwargs() on a dict that already had str keys. The only caller of _forceprefetch() is _adjustlinknode() a few lines up and the static commonlogkwargs dict features str keys. Differential Revision: https://phab.mercurial-scm.org/D5958
Wed, 13 Feb 2019 16:31:20 -0800 remotefilelog: use raw strings when looking for variable names
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 13 Feb 2019 16:31:20 -0800] rev 41706
remotefilelog: use raw strings when looking for variable names Keys in self.__dict__ and vars() are always str. So we need to use raw strings to ensure lookups work on Python 3. # skip-blame just r'' prefixes Differential Revision: https://phab.mercurial-scm.org/D5957
Thu, 10 Jan 2019 18:25:18 +0100 rust-cpython: binding for headrevs()
Georges Racinet <georges.racinet@octobus.net> [Thu, 10 Jan 2019 18:25:18 +0100] rev 41705
rust-cpython: binding for headrevs() This uses the core `dagops::retain_heads` to give a Rust implementation to `mercurial.dagop.headrevs`. Testing happens for now from `test-rust-ancestors.py` (for quick and minimal change), but it'd made more sense to put the binary index data elsewhere and to create a new test python module
Wed, 16 Jan 2019 16:05:27 +0100 rust-cpython: moved py_set() utility to conversion module
Georges Racinet <georges.racinet@octobus.net> [Wed, 16 Jan 2019 16:05:27 +0100] rev 41704
rust-cpython: moved py_set() utility to conversion module We're still hoping to get rid of it eventually, but we're going to need it from outside the `ancestors` module before that.
Sun, 02 Dec 2018 16:19:22 +0100 rust: translated random test of missingancestors
Georges Racinet <gracinet@anybox.fr> [Sun, 02 Dec 2018 16:19:22 +0100] rev 41703
rust: translated random test of missingancestors This is a Rust implementation of the random DAG generator and related incrementalmissingancestors tests against a naive brute force implementation. It is provided as an integration test, so that it won't run by default if any unit test fails. In case of a failed example, all needed information for reproduction is included in the panic message, (this is how `test_remove_ancestors_from_case1()` has been generated), as well as the random seed. The whole test is rerunnable by passing the random seed in the TEST_RANDOM_SEED environment variable. The other parameters (numbers of iterations) can be passed in the TEST_MISSING_ANCESTORS environment variable. An alternative would have been to expose to Python MissingAncestors<VecGraphs> but that would have meant pollution of the release build used from Python, whereas we do it in this changeset within the tests submodule Differential Revision: https://phab.mercurial-scm.org/D5417
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -32 +32 +50 +100 +300 +1000 +3000 tip