Mercurial > hg > mercurial-crew-with-dirclash
comparison mercurial/ui.py @ 1842:eff3496d153d
merge with crew.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Mon, 06 Mar 2006 10:50:26 -0800 |
parents | d17f19d84fd3 |
children | 89a6ce5ae510 |
comparison
equal
deleted
inserted
replaced
1841:7f12a63568ae | 1842:eff3496d153d |
---|---|
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 | 19 if parentui is None: |
20 self.quiet = self.configbool("ui", "quiet") | 20 self.readconfig(util.rcpath) |
21 self.verbose = self.configbool("ui", "verbose") | 21 |
22 self.debugflag = self.configbool("ui", "debug") | 22 self.quiet = self.configbool("ui", "quiet") |
23 self.interactive = self.configbool("ui", "interactive", True) | 23 self.verbose = self.configbool("ui", "verbose") |
24 | 24 self.debugflag = self.configbool("ui", "debug") |
25 self.updateopts(verbose, debug, quiet, interactive) | 25 self.interactive = self.configbool("ui", "interactive", True) |
26 self.diffcache = None | 26 |
27 self.updateopts(verbose, debug, quiet, interactive) | |
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() |
65 | 79 x.sort() |
66 def walkconfig(self): | 80 return x |
67 seen = {} | 81 |
82 def walkconfig(self, seen=None): | |
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): |
129 | 149 |
130 def write_err(self, *args): | 150 def write_err(self, *args): |
131 if not sys.stdout.closed: sys.stdout.flush() | 151 if not sys.stdout.closed: sys.stdout.flush() |
132 for a in args: | 152 for a in args: |
133 sys.stderr.write(str(a)) | 153 sys.stderr.write(str(a)) |
154 | |
155 def flush(self): | |
156 try: | |
157 sys.stdout.flush() | |
158 finally: | |
159 sys.stderr.flush() | |
134 | 160 |
135 def readline(self): | 161 def readline(self): |
136 return sys.stdin.readline()[:-1] | 162 return sys.stdin.readline()[:-1] |
137 def prompt(self, msg, pat, default="y"): | 163 def prompt(self, msg, pat, default="y"): |
138 if not self.interactive: return default | 164 if not self.interactive: return default |
169 t = re.sub("(?m)^HG:.*\n", "", t) | 195 t = re.sub("(?m)^HG:.*\n", "", t) |
170 | 196 |
171 os.unlink(name) | 197 os.unlink(name) |
172 | 198 |
173 return t | 199 return t |
200 |