193
193
interpreted as a boolean. Returns True or False otherwise.
195
195
s = self._get_user_option(option_name)
196
return ui.bool_from_string(s)
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"',
198
206
def get_user_option_as_list(self, option_name):
199
207
"""Get a generic option as a list - no special process, no default.
250
258
Something similar to 'Martin Pool <mbp@sourcefrog.net>'
252
$BZR_EMAIL can be set to override this (as well as the
253
deprecated $BZREMAIL), then
260
$BZR_EMAIL can be set to override this, then
254
261
the concrete policy type is checked, and finally
255
262
$EMAIL is examined.
256
If none is found, a reasonable default is (hopefully)
263
If no username can be found, errors.NoWhoami exception is raised.
259
265
TODO: Check it's reasonably well-formed.
271
277
return v.decode(osutils.get_user_encoding())
273
name, email = _auto_user_id()
275
return '%s <%s>' % (name, email)
279
raise errors.NoWhoami()
281
def ensure_username(self):
282
"""Raise errors.NoWhoami if username is not set.
284
This method relies on the username() function raising the error.
279
288
def signature_checking(self):
280
289
"""What is the current policy for signature checking?."""
512
521
def _write_config_file(self):
513
522
path = self._get_filename()
514
f = osutils.open_with_ownership(path, 'wb')
524
osutils.copy_ownership_from_path(path)
515
525
self._get_parser().write(f)
889
900
return os.path.expanduser('~/.cache')
893
"""Calculate automatic user identification.
895
Returns (realname, email).
897
Only used when none is set in the environment or the id file.
899
This previously used the FQDN as the default domain, but that can
900
be very slow on machines where DNS is broken. So now we simply
905
if sys.platform == 'win32':
906
name = win32utils.get_user_name_unicode()
908
raise errors.BzrError("Cannot autodetect user name.\n"
909
"Please, set your name with command like:\n"
910
'bzr whoami "Your Name <name@domain.com>"')
911
host = win32utils.get_host_name_unicode()
913
host = socket.gethostname()
914
return name, (name + '@' + host)
920
w = pwd.getpwuid(uid)
922
raise errors.BzrCommandError('Unable to determine your name. '
923
'Please use "bzr whoami" to set it.')
925
# we try utf-8 first, because on many variants (like Linux),
926
# /etc/passwd "should" be in utf-8, and because it's unlikely to give
927
# false positives. (many users will have their user encoding set to
928
# latin-1, which cannot raise UnicodeError.)
930
gecos = w.pw_gecos.decode('utf-8')
934
encoding = osutils.get_user_encoding()
935
gecos = w.pw_gecos.decode(encoding)
937
raise errors.BzrCommandError('Unable to determine your name. '
938
'Use "bzr whoami" to set it.')
940
username = w.pw_name.decode(encoding)
942
raise errors.BzrCommandError('Unable to determine your name. '
943
'Use "bzr whoami" to set it.')
945
comma = gecos.find(',')
949
realname = gecos[:comma]
956
user_encoding = osutils.get_user_encoding()
957
realname = username = getpass.getuser().decode(user_encoding)
958
except UnicodeDecodeError:
959
raise errors.BzrError("Can't decode username as %s." % \
962
return realname, (username + '@' + socket.gethostname())
965
903
def parse_username(username):
966
904
"""Parse e-mail username and return a (name, address) tuple."""
967
905
match = re.match(r'(.*?)\s*<?([\w+.-]+@[\w+.-]+)>?', username)
1409
1347
class PlainTextCredentialStore(CredentialStore):
1410
"""Plain text credential store for the authentication.conf file."""
1348
__doc__ = """Plain text credential store for the authentication.conf file"""
1412
1350
def decode_password(self, credentials):
1413
1351
"""See CredentialStore.decode_password."""