~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

Move the '_save' parameter from '__init__' to 'from_bytes', fix fallouts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
356
356
    """A configuration policy that draws from ini files."""
357
357
 
358
358
    def __init__(self, get_filename=symbol_versioning.DEPRECATED_PARAMETER,
359
 
                 file_name=None, _content=None, _save=False):
 
359
                 file_name=None):
360
360
        """Base class for configuration files using an ini-like syntax.
361
361
 
362
362
        :param file_name: The configuration file path.
363
 
 
364
 
        :param _content: For tests only, a string representing the file
365
 
            content. This will be utf-8 encoded.
366
 
 
367
 
         :param _save: For tests only, whether the file should be saved upon
368
 
            creation.
369
363
        """
370
364
        super(IniBasedConfig, self).__init__()
371
365
        self.file_name = file_name
377
371
                stacklevel=2)
378
372
            if get_filename is not None:
379
373
                self.file_name = get_filename()
380
 
        if _content is not None:
381
 
            # wrap the content as a file-like object
382
 
            _content = StringIO(_content.encode('utf-8'))
383
 
        self._content = _content
 
374
        else:
 
375
            self.file_name = file_name
 
376
        self._content = None
384
377
        self._parser = None
 
378
 
 
379
    @classmethod
 
380
    def from_bytes(cls, unicode_bytes, file_name=None, save=False):
 
381
        """Create a config object from bytes.
 
382
 
 
383
        :param unicode_bytes: A string representing the file content. This will
 
384
            be utf-8 encoded.
 
385
 
 
386
        :param file_name: The configuration file path.
 
387
 
 
388
        :param _save: Whether the file should be saved upon creation.
 
389
        """
 
390
        conf = cls(file_name=file_name)
 
391
        conf._create_from_bytes(unicode_bytes, save)
 
392
        return conf
 
393
 
 
394
    def _create_from_bytes(self, unicode_bytes, save):
 
395
        self._content = StringIO(unicode_bytes.encode('utf-8'))
385
396
        # Some tests use in-memory configs, some other always need the config
386
397
        # file to exist on disk.
387
 
        if _save:
 
398
        if save:
388
399
            self._write_config_file()
389
400
 
390
401
    def _get_parser(self, file=symbol_versioning.DEPRECATED_PARAMETER):
564
575
 
565
576
    lock_name = 'lock'
566
577
 
567
 
    def __init__(self, file_name, _content=None, _save=False):
568
 
        super(LockableConfig, self).__init__(file_name=file_name,
569
 
                                             _content=_content, _save=False)
 
578
    def __init__(self, file_name):
 
579
        super(LockableConfig, self).__init__(file_name=file_name)
570
580
        self.dir = osutils.dirname(osutils.safe_unicode(self.file_name))
571
581
        self.transport = transport.get_transport(self.dir)
572
582
        self._lock = lockdir.LockDir(self.transport, 'lock')
573
 
        if _save:
 
583
 
 
584
    def _create_from_bytes(self, unicode_bytes, save):
 
585
        super(LockableConfig, self)._create_from_bytes(unicode_bytes, False)
 
586
        if save:
574
587
            # We need to handle the saving here (as opposed to IniBasedConfig)
575
588
            # to be able to lock
576
589
            self.lock_write()
602
615
class GlobalConfig(LockableConfig):
603
616
    """The configuration that should be used for a specific location."""
604
617
 
605
 
    def __init__(self, _content=None, _save=False):
606
 
        super(GlobalConfig, self).__init__(file_name=config_filename(),
607
 
                                           _content=_content, _save=_save)
 
618
    def __init__(self):
 
619
        super(GlobalConfig, self).__init__(file_name=config_filename())
 
620
 
 
621
    @classmethod
 
622
    def from_bytes(cls, unicode_bytes, save=False):
 
623
        """Create a config object from bytes.
 
624
 
 
625
        :param unicode_bytes: A string representing the file content. This will
 
626
            be utf-8 encoded.
 
627
 
 
628
        :param save: Whether the file should be saved upon creation.
 
629
        """
 
630
        conf = cls()
 
631
        conf._create_from_bytes(unicode_bytes, save)
 
632
        return conf
608
633
 
609
634
    def get_editor(self):
610
635
        return self._get_user_option('editor')
645
670
class LocationConfig(LockableConfig):
646
671
    """A configuration object that gives the policy for a location."""
647
672
 
648
 
    def __init__(self, location, _content=None, _save=False):
 
673
    def __init__(self, location):
649
674
        super(LocationConfig, self).__init__(
650
 
            file_name=locations_config_filename(),
651
 
            _content=_content, _save=_save)
 
675
            file_name=locations_config_filename())
652
676
        # local file locations are looked up by local path, rather than
653
677
        # by file url. This is because the config file is a user
654
678
        # file, and we would rather not expose the user to file urls.
656
680
            location = urlutils.local_path_from_url(location)
657
681
        self.location = location
658
682
 
 
683
    @classmethod
 
684
    def from_bytes(cls, unicode_bytes, location, save=False):
 
685
        """Create a config object from bytes.
 
686
 
 
687
        :param unicode_bytes: A string representing the file content. This will
 
688
            be utf-8 encoded.
 
689
 
 
690
        :param location: The location url to filter the configuration.
 
691
 
 
692
        :param save: Whether the file should be saved upon creation.
 
693
        """
 
694
        conf = cls(location)
 
695
        conf._create_from_bytes(unicode_bytes, save)
 
696
        return conf
 
697
 
659
698
    def _get_matching_sections(self):
660
699
        """Return an ordered list of section names matching this location."""
661
700
        sections = self._get_parser()