~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-03-09 08:50:48 UTC
  • mfrom: (1553.5.83 bzr.mbp.locks)
  • Revision ID: pqm@pqm.ubuntu.com-20060309085048-37f21fd146dabe93
[merge] LockDir integration into new formats

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
import bzrlib
29
29
import bzrlib.errors as errors
30
30
from bzrlib.lockable_files import LockableFiles, TransportLock
 
31
from bzrlib.lockdir import LockDir
31
32
from bzrlib.osutils import safe_unicode
32
33
from bzrlib.osutils import (
33
34
                            abspath,
156
157
            except errors.FileExists:
157
158
                pass
158
159
 
159
 
    @staticmethod
160
 
    def create(base):
 
160
    @classmethod
 
161
    def create(cls, base):
161
162
        """Create a new BzrDir at the url 'base'.
162
163
        
163
164
        This will call the current default formats initialize with base
166
167
        If you need a specific format, consider creating an instance
167
168
        of that and calling initialize().
168
169
        """
 
170
        if cls is not BzrDir:
 
171
            raise AssertionError("BzrDir.create always creates the default format, "
 
172
                    "not one of %r" % cls)
169
173
        segments = base.split('/')
170
174
        if segments and segments[-1] not in ('', '.'):
171
175
            parent = '/'.join(segments[:-1])
536
540
    def __init__(self, _transport, _format):
537
541
        """See BzrDir.__init__."""
538
542
        super(BzrDirPreSplitOut, self).__init__(_transport, _format)
 
543
        assert self._format._lock_class == TransportLock
 
544
        assert self._format._lock_file_name == 'branch-lock'
539
545
        self._control_files = LockableFiles(self.get_branch_transport(None),
540
 
                                            'branch-lock',
541
 
                                            TransportLock)
 
546
                                            self._format._lock_file_name,
 
547
                                            self._format._lock_class)
542
548
 
543
549
    def clone(self, url, revision_id=None, basis=None, force_new_repo=False):
544
550
        """See BzrDir.clone()."""
705
711
    """A .bzr meta version 1 control object.
706
712
    
707
713
    This is the first control object where the 
708
 
    individual formats are really split out.
 
714
    individual aspects are really split out: there are separate repository,
 
715
    workingtree and branch subdirectories and any subset of the three can be
 
716
    present within a BzrDir.
709
717
    """
710
718
 
711
719
    def can_convert_format(self):
831
839
    _formats = {}
832
840
    """The known formats."""
833
841
 
 
842
    _lock_file_name = 'branch-lock'
 
843
 
 
844
    # _lock_class must be set in subclasses to the lock type, typ.
 
845
    # TransportLock or LockDir
 
846
 
834
847
    @classmethod
835
848
    def find_format(klass, transport):
836
849
        """Return the format registered for URL."""
879
892
        del temp_control
880
893
        mutter('created control directory in ' + t.base)
881
894
        control = t.clone('.bzr')
882
 
        lock_file = 'branch-lock'
883
895
        utf8_files = [('README', 
884
896
                       "This is a Bazaar-NG control directory.\n"
885
897
                       "Do not change any files in this directory.\n"),
886
898
                      ('branch-format', self.get_format_string()),
887
899
                      ]
888
900
        # NB: no need to escape relative paths that are url safe.
889
 
        control_files = LockableFiles(control, lock_file, TransportLock)
 
901
        control_files = LockableFiles(control, self._lock_file_name, self._lock_class)
890
902
        control_files.create_lock()
891
903
        control_files.lock_write()
892
904
        try:
953
965
    removed in format 5; write support for this format has been removed.
954
966
    """
955
967
 
 
968
    _lock_class = TransportLock
 
969
 
956
970
    def get_format_string(self):
957
971
        """See BzrDirFormat.get_format_string()."""
958
972
        return "Bazaar-NG branch, format 0.0.4\n"
997
1011
       Unhashed stores in the repository.
998
1012
    """
