~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-02-24 09:53:04 UTC
  • mfrom: (4032.3.6 integration)
  • Revision ID: pqm@pqm.ubuntu.com-20090224095304-uk12twrtk4u1mkd1
(robertc) Use a HPSS verb to create Branch objects on bzr:// servers.
        (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
45
45
 
46
46
from bzrlib.decorators import needs_read_lock, needs_write_lock
47
47
from bzrlib.hooks import Hooks
 
48
from bzrlib import registry
48
49
from bzrlib.symbol_versioning import (
49
50
    deprecated_in,
50
51
    deprecated_method,
147
148
                                                         possible_transports)
148
149
        return control.open_branch(), relpath
149
150
 
 
151
    def _push_should_merge_tags(self):
 
152
        """Should _basic_push merge this branch's tags into the target?
 
153
 
 
154
        The default implementation returns False if this branch has no tags,
 
155
        and True the rest of the time.  Subclasses may override this.
 
156
        """
 
157
        return self.tags.supports_tags() and self.tags.get_tag_dict()
 
158
 
150
159
    def get_config(self):
151
160
        return BranchConfig(self)
152
161
 
972
981
        else:
973
982
            if parent:
974
983
                destination.set_parent(parent)
975
 
        self.tags.merge_to(destination.tags)
 
984
        if self._push_should_merge_tags():
 
985
            self.tags.merge_to(destination.tags)
976
986
 
977
987
    @needs_read_lock
978
988
    def check(self):
1258
1268
        """
1259
1269
        return True
1260
1270
 
 
1271
    def network_name(self):
 
1272
        """A simple byte string uniquely identifying this format for RPC calls.
 
1273
 
 
1274
        MetaDir branch formats use their disk format string to identify the
 
1275
        repository over the wire. All in one formats such as bzr < 0.8, and
 
1276
        foreign formats like svn/git and hg should use some marker which is
 
1277
        unique and immutable.
 
1278
        """
 
1279
        raise NotImplementedError(self.network_name)
 
1280
 
1261
1281
    def open(self, a_bzrdir, _found=False):
1262
1282
        """Return the branch object for a_bzrdir
1263
1283
 
1268
1288
 
1269
1289
    @classmethod
1270
1290
    def register_format(klass, format):
 
1291
        """Register a metadir format."""
1271
1292
        klass._formats[format.get_format_string()] = format
 
1293
        # Metadir formats have a network name of their format string.
 
1294
        network_format_registry.register(format.get_format_string(), format)
1272
1295
 
1273
1296
    @classmethod
1274
1297
    def set_default_format(klass, format):
1283
1306
        del klass._formats[format.get_format_string()]
1284
1307
 
1285
1308
    def __str__(self):
1286
 
        return self.get_format_string().rstrip()
 
1309
        return self.get_format_description().rstrip()
1287
1310
 
1288
1311
    def supports_tags(self):
1289
1312
        """True if this format supports tags stored in the branch"""
1441
1464
        super(BzrBranchFormat4, self).__init__()
1442
1465
        self._matchingbzrdir = bzrdir.BzrDirFormat6()
1443
1466
 
 
1467
    def network_name(self):
 
1468
        """The network name for this format is the control dirs disk label."""
 
1469
        return self._matchingbzrdir.get_format_string()
 
1470
 
1444
1471
    def open(self, a_bzrdir, _found=False):
1445
1472
        """Return the branch object for a_bzrdir
1446
1473
 
1466
1493
        """What class to instantiate on open calls."""
1467
1494
        raise NotImplementedError(self._branch_class)
1468
1495
 
 
1496
    def network_name(self):
 
1497
        """A simple byte string uniquely identifying this format for RPC calls.
 
1498
 
 
1499
        Metadir branch formats use their format string.
 
1500
        """
 
1501
        return self.get_format_string()
 
1502
 
1469
1503
    def open(self, a_bzrdir, _found=False):
1470
1504
        """Return the branch object for a_bzrdir.
1471
1505
 
1688
1722
        return result
1689
1723
 
1690
1724
 
 
1725
network_format_registry = registry.FormatRegistry()
 
1726
"""Registry of formats indexed by their network name.
 
1727
 
 
1728
The network name for a repository format is an identifier that can be used when
 
1729
referring to formats with smart server operations. See
 
1730
BranchFormat.network_name() for more detail.
 
1731
"""
 
1732
 
 
1733
 
1691
1734
# formats which have no format string are not discoverable
1692
1735
# and not independently creatable, so are not registered.
1693
1736
__format5 = BzrBranchFormat5()
1699
1742
BranchFormat.register_format(__format7)
1700
1743
BranchFormat.set_default_format(__format6)
1701
1744
_legacy_formats = [BzrBranchFormat4(),
1702
 
                   ]
 
1745
    ]
 
1746
network_format_registry.register(
 
1747
    _legacy_formats[0].network_name(), _legacy_formats[0])
 
1748
 
1703
1749
 
1704
1750
class BzrBranch(Branch):
1705
1751
    """A branch stored in the actual filesystem.
2035
2081
        result.new_revno, result.new_revid = target.last_revision_info()
2036
2082
        return result
2037
2083
 
2038
 
    def _push_should_merge_tags(self):
2039
 
        """Should _basic_push merge this branch's tags into the target?
2040
 
 
2041
 
        The default implementation returns False if this branch has no tags,
2042
 
        and True the rest of the time.  Subclasses may override this.
2043
 
        """
2044
 
        return self.tags.supports_tags() and self.tags.get_tag_dict()
2045
 
 
2046
2084
    def get_parent(self):
2047
2085
        """See Branch.get_parent."""
2048
2086
        parent = self._get_parent_location()