D7839: nodemap: delete older raw data file when creating a new ones
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Wed Feb 5 00:25:08 UTC 2020
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
More information about the Mercurial-devel
mailing list