146
146
class Config(object):
147
147
"""A configuration policy - what username, editor, gpg needs etc."""
150
super(Config, self).__init__()
152
149
def get_editor(self):
153
150
"""Get the users pop up editor."""
154
151
raise NotImplementedError
156
def get_change_editor(self, old_tree, new_tree):
157
from bzrlib import diff
158
cmd = self._get_change_editor()
161
return diff.DiffFromTool.from_string(cmd, old_tree, new_tree,
165
153
def get_mail_client(self):
166
154
"""Get a mail client to use"""
167
155
selected_client = self.get_user_option('mail_client')
186
174
"""Get a generic option - no special process, no default."""
187
175
return self._get_user_option(option_name)
189
def get_user_option_as_bool(self, option_name):
190
"""Get a generic option as a boolean - no special process, no default.
192
:return None if the option doesn't exist or its value can't be
193
interpreted as a boolean. Returns True or False otherwise.
195
s = self._get_user_option(option_name)
197
# The option doesn't exist
199
val = ui.bool_from_string(s)
201
# The value can't be interpreted as a boolean
202
trace.warning('Value "%s" is not a boolean for "%s"',
206
def get_user_option_as_list(self, option_name):
207
"""Get a generic option as a list - no special process, no default.
209
:return None if the option doesn't exist. Returns the value as a list
212
l = self._get_user_option(option_name)
213
if isinstance(l, (str, unicode)):
214
# A single value, most probably the user forgot the final ','
218
177
def gpg_signing_command(self):
219
178
"""What program should be used to sign signatures?"""
220
179
result = self._gpg_signing_command()
336
def suppress_warning(self, warning):
337
"""Should the warning be suppressed or emitted.
339
:param warning: The name of the warning being tested.
341
:returns: True if the warning should be suppressed, False otherwise.
343
warnings = self.get_user_option_as_list('suppress_warnings')
344
if warnings is None or warning not in warnings:
350
299
class IniBasedConfig(Config):
351
300
"""A configuration policy that draws from ini files."""
353
def __init__(self, get_filename):
354
super(IniBasedConfig, self).__init__()
355
self._get_filename = get_filename
358
302
def _get_parser(self, file=None):
359
303
if self._parser is not None:
360
304
return self._parser
388
332
"""Return the policy for the given (section, option_name) pair."""
389
333
return POLICY_NONE
391
def _get_change_editor(self):
392
return self.get_user_option('change_editor')
394
335
def _get_signature_checking(self):
395
336
"""See Config._get_signature_checking."""
396
337
policy = self._get_user_option('check_signatures')
440
381
"""See Config.log_format."""
441
382
return self._get_user_option('log_format')
384
def __init__(self, get_filename):
385
super(IniBasedConfig, self).__init__()
386
self._get_filename = get_filename
443
389
def _post_commit(self):
444
390
"""See Config.post_commit."""
445
391
return self._get_user_option('post_commit')
518
464
self._write_config_file()
520
466
def _write_config_file(self):
521
path = self._get_filename()
523
osutils.copy_ownership_from_path(path)
467
f = open(self._get_filename(), 'wb')
524
468
self._get_parser().write(f)
727
671
return self._get_best_value('_get_user_id')
729
def _get_change_editor(self):
730
return self._get_best_value('_get_change_editor')
732
673
def _get_signature_checking(self):
733
674
"""See Config._get_signature_checking."""
734
675
return self._get_best_value('_get_signature_checking')
872
812
return osutils.pathjoin(config_dir(), 'ignore')
876
"""Return the directory name to store crash files.
878
This doesn't implicitly create it.
880
On Windows it's in the config directory; elsewhere it's /var/crash
881
which may be monitored by apport. It can be overridden by
884
if sys.platform == 'win32':
885
return osutils.pathjoin(config_dir(), 'Crash')
887
# XXX: hardcoded in apport_python_hook.py; therefore here too -- mbp
889
return os.environ.get('APPORT_CRASH_DIR', '/var/crash')
893
# See http://standards.freedesktop.org/basedir-spec/latest/ar01s03.html
894
# Possibly this should be different on Windows?
895
e = os.environ.get('XDG_CACHE_DIR', None)
899
return os.path.expanduser('~/.cache')
902
815
def _auto_user_id():
903
816
"""Calculate automatic user identification.
1419
1332
class PlainTextCredentialStore(CredentialStore):
1420
__doc__ = """Plain text credential store for the authentication.conf file"""
1333
"""Plain text credential store for the authentication.conf file."""
1422
1335
def decode_password(self, credentials):
1423
1336
"""See CredentialStore.decode_password."""