Mercurial > public > mercurial-scm > hg
comparison mercurial/ui.py @ 3099:09e8aecd8016
Merge with backout
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 15 Sep 2006 16:01:16 -0500 |
parents | c27d1e1798a3 24c1db20990c |
children | 1b6d0fa84e0d |
comparison
equal
deleted
inserted
replaced
3098:c27d1e1798a3 | 3099:09e8aecd8016 |
---|---|
10 demandload(globals(), "errno getpass os re socket sys tempfile") | 10 demandload(globals(), "errno getpass os re socket sys tempfile") |
11 demandload(globals(), "ConfigParser mdiff templater traceback util") | 11 demandload(globals(), "ConfigParser mdiff templater traceback 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, traceback=False, parentui=None, | 15 interactive=True, traceback=False, parentui=None): |
16 readhooks=[]): | |
17 self.overlay = {} | 16 self.overlay = {} |
18 if parentui is None: | 17 if parentui is None: |
19 # this is the parent of all ui children | 18 # this is the parent of all ui children |
20 self.parentui = None | 19 self.parentui = None |
21 self.readhooks = list(readhooks) | 20 self.readhooks = [] |
22 self.cdata = ConfigParser.SafeConfigParser() | 21 self.cdata = ConfigParser.SafeConfigParser() |
23 self.readconfig(util.rcpath()) | 22 self.readconfig(util.rcpath()) |
24 | 23 |
25 self.quiet = self.configbool("ui", "quiet") | 24 self.quiet = self.configbool("ui", "quiet") |
26 self.verbose = self.configbool("ui", "verbose") | 25 self.verbose = self.configbool("ui", "verbose") |
34 self.prev_header = [] | 33 self.prev_header = [] |
35 self.revlogopts = self.configrevlog() | 34 self.revlogopts = self.configrevlog() |
36 else: | 35 else: |
37 # parentui may point to an ui object which is already a child | 36 # parentui may point to an ui object which is already a child |
38 self.parentui = parentui.parentui or parentui | 37 self.parentui = parentui.parentui or parentui |
39 self.readhooks = list(parentui.readhooks or readhooks) | 38 self.readhooks = parentui.readhooks[:] |
40 parent_cdata = self.parentui.cdata | 39 parent_cdata = self.parentui.cdata |
41 self.cdata = ConfigParser.SafeConfigParser(parent_cdata.defaults()) | 40 self.cdata = ConfigParser.SafeConfigParser(parent_cdata.defaults()) |
42 # make interpolation work | 41 # make interpolation work |
43 for section in parent_cdata.sections(): | 42 for section in parent_cdata.sections(): |
44 self.cdata.add_section(section) | 43 self.cdata.add_section(section) |
49 return getattr(self.parentui, key) | 48 return getattr(self.parentui, key) |
50 | 49 |
51 def updateopts(self, verbose=False, debug=False, quiet=False, | 50 def updateopts(self, verbose=False, debug=False, quiet=False, |
52 interactive=True, traceback=False, config=[]): | 51 interactive=True, traceback=False, config=[]): |
53 self.quiet = (self.quiet or quiet) and not verbose and not debug | 52 self.quiet = (self.quiet or quiet) and not verbose and not debug |
54 self.verbose = (self.verbose or verbose) or debug | 53 self.verbose = ((self.verbose or verbose) or debug) and not self.quiet |
55 self.debugflag = (self.debugflag or debug) | 54 self.debugflag = (self.debugflag or debug) |
56 self.interactive = (self.interactive and interactive) | 55 self.interactive = (self.interactive and interactive) |
57 self.traceback = self.traceback or traceback | 56 self.traceback = self.traceback or traceback |
58 for cfg in config: | 57 for cfg in config: |
59 try: | 58 try: |
82 if path and "://" not in path and not os.path.isabs(path): | 81 if path and "://" not in path and not os.path.isabs(path): |
83 self.cdata.set("paths", name, os.path.join(root, path)) | 82 self.cdata.set("paths", name, os.path.join(root, path)) |
84 for hook in self.readhooks: | 83 for hook in self.readhooks: |
85 hook(self) | 84 hook(self) |
86 | 85 |
86 def addreadhook(self, hook): | |
87 self.readhooks.append(hook) | |
88 | |
87 def setconfig(self, section, name, val): | 89 def setconfig(self, section, name, val): |
88 self.overlay[(section, name)] = val | 90 self.overlay[(section, name)] = val |
89 | 91 |
90 def config(self, section, name, default=None): | 92 def config(self, section, name, default=None): |
91 if self.overlay.has_key((section, name)): | 93 if self.overlay.has_key((section, name)): |
92 return self.overlay[(section, name)] | 94 return self.overlay[(section, name)] |
93 if self.cdata.has_option(section, name): | 95 if self.cdata.has_option(section, name): |
94 try: | 96 try: |
95 return self.cdata.get(section, name) | 97 return self.cdata.get(section, name) |
96 except ConfigParser.InterpolationError, inst: | 98 except ConfigParser.InterpolationError, inst: |
97 raise util.Abort(_("Error in configuration:\n%s") % inst) | 99 raise util.Abort(_("Error in configuration section [%s] " |
100 "parameter '%s':\n%s") | |
101 % (section, name, inst)) | |
98 if self.parentui is None: | 102 if self.parentui is None: |
99 return default | 103 return default |
100 else: | 104 else: |
101 return self.parentui.config(section, name, default) | 105 return self.parentui.config(section, name, default) |
102 | 106 |
114 return self.overlay[(section, name)] | 118 return self.overlay[(section, name)] |
115 if self.cdata.has_option(section, name): | 119 if self.cdata.has_option(section, name): |
116 try: | 120 try: |
117 return self.cdata.getboolean(section, name) | 121 return self.cdata.getboolean(section, name) |
118 except ConfigParser.InterpolationError, inst: | 122 except ConfigParser.InterpolationError, inst: |
119 raise util.Abort(_("Error in configuration:\n%s") % inst) | 123 raise util.Abort(_("Error in configuration section [%s] " |
124 "parameter '%s':\n%s") | |
125 % (section, name, inst)) | |
120 if self.parentui is None: | 126 if self.parentui is None: |
121 return default | 127 return default |
122 else: | 128 else: |
123 return self.parentui.configbool(section, name, default) | 129 return self.parentui.configbool(section, name, default) |
124 | 130 |
132 items = dict(self.parentui.configitems(section)) | 138 items = dict(self.parentui.configitems(section)) |
133 if self.cdata.has_section(section): | 139 if self.cdata.has_section(section): |
134 try: | 140 try: |
135 items.update(dict(self.cdata.items(section))) | 141 items.update(dict(self.cdata.items(section))) |
136 except ConfigParser.InterpolationError, inst: | 142 except ConfigParser.InterpolationError, inst: |
137 raise util.Abort(_("Error in configuration:\n%s") % inst) | 143 raise util.Abort(_("Error in configuration section [%s]:\n%s") |
144 % (section, inst)) | |
138 x = items.items() | 145 x = items.items() |
139 x.sort() | 146 x.sort() |
140 return x | 147 return x |
141 | 148 |
142 def walkconfig(self, seen=None): | 149 def walkconfig(self, seen=None): |
144 seen = {} | 151 seen = {} |
145 for (section, name), value in self.overlay.iteritems(): | 152 for (section, name), value in self.overlay.iteritems(): |
146 yield section, name, value | 153 yield section, name, value |
147 seen[section, name] = 1 | 154 seen[section, name] = 1 |
148 for section in self.cdata.sections(): | 155 for section in self.cdata.sections(): |
149 for name, value in self.cdata.items(section): | 156 try: |
150 if (section, name) in seen: continue | 157 for name, value in self.cdata.items(section): |
151 yield section, name, value.replace('\n', '\\n') | 158 if (section, name) in seen: continue |
152 seen[section, name] = 1 | 159 yield section, name, value.replace('\n', '\\n') |
160 seen[section, name] = 1 | |
161 except ConfigParser.InterpolationError, inst: | |
162 raise util.Abort(_("Error in configuration section [%s]:\n%s") | |
163 % (section, inst)) | |
153 if self.parentui is not None: | 164 if self.parentui is not None: |
154 for parent in self.parentui.walkconfig(seen): | 165 for parent in self.parentui.walkconfig(seen): |
155 yield parent | 166 yield parent |
156 | 167 |
157 def extensions(self): | 168 def extensions(self): |