diff -r 6f72e7d28b35 -r 55ef79031009 mercurial/localrepo.py --- a/mercurial/localrepo.py Sat Sep 21 21:33:29 2013 +0900 +++ b/mercurial/localrepo.py Sat Sep 21 21:33:29 2013 +0900 @@ -146,12 +146,14 @@ class localrepository(object): supportedformats = set(('revlogv1', 'generaldelta')) - supported = supportedformats | set(('store', 'fncache', 'shared', - 'dotencode')) + _basesupported = supportedformats | set(('store', 'fncache', 'shared', + 'dotencode')) openerreqs = set(('revlogv1', 'generaldelta')) requirements = ['revlogv1'] filtername = None + featuresetupfuncs = set() + def _baserequirements(self, create): return self.requirements[:] @@ -176,6 +178,13 @@ except IOError: pass + if self.featuresetupfuncs: + self.supported = set(self._basesupported) # use private copy + for setupfunc in self.featuresetupfuncs: + setupfunc(self.ui, self.supported) + else: + self.supported = self._basesupported + if not self.vfs.isdir(): if create: if not self.wvfs.exists(): @@ -1649,6 +1658,14 @@ return r def pull(self, remote, heads=None, force=False): + if remote.local(): + missing = set(remote.requirements) - self.supported + if missing: + msg = _("required features are not" + " supported in the destination:" + " %s") % (', '.join(sorted(missing))) + raise util.Abort(msg) + # don't open transaction for nothing or you break future useful # rollback call tr = None @@ -1749,6 +1766,14 @@ we have outgoing changesets but refused to push - other values as described by addchangegroup() ''' + if remote.local(): + missing = set(self.requirements) - remote.local().supported + if missing: + msg = _("required features are not" + " supported in the destination:" + " %s") % (', '.join(sorted(missing))) + raise util.Abort(msg) + # there are two ways to push to remote repo: # # addchangegroup assumes local user can lock remote