30 self.prev_header = [] |
30 self.prev_header = [] |
31 if parentui is None: |
31 if parentui is None: |
32 # this is the parent of all ui children |
32 # this is the parent of all ui children |
33 self.parentui = None |
33 self.parentui = None |
34 self.readhooks = [] |
34 self.readhooks = [] |
|
35 self.quiet = quiet |
|
36 self.verbose = verbose |
|
37 self.debugflag = debug |
|
38 self.interactive = interactive |
|
39 self.traceback = traceback |
35 self.cdata = ConfigParser.SafeConfigParser() |
40 self.cdata = ConfigParser.SafeConfigParser() |
36 self.readconfig(util.rcpath()) |
41 self.readconfig(util.rcpath()) |
37 |
|
38 self.quiet = self.configbool("ui", "quiet") |
|
39 self.verbose = self.configbool("ui", "verbose") |
|
40 self.debugflag = self.configbool("ui", "debug") |
|
41 self.interactive = self.configbool("ui", "interactive", True) |
|
42 self.traceback = traceback |
|
43 |
|
44 self.updateopts(verbose, debug, quiet, interactive) |
42 self.updateopts(verbose, debug, quiet, interactive) |
45 else: |
43 else: |
46 # parentui may point to an ui object which is already a child |
44 # parentui may point to an ui object which is already a child |
47 self.parentui = parentui.parentui or parentui |
45 self.parentui = parentui.parentui or parentui |
48 self.readhooks = self.parentui.readhooks[:] |
46 self.readhooks = self.parentui.readhooks[:] |
53 def __getattr__(self, key): |
51 def __getattr__(self, key): |
54 return getattr(self.parentui, key) |
52 return getattr(self.parentui, key) |
55 |
53 |
56 def updateopts(self, verbose=False, debug=False, quiet=False, |
54 def updateopts(self, verbose=False, debug=False, quiet=False, |
57 interactive=True, traceback=False, config=[]): |
55 interactive=True, traceback=False, config=[]): |
58 self.quiet = self.quiet or quiet |
|
59 self.verbose = self.verbose or verbose |
|
60 self.debugflag = self.debugflag or debug |
|
61 |
|
62 self.verbosity_constraints(quiet, verbose, debug) |
|
63 |
|
64 self.interactive = (self.interactive and interactive) |
|
65 self.traceback = self.traceback or traceback |
|
66 for section, name, value in config: |
56 for section, name, value in config: |
67 self.setconfig(section, name, value) |
57 self.setconfig(section, name, value) |
68 |
58 |
69 def verbosity_constraints(self, quiet, verbose, debug): |
59 if quiet or verbose or debug: |
|
60 self.setconfig('ui', 'quiet', str(bool(quiet))) |
|
61 self.setconfig('ui', 'verbose', str(bool(verbose))) |
|
62 self.setconfig('ui', 'debug', str(bool(debug))) |
|
63 |
|
64 self.verbosity_constraints() |
|
65 |
|
66 if not interactive: |
|
67 self.setconfig('ui', 'interactive', 'False') |
|
68 self.interactive = False |
|
69 |
|
70 self.traceback = self.traceback or traceback |
|
71 |
|
72 def verbosity_constraints(self): |
|
73 self.quiet = self.configbool('ui', 'quiet') |
|
74 self.verbose = self.configbool('ui', 'verbose') |
|
75 self.debugflag = self.configbool('ui', 'debug') |
|
76 |
70 if self.debugflag: |
77 if self.debugflag: |
71 self.verbose = True |
78 self.verbose = True |
72 self.quiet = False |
79 self.quiet = False |
73 elif self.verbose and self.quiet: |
80 elif self.verbose and self.quiet: |
74 if quiet and not verbose: |
81 self.quiet = self.verbose = False |
75 self.verbose = False |
|
76 elif not quiet and verbose: |
|
77 self.quiet = False |
|
78 else: |
|
79 self.quiet = self.verbose = False |
|
80 |
82 |
81 def readconfig(self, fn, root=None): |
83 def readconfig(self, fn, root=None): |
82 if isinstance(fn, basestring): |
84 if isinstance(fn, basestring): |
83 fn = [fn] |
85 fn = [fn] |
84 for f in fn: |
86 for f in fn: |
111 else: |
113 else: |
112 pathsitems = items |
114 pathsitems = items |
113 for n, path in pathsitems: |
115 for n, path in pathsitems: |
114 if path and "://" not in path and not os.path.isabs(path): |
116 if path and "://" not in path and not os.path.isabs(path): |
115 cdata.set("paths", n, os.path.join(root, path)) |
117 cdata.set("paths", n, os.path.join(root, path)) |
|
118 |
|
119 # update quiet/verbose/debug and interactive status |
|
120 if section is None or section == 'ui': |
|
121 if name is None or name in ('quiet', 'verbose', 'debug'): |
|
122 self.verbosity_constraints() |
|
123 |
|
124 if name is None or name == 'interactive': |
|
125 self.interactive = self.configbool("ui", "interactive", True) |
116 |
126 |
117 def setconfig(self, section, name, value): |
127 def setconfig(self, section, name, value): |
118 if not self.overlay: |
128 if not self.overlay: |
119 self.overlay = ConfigParser.SafeConfigParser() |
129 self.overlay = ConfigParser.SafeConfigParser() |
120 for cdata in (self.overlay, self.cdata): |
130 for cdata in (self.overlay, self.cdata): |