mdiff: tweak calls into `bdiff.fixws` to match its type hints
It turns out that protocol classes can be used for modules too, which is great
because all of the dynamically loaded modules (and their attributes) are
currently inferred as `Any`. See the next commit for details.
A protocol class for the `bdiff` module detected this (trivial) mismatch, so
correct it first. The various implementations of this method are typed as
taking a `bool`. The `cext` implementation parses its arguments with
`PyArg_ParseTuple(args, "Sb:fixws", &s, &allws)`, which wants an `int`. But
experimenting in `hg debugshell` under py38, passing `True` or `False` to
`cext.fixws()` also works. We can change the implementation to use "p" (which
was introduced in py33) instead of "b", but that's beyond the scope of this.
=========================================================
Test features and behaviors related to the archived phase
=========================================================
$ cat << EOF >> $HGRCPATH
> [format]
> exp-archived-phase=yes
> [extensions]
> strip=
> [experimental]
> EOF
$ hg init repo
$ cd repo
$ echo root > a
$ hg add a
$ hg ci -m 'root'
Test that bundle can unarchive a changeset
------------------------------------------
$ echo foo >> a
$ hg st
M a
$ hg ci -m 'unbundletesting'
$ hg log -G
@ changeset: 1:883aadbbf309
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg strip --soft --rev '.'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/883aadbbf309-efc55adc-backup.hg
$ hg log -G
@ changeset: 0:c1863a3840c6
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg log -G --hidden
o changeset: 1:883aadbbf309
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
@ changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg unbundle .hg/strip-backup/883aadbbf309-efc55adc-backup.hg
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
(run 'hg update' to get a working copy)
$ hg log -G
o changeset: 1:883aadbbf309
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
@ changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
Test that history rewriting command can use the archived phase when allowed to
------------------------------------------------------------------------------
$ hg up 'desc(unbundletesting)'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo bar >> a
$ hg commit --amend --config experimental.cleanup-as-archived=yes
$ hg log -G
@ changeset: 2:d1e73e428f29
| tag: tip
| parent: 0:c1863a3840c6
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ hg log -G --hidden
@ changeset: 2:d1e73e428f29
| tag: tip
| parent: 0:c1863a3840c6
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
| o changeset: 1:883aadbbf309
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
$ ls -1 .hg/strip-backup/
883aadbbf309-efc55adc-amend.hg
883aadbbf309-efc55adc-backup.hg
$ hg unbundle .hg/strip-backup/883aadbbf309*amend.hg
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 1 files
(run 'hg update' to get a working copy)
$ hg log -G
@ changeset: 2:d1e73e428f29
| tag: tip
| parent: 0:c1863a3840c6
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
| o changeset: 1:883aadbbf309
|/ user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: unbundletesting
|
o changeset: 0:c1863a3840c6
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: root
Test that a strip will preserve unrelated changeset archived
------------------------------------------------------------
prepare a suitable tree
$ echo foo > bar
$ hg add bar
$ hg commit -m 'some more commit'
$ hg log -G --hidden -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
@ 3 f90bf4e57854 [draft] some more commit
|
o 2 d1e73e428f29 [draft] unbundletesting
|
| o 1 883aadbbf309 [draft] unbundletesting
|/
o 0 c1863a3840c6 [draft] root
$ hg strip --soft --rev '.'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/f90bf4e57854-56b37ff2-backup.hg
$ hg log -G --hidden -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
o 3 f90bf4e57854 [archived] some more commit
|
@ 2 d1e73e428f29 [draft] unbundletesting
|
| o 1 883aadbbf309 [draft] unbundletesting
|/
o 0 c1863a3840c6 [draft] root
Strips the other (lower rev-num) head
$ hg strip --rev 'min(head() and not .)'
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/883aadbbf309-efc55adc-backup.hg
The archived changeset should still be hidden
$ hg log -G -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
@ 1 d1e73e428f29 [draft] unbundletesting
|
o 0 c1863a3840c6 [draft] root
It may still be around:
$ hg log --hidden -G -T '{rev} {node|short} [{phase}] {desc|firstline}\n'
o 2 f90bf4e57854 [archived] some more commit
|
@ 1 d1e73e428f29 [draft] unbundletesting
|
o 0 c1863a3840c6 [draft] root