sidedata: add a 'side-data' repository feature and use it
Most code don't really care how sidedata support is added, but it needs to know
if it is present. To achieve this. we use the `repo.features` attributes with a
new dedicated features".
Having such centralised information is more robust and will help us to remove the
sidedata requirements in a later changesets.
Differential Revision: https://phab.mercurial-scm.org/D10617
--- a/mercurial/bundle2.py Mon May 03 12:29:41 2021 +0200
+++ b/mercurial/bundle2.py Mon May 03 12:29:52 2021 +0200
@@ -180,6 +180,7 @@
stringutil,
urlutil,
)
+from .interfaces import repository
urlerr = util.urlerr
urlreq = util.urlreq
@@ -1729,8 +1730,8 @@
part.addparam(
b'targetphase', b'%d' % phases.secret, mandatory=False
)
- if b'exp-sidedata-flag' in repo.requirements:
- part.addparam(b'exp-sidedata', b'1')
+ if repository.REPO_FEATURE_SIDE_DATA in repo.features:
+ part.addparam(b'exp-sidedata', b'1')
if opts.get(b'streamv2', False):
addpartbundlestream2(bundler, repo, stream=True)
@@ -2579,9 +2580,9 @@
part.addparam(b'version', cgversion)
if scmutil.istreemanifest(repo):
part.addparam(b'treemanifest', b'1')
- if b'exp-sidedata-flag' in repo.requirements:
- part.addparam(b'exp-sidedata', b'1')
- wanted = format_remote_wanted_sidedata(repo)
- part.addparam(b'exp-wanted-sidedata', wanted)
+ if repository.REPO_FEATURE_SIDE_DATA in repo.features:
+ part.addparam(b'exp-sidedata', b'1')
+ wanted = format_remote_wanted_sidedata(repo)
+ part.addparam(b'exp-wanted-sidedata', wanted)
return bundler
--- a/mercurial/exchange.py Mon May 03 12:29:41 2021 +0200
+++ b/mercurial/exchange.py Mon May 03 12:29:52 2021 +0200
@@ -43,6 +43,7 @@
stringutil,
urlutil,
)
+from .interfaces import repository
urlerr = util.urlerr
urlreq = util.urlreq
@@ -893,7 +894,7 @@
cgpart.addparam(b'version', version)
if scmutil.istreemanifest(pushop.repo):
cgpart.addparam(b'treemanifest', b'1')
- if b'exp-sidedata-flag' in pushop.repo.requirements:
+ if repository.REPO_FEATURE_SIDE_DATA in pushop.repo.features:
cgpart.addparam(b'exp-sidedata', b'1')
def handlereply(op):
@@ -2427,7 +2428,7 @@
if scmutil.istreemanifest(repo):
part.addparam(b'treemanifest', b'1')
- if b'exp-sidedata-flag' in repo.requirements:
+ if repository.REPO_FEATURE_SIDE_DATA in repo.features:
part.addparam(b'exp-sidedata', b'1')
sidedata = bundle2.format_remote_wanted_sidedata(repo)
part.addparam(b'exp-wanted-sidedata', sidedata)
--- a/mercurial/interfaces/repository.py Mon May 03 12:29:41 2021 +0200
+++ b/mercurial/interfaces/repository.py Mon May 03 12:29:52 2021 +0200
@@ -21,6 +21,8 @@
REPO_FEATURE_LFS = b'lfs'
# Repository supports being stream cloned.
REPO_FEATURE_STREAM_CLONE = b'streamclone'
+# Repository supports (at least) some sidedata to be stored
+REPO_FEATURE_SIDE_DATA = b'side-data'
# Files storage may lack data for all ancestors.
REPO_FEATURE_SHALLOW_FILE_STORAGE = b'shallowfilestorage'
--- a/mercurial/localrepo.py Mon May 03 12:29:41 2021 +0200
+++ b/mercurial/localrepo.py Mon May 03 12:29:52 2021 +0200
@@ -737,6 +737,9 @@
storevfs = store.vfs
storevfs.options = resolvestorevfsoptions(ui, requirements, features)
+ if requirementsmod.REVLOGV2_REQUIREMENT in requirements:
+ features.add(repository.REPO_FEATURE_SIDE_DATA)
+
# The cache vfs is used to manage cache files.
cachevfs = vfsmod.vfs(cachepath, cacheaudited=True)
cachevfs.createmode = store.createmode