Mercurial > hg
view tests/test-impexp-branch.t @ 51756:a53162bd73ed
subrepo: drop the default value of None for the archive matcher
This was flagged by pytype after adding hints to `match.subdirmatcher` that it
takes a non-optional matcher. That matcher argument is used without a guard in
the subdirmatcher constructor, so that's the correct restriction.
I don't think this fixes a bug in practice because the only way these are
invoked is either by a parent `hgsubrepo.archive()`, `archival.archive()`, or
the largefiles override of these. The `hgsubrepo.archive()` case (and the
largefiles override) uses what the caller provided, so the caller will
eventually be `archival.archive()` (or the largfiles override) up the call
chain. The `archival.archive()` method also has None for its matcher's default
arg. However, the three callers of that (`commands.archive()`,
`webcommands.archive()`, and `extdiff.snapshot()`) all provide a matcher
argument, so the None case can never occur unless a 3rd party extension swaps it
for None. Sadly, we can't make the argument on the `archival.archive()`
non-optional because there is a kwarg prior to it.
Even though the largefiles override of `archival.archive()` is provided a valid
matcher, we duplicate the internal creation of the matcher that the original
`archival.archive()` does for consistency. By eliminating an impossible to hit
case, we can simplify some of the subrepo code too, by dropping unreachable
code.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 01 Aug 2024 01:52:11 -0400 |
parents | 42d2b31cee0b |
children |
line wrap: on
line source
$ echo '[extensions]' >> $HGRCPATH $ echo 'strip =' >> $HGRCPATH $ cat >findbranch.py <<EOF > import re > import sys > > head_re = re.compile(r'^#(?:(?:\\s+([A-Za-z][A-Za-z0-9_]*)(?:\\s.*)?)|(?:\\s*))$') > > for line in sys.stdin: > hmatch = head_re.match(line) > if not hmatch: > sys.exit(1) > if hmatch.group(1) == 'Branch': > sys.exit(0) > sys.exit(1) > EOF $ hg init a $ cd a $ echo "Rev 1" >rev $ hg add rev $ hg commit -m "No branch." $ hg branch abranch marked working directory as branch abranch (branches are permanent and global, did you want a bookmark?) $ echo "Rev 2" >rev $ hg commit -m "With branch." $ hg export 0 > ../r0.patch $ hg export 1 > ../r1.patch $ cd .. $ if "$PYTHON" findbranch.py < r0.patch; then > echo "Export of default branch revision has Branch header" 1>&2 > exit 1 > fi $ if "$PYTHON" findbranch.py < r1.patch; then > : # Do nothing > else > echo "Export of branch revision is missing Branch header" 1>&2 > exit 1 > fi Make sure import still works with branch information in patches. $ hg init b $ cd b $ hg import ../r0.patch applying ../r0.patch $ hg import ../r1.patch applying ../r1.patch $ cd .. $ hg init c $ cd c $ hg import --exact --no-commit ../r0.patch applying ../r0.patch warning: can't check exact import with --no-commit $ hg st A rev $ hg revert -a forgetting rev $ rm rev $ hg import --exact ../r0.patch applying ../r0.patch $ hg import --exact ../r1.patch applying ../r1.patch Test --exact and patch header separators (issue3356) $ hg strip --no-backup . 1 files updated, 0 files merged, 0 files removed, 0 files unresolved >>> import re >>> p = open('../r1.patch', 'rb').read() >>> p = re.sub(br'Parent\s+', b'Parent ', p) >>> open('../r1-ws.patch', 'wb').write(p) and None $ hg import --exact ../r1-ws.patch applying ../r1-ws.patch $ cd ..