~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

merge bzr.dev

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."""
345
358
        name_generator = locations_config_filename
346
359
        if (not os.path.exists(name_generator()) and 
347
360
                os.path.exists(branches_config_filename())):
348
 
            warning('Please rename branches.conf to locations.conf')
 
361
            if sys.platform == 'win32':
 
362
                warning('Please rename %s to %s' 
 
363
                         % (branches_config_filename(),
 
364
                            locations_config_filename()))
 
365
            else:
 
366
                warning('Please rename ~/.bazaar/branches.conf'
 
367
                        ' to ~/.bazaar/locations.conf')
349
368
            name_generator = branches_config_filename
350
369
        super(LocationConfig, self).__init__(name_generator)
351
370
        self.location = location
579
598
    """Return per-user configuration ini file filename."""
580
599
    return pathjoin(config_dir(), 'branches.conf')
581
600
 
 
601
 
582
602
def locations_config_filename():
583
603
    """Return per-user configuration ini file filename."""
584
604
    return pathjoin(config_dir(), 'locations.conf')
604
624
        uid = os.getuid()
605
625
        w = pwd.getpwuid(uid)
606
626
 
607
 
        try:
608
 
            gecos = w.pw_gecos.decode(bzrlib.user_encoding)
609
 
            username = w.pw_name.decode(bzrlib.user_encoding)
610
 
        except UnicodeDecodeError:
611
 
            # We're using pwd, therefore we're on Unix, so /etc/passwd is ok.
612
 
            raise errors.BzrError("Can't decode username in " \
613
 
                    "/etc/passwd as %s." % bzrlib.user_encoding)
 
627
        # we try utf-8 first, because on many variants (like Linux),
 
628
        # /etc/passwd "should" be in utf-8, and because it's unlikely to give
 
629
        # false positives.  (many users will have their user encoding set to
 
630
        # latin-1, which cannot raise UnicodeError.)
 
631
        try:
 
632
            gecos = w.pw_gecos.decode('utf-8')
 
633
            encoding = 'utf-8'
 
634
        except UnicodeError:
 
635
            try:
 
636
                gecos = w.pw_gecos.decode(bzrlib.user_encoding)
 
637
                encoding = bzrlib.user_encoding
 
638
            except UnicodeError:
 
639
                raise errors.BzrCommandError('Unable to determine your name.  '
 
640
                   'Use "bzr whoami" to set it.')
 
641
        try:
 
642
            username = w.pw_name.decode(encoding)
 
643
        except UnicodeError:
 
644
            raise errors.BzrCommandError('Unable to determine your name.  '
 
645
                'Use "bzr whoami" to set it.')
614
646
 
615
647
        comma = gecos.find(',')
616
648
        if comma == -1: