mercurial/ui.py
changeset 8203 3377fa11af67
parent 8202 4746113269c7
child 8204 797586be575d
equal deleted inserted replaced
8202:4746113269c7 8203:3377fa11af67
    15 class ui(object):
    15 class ui(object):
    16     def __init__(self, src=None):
    16     def __init__(self, src=None):
    17         self._buffers = []
    17         self._buffers = []
    18         self.quiet = self.verbose = self.debugflag = self.traceback = False
    18         self.quiet = self.verbose = self.debugflag = self.traceback = False
    19         self.interactive = self.report_untrusted = True
    19         self.interactive = self.report_untrusted = True
    20         self.overlay = config.config()
    20         self._ocfg = config.config() # overlay
    21         self.cdata = config.config()
    21         self._tcfg = config.config() # trusted
    22         self.ucdata = config.config()
    22         self._ucfg = config.config() # untrusted
    23         self._trustusers = {}
    23         self._trustusers = {}
    24         self._trustgroups = {}
    24         self._trustgroups = {}
    25 
    25 
    26         if src:
    26         if src:
    27             self.cdata = src.cdata.copy()
    27             self._tcfg = src._tcfg.copy()
    28             self.ucdata = src.ucdata.copy()
    28             self._ucfg = src._ucfg.copy()
    29             self.overlay = src.overlay.copy()
    29             self._ocfg = src._ocfg.copy()
    30             self._trustusers = src._trustusers.copy()
    30             self._trustusers = src._trustusers.copy()
    31             self._trustgroups = src._trustgroups.copy()
    31             self._trustgroups = src._trustgroups.copy()
    32             self.fixconfig()
    32             self.fixconfig()
    33         else:
    33         else:
    34             # we always trust global config files
    34             # we always trust global config files
    75         except IOError:
    75         except IOError:
    76             if not sections: # ignore unless we were looking for something
    76             if not sections: # ignore unless we were looking for something
    77                 return
    77                 return
    78             raise
    78             raise
    79 
    79 
    80         cdata = config.config()
    80         cfg = config.config()
    81         trusted = sections or trust or self._is_trusted(fp, filename)
    81         trusted = sections or trust or self._is_trusted(fp, filename)
    82 
    82 
    83         try:
    83         try:
    84             cdata.read(filename, fp, sections=sections)
    84             cfg.read(filename, fp, sections=sections)
    85         except error.ConfigError, inst:
    85         except error.ConfigError, inst:
    86             if trusted:
    86             if trusted:
    87                 raise
    87                 raise
    88             self.warn(_("Ignored: %s\n") % str(inst))
    88             self.warn(_("Ignored: %s\n") % str(inst))
    89 
    89 
    90         if trusted:
    90         if trusted:
    91             self.cdata.update(cdata)
    91             self._tcfg.update(cfg)
    92             self.cdata.update(self.overlay)
    92             self._tcfg.update(self._ocfg)
    93         self.ucdata.update(cdata)
    93         self._ucfg.update(cfg)
    94         self.ucdata.update(self.overlay)
    94         self._ucfg.update(self._ocfg)
    95 
    95 
    96         if root is None:
    96         if root is None:
    97             root = os.path.expanduser('~')
    97             root = os.path.expanduser('~')
    98         self.fixconfig(root=root)
    98         self.fixconfig(root=root)
    99 
    99 
   100     def fixconfig(self, root=None):
   100     def fixconfig(self, root=None):
   101         # translate paths relative to root (or home) into absolute paths
   101         # translate paths relative to root (or home) into absolute paths
   102         root = root or os.getcwd()
   102         root = root or os.getcwd()
   103         for c in self.cdata, self.ucdata, self.overlay:
   103         for c in self._tcfg, self._ucfg, self._ocfg:
   104             for n, p in c.items('paths'):
   104             for n, p in c.items('paths'):
   105                 if p and "://" not in p and not os.path.isabs(p):
   105                 if p and "://" not in p and not os.path.isabs(p):
   106                     c.set("paths", n, os.path.normpath(os.path.join(root, p)))
   106                     c.set("paths", n, os.path.normpath(os.path.join(root, p)))
   107 
   107 
   108         # update ui options
   108         # update ui options
   120             self._trustusers[user] = 1
   120             self._trustusers[user] = 1
   121         for group in self.configlist('trusted', 'groups'):
   121         for group in self.configlist('trusted', 'groups'):
   122             self._trustgroups[group] = 1
   122             self._trustgroups[group] = 1
   123 
   123 
   124     def setconfig(self, section, name, value):
   124     def setconfig(self, section, name, value):
   125         for cdata in (self.overlay, self.cdata, self.ucdata):
   125         for cfg in (self._ocfg, self._tcfg, self._ucfg):
   126             cdata.set(section, name, value)
   126             cfg.set(section, name, value)
   127         self.fixconfig()
   127         self.fixconfig()
   128 
   128 
   129     def _data(self, untrusted):
   129     def _data(self, untrusted):
   130         return untrusted and self.ucdata or self.cdata
   130         return untrusted and self._ucfg or self._tcfg
   131 
   131 
   132     def configsource(self, section, name, untrusted=False):
   132     def configsource(self, section, name, untrusted=False):
   133         return self._data(untrusted).source(section, name) or 'none'
   133         return self._data(untrusted).source(section, name) or 'none'
   134 
   134 
   135     def config(self, section, name, default=None, untrusted=False):
   135     def config(self, section, name, default=None, untrusted=False):
   136         value = self._data(untrusted).get(section, name, default)
   136         value = self._data(untrusted).get(section, name, default)
   137         if self.debugflag and not untrusted:
   137         if self.debugflag and not untrusted:
   138             uvalue = self.ucdata.get(section, name)
   138             uvalue = self._ucfg.get(section, name)
   139             if uvalue is not None and uvalue != value:
   139             if uvalue is not None and uvalue != value:
   140                 self.warn(_("Ignoring untrusted configuration option "
   140                 self.warn(_("Ignoring untrusted configuration option "
   141                             "%s.%s = %s\n") % (section, name, uvalue))
   141                             "%s.%s = %s\n") % (section, name, uvalue))
   142         return value
   142         return value
   143 
   143 
   164         return section in self._data(untrusted)
   164         return section in self._data(untrusted)
   165 
   165 
   166     def configitems(self, section, untrusted=False):
   166     def configitems(self, section, untrusted=False):
   167         items = self._data(untrusted).items(section)
   167         items = self._data(untrusted).items(section)
   168         if self.debugflag and not untrusted:
   168         if self.debugflag and not untrusted:
   169             for k,v in self.ucdata.items(section):
   169             for k,v in self._ucfg.items(section):
   170                 if self.cdata.get(section, k) != v:
   170                 if self._tcfg.get(section, k) != v:
   171                     self.warn(_("Ignoring untrusted configuration option "
   171                     self.warn(_("Ignoring untrusted configuration option "
   172                                 "%s.%s = %s\n") % (section, k, v))
   172                                 "%s.%s = %s\n") % (section, k, v))
   173         return items
   173         return items
   174 
   174 
   175     def walkconfig(self, untrusted=False):
   175     def walkconfig(self, untrusted=False):
   176         cdata = self._data(untrusted)
   176         cfg = self._data(untrusted)
   177         for section in cdata.sections():
   177         for section in cfg.sections():
   178             for name, value in self.configitems(section, untrusted):
   178             for name, value in self.configitems(section, untrusted):
   179                 yield section, name, str(value).replace('\n', '\\n')
   179                 yield section, name, str(value).replace('\n', '\\n')
   180 
   180 
   181     def username(self):
   181     def username(self):
   182         """Return default username to be used in commits.
   182         """Return default username to be used in commits.