999
1013
 
 
1014
    _lock_class = TransportLock
 
1015
 
1000
1016
    def get_format_string(self):
1001
1017
        """See BzrDirFormat.get_format_string()."""
1002
1018
        return "Bazaar-NG branch, format 5\n"
1042
1058
     - Format 6 repositories [always]
1043
1059
    """
1044
1060
 
 
1061
    _lock_class = TransportLock
 
1062
 
1045
1063
    def get_format_string(self):
1046
1064
        """See BzrDirFormat.get_format_string()."""
1047
1065
        return "Bazaar-NG branch, format 6\n"
1093
1111
     - Format 7 repositories [optional]
1094
1112
    """
1095
1113
 
 
1114
    _lock_class = LockDir
 
1115
 
1096
1116
    def get_converter(self, format=None):
1097
1117
        """See BzrDirFormat.get_converter()."""
1098
1118
        if format is None:
1120
1140
    def __set_repository_format(self, value):
1121
1141
        """Allow changint the repository format for metadir formats."""
1122
1142
        self._repository_format = value
 
1143
 
1123
1144
    repository_format = property(__return_repository_format, __set_repository_format)
1124
1145
 
1125
1146
 
1565
1586
            if name.startswith('basis-inventory.'):
1566
1587
                self.garbage_inventories.append(name)
1567
1588
        # create new directories for repository, working tree and branch
1568
 
        dir_mode = self.bzrdir._control_files._dir_mode
 
1589
        self.dir_mode = self.bzrdir._control_files._dir_mode
1569
1590
        self.file_mode = self.bzrdir._control_files._file_mode
1570
1591
        repository_names = [('inventory.weave', True),
1571
1592
                            ('revision-store', True),
1572
1593
                            ('weaves', True)]
1573
1594
        self.step('Upgrading repository  ')
1574
 
        self.bzrdir.transport.mkdir('repository', mode=dir_mode)
 
1595
        self.bzrdir.transport.mkdir('repository', mode=self.dir_mode)
1575
1596
        self.make_lock('repository')
1576
1597
        # we hard code the formats here because we are converting into
1577
1598
        # the meta format. The meta format upgrader can take this to a 
1581
1602
            self.move_entry('repository', entry)
1582
1603
 
1583
1604
        self.step('Upgrading branch      ')
1584
 
        self.bzrdir.transport.mkdir('branch', mode=dir_mode)
 
1605
        self.bzrdir.transport.mkdir('branch', mode=self.dir_mode)
1585
1606
        self.make_lock('branch')
1586
1607
        self.put_format('branch', bzrlib.branch.BzrBranchFormat5())
1587
1608
        branch_files = [('revision-history', True),
1591
1612
            self.move_entry('branch', entry)
1592
1613
 
1593
1614
        self.step('Upgrading working tree')
1594
 
        self.bzrdir.transport.mkdir('checkout', mode=dir_mode)
 
1615
        self.bzrdir.transport.mkdir('checkout', mode=self.dir_mode)
1595
1616
        self.make_lock('checkout')
1596
1617
        self.put_format('checkout', bzrlib.workingtree.WorkingTreeFormat3())
1597
1618
        self.bzrdir.transport.delete_multi(self.garbage_inventories, self.pb)
1609
1630
    def make_lock(self, name):
1610
1631
        """Make a lock for the new control dir name."""
1611
1632
        self.step('Make %s lock' % name)
1612
 
        self.bzrdir.transport.put('%s/lock' % name, StringIO(), mode=self.file_mode)
 
1633
        ld = LockDir(self.bzrdir.transport, 
 
1634
                     '%s/lock' % name,
 
1635
                     file_modebits=self.file_mode,
 
1636
                     dir_modebits=self.dir_mode)
 
1637
        ld.create()
1613
1638
 
1614
1639
    def move_entry(self, new_dir, entry):
1615
1640
        """Move then entry name into new_dir."""