# HG changeset patch # User Raphaël Gomès # Date 1681461700 -7200 # Node ID 771294224bf6df01603766ac0624dc41ae304744 # Parent 59fda8516774ee9e47d2a88e5b6c9f42ab611b1c# Parent ae9a152673156c7b449bdb295577a9c7ed68076b branching: merge stable into default diff -r 59fda8516774 -r 771294224bf6 .hgsigs --- a/.hgsigs Wed Apr 12 00:57:01 2023 +0200 +++ b/.hgsigs Fri Apr 14 10:41:40 2023 +0200 @@ -241,3 +241,4 @@ 8830004967ad865ead89c28a410405a6e71e0796 0 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 diff -r 59fda8516774 -r 771294224bf6 .hgtags --- a/.hgtags Wed Apr 12 00:57:01 2023 +0200 +++ b/.hgtags Fri Apr 14 10:41:40 2023 +0200 @@ -257,3 +257,4 @@ 8830004967ad865ead89c28a410405a6e71e0796 6.3.3 05de4896508e8ec387b33eb30d8aab78d1c8e9e4 6.4rc0 f14864fffdcab725d9eac6d4f4c07be05a35f59a 6.4 +83ea6ce48b4fd09fb79c4e34cc5750c805699a53 6.4.1 diff -r 59fda8516774 -r 771294224bf6 contrib/chg/chg.c --- a/contrib/chg/chg.c Wed Apr 12 00:57:01 2023 +0200 +++ b/contrib/chg/chg.c Fri Apr 14 10:41:40 2023 +0200 @@ -232,12 +232,17 @@ hgcmd = "hg"; #endif } + /* Set $CHGHG to the path to the seleted hg executable if it wasn't + * already set. This has the effect of ensuring that a new command + * server will be spawned if the existing command server is running from + * an executable at a different path. */ + if (setenv("CHGHG", hgcmd, 1) != 0) + abortmsgerrno("failed to setenv"); return hgcmd; } -static void execcmdserver(const struct cmdserveropts *opts) +static void execcmdserver(const char *hgcmd, const struct cmdserveropts *opts) { - const char *hgcmd = gethgcmd(); const char *baseargv[] = { hgcmd, "serve", "--no-profile", "--cmdserver", @@ -375,11 +380,16 @@ debugmsg("start cmdserver at %s", opts->initsockname); + /* Get the path to the hg executable before we fork because this + * function might update the environment, and we want this to be + * reflected in both the parent and child processes. */ + const char *hgcmd = gethgcmd(); + pid_t pid = fork(); if (pid < 0) abortmsg("failed to fork cmdserver process"); if (pid == 0) { - execcmdserver(opts); + execcmdserver(hgcmd, opts); } else { hgc = retryconnectcmdserver(opts, pid); } @@ -484,7 +494,7 @@ abortmsgerrno("failed to exec original hg"); } -int main(int argc, const char *argv[], const char *envp[]) +int main(int argc, const char *argv[]) { if (getenv("CHGDEBUG")) enabledebugmsg(); @@ -519,7 +529,10 @@ hgc = connectcmdserver(&opts); if (!hgc) abortmsg("cannot open hg client"); - hgc_setenv(hgc, envp); + /* Use `environ(7)` instead of the optional `envp` argument to + * `main` because `envp` does not update when the environment + * changes, but `environ` does. */ + hgc_setenv(hgc, (const char *const *)environ); const char **insts = hgc_validate(hgc, argv + 1, argc - 1); int needreconnect = runinstructions(&opts, insts); free(insts); diff -r 59fda8516774 -r 771294224bf6 hgext/rebase.py --- a/hgext/rebase.py Wed Apr 12 00:57:01 2023 +0200 +++ b/hgext/rebase.py Fri Apr 14 10:41:40 2023 +0200 @@ -844,6 +844,7 @@ cleanup = False if cleanup: + if rebased: strippoints = [ c.node() for c in repo.set(b'roots(%ld)', rebased) @@ -852,13 +853,17 @@ updateifonnodes = set(rebased) updateifonnodes.update(self.destmap.values()) - if not dryrun and not confirm: + if not confirm: + # note: when dry run is set the `rebased` and `destmap` + # variables seem to contain "bad" contents, so do not + # rely on them. As dryrun does not need this part of + # the cleanup, this is "fine" updateifonnodes.add(self.originalwd) shouldupdate = repo[b'.'].rev() in updateifonnodes # Update away from the rebase if necessary - if shouldupdate: + if not dryrun and shouldupdate: mergemod.clean_update(repo[self.originalwd]) # Strip from the first rebased revision diff -r 59fda8516774 -r 771294224bf6 i18n/ja.po --- a/i18n/ja.po Wed Apr 12 00:57:01 2023 +0200 +++ b/i18n/ja.po Fri Apr 14 10:41:40 2023 +0200 @@ -37064,8 +37064,8 @@ msgstr "利用中の Python では TLS 1.2 が未サポートです" #, python-format -msgid "invalid value for serverexactprotocol: %s" -msgstr "不正な serverexactprotocol 指定値: %s" +msgid "invalid value for server-insecure-exact-protocol: %s" +msgstr "不正な server-insecure-exact-protocol 指定値: %s" #, python-format msgid "too many wildcards in certificate DNS name: %s" diff -r 59fda8516774 -r 771294224bf6 i18n/pt_BR.po --- a/i18n/pt_BR.po Wed Apr 12 00:57:01 2023 +0200 +++ b/i18n/pt_BR.po Fri Apr 14 10:41:40 2023 +0200 @@ -38342,8 +38342,8 @@ msgstr "TLS 1.2 não é suportado por esta versão do Python" #, python-format -msgid "invalid value for serverexactprotocol: %s" -msgstr "valor inválido para serverexactprotocol: %s" +msgid "invalid value for server-insecure-exact-protocol: %s" +msgstr "valor inválido para server-insecure-exact-protocol: %s" #, python-format msgid "too many wildcards in certificate DNS name: %s" diff -r 59fda8516774 -r 771294224bf6 mercurial/commands.py --- a/mercurial/commands.py Wed Apr 12 00:57:01 2023 +0200 +++ b/mercurial/commands.py Fri Apr 14 10:41:40 2023 +0200 @@ -6609,7 +6609,7 @@ ), (b't', b'templates', b'', _(b'web templates to use'), _(b'TEMPLATE')), (b'', b'style', b'', _(b'template style to use'), _(b'STYLE')), - (b'6', b'ipv6', None, _(b'use IPv6 in addition to IPv4')), + (b'6', b'ipv6', None, _(b'use IPv6 instead of IPv4')), (b'', b'certificate', b'', _(b'SSL certificate file'), _(b'FILE')), (b'', b'print-url', None, _(b'start and print only the URL')), ] diff -r 59fda8516774 -r 771294224bf6 mercurial/configitems.py --- a/mercurial/configitems.py Wed Apr 12 00:57:01 2023 +0200 +++ b/mercurial/configitems.py Fri Apr 14 10:41:40 2023 +0200 @@ -688,9 +688,11 @@ b'servercafile', default=b'', ) +# This config option is intended for use in tests only. It is a giant +# footgun to kill security. Don't define it. coreconfigitem( b'devel', - b'serverexactprotocol', + b'server-insecure-exact-protocol', default=b'', ) coreconfigitem( diff -r 59fda8516774 -r 771294224bf6 mercurial/error.py --- a/mercurial/error.py Wed Apr 12 00:57:01 2023 +0200 +++ b/mercurial/error.py Fri Apr 14 10:41:40 2023 +0200 @@ -155,7 +155,7 @@ """Exception raised on errors in parsing the command line.""" def __init__(self, command, message): - # type: (bytes, bytes) -> None + # type: (Optional[bytes], bytes) -> None self.command = command self.message = message super(CommandError, self).__init__() diff -r 59fda8516774 -r 771294224bf6 mercurial/match.py --- a/mercurial/match.py Wed Apr 12 00:57:01 2023 +0200 +++ b/mercurial/match.py Fri Apr 14 10:41:40 2023 +0200 @@ -197,7 +197,7 @@ Usually a patternmatcher is returned: >>> _match(b'/foo', b'.', [br're:.*\.c$', b'path:foo/a', b'*.py']) - + Combining 'patterns' with 'include' (resp. 'exclude') gives an intersectionmatcher (resp. a differencematcher): @@ -614,7 +614,7 @@ True >>> m.files() - ['', 'foo/a', 'b', ''] + [b'', b'foo/a', b'', b'b'] >>> m.exact(b'foo/a') True >>> m.exact(b'b') @@ -625,10 +625,16 @@ def __init__(self, root, kindpats, badfn=None): super(patternmatcher, self).__init__(badfn) + kindpats.sort() self._files = _explicitfiles(kindpats) self._prefix = _prefix(kindpats) - self._pats, self.matchfn = _buildmatch(kindpats, b'$', root) + self._pats, self._matchfn = _buildmatch(kindpats, b'$', root) + + def matchfn(self, fn): + if fn in self._fileset: + return True + return self._matchfn(fn) @propertycache def _dirs(self): diff -r 59fda8516774 -r 771294224bf6 mercurial/sslutil.py --- a/mercurial/sslutil.py Wed Apr 12 00:57:01 2023 +0200 +++ b/mercurial/sslutil.py Fri Apr 14 10:41:40 2023 +0200 @@ -122,7 +122,7 @@ if ui.insecureconnections: minimumprotocol = b'tls1.0' if not ciphers: - ciphers = b'DEFAULT' + ciphers = b'DEFAULT:@SECLEVEL=0' s[b'minimumprotocol'] = minimumprotocol s[b'ciphers'] = ciphers @@ -553,7 +553,7 @@ # This config option is intended for use in tests only. It is a giant # footgun to kill security. Don't define it. - exactprotocol = ui.config(b'devel', b'serverexactprotocol') + exactprotocol = ui.config(b'devel', b'server-insecure-exact-protocol') if exactprotocol == b'tls1.0': if b'tls1.0' not in supportedprotocols: raise error.Abort(_(b'TLS 1.0 not supported by this Python')) @@ -583,7 +583,8 @@ sslcontext.maximum_version = ssl.TLSVersion.TLSv1_2 elif exactprotocol: raise error.Abort( - _(b'invalid value for serverexactprotocol: %s') % exactprotocol + _(b'invalid value for server-insecure-exact-protocol: %s') + % exactprotocol ) else: # Despite its name, PROTOCOL_SSLv23 selects the highest protocol that both @@ -594,7 +595,7 @@ # This config option is intended for use in tests only. It is a giant # footgun to kill security. Don't define it. - exactprotocol = ui.config(b'devel', b'serverexactprotocol') + exactprotocol = ui.config(b'devel', b'server-insecure-exact-protocol') if exactprotocol == b'tls1.0': if b'tls1.0' not in supportedprotocols: raise error.Abort(_(b'TLS 1.0 not supported by this Python')) @@ -609,7 +610,8 @@ protocol = ssl.PROTOCOL_TLSv1_2 elif exactprotocol: raise error.Abort( - _(b'invalid value for serverexactprotocol: %s') % exactprotocol + _(b'invalid value for server-insecure-exact-protocol: %s') + % exactprotocol ) # We /could/ use create_default_context() here since it doesn't load @@ -625,7 +627,7 @@ # In tests, allow insecure ciphers # Otherwise, use the list of more secure ciphers if found in the ssl module. if exactprotocol: - sslcontext.set_ciphers('DEFAULT') + sslcontext.set_ciphers('DEFAULT:@SECLEVEL=0') elif util.safehasattr(ssl, b'_RESTRICTED_SERVER_CIPHERS'): sslcontext.options |= getattr(ssl, 'OP_CIPHER_SERVER_PREFERENCE', 0) # pytype: disable=module-attr diff -r 59fda8516774 -r 771294224bf6 relnotes/6.4 --- a/relnotes/6.4 Wed Apr 12 00:57:01 2023 +0200 +++ b/relnotes/6.4 Fri Apr 14 10:41:40 2023 +0200 @@ -1,3 +1,16 @@ += Mercurial 6.4.1 = + + * rhg: fix a bug in path encoding + * rhg: don't crash on empty directory names in path_encode, just in case + * commands: correct documentation of hg serve’s --ipv6 options + * run-tests: remove obsolete coverage check and packaging import (issue6805) + * chg: populate CHGHG if not set + * match: sort patterns before compiling them into a regex + * match: match explicit file using a set + * rebase: do not cleanup the working copy when --dry-run is used (issue6802) + * sslutil: set context security level for legacy tls testing (issue6760) + + = Mercurial 6.4 = == New Features == diff -r 59fda8516774 -r 771294224bf6 rust/hg-core/src/revlog/path_encode.rs --- a/rust/hg-core/src/revlog/path_encode.rs Wed Apr 12 00:57:01 2023 +0200 +++ b/rust/hg-core/src/revlog/path_encode.rs Fri Apr 14 10:41:40 2023 +0200 @@ -545,9 +545,15 @@ let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)]; if dest.len() + slice.len() > maxshortdirslen + 3 { break; - } else { - dest.write_bytes(slice); } + if let Some(last_char) = slice.last() { + if *last_char == b'.' || *last_char == b' ' { + dest.write_bytes(&slice[0..slice.len() - 1]); + dest.write_byte(b'_'); + } else { + dest.write_bytes(slice); + } + }; dest.write_byte(b'/'); } } @@ -610,6 +616,17 @@ use crate::utils::hg_path::HgPathBuf; #[test] + fn test_dirname_ends_with_underscore() { + let input = b"data/dir1234.foo/ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ.i"; + let expected = b"dh/dir1234_/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij.if2e9ce59e095eff5f8f334dc809e65606a0aa50b.i"; + let res = path_encode(input); + assert_eq!( + HgPathBuf::from_bytes(&res), + HgPathBuf::from_bytes(expected) + ); + } + + #[test] fn test_long_filename_at_root() { let input = b"data/ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ.i"; let expected = b"dh/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij.i708243a2237a7afae259ea3545a72a2ef11c247b.i"; diff -r 59fda8516774 -r 771294224bf6 tests/run-tests.py --- a/tests/run-tests.py Wed Apr 12 00:57:01 2023 +0200 +++ b/tests/run-tests.py Fri Apr 14 10:41:40 2023 +0200 @@ -54,7 +54,6 @@ import json import multiprocessing import os -import packaging.version as version import platform import queue import random @@ -794,9 +793,7 @@ try: import coverage - covver = version.Version(coverage.__version__) - if covver < version.Version("3.3"): - parser.error('coverage options require coverage 3.3 or later') + coverage.__version__ # silence unused import warning except ImportError: parser.error('coverage options now require the coverage package') diff -r 59fda8516774 -r 771294224bf6 tests/test-fileset.t --- a/tests/test-fileset.t Wed Apr 12 00:57:01 2023 +0200 +++ b/tests/test-fileset.t Fri Apr 14 10:41:40 2023 +0200 @@ -53,7 +53,7 @@ (symbol 'glob') (symbol 'b?'))) * matcher: - + a1 b1 b2 diff -r 59fda8516774 -r 771294224bf6 tests/test-https.t --- a/tests/test-https.t Wed Apr 12 00:57:01 2023 +0200 +++ b/tests/test-https.t Fri Apr 14 10:41:40 2023 +0200 @@ -344,21 +344,21 @@ $ cd test $ hg serve -p $HGPORT -d --pid-file=../hg0.pid --certificate=$PRIV \ - > --config devel.serverexactprotocol=tls1.0 + > --config devel.server-insecure-exact-protocol=tls1.0 $ cat ../hg0.pid >> $DAEMON_PIDS $ hg serve -p $HGPORT1 -d --pid-file=../hg1.pid --certificate=$PRIV \ - > --config devel.serverexactprotocol=tls1.1 + > --config devel.server-insecure-exact-protocol=tls1.1 $ cat ../hg1.pid >> $DAEMON_PIDS $ hg serve -p $HGPORT2 -d --pid-file=../hg2.pid --certificate=$PRIV \ - > --config devel.serverexactprotocol=tls1.2 + > --config devel.server-insecure-exact-protocol=tls1.2 $ cat ../hg2.pid >> $DAEMON_PIDS $ cd .. Clients talking same TLS versions work - $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.0 --config hostsecurity.ciphers=DEFAULT id https://localhost:$HGPORT/ + $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.0 --config hostsecurity.ciphers="DEFAULT:@SECLEVEL=0" id https://localhost:$HGPORT/ 5fed3813f7f5 - $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.1 --config hostsecurity.ciphers=DEFAULT id https://localhost:$HGPORT1/ + $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.1 --config hostsecurity.ciphers="DEFAULT:@SECLEVEL=0" id https://localhost:$HGPORT1/ 5fed3813f7f5 $ P="$CERTSDIR" hg --config hostsecurity.minimumprotocol=tls1.2 id https://localhost:$HGPORT2/ 5fed3813f7f5 @@ -400,7 +400,7 @@ The per-host config option overrides the default $ P="$CERTSDIR" hg id https://localhost:$HGPORT/ \ - > --config hostsecurity.ciphers=DEFAULT \ + > --config hostsecurity.ciphers="DEFAULT:@SECLEVEL=0" \ > --config hostsecurity.minimumprotocol=tls1.2 \ > --config hostsecurity.localhost:minimumprotocol=tls1.0 5fed3813f7f5 diff -r 59fda8516774 -r 771294224bf6 tests/test-rebase-dry-run.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-rebase-dry-run.t Fri Apr 14 10:41:40 2023 +0200 @@ -0,0 +1,97 @@ +====================== +rebase --dry-run tests +====================== + +Test behavior associated with `hg rebase --dry-run` + +Setup +===== + + $ hg init r1 + $ cd r1 + $ echo one > f01.txt + $ echo two > f02.txt + $ echo three > f03.txt + $ hg add + adding f01.txt + adding f02.txt + adding f03.txt + $ hg ci -m 'ci-1' f01.txt f02.txt f03.txt + $ hg book base; hg book -i + $ echo add-to-one >> f01.txt + $ hg ci -m 'br-1' f01.txt + $ hg book branch-1; hg book -i + $ hg up base; hg book -i + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (activating bookmark base) + $ echo add-to-two >> f02.txt + $ hg ci -m 'br-2' f02.txt + created new head + $ hg book branch-2; hg book -i + $ hg up branch-1; hg book -i + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + (activating bookmark branch-1) + $ hg log -G + o changeset: 2:d408211b0a6f + | bookmark: branch-2 + | tag: tip + | parent: 0:99418d161ee0 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: br-2 + | + | @ changeset: 1:ab62441498e5 + |/ bookmark: branch-1 + | user: test + | date: Thu Jan 01 00:00:00 1970 +0000 + | summary: br-1 + | + o changeset: 0:99418d161ee0 + bookmark: base + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: ci-1 + + + +Check the working copy changes do not get wiped out +=================================================== + + $ echo add-to-three >> f03.txt + +f03 is modified + + $ hg st + M f03.txt + $ hg diff + diff -r ab62441498e5 f03.txt + --- a/f03.txt Thu Jan 01 00:00:00 1970 +0000 + +++ b/f03.txt Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,2 @@ + three + +add-to-three + + + $ hg rebase -v -n -s branch-2 -d branch-1 --config extensions.rebase= + starting dry-run rebase; repository will not be changed + rebasing 2:d408211b0a6f branch-2 tip "br-2" + resolving manifests + getting f02.txt + committing files: + f02.txt + committing manifest + committing changelog + rebase merging completed + dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase + +f03 changes are lost + + $ hg st + M f03.txt + $ hg diff + diff -r ab62441498e5 f03.txt + --- a/f03.txt Thu Jan 01 00:00:00 1970 +0000 + +++ b/f03.txt Thu Jan 01 00:00:00 1970 +0000 + @@ -1,1 +1,2 @@ + three + +add-to-three diff -r 59fda8516774 -r 771294224bf6 tests/test-transaction-rollback-on-revlog-split.t --- a/tests/test-transaction-rollback-on-revlog-split.t Wed Apr 12 00:57:01 2023 +0200 +++ b/tests/test-transaction-rollback-on-revlog-split.t Fri Apr 14 10:41:40 2023 +0200 @@ -130,7 +130,7 @@ #else $ hg pull ../troffset-computation pulling from ../troffset-computation - Killed + *Killed* (glob) [137] #endif @@ -210,7 +210,7 @@ adding changesets adding manifests adding file changes - Killed + *Killed* (glob) [137] #endif @@ -275,7 +275,7 @@ adding changesets adding manifests adding file changes - Killed + *Killed* (glob) [137] #endif diff -r 59fda8516774 -r 771294224bf6 tests/test-walk.t --- a/tests/test-walk.t Wed Apr 12 00:57:01 2023 +0200 +++ b/tests/test-walk.t Fri Apr 14 10:41:40 2023 +0200 @@ -536,7 +536,7 @@ f mammals/Procyonidae/raccoon mammals/Procyonidae/raccoon $ hg debugwalk -v beans 'glob:beans/*' * matcher: - + f beans/black beans/black f beans/borlotti beans/borlotti f beans/kidney beans/kidney