Mercurial > public > mercurial-scm > hg
comparison mercurial/ui.py @ 1839:876e4e6ad82b
Create local ui object per repository, so .hg/hgrc don't get mixed.
This is needed for hooks, but may be important for other settings, too.
Fixes issue113, also integrated push-hook-lock.sh as a test case for this.
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Mon, 06 Mar 2006 17:47:41 +0100 |
parents | 3b1b44b917f4 |
children | d17f19d84fd3 |
comparison
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 |