Skip to content
Snippets Groups Projects
Commit 61929805 authored by Gregory Szorc's avatar Gregory Szorc
Browse files

statichttprepo: use new functions for requirements validation

The new code in localrepo for requirements gathering and validation
is more robust than scmutil.readrequires(). Let's port statichttprepo
to it.

Since scmutil.readrequires() is no longer used, it has been removed.

It is possible extensions were monkeypatching this to supplement the
set of supported requirements. But the proper way to do that is to
register a featuresetupfuncs. I'm comfortable forcing the API break
because featuresetupfuncs is more robust and has been supported for
a while.

.. api::

   ``scmutil.readrequires()`` has been removed.

   Use ``localrepo.featuresetupfuncs`` to register new repository
   requirements.

   Use ``localrepo.ensurerequirementsrecognized()`` to validate them.

Differential Revision: https://phab.mercurial-scm.org/D4570
parent 5b8e9b20
No related branches found
No related tags found
No related merge requests found
......@@ -1145,25 +1145,6 @@
elif not dryrun:
wctx.copy(origsrc, dst)
def readrequires(opener, supported):
'''Reads and parses .hg/requires and checks if all entries found
are in the list of supported features.'''
requirements = set(opener.read("requires").splitlines())
missings = []
for r in requirements:
if r not in supported:
if not r or not r[0:1].isalnum():
raise error.RequirementError(_(".hg/requires file is corrupt"))
missings.append(r)
missings.sort()
if missings:
raise error.RequirementError(
_("repository requires features unknown to this Mercurial: %s")
% " ".join(missings),
hint=_("see https://mercurial-scm.org/wiki/MissingRequirement"
" for more information"))
return requirements
def writerequires(opener, requirements):
with opener('requires', 'w') as fp:
for r in sorted(requirements):
......
......@@ -19,7 +19,6 @@
manifest,
namespaces,
pathutil,
scmutil,
store,
url,
util,
......@@ -156,7 +155,7 @@
self.filtername = None
try:
requirements = scmutil.readrequires(self.vfs, self.supported)
requirements = set(self.vfs.read(b'requires').splitlines())
except IOError as inst:
if inst.errno != errno.ENOENT:
raise
......@@ -174,6 +173,10 @@
msg = _("'%s' does not appear to be an hg repository") % path
raise error.RepoError(msg)
supportedrequirements = localrepo.gathersupportedrequirements(ui)
localrepo.ensurerequirementsrecognized(requirements,
supportedrequirements)
# setup store
self.store = store.store(requirements, self.path, vfsclass)
self.spath = self.store.path
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment