rust-dirstate-v2: show `unused_bytes` counter is not reset on total rewrite
This was picked up by @aalekseyev when doing unrelated debugging.
The Rust implementation was never resetting this counter, so a brand new file
would carry over the old counter.
As I write this, my counter is a supposed 7389089 unused bytes for a total of
170978 bytes in the data file. Feel free to post your own high score.
Differential Revision: https://phab.mercurial-scm.org/D12593
#testcases flat tree
#testcases lfs-on lfs-off
#if lfs-on
$ cat >> $HGRCPATH <<EOF
> [extensions]
> lfs =
> EOF
#endif
$ . "$TESTDIR/narrow-library.sh"
#if tree
$ cat << EOF >> $HGRCPATH
> [experimental]
> treemanifest = 1
> EOF
#endif
create full repo
$ hg init master
$ cd master
$ cat >> .hg/hgrc <<EOF
> [narrow]
> serveellipses=True
> EOF
$ mkdir inside
$ echo inside > inside/f1
$ mkdir outside
$ echo outside > outside/f1
$ hg ci -Aqm 'initial'
$ echo modified > inside/f1
$ hg ci -qm 'modify inside'
$ hg co -q 0
$ echo modified > outside/f1
$ hg ci -qm 'modify outside'
$ echo modified again >> outside/f1
$ hg ci -qm 'modify outside again'
$ cd ..
$ hg clone --narrow ssh://user@dummy/master narrow --include inside
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 1 files (+1 heads)
new changesets *:* (glob)
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd narrow
$ cat >> $HGRCPATH <<EOF
> [extensions]
> strip=
> EOF
Can strip and recover changesets affecting only files within narrow spec
$ hg co -r 'desc("modify inside")'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm -f .hg/strip-backup/*-backup.hg
$ hg strip .
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-backup.hg (glob)
$ hg unbundle .hg/strip-backup/*-backup.hg
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
new changesets * (glob)
(run 'hg heads' to see heads, 'hg merge' to merge)
Can strip and recover changesets affecting files outside of narrow spec
$ hg co -r 'desc("modify outside")'
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg log -G -T '{rev} {desc}\n'
o 2 modify inside
|
| @ 1 modify outside again
|/
o 0 initial
$ hg debugdata -m 1
inside/f1\x004d6a634d5ba06331a60c29ee0db8412490a54fcd (esc) (flat !)
outside/f1\x0084ba604d54dee1f13310ce3d4ac2e8a36636691a (esc) (flat !)
inside\x006a8bc41df94075d501f9740587a0c0e13c170dc5t (esc) (tree !)
outside\x00255c2627ebdd3c7dcaa6945246f9b9f02bd45a09t (esc) (tree !)
$ rm -f .hg/strip-backup/*-backup.hg
$ hg strip .
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-backup.hg (glob)
$ hg unbundle .hg/strip-backup/*-backup.hg
adding changesets
adding manifests
adding file changes
added 1 changesets with 0 changes to 0 files (+1 heads)
new changesets * (glob)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg log -G -T '{rev} {desc}\n'
o 2 modify outside again
|
| o 1 modify inside
|/
@ 0 initial
Check that hash of file outside narrow spec got restored
$ hg debugdata -m 2
inside/f1\x004d6a634d5ba06331a60c29ee0db8412490a54fcd (esc) (flat !)
outside/f1\x0084ba604d54dee1f13310ce3d4ac2e8a36636691a (esc) (flat !)
inside\x006a8bc41df94075d501f9740587a0c0e13c170dc5t (esc) (tree !)
outside\x00255c2627ebdd3c7dcaa6945246f9b9f02bd45a09t (esc) (tree !)
Also verify we can apply the bundle with 'hg pull':
$ hg co -r 'desc("modify inside")'
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ rm .hg/strip-backup/*-backup.hg
$ hg strip .
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-backup.hg (glob)
#if repobundlerepo
$ hg pull .hg/strip-backup/*-backup.hg
pulling from .hg/strip-backup/*-backup.hg (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
new changesets * (glob)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ rm .hg/strip-backup/*-backup.hg
$ hg strip 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/*-backup.hg (glob)
$ hg incoming .hg/strip-backup/*-backup.hg
comparing with .hg/strip-backup/*-backup.hg (glob)
changeset: 0:* (glob)
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: initial
changeset: 1:9e48d953700d (flat !)
changeset: 1:3888164bccf0 (tree !)
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify outside again
changeset: 2:f505d5e96aa8 (flat !)
changeset: 2:40b66f95a209 (tree !)
tag: tip
parent: 0:a99f4d53924d (flat !)
parent: 0:c2a5fabcca3c (tree !)
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: modify inside
$ hg pull .hg/strip-backup/*-backup.hg
pulling from .hg/strip-backup/*-backup.hg (glob)
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2 changes to 1 files (+1 heads)
new changesets *:* (glob)
(run 'hg heads' to see heads, 'hg merge' to merge)
#endif