##// END OF EJS Templates
nodemap: use data from the index in debugnodemap --dump-new...
nodemap: use data from the index in debugnodemap --dump-new It is better to run the actual code when generating a new nodemap cache from scratch. So we do. Differential Revision: https://phab.mercurial-scm.org/D8163

File last commit:

r44984:1376cb1c default
r44999:febe88a6 default
Show More
test-persistent-nodemap.t
185 lines | 5.7 KiB | text/troff | Tads3Lexer
/ tests / test-persistent-nodemap.t
===================================
Test the persistent on-disk nodemap
===================================
$ hg init test-repo
$ cd test-repo
$ cat << EOF >> .hg/hgrc
> [experimental]
> exp-persistent-nodemap=yes
> [devel]
> persistent-nodemap=yes
> EOF
$ hg debugbuilddag .+5000
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5000
data-length: 122880
data-unused: 0
$ f --size .hg/store/00changelog.n
.hg/store/00changelog.n: size=42
Simple lookup works
$ ANYNODE=`hg log --template '{node|short}\n' --rev tip`
$ hg log -r "$ANYNODE" --template '{rev}\n'
5000
$ f --sha256 .hg/store/00changelog-*.nd
.hg/store/00changelog-????????????????.nd: sha256=b961925120e1c9bc345c199b2cc442abc477029fdece37ef9d99cbe59c0558b7 (glob)
$ hg debugnodemap --dump-new | f --sha256 --size
size=122880, sha256=b961925120e1c9bc345c199b2cc442abc477029fdece37ef9d99cbe59c0558b7
$ hg debugnodemap --dump-disk | f --sha256 --bytes=256 --hexdump --size
size=122880, sha256=b961925120e1c9bc345c199b2cc442abc477029fdece37ef9d99cbe59c0558b7
0000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0010: ff ff ff ff ff ff ff ff ff ff fa c2 ff ff ff ff |................|
0020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0030: ff ff ff ff ff ff ed b3 ff ff ff ff ff ff ff ff |................|
0040: ff ff ff ff ff ff ee 34 00 00 00 00 ff ff ff ff |.......4........|
0050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
0080: ff ff ff ff ff ff f8 50 ff ff ff ff ff ff ff ff |.......P........|
0090: ff ff ff ff ff ff ff ff ff ff ec c7 ff ff ff ff |................|
00a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00b0: ff ff ff ff ff ff fa be ff ff f2 fc ff ff ff ff |................|
00c0: ff ff ff ff ff ff ef ea ff ff ff ff ff ff f9 17 |................|
00d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
$ hg debugnodemap --check
revision in index: 5001
revision in nodemap: 5001
add a new commit
$ hg up
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo foo > foo
$ hg add foo
$ hg ci -m 'foo'
#if pure
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5001
data-length: 123072
data-unused: 192
#else
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5001
data-length: 122880
data-unused: 0
#endif
$ f --size .hg/store/00changelog.n
.hg/store/00changelog.n: size=42
(The pure code use the debug code that perform incremental update, the C code reencode from scratch)
#if pure
$ f --sha256 .hg/store/00changelog-*.nd --size
.hg/store/00changelog-????????????????.nd: size=123072, sha256=136472751566c8198ff09e306a7d2f9bd18bd32298d614752b73da4d6df23340 (glob)
#else
$ f --sha256 .hg/store/00changelog-*.nd --size
.hg/store/00changelog-????????????????.nd: size=122880, sha256=bfafebd751c4f6d116a76a37a1dee2a251747affe7efbcc4f4842ccc746d4db9 (glob)
#endif
$ hg debugnodemap --check
revision in index: 5002
revision in nodemap: 5002
Test code path without mmap
---------------------------
$ echo bar > bar
$ hg add bar
$ hg ci -m 'bar' --config experimental.exp-persistent-nodemap.mmap=no
$ hg debugnodemap --check --config experimental.exp-persistent-nodemap.mmap=yes
revision in index: 5003
revision in nodemap: 5003
$ hg debugnodemap --check --config experimental.exp-persistent-nodemap.mmap=no
revision in index: 5003
revision in nodemap: 5003
#if pure
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5002
data-length: 123328
data-unused: 384
$ f --sha256 .hg/store/00changelog-*.nd --size
.hg/store/00changelog-????????????????.nd: size=123328, sha256=10d26e9776b6596af0f89143a54eba8cc581e929c38242a02a7b0760698c6c70 (glob)
#else
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5002
data-length: 122944
data-unused: 0
$ f --sha256 .hg/store/00changelog-*.nd --size
.hg/store/00changelog-????????????????.nd: size=122944, sha256=755976b22b64ab680401b45395953504e64e7fa8c31ac570f58dee21e15f9bc0 (glob)
#endif
Test force warming the cache
$ rm .hg/store/00changelog.n
$ hg debugnodemap --metadata
$ hg debugupdatecache
#if pure
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5002
data-length: 122944
data-unused: 0
#else
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5002
data-length: 122944
data-unused: 0
#endif
Check out of sync nodemap
=========================
First copy old data on the side.
$ mkdir ../tmp-copies
$ cp .hg/store/00changelog-????????????????.nd .hg/store/00changelog.n ../tmp-copies
Nodemap lagging behind
----------------------
make a new commit
$ echo bar2 > bar
$ hg ci -m 'bar2'
$ NODE=`hg log -r tip -T '{node}\n'`
$ hg log -r "$NODE" -T '{rev}\n'
5003
If the nodemap is lagging behind, it can catch up fine
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5003
data-length: 123200 (pure !)
data-length: 123200 (rust !)
data-length: 122944 (no-rust no-pure !)
data-unused: 256 (pure !)
data-unused: 256 (rust !)
data-unused: 0 (no-rust no-pure !)
$ cp -f ../tmp-copies/* .hg/store/
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5002
data-length: 122944
data-unused: 0
$ hg log -r "$NODE" -T '{rev}\n'
5003