Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Fri, 01 Apr 2022 12:46:58 -0400] rev 48998
dispatch: fix silly blackbox entries when hg is interrupted
When hg is interrupted, it creates ui.log like this:
1970/01/01 00:00:00 user @0000000000000000000000000000000000000000 (62488)> killed!
exited 255 after 1.78 seconds
This is due to a scoping problem: two different uses of the name "msg"
collide. So rename one of them.
Differential Revision: https://phab.mercurial-scm.org/D12427
Matt Harbison <matt_harbison@yahoo.com> [Wed, 30 Mar 2022 00:57:08 -0400] rev 48997
tests: stop excluding the pycompat module from pyflakes
I assume this was skipped because of all of the py2 stuff causing a lot of spew.
The "unused" imports are left in place in case any 3rd party stuff is using it.
I don't care about most of it, but TortoiseHg uses `io` and `queue`, so
minimally I'd like to keep those.
Differential Revision: https://phab.mercurial-scm.org/D12423
Matt Harbison <matt_harbison@yahoo.com> [Wed, 30 Mar 2022 00:44:55 -0400] rev 48996
tests: drop some py2 specific pyflake failures
Differential Revision: https://phab.mercurial-scm.org/D12422
Matt Harbison <matt_harbison@yahoo.com> [Tue, 29 Mar 2022 23:31:37 -0400] rev 48995
util: drop a duplicate import
This was already imported several lines above.
Differential Revision: https://phab.mercurial-scm.org/D12421
Matt Harbison <matt_harbison@yahoo.com> [Tue, 29 Mar 2022 23:34:18 -0400] rev 48994
pycompat: drop the pickle import
I suspect this is what df56e6bd37f6 meant to eliminate.
Differential Revision: https://phab.mercurial-scm.org/D12420
Matt Harbison <matt_harbison@yahoo.com> [Tue, 29 Mar 2022 22:22:36 -0400] rev 48993
util: restore the util.pickle symbol
This was accidently dropped in df56e6bd37f6, which started importing pickle
directly. That commit explicitly says it will retain it for compatibility with
external stuff though.
The unused import in pycompat isn't flagged because that module is skipped.
Just importing with a comment seemed cleaner than `import X as Y` and then
assigning to a `pickle` variable, just to avoid the pyflakes warning.
Differential Revision: https://phab.mercurial-scm.org/D12419
Raphaël Gomès <rgomes@octobus.net> [Tue, 29 Mar 2022 14:27:45 +0200] rev 48992
merge: stable into default
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 23 Jul 2021 13:42:12 +0530] rev 48991
precheck: fix false warning about content-divergence creation
Before this patch, if we try to `hg prune` (without any successors) an
already obsoleted cset which has at least one successor, it would false
warn about new content-divergence. As we know, pruning cset without any
successors can not create any divergence.
Differential Revision: https://phab.mercurial-scm.org/D12002
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Thu, 24 Mar 2022 12:27:21 -0400] rev 48990
streamclone: avoid some obscure error in a corner case
I don't really know how, but I ran into this error:
$ hg clone --stream ssh://user@dummy/empty-repo local-empty-repo
streaming all changes
abort: unable to apply stream clone: unsupported format:
[255]
I think you need an empty list of requirements for this to happen,
which is weird, but an obscure error like this is not exactly helpful
either. Since this is the result of an encoding bug anyway, just fix
it.
Differential Revision: https://phab.mercurial-scm.org/D12402
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Mar 2022 18:15:49 +0900] rev 48989
tags: fix typo in fast path detection of fnode resolution (issue6673)
If I understand it, mctx.readfast() is unreliable here if p1/p2 .hgtags
nodes differ, and tags on that branch would be randomly discarded
depending on which parent were picked.
The test case added by this patch would fail only on zstd-compressed
repository. I didn't try hard to stabilize the failure case.
Matthew Martin <phy1729@gmail.com> [Thu, 24 Mar 2022 21:26:45 -0500] rev 48988
completion: install completers to conventional locations
Installs the bash and zsh completers to the convential locations so they will
automatically be picked up without user intervention. The zsh completer
on Debian is still installed to vendor-completions to match their policy.
bash: https://github.com/scop/bash-completion#faq
zsh: https://github.com/zsh-users/zsh/blob/57305cf245853b8b30895b41a90142dffab97e38/INSTALL#L254
Debian zsh: https://salsa.debian.org/debian/zsh/-/blob/5086b5356abcef8849dc8a09902b7c55f01db3c0/debian/README.Debian#L73
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 17:24:41 +0200] rev 48987
dirstate-cext: properly invalidate mtime and data in `set_untracked`
This was forgotten about in the initial implementation and was revealed while
adding the `dirstate-v2` variant of `test-issue660.t`. Neither the existing
Python implementation nor the upcoming Rust implementation suffer from this
bug since they respectively have `None` and `Option<T>` to represent the lack
of information.
Differential Revision: https://phab.mercurial-scm.org/D12414
Matt Harbison <matt_harbison@yahoo.com> [Wed, 23 Mar 2022 13:51:40 -0400] rev 48986
pytype: disable a few errors about Windows specific module attributes
These were flagged by pytype 2022.03.21.
Differential Revision: https://phab.mercurial-scm.org/D12401
Raphaël Gomès <rgomes@octobus.net> [Sat, 19 Mar 2022 15:44:38 +0100] rev 48985
rhg: sort unsupported extensions in error message
This caused some flakiness in test output, and is also just better for users.
Differential Revision: https://phab.mercurial-scm.org/D12389
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 13 Mar 2022 15:48:18 +0100] rev 48984
hgignore: ignore .testtimes in more location
See the inline comment.
Differential Revision: https://phab.mercurial-scm.org/D12393
Augie Fackler <augie@google.com> [Fri, 25 Mar 2022 11:33:12 -0400] rev 48983
merge: with stable
Martin von Zweigbergk <martinvonz@google.com> [Thu, 17 Mar 2022 11:19:06 -0700] rev 48982
partial-merge: add support for `.args` config (`$local` etc.)
It will be useful to be able to define custom command-line arguments
per partial merge tool just like we have for regular merge tools. In
particular, I expect the same binary to handle multiple languages, so
it will be useful to be able to pass some argument indicating the
language, or perhaps simply an argument defining a regex that's used
for finding lines to merge as a sorted set.
Differential Revision: https://phab.mercurial-scm.org/D12383
Martin von Zweigbergk <martinvonz@google.com> [Tue, 18 Jan 2022 13:05:21 -0800] rev 48981
filemerge: add support for partial conflict resolution by external tool
A common class of merge conflicts is in imports/#includes/etc. It's
relatively easy to write a tool that can resolve these conflicts,
perhaps by naively just unioning the statements and leaving any
cleanup to other tools to do later [1]. Such specialized tools cannot
generally resolve all conflicts in a file, of course. Let's therefore
call them "partial merge tools". Note that the internal simplemerge
algorithm is such a partial merge tool - one that only resolves
trivial "conflicts" where one side is unchanged or both sides change
in the same way.
One can also imagine having smarter language-aware partial tools that
merge the AST. It may be useful for such tools to interactively let
the user resolve any conflicts it can't resolve itself. However,
having the option of implementing it as a partial merge tool means
that the developer doesn't *need* to create a UI for it. Instead, the
user can resolve any remaining conflicts with their regular merge tool
(e.g. `:merge3` or `meld).
We don't currently have a way to let the user define such partial
merge tools. That's what this patch addresses. It lets the user
configure partial merge tools to run. Each tool can be configured to
run only on files matching certain patterns (e.g. "*.py"). The tool
takes three inputs (local, base, other) and resolves conflicts by
updating these in place. For example, let's say the inputs are these:
base:
```
import sys
def main():
print('Hello')
```
local:
```
import os
import sys
def main():
print('Hi')
```
other:
```
import re
import sys
def main():
print('Howdy')
```
A partial merge tool could now resolve the conflicting imports by
replacing the import statements in *all* files by the following
snippet, while leaving the remainder of the files unchanged.
```
import os
import re
import sys
```
As a result, simplemerge and any regular merge tool that runs after
the partial merge tool(s) will consider the imports to be
non-conflicting and will only present the conflict in `main()` to the
user.
Differential Revision: https://phab.mercurial-scm.org/D12356
Joerg Sonnenberger <joerg@bec.de> [Tue, 22 Mar 2022 03:19:01 +0100] rev 48980
pullbundle: fix file name in the help text
It is pullbundles.manifest and not pullbundle.manifest.
Differential Revision: https://phab.mercurial-scm.org/D12391
Martin von Zweigbergk <martinvonz@google.com> [Mon, 21 Mar 2022 14:21:10 -0700] rev 48979
unamend: abort if commit was not created by `hg [un]amend`
`hg unamend` can currently undo any kind of rewrite, as long as it has
an obsmarker. However, that has quite unexpected results if you run it
after e.g. `hg rebase` (expecting it to behave like a generic `hg
undo` command), because it updates to the predecessor and leaves the
old changes in the working copy. I think it's better to allow `hg
unamend` only after `hg amend` (and after `hg unamend` because that's
documented as being supported).
Differential Revision: https://phab.mercurial-scm.org/D12390
Raphaël Gomès <rgomes@octobus.net> [Mon, 21 Mar 2022 10:55:50 +0100] rev 48978
branching: merge stable into default
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Mar 2022 14:58:46 +0100] rev 48977
test: use `wait-on-file` in `test-racy-mutations.t`
The official utility scale its timeout with the run-tests.py one. So lets use
it.
Differential Revision: https://phab.mercurial-scm.org/D12382
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Mar 2022 21:15:54 -0700] rev 48976
amend: fix amend with copies in extras
If copy information is stored only in the commit extras and not in
filelogs, then they get lost on amend if the file wasn't also modified
in the working copy. That's because we create `filectx` object from
the old commit in those cases, and the `.copysource()` of such objects
read only from the filelog. This patch fixes it by always creating a
new `memfilectx` in these cases, passing the calculated copy
information to it.
Differential Revision: https://phab.mercurial-scm.org/D12387
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Mar 2022 21:37:22 -0700] rev 48975
tests: demonstrate that copy info in changeset gets lost on amend
When copy information is stored in changesets, it gets lost on
amend. We didn't notice that until now because our users at Google
have the config set to `compatibility`, which means copy information
is stored in both changeset and filelogs.
Differential Revision: https://phab.mercurial-scm.org/D12386
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 18 Mar 2022 18:09:46 +0100] rev 48974
ci: use the `v1.0` flavor of the docker images in the CI
This new versioning will help us to maintain backward compatibility in the
docker image. This will be useful to deal with mismatch between default/stable
in version and the re-run CI on older changesets in the future.
Once this changeset land on stable, we will have to merge it in default. Then
we can start make backward incompatible changes in a new image version.
Differential Revision: https://phab.mercurial-scm.org/D12388
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Mar 2022 16:15:44 +0100] rev 48973
rust-status: cap the number of concurrent threads to 16
During benchmarking it was determined that the use of more threads is very
advantageous... until we use more than 16. This is most likely due to some
resource contention (thrashing, etc.). Until we have time to figure out and
fix the underlying cause, let's just cap at 16 threads.
Differential Revision: https://phab.mercurial-scm.org/D12384
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Mar 2022 17:39:06 +0100] rev 48972
rhg: add support for ignoring all extensions
Some workflows just want what `rhg` does and don't care about any extensions,
this makes it easier.
Differential Revision: https://phab.mercurial-scm.org/D12385
Raphaël Gomès <rgomes@octobus.net> [Thu, 17 Mar 2022 12:27:40 +0100] rev 48971
branching: merge stable into default
Julien Cristau <jcristau@debian.org> [Tue, 15 Mar 2022 10:36:28 +0100] rev 48970
revlog: fix index_fast_rank (wip)
As far as I can tell, rank is stored as a 32-bit big endian value, I'm
not sure how grabbing the first byte can possibly work. I assume
there's no test coverage here?
cc @pacien
Fixes: https://www.mercurial-scm.org/repo/hg/rev/e633e660158f
Differential Revision: https://phab.mercurial-scm.org/D12376
pacien <pacien.trangirard@pacien.net> [Thu, 17 Mar 2022 11:00:05 +0100] rev 48969
tests: fix glob pattern for dynamic timer alignment
The number of space characters varies depending on the number of digits of the
timer, making some tests fail on slow machines in an unintended way:
```diff
--- /build/mercurial-6.1/tests/test-merge-halt.t
+++ /build/mercurial-6.1/tests/test-merge-halt.t.err
@@ -210,6 +210,6 @@
merge halted after failed merge (see hg resolve)
[240]
$ hg shelve --list
- default (* ago) changes to: foo (glob)
+ default (11s ago) changes to: foo
$ hg unshelve --abort
unshelve of 'default' aborted
ERROR: test-merge-halt.t output changed
```
Differential Revision: https://phab.mercurial-scm.org/D12381
Julien Cristau <jcristau@debian.org> [Tue, 15 Mar 2022 14:45:47 +0100] rev 48968
test: update test-clone-stream.t to pass on bigendian
Fixes: a3cf460a6b1b ("stream-clone: also filter the requirement we put in the bundle 2")
Differential Revision: https://phab.mercurial-scm.org/D12377
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Mar 2022 13:31:39 -0700] rev 48967
filemerge: when merge tool uses $output, don't leave markers in $local
As explained in the previous patch, we incorrectly leave conflict
markers in both `$local` and `$output` since D12190. I don't
understand why it broke but the fix is simple and clear after all the
recent refactoring.
Differential Revision: https://phab.mercurial-scm.org/D12379
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Mar 2022 13:40:45 -0700] rev 48966
tests: demonstrate how conflict markers end up $local *and* $output
When a merge tool is configured to keep conflict markers, they are
supposed to be written to `$local` if `$output` is not mentioned in
the tool's `merge-tools.<tool>.args` config, and in `$output` if it is
mentioned. However, I broke the latter case in D12190.
Differential Revision: https://phab.mercurial-scm.org/D12378
Raphaël Gomès <rgomes@octobus.net> [Tue, 15 Mar 2022 09:26:26 +0100] rev 48965
branching: merge stable into default
Julien Cristau <jcristau@debian.org> [Mon, 14 Mar 2022 17:57:03 +0100] rev 48964
revlog: fix wrong type of rank_unknown variable
We treat "rank" as an int everywhere, but declare rank_unknown as a
char. On architectures where char is signed, that works out ok, but
when char is unsigned, rank_unknown is 255 instead of -1.
Differential Revision: https://phab.mercurial-scm.org/D12374
Kyle Lippincott <spectral@google.com> [Mon, 14 Mar 2022 12:24:34 -0700] rev 48963
tests: fix formatting issue in run-tests.py after c194e93d1ebc
Differential Revision: https://phab.mercurial-scm.org/D12375
Luke Granger-Brown <hg@lukegb.com> [Mon, 14 Mar 2022 14:10:41 +0000] rev 48962
rust-hg-core: use correct type for libc hostname buffer
The type of libc::c_char is u8 on aarch64 rather than i8, which causes
the use of a specifically-typed constant to fail.
Differential Revision: https://phab.mercurial-scm.org/D12373
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 09 Mar 2022 15:41:39 -0800] rev 48961
import-checker: allow symbol imports from typing module
As we add typing annotations, we'll want to use a lot of symbols from
the `typing` module. Typing `typing` all the time will be annoying. Let's
allow symbol imports from this module.
While I was here, I changed some comments from "whitelist" to "allow list"
as the former is non-inclusive terminology.
Differential Revision: https://phab.mercurial-scm.org/D12365
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 08 Mar 2022 19:11:03 -0800] rev 48960
pycompat: remove json.loads polyfill for Python 3.5
We no longer support Python 3.5 so this can be deleted.
Differential Revision: https://phab.mercurial-scm.org/D12364
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 08 Mar 2022 19:10:19 -0800] rev 48959
pycompat: remove check for Python >= 3.6
We dropped support for Python 3.5 so this is always true.
Differential Revision: https://phab.mercurial-scm.org/D12363
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 08 Mar 2022 19:09:35 -0800] rev 48958
hgdemandimport: delete check for Python 3.5
We dropped support for Python 3.5. So we no longer need to do this.
Differential Revision: https://phab.mercurial-scm.org/D12362
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 08 Mar 2022 19:08:35 -0800] rev 48957
hg: always import hgdemandimport
The deleted if condition is always true now that we dropped Python 2
and 3.5.
Differential Revision: https://phab.mercurial-scm.org/D12361
Kyle Lippincott <spectral@google.com> [Wed, 09 Mar 2022 21:26:58 -0800] rev 48956
tests: support another error case when detecting ipv4/ipv6 support
I encountered this on Linux in a VM environment with a rather strange networking
setup (both on the host and in the VM).
Differential Revision: https://phab.mercurial-scm.org/D12371
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Mar 2022 16:44:48 +0100] rev 48955
debugdiscovery: fix a typo in the help
Differential Revision: https://phab.mercurial-scm.org/D12372
Raphaël Gomès <rgomes@octobus.net> [Wed, 09 Mar 2022 11:28:51 +0100] rev 48954
rust-hg-cypython: upgrade dependencies
This upgrades all dependencies to their latest version. This is routinely done
to keep-up.
Differential Revision: https://phab.mercurial-scm.org/D12359
Raphaël Gomès <rgomes@octobus.net> [Wed, 09 Mar 2022 11:22:22 +0100] rev 48953
rust-hg-core: upgrade dependencies
This upgrades all dependencies to their latest version, except `clap` and `zstd`
whose latest versions do not support our minimum supported Rust version 1.48.0.
Same as for `rhg`, it contains security fix for `regex` which does not affect
us too much, but doesn't hurt, and the rest of the upgrades are there simply
to keep up.
Differential Revision: https://phab.mercurial-scm.org/D12358
Raphaël Gomès <rgomes@octobus.net> [Wed, 09 Mar 2022 11:17:09 +0100] rev 48952
rhg: upgrade dependencies
This upgrades all dependencies to their latest version, except `clap`, which
is upgraded to the last 2.x series version, since 3.x does not support our
minimum supported Rust version of 1.48.0.
This contains a security fix for `regex` which does not affect us too much, but
doesn't hurt, and the rest of the upgrades are there simply to keep up.
Differential Revision: https://phab.mercurial-scm.org/D12357
Yuya Nishihara <yuya@tcha.org> [Fri, 04 Mar 2022 10:28:46 +0900] rev 48951
chgserver: remove Python 2 file descriptor logic
Follows up 0bb28b7736bc "chgserver: remove Python 2 support code."
On Python 2, we had to close newfp prior to restoring the original file
description since "delete newfp" would otherwise close the file descriptor
shared with the long-lived fp:
in attachio():
newfp = os.fdopen(fp.fileno(), mode, bufsize)
in _restoreio():
newfp.close() # temporarily close newfp.fileno() (= fp.fileno())
os.dup2(fd, fp.fileno()) # reopen fp.fileno() with original fd
On the other hand, we shouldn't call newfp.close() on Python 3 since
any function calls are proxied to the underlying file object by
procutil.LineBufferedWrapper.
Simon Sapin <simon.sapin@octobus.net> [Tue, 08 Feb 2022 15:51:52 +0100] rev 48950
dirstate-tree: optimize HashMap lookups with raw_entry_mut
This switches to using `HashMap` from the hashbrown crate,
in order to use its `raw_entry_mut` method.
The standard library’s `HashMap` is also based on this same crate,
but `raw_entry_mut` is not yet stable there:
https://github.com/rust-lang/rust/issues/56167
Using version 0.9 because 0.10 is yanked and 0.11 requires Rust 1.49
This replaces in `DirstateMap::get_or_insert_node` a call to
`HashMap<K, V>::entry` with `K = WithBasename<Cow<'on_disk, HgPath>>`.
`entry` takes and consumes an "owned" `key: K` parameter, in case a new entry
ends up inserted. This key is converted by `to_cow` from a value that borrows
the `'path` lifetime.
When this function is called by `Dirstate::new_v1`, `'path` is in fact
the same as `'on_disk` so `to_cow` can return an owned key that contains
`Cow::Borrowed`.
For other callers, `to_cow` needs to create a `Cow::Owned` and thus make
a costly heap memory allocation. This is wasteful if this key was already
present in the map. Even when inserting a new node this is typically the case
for its ancestor nodes (assuming most directories have numerous descendants).
Differential Revision: https://phab.mercurial-scm.org/D12317
Raphaël Gomès <rgomes@octobus.net> [Fri, 04 Mar 2022 13:33:55 +0100] rev 48949
heptapod-ci: remove useless mentions of Python 3
Now that we don't have Python 2 jobs, we can go with shorter names.
Differential Revision: https://phab.mercurial-scm.org/D12354
Martin von Zweigbergk <martinvonz@google.com> [Fri, 04 Mar 2022 13:01:13 -0800] rev 48948
revlog: remove unused `rank` variable from D12209
Differential Revision: https://phab.mercurial-scm.org/D12355
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 13:10:22 -0700] rev 48947
demandimport: delete demandimportpy2 module
We no longer support Python 2.
Differential Revision: https://phab.mercurial-scm.org/D12353
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 13:08:28 -0700] rev 48946
py3: use class X: instead of class X(object):
The inheritance from object is implied in Python 3. So this should
be equivalent.
This change was generated via an automated search and replace. So there
may have been some accidental changes.
Differential Revision: https://phab.mercurial-scm.org/D12352
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 13:03:43 -0700] rev 48945
check-code: remove ban on old-style classes
In Python 3, `class foo:` is equivalent to `class foo(object):`. So
we can allow the former form now.
Differential Revision: https://phab.mercurial-scm.org/D12351
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 12:46:27 -0700] rev 48944
tests: remove Python 2 support code
Differential Revision: https://phab.mercurial-scm.org/D12350
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 12:44:41 -0700] rev 48943
tests: remove Python < 3 check
We require Python 3 now.
Differential Revision: https://phab.mercurial-scm.org/D12349
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 01 Mar 2022 20:53:52 -0800] rev 48942
cborutil: remove Python 2 definition of _elementtointeger()
Differential Revision: https://phab.mercurial-scm.org/D12348
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 12:42:48 -0700] rev 48941
py3: stop using util.iterfile()
The Python 3 implementation is a no-op. So this is equivalent.
We still keep util.iterfile() around for backwards API compatibility to
help the Python 3 migration. It can be deleted in a future release.
Differential Revision: https://phab.mercurial-scm.org/D12347
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 03 Mar 2022 07:56:47 -0800] rev 48940
util: remove iterfile() variant for buggy EINTR handling
The workaround for Python 2 is no longer needed. So we can delete some
code.
Differential Revision: https://phab.mercurial-scm.org/D12346
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 21 Feb 2022 12:36:57 -0700] rev 48939
statprof: remove superfluous sys.version_info check
Always true since we require Python 3 now.
Differential Revision: https://phab.mercurial-scm.org/D12345