# HG changeset patch # User Gregory Szorc # Date 1536792444 25200 # Node ID 6192980553b49e77ab674b88e8e12b8db8ca9ddd # Parent 5b8e9b2060efc1f5488db69632d5819bef47cb11 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 diff -r 5b8e9b2060ef -r 6192980553b4 mercurial/scmutil.py --- a/mercurial/scmutil.py Wed Sep 12 14:54:17 2018 -0700 +++ b/mercurial/scmutil.py Wed Sep 12 15:47:24 2018 -0700 @@ -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): diff -r 5b8e9b2060ef -r 6192980553b4 mercurial/statichttprepo.py --- a/mercurial/statichttprepo.py Wed Sep 12 14:54:17 2018 -0700 +++ b/mercurial/statichttprepo.py Wed Sep 12 15:47:24 2018 -0700 @@ -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