mercurial/ui.py
changeset 1839 876e4e6ad82b
parent 1637 3b1b44b917f4
child 1840 d17f19d84fd3
equal deleted inserted replaced
1838:429bf036f2cb 1839:876e4e6ad82b
    10 from demandload import *
    10 from demandload import *
    11 demandload(globals(), "re socket sys util")
    11 demandload(globals(), "re socket sys util")
    12 
    12 
    13 class ui(object):
    13 class ui(object):
    14     def __init__(self, verbose=False, debug=False, quiet=False,
    14     def __init__(self, verbose=False, debug=False, quiet=False,
    15                  interactive=True):
    15                  interactive=True, parentui=None):
    16         self.overlay = {}
    16         self.overlay = {}
    17         self.cdata = ConfigParser.SafeConfigParser()
    17         self.cdata = ConfigParser.SafeConfigParser()
    18         self.readconfig(util.rcpath)
    18         self.parentui = parentui and parentui.parentui or parentui
       
    19         if parentui is None:
       
    20             self.readconfig(util.rcpath)
    19 
    21 
    20         self.quiet = self.configbool("ui", "quiet")
    22             self.quiet = self.configbool("ui", "quiet")
    21         self.verbose = self.configbool("ui", "verbose")
    23             self.verbose = self.configbool("ui", "verbose")
    22         self.debugflag = self.configbool("ui", "debug")
    24             self.debugflag = self.configbool("ui", "debug")
    23         self.interactive = self.configbool("ui", "interactive", True)
    25             self.interactive = self.configbool("ui", "interactive", True)
    24 
    26 
    25         self.updateopts(verbose, debug, quiet, interactive)
    27             self.updateopts(verbose, debug, quiet, interactive)
    26         self.diffcache = None
    28             self.diffcache = None
       
    29 
       
    30     def __getattr__(self, key):
       
    31         return getattr(self.parentui, key)
    27 
    32 
    28     def updateopts(self, verbose=False, debug=False, quiet=False,
    33     def updateopts(self, verbose=False, debug=False, quiet=False,
    29                  interactive=True):
    34                  interactive=True):
    30         self.quiet = (self.quiet or quiet) and not verbose and not debug
    35         self.quiet = (self.quiet or quiet) and not verbose and not debug
    31         self.verbose = (self.verbose or verbose) or debug
    36         self.verbose = (self.verbose or verbose) or debug
    47     def config(self, section, name, default=None):
    52     def config(self, section, name, default=None):
    48         if self.overlay.has_key((section, name)):
    53         if self.overlay.has_key((section, name)):
    49             return self.overlay[(section, name)]
    54             return self.overlay[(section, name)]
    50         if self.cdata.has_option(section, name):
    55         if self.cdata.has_option(section, name):
    51             return self.cdata.get(section, name)
    56             return self.cdata.get(section, name)
    52         return default
    57         if self.parentui is None:
       
    58             return default
       
    59         else:
       
    60             return self.parentui.config(section, name, default)
    53 
    61 
    54     def configbool(self, section, name, default=False):
    62     def configbool(self, section, name, default=False):
    55         if self.overlay.has_key((section, name)):
    63         if self.overlay.has_key((section, name)):
    56             return self.overlay[(section, name)]
    64             return self.overlay[(section, name)]
    57         if self.cdata.has_option(section, name):
    65         if self.cdata.has_option(section, name):
    58             return self.cdata.getboolean(section, name)
    66             return self.cdata.getboolean(section, name)
    59         return default
    67         if self.parentui is None:
       
    68             return default
       
    69         else:
       
    70             return self.parentui.configbool(section, name, default)
    60 
    71 
    61     def configitems(self, section):
    72     def configitems(self, section):
       
    73         items = {}
       
    74         if self.parentui is not None:
       
    75             items = dict(self.parentui.configitems(section))
    62         if self.cdata.has_section(section):
    76         if self.cdata.has_section(section):
    63             return self.cdata.items(section)
    77             items.update(dict(self.cdata.items(section)))
    64         return []
    78         x = items.items()
       
    79         x.sort()
       
    80         return x
    65 
    81 
    66     def walkconfig(self):
    82     def walkconfig(self, seen=None):
    67         seen = {}
    83         if seen is None:
       
    84             seen = {}
    68         for (section, name), value in self.overlay.iteritems():
    85         for (section, name), value in self.overlay.iteritems():
    69             yield section, name, value
    86             yield section, name, value
    70             seen[section, name] = 1
    87             seen[section, name] = 1
    71         for section in self.cdata.sections():
    88         for section in self.cdata.sections():
    72             for name, value in self.cdata.items(section):
    89             for name, value in self.cdata.items(section):
    73                 if (section, name) in seen: continue
    90                 if (section, name) in seen: continue
    74                 yield section, name, value.replace('\n', '\\n')
    91                 yield section, name, value.replace('\n', '\\n')
    75                 seen[section, name] = 1
    92                 seen[section, name] = 1
       
    93         if self.parentui is not None:
       
    94             for parent in self.parentui.walkconfig(seen):
       
    95                 yield parent
    76 
    96 
    77     def extensions(self):
    97     def extensions(self):
    78         return self.configitems("extensions")
    98         return self.configitems("extensions")
    79 
    99 
    80     def diffopts(self):
   100     def diffopts(self):
   169         t = re.sub("(?m)^HG:.*\n", "", t)
   189         t = re.sub("(?m)^HG:.*\n", "", t)
   170 
   190 
   171         os.unlink(name)
   191         os.unlink(name)
   172 
   192 
   173         return t
   193         return t
       
   194