Tue, 26 Jun 2018 10:02:01 -0700 namespaces: let namespaces override singlenode() definition
Martin von Zweigbergk <martinvonz@google.com> [Tue, 26 Jun 2018 10:02:01 -0700] rev 38490
namespaces: let namespaces override singlenode() definition Some namespaces have multiple nodes per name (meaning that their namemap() returns multiple nodes). One such namespace is the "topics" namespace (from the evolve repo). We also have our own internal namespace at Google (for review units) that has multiple nodes per name. These namespaces may not want to use the default "pick highest revnum" resolution that we currently use when resolving a name to a single node. As an example, they may decide that `hg co <name>` should check out a commit that's last in some sense even if an earlier commit had just been amended and thus had a higher revnum [1]. This patch gives the namespace the option to continue to return multiple nodes and to override how the best node is picked. Allowing namespaces to override that may also be useful as an optimization (it may be cheaper for the namespace to find just that node). I have been arguing (in D3715) for using all the nodes returned from namemap() when resolving the symbol to a revset, so e.g. `hg log -r stable` would resolve to *all* nodes on stable, not just the one with the highest revnum (except that I don't actually think we should change it for the branch namespace because of BC). Most people seem opposed to that. If we decide not to do it, I think we can deprecate the namemap() function in favor of the new singlenode() (I find it weird to have namespaces, like the branch namespace, where namemap() isn't nodemap()'s inverse). I therefore think this patch makes sense regardless of what we decide on that issue. [1] Actually, even the branch namespace would have wanted to override singlenode() if it had supported multiple nodes. That's because closes branch heads are mostly ignored, so "hg co default" will not check out the highest-revnum node if that's a closed head. Differential Revision: https://phab.mercurial-scm.org/D3852
Wed, 27 Jun 2018 12:24:21 +0530 rebase: refactor dryrun implementation
Sushil khanchi <sushilkhanchi97@gmail.com> [Wed, 27 Jun 2018 12:24:21 +0530] rev 38489
rebase: refactor dryrun implementation This patch refactor dry-run code to make it easy to add additional functionality in dryrun. Otherwise we had to add every functionality through _origrebase() which does not seem a good implementation. Differential Revision: https://phab.mercurial-scm.org/D3849
Sun, 02 Jul 2017 00:32:09 -0400 hooks: allow Unix style environment variables on external Windows hooks
Matt Harbison <matt_harbison@yahoo.com> [Sun, 02 Jul 2017 00:32:09 -0400] rev 38488
hooks: allow Unix style environment variables on external Windows hooks This will help making common hooks between Windows and non-Windows platforms. Having to build the shellenviron dict here and in procutil.system() is a bit unfortunate, but the only other option is to fix up the command inside procutil.system(). It seems more important that the note about the hook being run reflects what is actually run. The patch from last summer added the hooks on the command line, but it looks like HG_ARGS has since learned about --config args, and the output was just confusing. Therefore, it's now loaded from a file in the histedit test for clarity.
Sun, 24 Jun 2018 01:13:09 -0400 windows: add a method to convert Unix style command lines to Windows style
Matt Harbison <matt_harbison@yahoo.com> [Sun, 24 Jun 2018 01:13:09 -0400] rev 38487
windows: add a method to convert Unix style command lines to Windows style This started as a copy/paste of `os.path.expandvars()`, but limited to a given dictionary of variables, converting `foo = foo + bar` to `foo += bar`, and adding 'b' string prefixes. Then code was added to make sure that a value being substituted in wouldn't itself be expanded by cmd.exe. But that left inconsistent results between `$var1` and `%var1%` when its value was '%foo%'- since neither were touched, `$var1` wouldn't expand but `%var1%` would. So instead, this just converts the Unix style to Windows style (if the variable exists, because Windows will leave `%missing%` as-is), and lets cmd.exe do its thing. I then dropped the %% -> % conversion (because Windows doesn't do this), and added the ability to escape the '$' with '\'. The escape character is dropped, for consistency with shell handling. After everything seemed stable and working, running the whole test suite flagged a problem near the end of test-bookmarks.t:1069. The problem is cmd.exe won't pass empty variables to its child, so defined but empty variables are now skipped. I can't think of anything better, and it seems like a pre-existing violation of the documentation, which calls out that HG_OLDNODE is empty on bookmark creation. Future additions could potentially be replacing strong quotes with double quotes (cmd.exe doesn't know what to do with the former), escaping a double quote, and some tilde expansion via os.path.expanduser(). I've got some doubts about replacing the strong quotes in case sh.exe is run, but it seems like the right thing to do the vast majority of the time. The original form of this was discussed about a year ago[1]. [1] https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-July/100735.html
Thu, 28 Jun 2018 10:50:53 +0800 hgweb: add archive entries to graph page
Anton Shestakov <av6@dwimlabs.net> [Thu, 28 Jun 2018 10:50:53 +0800] rev 38486
hgweb: add archive entries to graph page Changelog page has them, so it makes sense to add them to graph page too.
Thu, 28 Jun 2018 07:41:08 +0800 hgweb: add z-index for search field tooltip
Anton Shestakov <av6@dwimlabs.net> [Thu, 28 Jun 2018 07:41:08 +0800] rev 38485
hgweb: add z-index for search field tooltip On graph page, search field tooltip sometimes goes down to the graph area, where it used to be covered by foreground element of graph entries (.fg) because they have z-index: 10. To prevent the tooltip from being covered, z-index: 15 is enough.
Wed, 27 Jun 2018 07:19:30 -0700 tests: pass "rev" argument to commands.update() as string
Martin von Zweigbergk <martinvonz@google.com> [Wed, 27 Jun 2018 07:19:30 -0700] rev 38484
tests: pass "rev" argument to commands.update() as string commands.update() normally gets its "rev" argument as a string, but test-basic.t was passing an integer. That happened to work, but we shouldn't rely on it. Differential Revision: https://phab.mercurial-scm.org/D3851
Wed, 27 Jun 2018 23:39:41 +0900 revset: fix heads() order to always follow the input set (BC)
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Jun 2018 23:39:41 +0900] rev 38483
revset: fix heads() order to always follow the input set (BC) An argument expression should never affect the order of the result set. That's the rule of the revset predicates.
Wed, 27 Jun 2018 23:33:57 +0900 test-revset: show that order of heads() can be wrong
Yuya Nishihara <yuya@tcha.org> [Wed, 27 Jun 2018 23:33:57 +0900] rev 38482
test-revset: show that order of heads() can be wrong
Wed, 27 Jun 2018 10:21:07 -0400 stringutil: update list of re-special characters to include &~
Augie Fackler <augie@google.com> [Wed, 27 Jun 2018 10:21:07 -0400] rev 38481
stringutil: update list of re-special characters to include &~ I missed this because I was looking at the change that refactored re.escape, and these characters were added in https://github.com/python/cpython/commit/05cb728d68a278d11466f9a6c8258d914135c96c. Differential Revision: https://phab.mercurial-scm.org/D3850
Tue, 26 Jun 2018 11:38:58 -0400 tests: fix up some lax escaping in test-template-basic.t
Augie Fackler <augie@google.com> [Tue, 26 Jun 2018 11:38:58 -0400] rev 38480
tests: fix up some lax escaping in test-template-basic.t These misfired escapes turn into hard errors in Python 3.7, and I'd really rather we not work around it. We should *probably* try and find a way to proactively warn users about invalid escape sequences. There's one more failure of this type in this file on Python 3.7, but I can't figure out the issue. It'll need to be corrected in a follow-up. Differential Revision: https://phab.mercurial-scm.org/D3843
Tue, 26 Jun 2018 10:36:23 -0400 cleanup: migrate from re.escape to stringutil.reescape
Augie Fackler <augie@google.com> [Tue, 26 Jun 2018 10:36:23 -0400] rev 38479
cleanup: migrate from re.escape to stringutil.reescape This has consistent behavior on Python 2.7, 3.6, and 3.7 and has the benefit of probably being a little faster. Test output changes are largely because / used to be pointlessly escaped. Differential Revision: https://phab.mercurial-scm.org/D3842
Tue, 26 Jun 2018 10:33:52 -0400 stringutil: add a new function to do minimal regex escaping
Augie Fackler <augie@google.com> [Tue, 26 Jun 2018 10:33:52 -0400] rev 38478
stringutil: add a new function to do minimal regex escaping Per https://bugs.python.org/issue29995, re.escape() used to over-escape regular expression strings, but in Python 3.7 that's been fixed, which also improved the performance of re.escape(). Since it's both an output change for us *and* a perfomance win, let's just effectively backport the new behavior to hg on all Python versions. Differential Revision: https://phab.mercurial-scm.org/D3841
Tue, 26 Jun 2018 16:14:02 +0530 graft: add no-commit mode (issue5631)
Sushil khanchi <sushilkhanchi97@gmail.com> [Tue, 26 Jun 2018 16:14:02 +0530] rev 38477
graft: add no-commit mode (issue5631) This patch adds a new flag --no-commit in graft command. This feature grafts the changes but do not create commits for those changes, grafted changes will be added in the working directory. Also added tests to reflect the expected behavior. Differential Revision: https://phab.mercurial-scm.org/D2409
Tue, 26 Jun 2018 02:05:11 +0530 patchbomb: use email.mime.base instead of email.MIMEBase
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 02:05:11 +0530] rev 38476
patchbomb: use email.mime.base instead of email.MIMEBase The later was removed on Python 3. On python 2: >>> email.MIMEBase.MIMEBase is email.mime.base.MIMEBase True Differential Revision: https://phab.mercurial-scm.org/D3836
Tue, 26 Jun 2018 02:04:17 +0530 patchbomb: use email.mime.multipart instead of email.MIMEMultipart
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 02:04:17 +0530] rev 38475
patchbomb: use email.mime.multipart instead of email.MIMEMultipart The later was removed in Python 3. On python 2: >>> email.MIMEMultipart.MIMEMultipart is email.mime.multipart.MIMEMultipart True Differential Revision: https://phab.mercurial-scm.org/D3835
Tue, 26 Jun 2018 01:08:47 +0530 py3: add b'' prefixes in tests/test-bundle2-pushback.t
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 01:08:47 +0530] rev 38474
py3: add b'' prefixes in tests/test-bundle2-pushback.t This makes the test run on Python 3. # skip-blame because just b'' prefixes. Differential Revision: https://phab.mercurial-scm.org/D3834
Tue, 26 Jun 2018 00:37:02 +0530 py3: make tests/test-diff-antipatience.t work with python 3
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 26 Jun 2018 00:37:02 +0530] rev 38473
py3: make tests/test-diff-antipatience.t work with python 3 On python3, if we do list(b'abcd'), we get [97, 98, 99, 100]. So this patch does the list() operation on unicodes and then convert things to bytes. This also adds `and None` to suppress return values of .write() calls. Differential Revision: https://phab.mercurial-scm.org/D3833
Mon, 25 Jun 2018 11:04:17 -0700 terse: pass "clean" and "unknown" booleans by name for clarity
Martin von Zweigbergk <martinvonz@google.com> [Mon, 25 Jun 2018 11:04:17 -0700] rev 38472
terse: pass "clean" and "unknown" booleans by name for clarity Differential Revision: https://phab.mercurial-scm.org/D3838
Mon, 25 Jun 2018 11:01:11 -0700 terse: add tests of running from subdirectory
Martin von Zweigbergk <martinvonz@google.com> [Mon, 25 Jun 2018 11:01:11 -0700] rev 38471
terse: add tests of running from subdirectory I also included comments explaining what I think the output should be (discussion started on D3628). Differential Revision: https://phab.mercurial-scm.org/D3837
Sat, 23 Jun 2018 19:23:53 +0900 convert: don't pass --no-files to "darcs show repo" command
Yuya Nishihara <yuya@tcha.org> [Sat, 23 Jun 2018 19:23:53 +0900] rev 38470
convert: don't pass --no-files to "darcs show repo" command The test fails with darcs 2.14.0 because --no-files is no longer supported. It was removed at the patch 97973a52bf496657558412562d6fad2ee651b1e0, which says "show repo: removed --files option, removed manual flags parsing." As far as I can tell, --no-files was specified just for optimization, so old darcs should work without it.
Tue, 29 May 2018 00:15:44 +0200 shelve: stop testing missing rebase state file
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:15:44 +0200] rev 38469
shelve: stop testing missing rebase state file We no longer use the file. Neither during rebase not during continue. Differential Revision: https://phab.mercurial-scm.org/D3691
Tue, 29 May 2018 00:12:35 +0200 shelve: actually test corrupted shelve state
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:12:35 +0200] rev 38468
shelve: actually test corrupted shelve state The test was previous moving the corrupted shelve state file as an histedit state file. Differential Revision: https://phab.mercurial-scm.org/D3690
Tue, 29 May 2018 00:13:48 +0200 shelve: directly handle `--continue`
Boris Feld <boris.feld@octobus.net> [Tue, 29 May 2018 00:13:48 +0200] rev 38467
shelve: directly handle `--continue` Shelve is currently sub-contracting some of its work to the rebase extension. In order to make shelve more independent and flexible we would like shelve to handle the parent alignment directly. This changeset takes on the next step, handling the abort process. Same as for --abort. It turns out we have all the necessary bits in the `shelvestate` file. So we do not need anything from the interrupted rebase. Differential Revision: https://phab.mercurial-scm.org/D3689
Mon, 28 May 2018 18:15:21 +0200 shelve: directly handle the abort process
Boris Feld <boris.feld@octobus.net> [Mon, 28 May 2018 18:15:21 +0200] rev 38466
shelve: directly handle the abort process Shelve is currently sub-contracting some of its work to the rebase extension. In order to make shelve more independent and flexible we would like shelve to handle the parent alignment directly. This change starts with the simplest bits, handling the abort process. It turns out we have all the necessary bits in the `shelvestate` file. So we do not need anything from the interrupted rebase. As a nice side effect, a test about missing `shelverebasestate` state file now behave better. Differential Revision: https://phab.mercurial-scm.org/D3688
Mon, 28 May 2018 20:51:20 +0200 shelve: check the actual shelvestate in morestatus
Boris Feld <boris.feld@octobus.net> [Mon, 28 May 2018 20:51:20 +0200] rev 38465
shelve: check the actual shelvestate in morestatus The rebasestate is a lower level implementation details that we are trying to remove. Differential Revision: https://phab.mercurial-scm.org/D3687
Sat, 12 May 2018 18:44:03 -0700 packaging: dynamically define make targets
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 18:44:03 -0700] rev 38464
packaging: dynamically define make targets We currently have make boilerplate for each instance of a distro's release. This is redundant, annoying to maintain, and prone to errors. This commit defines variables holding available releases for various distros. We then iterate through the list and dynamically define make targets. Differential Revision: https://phab.mercurial-scm.org/D3761
Sat, 12 May 2018 14:41:48 -0700 packaging: don't write files for templatized Dockerfiles
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 14:41:48 -0700] rev 38463
packaging: don't write files for templatized Dockerfiles Now that Docker image building is implemented in Python and we can perform template substitution in memory, we don't need to write out produced Dockerfiles to disk. Differential Revision: https://phab.mercurial-scm.org/D3760
Sat, 12 May 2018 17:03:47 -0700 packaging: replace dockerlib.sh with a Python script
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 17:03:47 -0700] rev 38462
packaging: replace dockerlib.sh with a Python script I want to do some more advanced things with Docker in upcoming commits. Trying to do that with shell scripts will be a bit too painful for my liking. Implementing things in Python will be vastly simpler in the long run. This commit essentially ports dockerlib.sh to a Python script. dockerdeb and dockerrpm have been ported to use the new hg-docker script. hg-docker requires Python 3. I've only tested on Python 3.5. Unlike the local packaging scripts which may need to run on old distros, the Docker packaging scripts don't have these constraints. So I think it is acceptable to require Python 3.5. As part of the transition, the Docker image tags changed slightly. I don't think that's a big deal: the Docker image names are effectively arbitrary and are a means to an end to achieve running commands in Docker containers. The code for resolving the Dockerfile content allows substituting values passed as arguments. This will be used in a subsequent commit. Differential Revision: https://phab.mercurial-scm.org/D3759
Sat, 12 May 2018 15:51:37 -0700 packaging: consistently create build user in Dockerfiles
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 12 May 2018 15:51:37 -0700] rev 38461
packaging: consistently create build user in Dockerfiles Previously, dockerlib.sh appended some commands to create a "build" user in each Docker image. The resulting Docker images could be inconsistent depending on the execution environment and base image. With this change, we explicitly create our custom user and group as the first action in each Dockerfile. The user always has user:group 1000:1000 and all built images are consistent. We also create a home directory for the user under /build. This directory is currently ignored. As part of this, we stop setting the DBUILDUSER variable in dockerlib.sh and instead set it in the respective scripts that call it. This is in preparation for further refactoring of dockerlib.sh. Differential Revision: https://phab.mercurial-scm.org/D3758
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 +10000 tip