marmoute added a comment. marmoute updated this revision to Diff 19887.
rebase to latest default REPOSITORY rHG Mercurial CHANGES SINCE LAST UPDATE https://phab.mercurial-scm.org/D7839?vs=19829&id=19887 CHANGES SINCE LAST ACTION https://phab.mercurial-scm.org/D7839/new/ REVISION DETAIL https://phab.mercurial-scm.org/D7839 AFFECTED FILES mercurial/revlogutils/nodemap.py tests/test-persistent-nodemap.t CHANGE DETAILS diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t --- a/tests/test-persistent-nodemap.t +++ b/tests/test-persistent-nodemap.t @@ -12,6 +12,8 @@ $ hg debugbuilddag .+5000 $ f --size .hg/store/00changelog.n .hg/store/00changelog.n: size=18 + $ 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 @@ -32,3 +34,15 @@ 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 |................| + +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' + $ f --size .hg/store/00changelog.n + .hg/store/00changelog.n: size=18 + $ f --sha256 .hg/store/00changelog-*.nd --size + .hg/store/00changelog-????????????????.nd: size=122880, sha256=bfafebd751c4f6d116a76a37a1dee2a251747affe7efbcc4f4842ccc746d4db9 (glob) diff --git a/mercurial/revlogutils/nodemap.py b/mercurial/revlogutils/nodemap.py --- a/mercurial/revlogutils/nodemap.py +++ b/mercurial/revlogutils/nodemap.py @@ -9,6 +9,7 @@ from __future__ import absolute_import import os +import re import struct from .. import ( @@ -71,6 +72,16 @@ data = persistent_data(revlog.index) uid = _make_uid() datafile = _rawdata_filepath(revlog, uid) + olds = _other_rawdata_filepath(revlog, uid) + if olds: + realvfs = getattr(revlog, '_realopener', revlog.opener) + + def cleanup(tr): + for oldfile in olds: + realvfs.tryunlink(oldfile) + + callback_id = b"revlog-cleanup-nodemap-%s" % revlog.nodemap_file + tr.addpostclose(callback_id, cleanup) # EXP-TODO: if this is a cache, this should use a cache vfs, not a # store vfs with revlog.opener(datafile, b'w') as fd: @@ -136,6 +147,19 @@ return b"%s-%s.nd" % (prefix, uid) +def _other_rawdata_filepath(revlog, uid): + prefix = revlog.nodemap_file[:-2] + pattern = re.compile(b"(^|/)%s-[0-9a-f]+\.nd$" % prefix) + new_file_path = _rawdata_filepath(revlog, uid) + new_file_name = revlog.opener.basename(new_file_path) + dirpath = revlog.opener.dirname(new_file_path) + others = [] + for f in revlog.opener.listdir(dirpath): + if pattern.match(f) and f != new_file_name: + others.append(f) + return others + + ### Nodemap Trie # # This is a simple reference implementation to compute and persist a nodemap To: marmoute, #hg-reviewers Cc: martinvonz, mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel