/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Martin Pool
  • Date: 2010-02-18 04:17:22 UTC
  • mto: This revision was merged to the branch mainline in revision 5051.
  • Revision ID: mbp@sourcefrog.net-20100218041722-qmx7bz11qkeeh0nn
Link to commonly-duped bugs

Show diffs side-by-side

added added

removed removed

Lines of Context:
193
193
            interpreted as a boolean. Returns True or False otherwise.
194
194
        """
195
195
        s = self._get_user_option(option_name)
196
 
        if s is None:
197
 
            # The option doesn't exist
198
 
            return None
199
 
        val = ui.bool_from_string(s)
200
 
        if val is None:
201
 
            # The value can't be interpreted as a boolean
202
 
            trace.warning('Value "%s" is not a boolean for "%s"',
203
 
                          s, option_name)
204
 
        return val
 
196
        return ui.bool_from_string(s)
205
197
 
206
198
    def get_user_option_as_list(self, option_name):
207
199
        """Get a generic option as a list - no special process, no default.
257
249
 
258
250
        Something similar to 'Martin Pool <mbp@sourcefrog.net>'
259
251
 
260
 
        $BZR_EMAIL can be set to override this, then
 
252
        $BZR_EMAIL can be set to override this (as well as the
 
253
        deprecated $BZREMAIL), then
261
254
        the concrete policy type is checked, and finally
262
255
        $EMAIL is examined.
263
 
        If no username can be found, errors.NoWhoami exception is raised.
 
256
        If none is found, a reasonable default is (hopefully)
 
257
        created.
264
258
 
265
259
        TODO: Check it's reasonably well-formed.
266
260
        """
276
270
        if v:
277
271
            return v.decode(osutils.get_user_encoding())
278
272
 
279
 
        raise errors.NoWhoami()
280
 
 
281
 
    def ensure_username(self):
282
 
        """Raise errors.NoWhoami if username is not set.
283
 
 
284
 
        This method relies on the username() function raising the error.
285
 
        """
286
 
        self.username()
 
273
        name, email = _auto_user_id()
 
274
        if name:
 
275
            return '%s <%s>' % (name, email)
 
276
        else:
 
277
            return email
287
278
 
288
279
    def signature_checking(self):
289
280
        """What is the current policy for signature checking?."""
519
510
        self._write_config_file()
520
511
 
521
512
    def _write_config_file(self):
522
 
        path = self._get_filename()
523
 
        f = open(path, 'wb')
524
 
        osutils.copy_ownership_from_path(path)
 
513
        f = open(self._get_filename(), 'wb')
525
514
        self._get_parser().write(f)
526
515
        f.close()
527
516
 
821
810
            os.mkdir(parent_dir)
822
811
        trace.mutter('creating config directory: %r', path)
823
812
        os.mkdir(path)
824
 
        osutils.copy_ownership_from_path(path)
825
813
 
826
814
 
827
815
def config_dir():
900
888
        return os.path.expanduser('~/.cache')
901
889
 
902
890
 
 
891
def _auto_user_id():
 
892
    """Calculate automatic user identification.
 
893
 
 
894
    Returns (realname, email).
 
895
 
 
896
    Only used when none is set in the environment or the id file.
 
897
 
 
898
    This previously used the FQDN as the default domain, but that can
 
899
    be very slow on machines where DNS is broken.  So now we simply
 
900
    use the hostname.
 
901
    """
 
902
    import socket
 
903
 
 
904
    if sys.platform == 'win32':
 
905
        name = win32utils.get_user_name_unicode()
 
906
        if name is None:
 
907
            raise errors.BzrError("Cannot autodetect user name.\n"
 
908
                                  "Please, set your name with command like:\n"
 
909
                                  'bzr whoami "Your Name <name@domain.com>"')
 
910
        host = win32utils.get_host_name_unicode()
 
911
        if host is None:
 
912
            host = socket.gethostname()
 
913
        return name, (name + '@' + host)
 
914
 
 
915
    try:
 
916
        import pwd
 
917
        uid = os.getuid()
 
918
        try:
 
919
            w = pwd.getpwuid(uid)
 
920
        except KeyError:
 
921
            raise errors.BzrCommandError('Unable to determine your name.  '
 
922
                'Please use "bzr whoami" to set it.')
 
923
 
 
924
        # we try utf-8 first, because on many variants (like Linux),
 
925
        # /etc/passwd "should" be in utf-8, and because it's unlikely to give
 
926
        # false positives.  (many users will have their user encoding set to
 
927
        # latin-1, which cannot raise UnicodeError.)
 
928
        try:
 
929
            gecos = w.pw_gecos.decode('utf-8')
 
930
            encoding = 'utf-8'
 
931
        except UnicodeError:
 
932
            try:
 
933
                encoding = osutils.get_user_encoding()
 
934
                gecos = w.pw_gecos.decode(encoding)
 
935
            except UnicodeError:
 
936
                raise errors.BzrCommandError('Unable to determine your name.  '
 
937
                   'Use "bzr whoami" to set it.')
 
938
        try:
 
939
            username = w.pw_name.decode(encoding)
 
940
        except UnicodeError:
 
941
            raise errors.BzrCommandError('Unable to determine your name.  '
 
942
                'Use "bzr whoami" to set it.')
 
943
 
 
944
        comma = gecos.find(',')
 
945
        if comma == -1:
 
946
            realname = gecos
 
947
        else:
 
948
            realname = gecos[:comma]
 
949
        if not realname:
 
950
            realname = username
 
951
 
 
952
    except ImportError:
 
953
        import getpass
 
954
        try:
 
955
            user_encoding = osutils.get_user_encoding()
 
956
            realname = username = getpass.getuser().decode(user_encoding)
 
957
        except UnicodeDecodeError:
 
958
            raise errors.BzrError("Can't decode username as %s." % \
 
959
                    user_encoding)
 
960
 
 
961
    return realname, (username + '@' + socket.gethostname())
 
962
 
 
963
 
903
964
def parse_username(username):
904
965
    """Parse e-mail username and return a (name, address) tuple."""
905
966
    match = re.match(r'(.*?)\s*<?([\w+.-]+@[\w+.-]+)>?', username)
1345
1406
 
1346
1407
 
1347
1408
class PlainTextCredentialStore(CredentialStore):
1348
 
    __doc__ = """Plain text credential store for the authentication.conf file"""
 
1409
    """Plain text credential store for the authentication.conf file."""
1349
1410
 
1350
1411
    def decode_password(self, credentials):
1351
1412
        """See CredentialStore.decode_password."""