test-copies-in-changeset.t
514 lines
| 12.9 KiB
| text/troff
|
Tads3Lexer
/ tests / test-copies-in-changeset.t
r43411 | #testcases extra sidedata | |||
|
r42317 | |||
r43411 | #if extra | |||
|
r42317 | $ cat >> $HGRCPATH << EOF | ||
> [experimental] | ||||
> copies.write-to=changeset-only | ||||
|
r42318 | > copies.read-from=changeset-only | ||
|
r42317 | > [alias] | ||
> changesetcopies = log -r . -T 'files: {files} | ||||
|
r42598 | > {extras % "{ifcontains("files", key, "{key}: {value}\n")}"} | ||
|
r42317 | > {extras % "{ifcontains("copies", key, "{key}: {value}\n")}"}' | ||
r43411 | > EOF | |||
#endif | ||||
#if sidedata | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [format] | ||||
> exp-use-copies-side-data-changeset = yes | ||||
> EOF | ||||
#endif | ||||
$ cat >> $HGRCPATH << EOF | ||||
> [alias] | ||||
|
r42318 | > showcopies = log -r . -T '{file_copies % "{source} -> {name}\n"}' | ||
|
r42475 | > [extensions] | ||
> rebase = | ||||
|
r43124 | > split = | ||
|
r42317 | > EOF | ||
Check that copies are recorded correctly | ||||
$ hg init repo | ||||
$ cd repo | ||||
r43411 | #if sidedata | |||
$ hg debugformat -v | ||||
r45303 | format-variant repo config default | |||
fncache: yes yes yes | ||||
|
r48111 | dirstate-v2: no no no | ||
r45303 | dotencode: yes yes yes | |||
generaldelta: yes yes yes | ||||
|
r47052 | share-safe: no no no | ||
r45303 | sparserevlog: yes yes yes | |||
r47646 | persistent-nodemap: no no no (no-rust !) | |||
persistent-nodemap: yes yes no (rust !) | ||||
r45303 | copies-sdc: yes yes no | |||
r48039 | revlog-v2: no no no | |||
changelog-v2: yes yes no | ||||
r45303 | plain-cl-delta: yes yes yes | |||
r47636 | compression: zlib zlib zlib (no-zstd !) | |||
compression: zstd zstd zstd (zstd !) | ||||
r45303 | compression-level: default default default | |||
r43411 | #else | |||
$ hg debugformat -v | ||||
r45303 | format-variant repo config default | |||
fncache: yes yes yes | ||||
|
r48111 | dirstate-v2: no no no | ||
r45303 | dotencode: yes yes yes | |||
generaldelta: yes yes yes | ||||
|
r47052 | share-safe: no no no | ||
r45303 | sparserevlog: yes yes yes | |||
r47646 | persistent-nodemap: no no no (no-rust !) | |||
persistent-nodemap: yes yes no (rust !) | ||||
r45303 | copies-sdc: no no no | |||
|
r47439 | revlog-v2: no no no | ||
r48037 | changelog-v2: no no no | |||
r45303 | plain-cl-delta: yes yes yes | |||
r47636 | compression: zlib zlib zlib (no-zstd !) | |||
compression: zstd zstd zstd (zstd !) | ||||
r45303 | compression-level: default default default | |||
r43411 | #endif | |||
|
r42317 | $ echo a > a | ||
$ hg add a | ||||
$ hg ci -m initial | ||||
$ hg cp a b | ||||
$ hg cp a c | ||||
$ hg cp a d | ||||
$ hg ci -m 'copy a to b, c, and d' | ||||
r43411 | ||||
#if extra | ||||
|
r42317 | $ hg changesetcopies | ||
files: b c d | ||||
|
r42620 | filesadded: 0 | ||
1 | ||||
2 | ||||
|
r42598 | |||
|
r42619 | p1copies: 0\x00a (esc) | ||
1\x00a (esc) | ||||
2\x00a (esc) | ||||
r43412 | #else | |||
$ hg debugsidedata -c -v -- -1 | ||||
r46211 | 1 sidedata entries | |||
entry-0014 size 44 | ||||
'\x00\x00\x00\x04\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00abcd' | ||||
r43411 | #endif | |||
|
r42318 | $ hg showcopies | ||
a -> b | ||||
a -> c | ||||
a -> d | ||||
r43411 | ||||
#if extra | ||||
|
r42318 | $ hg showcopies --config experimental.copies.read-from=compatibility | ||
a -> b | ||||
a -> c | ||||
a -> d | ||||
$ hg showcopies --config experimental.copies.read-from=filelog-only | ||||
|
r42317 | |||
r43411 | #endif | |||
|
r42317 | Check that renames are recorded correctly | ||
$ hg mv b b2 | ||||
$ hg ci -m 'rename b to b2' | ||||
r43411 | ||||
#if extra | ||||
|
r42317 | $ hg changesetcopies | ||
files: b b2 | ||||
|
r42598 | filesadded: 1 | ||
filesremoved: 0 | ||||
|
r42619 | p1copies: 1\x00b (esc) | ||
r43411 | ||||
r43412 | #else | |||
$ hg debugsidedata -c -v -- -1 | ||||
r46211 | 1 sidedata entries | |||
entry-0014 size 25 | ||||
'\x00\x00\x00\x02\x0c\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x00bb2' | ||||
r43411 | #endif | |||
|
r42318 | $ hg showcopies | ||
b -> b2 | ||||
|
r42317 | |||
r43411 | ||||
|
r42317 | Rename onto existing file. This should get recorded in the changeset files list and in the extras, | ||
even though there is no filelog entry. | ||||
$ hg cp b2 c --force | ||||
$ hg st --copies | ||||
M c | ||||
b2 | ||||
r43411 | ||||
#if extra | ||||
|
r42317 | $ hg debugindex c | ||
rev linkrev nodeid p1 p2 | ||||
0 1 b789fdd96dc2 000000000000 000000000000 | ||||
r43411 | ||||
#else | ||||
$ hg debugindex c | ||||
rev linkrev nodeid p1 p2 | ||||
0 1 37d9b5d994ea 000000000000 000000000000 | ||||
#endif | ||||
|
r42317 | $ hg ci -m 'move b onto d' | ||
r43411 | ||||
#if extra | ||||
|
r42317 | $ hg changesetcopies | ||
files: c | ||||
|
r42598 | |||
|
r42619 | p1copies: 0\x00b2 (esc) | ||
r43411 | ||||
r43412 | #else | |||
$ hg debugsidedata -c -v -- -1 | ||||
r43505 | 1 sidedata entries | |||
r46211 | entry-0014 size 25 | |||
'\x00\x00\x00\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x16\x00\x00\x00\x03\x00\x00\x00\x00b2c' | ||||
r43411 | #endif | |||
|
r42318 | $ hg showcopies | ||
b2 -> c | ||||
r43411 | ||||
#if extra | ||||
|
r42317 | $ hg debugindex c | ||
rev linkrev nodeid p1 p2 | ||||
0 1 b789fdd96dc2 000000000000 000000000000 | ||||
r43411 | #else | |||
$ hg debugindex c | ||||
rev linkrev nodeid p1 p2 | ||||
0 1 37d9b5d994ea 000000000000 000000000000 | ||||
1 3 029625640347 000000000000 000000000000 | ||||
#endif | ||||
|
r42317 | Create a merge commit with copying done during merge. | ||
$ hg co 0 | ||||
0 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
$ hg cp a e | ||||
$ hg cp a f | ||||
$ hg ci -m 'copy a to e and f' | ||||
created new head | ||||
$ hg merge 3 | ||||
3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
File 'a' exists on both sides, so 'g' could be recorded as being from p1 or p2, but we currently | ||||
always record it as being from p1 | ||||
$ hg cp a g | ||||
File 'd' exists only in p2, so 'h' should be from p2 | ||||
$ hg cp d h | ||||
File 'f' exists only in p1, so 'i' should be from p1 | ||||
$ hg cp f i | ||||
$ hg ci -m 'merge' | ||||
r43411 | ||||
#if extra | ||||
|
r42317 | $ hg changesetcopies | ||
files: g h i | ||||
|
r42620 | filesadded: 0 | ||
1 | ||||
2 | ||||
|
r42598 | |||
|
r42619 | p1copies: 0\x00a (esc) | ||
2\x00f (esc) | ||||
p2copies: 1\x00d (esc) | ||||
r43411 | ||||
r43412 | #else | |||
$ hg debugsidedata -c -v -- -1 | ||||
r46211 | 1 sidedata entries | |||
entry-0014 size 64 | ||||
'\x00\x00\x00\x06\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x01\x06\x00\x00\x00\x06\x00\x00\x00\x02adfghi' | ||||
r43411 | #endif | |||
|
r42318 | $ hg showcopies | ||
a -> g | ||||
d -> h | ||||
f -> i | ||||
|
r42317 | |||
Test writing to both changeset and filelog | ||||
$ hg cp a j | ||||
r43411 | #if extra | |||
|
r42317 | $ hg ci -m 'copy a to j' --config experimental.copies.write-to=compatibility | ||
$ hg changesetcopies | ||||
files: j | ||||
|
r42598 | filesadded: 0 | ||
filesremoved: | ||||
|
r42619 | p1copies: 0\x00a (esc) | ||
|
r42486 | p2copies: | ||
r43411 | #else | |||
$ hg ci -m 'copy a to j' | ||||
r43412 | $ hg debugsidedata -c -v -- -1 | |||
r46211 | 1 sidedata entries | |||
entry-0014 size 24 | ||||
'\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj' | ||||
r43411 | #endif | |||
|
r42317 | $ hg debugdata j 0 | ||
\x01 (esc) | ||||
copy: a | ||||
copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 | ||||
\x01 (esc) | ||||
a | ||||
|
r42318 | $ hg showcopies | ||
a -> j | ||||
$ hg showcopies --config experimental.copies.read-from=compatibility | ||||
a -> j | ||||
$ hg showcopies --config experimental.copies.read-from=filelog-only | ||||
a -> j | ||||
|
r43126 | Existing copy information in the changeset gets removed on amend and writing | ||
copy information on to the filelog | ||||
r43411 | #if extra | |||
|
r43126 | $ hg ci --amend -m 'copy a to j, v2' \ | ||
> --config experimental.copies.write-to=filelog-only | ||||
r43411 | saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob) | |||
|
r43126 | $ hg changesetcopies | ||
files: j | ||||
r43411 | #else | |||
$ hg ci --amend -m 'copy a to j, v2' | ||||
saved backup bundle to $TESTTMP/repo/.hg/strip-backup/*-*-amend.hg (glob) | ||||
r43412 | $ hg debugsidedata -c -v -- -1 | |||
|
r47452 | 1 sidedata entries | ||
entry-0014 size 24 | ||||
'\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00aj' | ||||
r43411 | #endif | |||
|
r43126 | $ hg showcopies --config experimental.copies.read-from=filelog-only | ||
|
r47452 | a -> j | ||
|
r42486 | The entries should be written to extras even if they're empty (so the client | ||
won't have to fall back to reading from filelogs) | ||||
$ echo x >> j | ||||
r43411 | #if extra | |||
|
r42486 | $ hg ci -m 'modify j' --config experimental.copies.write-to=compatibility | ||
$ hg changesetcopies | ||||
files: j | ||||
|
r42598 | filesadded: | ||
filesremoved: | ||||
|
r42486 | p1copies: | ||
p2copies: | ||||
r43411 | #else | |||
$ hg ci -m 'modify j' | ||||
r43412 | $ hg debugsidedata -c -v -- -1 | |||
r46211 | 1 sidedata entries | |||
entry-0014 size 14 | ||||
'\x00\x00\x00\x01\x14\x00\x00\x00\x01\x00\x00\x00\x00j' | ||||
r43411 | #endif | |||
|
r42317 | |||
Test writing only to filelog | ||||
$ hg cp a k | ||||
r43411 | #if extra | |||
|
r42317 | $ hg ci -m 'copy a to k' --config experimental.copies.write-to=filelog-only | ||
r43411 | ||||
|
r42317 | $ hg changesetcopies | ||
files: k | ||||
|
r42598 | |||
r43411 | #else | |||
$ hg ci -m 'copy a to k' | ||||
r43412 | $ hg debugsidedata -c -v -- -1 | |||
r46211 | 1 sidedata entries | |||
entry-0014 size 24 | ||||
'\x00\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x00ak' | ||||
r43411 | #endif | |||
|
r42317 | $ hg debugdata k 0 | ||
\x01 (esc) | ||||
copy: a | ||||
copyrev: b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 | ||||
\x01 (esc) | ||||
a | ||||
r43411 | #if extra | |||
|
r42318 | $ hg showcopies | ||
r43411 | ||||
|
r42318 | $ hg showcopies --config experimental.copies.read-from=compatibility | ||
a -> k | ||||
$ hg showcopies --config experimental.copies.read-from=filelog-only | ||||
a -> k | ||||
r43411 | #else | |||
$ hg showcopies | ||||
a -> k | ||||
#endif | ||||
|
r42317 | |||
$ cd .. | ||||
|
r42475 | |||
Test rebasing a commit with copy information | ||||
$ hg init rebase-rename | ||||
$ cd rebase-rename | ||||
$ echo a > a | ||||
$ hg ci -Aqm 'add a' | ||||
$ echo a2 > a | ||||
$ hg ci -m 'modify a' | ||||
$ hg co -q 0 | ||||
$ hg mv a b | ||||
$ hg ci -qm 'rename a to b' | ||||
|
r47071 | Not only do we want this to run in-memory, it shouldn't fall back to | ||
on-disk merge (no conflicts), so we force it to be in-memory | ||||
with no fallback. | ||||
$ hg rebase -d 1 --config rebase.experimental.inmemory=yes --config devel.rebase.force-in-memory-merge=yes | ||||
|
r46356 | rebasing 2:* tip "rename a to b" (glob) | ||
|
r42475 | merging a and b to b | ||
r43411 | saved backup bundle to $TESTTMP/rebase-rename/.hg/strip-backup/*-*-rebase.hg (glob) | |||
|
r42475 | $ hg st --change . --copies | ||
A b | ||||
|
r47452 | a | ||
|
r42475 | R a | ||
$ cd .. | ||||
|
r43124 | |||
Test splitting a commit | ||||
$ hg init split | ||||
$ cd split | ||||
$ echo a > a | ||||
$ echo b > b | ||||
$ hg ci -Aqm 'add a and b' | ||||
$ echo a2 > a | ||||
$ hg mv b c | ||||
$ hg ci -m 'modify a, move b to c' | ||||
|
r43125 | $ hg --config ui.interactive=yes split <<EOF | ||
|
r43124 | > y | ||
> y | ||||
> n | ||||
> y | ||||
> EOF | ||||
|
r43125 | diff --git a/a b/a | ||
1 hunks, 1 lines changed | ||||
examine changes to 'a'? | ||||
(enter ? for help) [Ynesfdaq?] y | ||||
@@ -1,1 +1,1 @@ | ||||
-a | ||||
+a2 | ||||
record this change to 'a'? | ||||
(enter ? for help) [Ynesfdaq?] y | ||||
diff --git a/b b/c | ||||
rename from b | ||||
rename to c | ||||
examine changes to 'b' and 'c'? | ||||
(enter ? for help) [Ynesfdaq?] n | ||||
created new head | ||||
diff --git a/b b/c | ||||
rename from b | ||||
rename to c | ||||
examine changes to 'b' and 'c'? | ||||
(enter ? for help) [Ynesfdaq?] y | ||||
r43411 | saved backup bundle to $TESTTMP/split/.hg/strip-backup/*-*-split.hg (glob) | |||
|
r43124 | $ cd .. | ||
Test committing half a rename | ||||
$ hg init partial | ||||
$ cd partial | ||||
$ echo a > a | ||||
$ hg ci -Aqm 'add a' | ||||
$ hg mv a b | ||||
|
r43125 | $ hg ci -m 'remove a' a | ||
r43418 | ||||
#if sidedata | ||||
Test upgrading/downgrading to sidedata storage | ||||
============================================== | ||||
|
r47847 | downgrading | ||
r43418 | ||||
$ hg debugformat -v | ||||
r45303 | format-variant repo config default | |||
fncache: yes yes yes | ||||
|
r48111 | dirstate-v2: no no no | ||
r45303 | dotencode: yes yes yes | |||
generaldelta: yes yes yes | ||||
|
r47052 | share-safe: no no no | ||
r45303 | sparserevlog: yes yes yes | |||
r47646 | persistent-nodemap: no no no (no-rust !) | |||
persistent-nodemap: yes yes no (rust !) | ||||
r45303 | copies-sdc: yes yes no | |||
r48039 | revlog-v2: no no no | |||
changelog-v2: yes yes no | ||||
r45303 | plain-cl-delta: yes yes yes | |||
r47636 | compression: zlib zlib zlib (no-zstd !) | |||
compression: zstd zstd zstd (zstd !) | ||||
r45303 | compression-level: default default default | |||
r43418 | $ hg debugsidedata -c -- 0 | |||
r43505 | 1 sidedata entries | |||
r46211 | entry-0014 size 14 | |||
r43418 | $ hg debugsidedata -c -- 1 | |||
r43505 | 1 sidedata entries | |||
r46211 | entry-0014 size 14 | |||
r43418 | $ hg debugsidedata -m -- 0 | |||
$ cat << EOF > .hg/hgrc | ||||
> [format] | ||||
> exp-use-copies-side-data-changeset = no | ||||
r48001 | > [experimental] | |||
> revlogv2 = enable-unstable-format-and-corrupt-my-data | ||||
r43418 | > EOF | |||
$ hg debugupgraderepo --run --quiet --no-backup > /dev/null | ||||
$ hg debugformat -v | ||||
r45303 | format-variant repo config default | |||
fncache: yes yes yes | ||||
|
r48111 | dirstate-v2: no no no | ||
r45303 | dotencode: yes yes yes | |||
generaldelta: yes yes yes | ||||
|
r47052 | share-safe: no no no | ||
r45303 | sparserevlog: yes yes yes | |||
r47646 | persistent-nodemap: no no no (no-rust !) | |||
persistent-nodemap: yes yes no (rust !) | ||||
r45303 | copies-sdc: no no no | |||
|
r47439 | revlog-v2: yes yes no | ||
r48037 | changelog-v2: no no no | |||
r45303 | plain-cl-delta: yes yes yes | |||
r47636 | compression: zlib zlib zlib (no-zstd !) | |||
compression: zstd zstd zstd (zstd !) | ||||
r45303 | compression-level: default default default | |||
r43418 | $ hg debugsidedata -c -- 0 | |||
$ hg debugsidedata -c -- 1 | ||||
$ hg debugsidedata -m -- 0 | ||||
upgrading | ||||
$ cat << EOF > .hg/hgrc | ||||
> [format] | ||||
> exp-use-copies-side-data-changeset = yes | ||||
> EOF | ||||
$ hg debugupgraderepo --run --quiet --no-backup > /dev/null | ||||
$ hg debugformat -v | ||||
r45303 | format-variant repo config default | |||
fncache: yes yes yes | ||||
|
r48111 | dirstate-v2: no no no | ||
r45303 | dotencode: yes yes yes | |||
generaldelta: yes yes yes | ||||
|
r47052 | share-safe: no no no | ||
r45303 | sparserevlog: yes yes yes | |||
r47646 | persistent-nodemap: no no no (no-rust !) | |||
persistent-nodemap: yes yes no (rust !) | ||||
r45303 | copies-sdc: yes yes no | |||
r48039 | revlog-v2: no no no | |||
changelog-v2: yes yes no | ||||
r45303 | plain-cl-delta: yes yes yes | |||
r47636 | compression: zlib zlib zlib (no-zstd !) | |||
compression: zstd zstd zstd (zstd !) | ||||
r45303 | compression-level: default default default | |||
r43418 | $ hg debugsidedata -c -- 0 | |||
r43505 | 1 sidedata entries | |||
r46211 | entry-0014 size 14 | |||
r43418 | $ hg debugsidedata -c -- 1 | |||
r43505 | 1 sidedata entries | |||
r46211 | entry-0014 size 14 | |||
r43418 | $ hg debugsidedata -m -- 0 | |||
#endif | ||||
|
r43124 | $ cd .. | ||