comparison mercurial/ui.py @ 8136:6b5522cb2ad2

ui: refactor option setting No more passing options as constructor keywords. Basic options are now always stored in the overlay for simplicity and consistency.
author Matt Mackall <mpm@selenic.com>
date Thu, 23 Apr 2009 15:40:10 -0500
parents 16771d7c64e2
children 7fd0616b3d80
comparison
equal deleted inserted replaced
8135:16771d7c64e2 8136:6b5522cb2ad2
22 dest.add_section(section) 22 dest.add_section(section)
23 for name, value in source.items(section, raw=True): 23 for name, value in source.items(section, raw=True):
24 dest.set(section, name, value) 24 dest.set(section, name, value)
25 25
26 class ui(object): 26 class ui(object):
27 def __init__(self, verbose=False, debug=False, quiet=False, 27 def __init__(self, parentui=None):
28 interactive=True, traceback=False, report_untrusted=True,
29 parentui=None):
30 self.buffers = [] 28 self.buffers = []
29 self.quiet = self.verbose = self.debugflag = self.traceback = False
30 self.interactive = self.report_untrusted = True
31
31 if parentui is None: 32 if parentui is None:
32 # this is the parent of all ui children 33 # this is the parent of all ui children
33 self.parentui = None 34 self.parentui = None
34 self.quiet = quiet
35 self.verbose = verbose
36 self.debugflag = debug
37 self.interactive = interactive
38 self.traceback = traceback
39 self.report_untrusted = report_untrusted
40 self.trusted_users = {} 35 self.trusted_users = {}
41 self.trusted_groups = {} 36 self.trusted_groups = {}
42 self.overlay = util.configparser() 37 self.overlay = util.configparser()
43 # if ucdata is not None, its keys must be a superset of cdata's 38 # if ucdata is not None, its keys must be a superset of cdata's
44 self.cdata = util.configparser() 39 self.cdata = util.configparser()
45 self.ucdata = None 40 self.ucdata = None
46 # we always trust global config files 41 # we always trust global config files
47 self.readconfig(util.rcpath(), assumetrusted=True) 42 self.readconfig(util.rcpath(), assumetrusted=True)
48 self.updateopts(verbose, debug, quiet, interactive)
49 else: 43 else:
50 # 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
51 self.parentui = parentui.parentui or parentui 45 self.parentui = parentui.parentui or parentui
52 self.trusted_users = parentui.trusted_users.copy() 46 self.trusted_users = parentui.trusted_users.copy()
53 self.trusted_groups = parentui.trusted_groups.copy() 47 self.trusted_groups = parentui.trusted_groups.copy()
64 return getattr(self.parentui, key) 58 return getattr(self.parentui, key)
65 59
66 _isatty = None 60 _isatty = None
67 def isatty(self): 61 def isatty(self):
68 if ui._isatty is None: 62 if ui._isatty is None:
69 ui._isatty = sys.stdin.isatty() 63 try:
64 ui._isatty = sys.stdin.isatty()
65 except AttributeError: # not a real file object
66 ui._isatty = False
70 return ui._isatty 67 return ui._isatty
71 68
72 def updateopts(self, verbose=False, debug=False, quiet=False, 69 def updateopts(self, config):
73 interactive=True, traceback=False, config=[]):
74 for section, name, value in config: 70 for section, name, value in config:
75 self.setconfig(section, name, value) 71 self.setconfig(section, name, value)
76
77 if quiet or verbose or debug:
78 self.setconfig('ui', 'quiet', str(bool(quiet)))
79 self.setconfig('ui', 'verbose', str(bool(verbose)))
80 self.setconfig('ui', 'debug', str(bool(debug)))
81
82 if not interactive:
83 self.setconfig('ui', 'interactive', 'False')
84 self.interactive = False
85
86 self.traceback = self.traceback or traceback
87 72
88 def verbosity_constraints(self): 73 def verbosity_constraints(self):
89 self.quiet = self.configbool('ui', 'quiet') 74 self.quiet = self.configbool('ui', 'quiet')
90 self.verbose = self.configbool('ui', 'verbose') 75 self.verbose = self.configbool('ui', 'verbose')
91 self.debugflag = self.configbool('ui', 'debug') 76 self.debugflag = self.configbool('ui', 'debug')
213 else: 198 else:
214 self.interactive = interactive 199 self.interactive = interactive
215 if name is None or name == 'report_untrusted': 200 if name is None or name == 'report_untrusted':
216 self.report_untrusted = ( 201 self.report_untrusted = (
217 self.configbool("ui", "report_untrusted", True)) 202 self.configbool("ui", "report_untrusted", True))
203 self.traceback = self.configbool('ui', 'traceback', False)
218 204
219 # update trust information 205 # update trust information
220 if (section is None or section == 'trusted') and self.trusted_users: 206 if (section is None or section == 'trusted') and self.trusted_users:
221 for user in self.configlist('trusted', 'users'): 207 for user in self.configlist('trusted', 'users'):
222 self.trusted_users[user] = 1 208 self.trusted_users[user] = 1