~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Robey Pointer
  • Date: 2006-06-29 05:12:53 UTC
  • mto: This revision was merged to the branch mainline in revision 1839.
  • Revision ID: robey@lag.net-20060629051253-f3c6c1306aebcb3d
add set_user_option to GlobalConfig, and make /etc/passwd username lookup try harder with encodings

Show diffs side-by-side

added added

removed removed

Lines of Context:
337
337
    def __init__(self):
338
338
        super(GlobalConfig, self).__init__(config_filename)
339
339
 
 
340
    def set_user_option(self, option, value):
 
341
        """Save option and its value in the configuration."""
 
342
        # FIXME: RBC 20051029 This should refresh the parser and also take a
 
343
        # file lock on bazaar.conf.
 
344
        conf_dir = os.path.dirname(self._get_filename())
 
345
        ensure_config_dir_exists(conf_dir)
 
346
        if 'DEFAULT' not in self._get_parser():
 
347
            self._get_parser()['DEFAULT'] = {}
 
348
        self._get_parser()['DEFAULT'][option] = value
 
349
        f = open(self._get_filename(), 'wb')
 
350
        self._get_parser().write(f)
 
351
        f.close()
 
352
 
340
353
 
341
354
class LocationConfig(IniBasedConfig):
342
355
    """A configuration object that gives the policy for a location."""
597
610
        uid = os.getuid()
598
611
        w = pwd.getpwuid(uid)
599
612
 
600
 
        try:
601
 
            gecos = w.pw_gecos.decode(bzrlib.user_encoding)
602
 
            username = w.pw_name.decode(bzrlib.user_encoding)
603
 
        except UnicodeDecodeError:
604
 
            # We're using pwd, therefore we're on Unix, so /etc/passwd is ok.
605
 
            raise errors.BzrError("Can't decode username in " \
606
 
                    "/etc/passwd as %s." % bzrlib.user_encoding)
 
613
        # we try utf-8 first, because on many variants (like Linux),
 
614
        # /etc/passwd "should" be in utf-8, and because it's unlikely to give
 
615
        # false positives.  (many users will have their user encoding set to
 
616
        # latin-1, which cannot raise UnicodeError.)
 
617
        try:
 
618
            gecos = w.pw_gecos.decode('utf-8')
 
619
            encoding = 'utf-8'
 
620
        except UnicodeError:
 
621
            try:
 
622
                gecos = w.pw_gecos.decode(bzrlib.user_encoding)
 
623
                encoding = bzrlib.user_encoding
 
624
            except UnicodeError:
 
625
                raise errors.BzrCommandError('Unable to determine your name.  '
 
626
                   'Use "bzr whoami" to set it.')
 
627
        try:
 
628
            username = w.pw_name.decode(encoding)
 
629
        except UnicodeError:
 
630
            raise errors.BzrCommandError('Unable to determine your name.  '
 
631
                'Use "bzr whoami" to set it.')
607
632
 
608
633
        comma = gecos.find(',')
609
634
        if comma == -1: