text: # peer.py - repository base classes for mercurial
  #
  # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
  # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
  #
  # This software may be used and distributed according to the terms of the
  # GNU General Public License version 2 or any later version.
  
  from i18n import _
  import error
  
  class peerrepository(object):
  
      def capable(self, name):
          '''tell whether repo supports named capability.
          return False if not supported.
          if boolean capability, return True.
          if string capability, return string.'''
          caps = self._capabilities()
          if name in caps:
              return True
          name_eq = name + '='
          for cap in caps:
              if cap.startswith(name_eq):
                  return cap[len(name_eq):]
          return False
  
      def requirecap(self, name, purpose):
          '''raise an exception if the given capability is not present'''
          if not self.capable(name):
              raise error.CapabilityError(
                  _('cannot %s; remote repository does not '
                    'support the %r capability') % (purpose, name))
  
      def local(self):
          '''return peer as a localrepo, or None'''
          return None
  
      def peer(self):
          return self
  
      def canpush(self):
          return True
  
      def close(self):
          pass
  