146
146
class Config(object):
147
147
"""A configuration policy - what username, editor, gpg needs etc."""
150
super(Config, self).__init__()
149
152
def get_editor(self):
150
153
"""Get the users pop up editor."""
151
154
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,
153
165
def get_mail_client(self):
154
166
"""Get a mail client to use"""
155
167
selected_client = self.get_user_option('mail_client')
174
186
"""Get a generic option - no special process, no default."""
175
187
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 ','
177
218
def gpg_signing_command(self):
178
219
"""What program should be used to sign signatures?"""
179
220
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:
299
350
class IniBasedConfig(Config):
300
351
"""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
302
358
def _get_parser(self, file=None):
303
359
if self._parser is not None:
304
360
return self._parser
332
388
"""Return the policy for the given (section, option_name) pair."""
333
389
return POLICY_NONE
391
def _get_change_editor(self):
392
return self.get_user_option('change_editor')
335
394
def _get_signature_checking(self):
336
395
"""See Config._get_signature_checking."""
337
396
policy = self._get_user_option('check_signatures')
381
440
"""See Config.log_format."""
382
441
return self._get_user_option('log_format')
384
def __init__(self, get_filename):
385
super(IniBasedConfig, self).__init__()
386
self._get_filename = get_filename
389
443
def _post_commit(self):
390
444
"""See Config.post_commit."""
391
445
return self._get_user_option('post_commit')
464
518
self._write_config_file()
466
520
def _write_config_file(self):
467
f = open(self._get_filename(), 'wb')
521
path = self._get_filename()
523
osutils.copy_ownership_from_path(path)
468
524
self._get_parser().write(f)
671
727
return self._get_best_value('_get_user_id')
729
def _get_change_editor(self):
730
return self._get_best_value('_get_change_editor')
673
732
def _get_signature_checking(self):
674
733
"""See Config._get_signature_checking."""
675
734
return self._get_best_value('_get_signature_checking')
812
872
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')
815
902
def _auto_user_id():
816
903
"""Calculate automatic user identification.
1332
1419
class PlainTextCredentialStore(CredentialStore):
1333
"""Plain text credential store for the authentication.conf file."""
1420
__doc__ = """Plain text credential store for the authentication.conf file"""
1335
1422
def decode_password(self, credentials):
1336
1423
"""See CredentialStore.decode_password."""