/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: Jelmer Vernooij
  • Date: 2010-04-11 19:40:23 UTC
  • mto: This revision was merged to the branch mainline in revision 5144.
  • Revision ID: jelmer@samba.org-20100411194023-7iidj17toyv1wskc
Add separate tests for BzrDirs with colocated branch support and 
BzrDirs without.

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?."""
520
511
 
521
512
    def _write_config_file(self):
522
513
        path = self._get_filename()
523
 
        f = open(path, 'wb')
524
 
        osutils.copy_ownership_from_path(path)
 
514
        f = osutils.open_with_ownership(path, 'wb')
525
515
        self._get_parser().write(f)
526
516
        f.close()
527
517
 
820
810
                trace.mutter('creating config parent directory: %r', parent_dir)
821
811
            os.mkdir(parent_dir)
822
812
        trace.mutter('creating config directory: %r', path)
823
 
        os.mkdir(path)
824
 
        osutils.copy_ownership_from_path(path)
 
813
        osutils.mkdir_with_ownership(path)
825
814
 
826
815
 
827
816
def config_dir():
900
889
        return os.path.expanduser('~/.cache')
901
890
 
902
891
 
 
892
def _auto_user_id():
 
893
    """Calculate automatic user identification.
 
894
 
 
895
    Returns (realname, email).
 
896
 
 
897
    Only used when none is set in the environment or the id file.
 
898
 
 
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
 
901
    use the hostname.
 
902
    """
 
903
    import socket
 
904
 
 
905
    if sys.platform == 'win32':
 
906
        name = win32utils.get_user_name_unicode()
 
907
        if name is None:
 
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()
 
912
        if host is None:
 
913
            host = socket.gethostname()
 
914
        return name, (name + '@' + host)
 
915
 
 
916
    try:
 
917
        import pwd
 
918
        uid = os.getuid()
 
919
        try:
 
920
            w = pwd.getpwuid(uid)
 
921
        except KeyError:
 
922
            raise errors.BzrCommandError('Unable to determine your name.  '
 
923
                'Please use "bzr whoami" to set it.')
 
924
 
 
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.)
 
929
        try:
 
930
            gecos = w.pw_gecos.decode('utf-8')
 
931
            encoding = 'utf-8'
 
932
        except UnicodeError:
 
933
            try:
 
934
                encoding = osutils.get_user_encoding()
 
935
                gecos = w.pw_gecos.decode(encoding)
 
936
            except UnicodeError:
 
937
                raise errors.BzrCommandError('Unable to determine your name.  '
 
938
                   'Use "bzr whoami" to set it.')
 
939
        try:
 
940
            username = w.pw_name.decode(encoding)
 
941
        except UnicodeError:
 
942
            raise errors.BzrCommandError('Unable to determine your name.  '
 
943
                'Use "bzr whoami" to set it.')
 
944
 
 
945
        comma = gecos.find(',')
 
946
        if comma == -1:
 
947
            realname = gecos
 
948
        else:
 
949
            realname = gecos[:comma]
 
950
        if not realname:
 
951
            realname = username
 
952
 
 
953
    except ImportError:
 
954
        import getpass
 
955
        try:
 
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." % \
 
960
                    user_encoding)
 
961
 
 
962
    return realname, (username + '@' + socket.gethostname())
 
963
 
 
964
 
903
965
def parse_username(username):
904
966
    """Parse e-mail username and return a (name, address) tuple."""
905
967
    match = re.match(r'(.*?)\s*<?([\w+.-]+@[\w+.-]+)>?', username)
1345
1407
 
1346
1408
 
1347
1409
class PlainTextCredentialStore(CredentialStore):
1348
 
    __doc__ = """Plain text credential store for the authentication.conf file"""
 
1410
    """Plain text credential store for the authentication.conf file."""
1349
1411
 
1350
1412
    def decode_password(self, credentials):
1351
1413
        """See CredentialStore.decode_password."""