~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Patch Queue Manager
  • Date: 2011-12-30 15:51:59 UTC
  • mfrom: (6213.1.63 update-feature-flags)
  • Revision ID: pqm@pqm.ubuntu.com-20111230155159-qrgafyvytuitiq8u
(jelmer) Add {Repository, Branch, WorkingTree,
 BzrDir}.update_feature_flags methods. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
786
786
    def __repr__(self):
787
787
        return "<%s at %r>" % (self.__class__.__name__, self.user_url)
788
788
 
 
789
    def update_feature_flags(self, updated_flags):
 
790
        """Update the features required by this bzrdir.
 
791
 
 
792
        :param updated_flags: Dictionary mapping feature names to necessities
 
793
            A necessity can be None to indicate the feature should be removed
 
794
        """
 
795
        self.control_files.lock_write()
 
796
        try:
 
797
            self._format._update_feature_flags(updated_flags)
 
798
            self.transport.put_bytes('branch-format', self._format.as_string())
 
799
        finally:
 
800
            self.control_files.unlock()
 
801
 
789
802
 
790
803
class BzrDirMeta1(BzrDir):
791
804
    """A .bzr meta version 1 control object.
796
809
    present within a BzrDir.
797
810
    """
798
811
 
 
812
    def __init__(self, _transport, _format):
 
813
        super(BzrDirMeta1, self).__init__(_transport, _format)
 
814
        self.control_files = lockable_files.LockableFiles(self.control_transport,
 
815
            self._format._lock_file_name, self._format._lock_class)
 
816
 
799
817
    def can_convert_format(self):
800
818
        """See BzrDir.can_convert_format()."""
801
819
        return True
993
1011
    BzrDirMeta1.
994
1012
    """
995
1013
 
996
 
    def __init__(self, _transport, _format):
997
 
        super(BzrDirMeta1Colo, self).__init__(_transport, _format)
998
 
        self.control_files = lockable_files.LockableFiles(self.control_transport,
999
 
            self._format._lock_file_name, self._format._lock_class)
1000
 
 
1001
1014
    def _get_branch_path(self, name):
1002
1015
        """Obtain the branch path to use.
1003
1016
 
1213
1226
        return (self.__class__ is other.__class__ and
1214
1227
                self.features == other.features)
1215
1228
 
 
1229
    def _update_feature_flags(self, updated_flags):
 
1230
        """Update the feature flags in this format.
 
1231
 
 
1232
        :param updated_flags: Updated feature flags
 
1233
        """
 
1234
        for name, necessity in updated_flags.iteritems():
 
1235
            if necessity is None:
 
1236
                try:
 
1237
                    del self.features[name]
 
1238
                except KeyError:
 
1239
                    pass
 
1240
            else:
 
1241
                self.features[name] = necessity
 
1242
 
1216
1243
 
1217
1244
class BzrProber(controldir.Prober):
1218
1245
    """Prober for formats that use a .bzr/ control directory."""
1451
1478
                       "This is a Bazaar control directory.\n"
1452
1479
                       "Do not change any files in this directory.\n"
1453
1480
                       "See http://bazaar.canonical.com/ for more information about Bazaar.\n"),
1454
 
                      ('branch-format', self.get_format_string()),
 
1481
                      ('branch-format', self.as_string()),
1455
1482
                      ]
1456
1483
        # NB: no need to escape relative paths that are url safe.
1457
1484
        control_files = lockable_files.LockableFiles(bzrdir_transport,
1866
1893
    def convert(self, to_convert, pb):
1867
1894
        """See Converter.convert()."""
1868
1895
        to_convert.transport.put_bytes('branch-format',
1869
 
            self.target_format.get_format_string())
 
1896
            self.target_format.as_string())
1870
1897
        return BzrDir.open_from_transport(to_convert.root_transport)
1871
1898
 
1872
1899
 
1892
1919
        finally:
1893
1920
            to_convert.control_files.unlock()
1894
1921
        to_convert.transport.put_bytes('branch-format',
1895
 
            self.target_format.get_format_string())
 
1922
            self.target_format.as_string())
1896
1923
        return BzrDir.open_from_transport(to_convert.root_transport)
1897
1924
 
1898
1925