1474
1467
"""See Converter.convert()."""
1475
1468
self.bzrdir = to_convert
1471
self.total = 20 # the steps we know about
1472
self.garbage_inventories = []
1477
1474
self.pb.note('starting upgrade from format 5 to 6')
1475
self.bzrdir._control_files.put_utf8('branch-format', "Converting to format 6")
1476
# its faster to move specific files around than to open and use the apis...
1477
# first off, nuke ancestry.weave, it was never used.
1479
self.step('Removing ancestry.weave')
1480
self.bzrdir.transport.delete('ancestry.weave')
1481
except errors.NoSuchFile:
1483
# find out whats there
1484
self.step('Finding branch files')
1485
bzrcontents = self.bzrdir.transport.list_dir('.')
1486
for name in bzrcontents:
1487
if name.startswith('basis-inventory.'):
1488
self.garbage_inventories.append(name)
1489
# create new directories for repository, working tree and branch
1490
dir_mode = self.bzrdir._control_files._dir_mode
1491
self.file_mode = self.bzrdir._control_files._file_mode
1492
repository_names = [('inventory.weave', True),
1493
('revision-store', True),
1495
self.step('Upgrading repository ')
1496
self.bzrdir.transport.mkdir('repository', mode=dir_mode)
1497
self.make_lock('repository')
1498
# we hard code the formats here because we are converting into
1499
# the meta format. The meta format upgrader can take this to a
1500
# future format within each component.
1501
self.put_format('repository', bzrlib.repository.RepositoryFormat7())
1502
for entry in repository_names:
1503
self.move_entry('repository', entry)
1505
self.step('Upgrading branch ')
1506
self.bzrdir.transport.mkdir('branch', mode=dir_mode)
1507
self.make_lock('branch')
1508
self.put_format('branch', bzrlib.branch.BzrBranchFormat5())
1509
branch_files = [('revision-history', True),
1510
('branch-name', True),
1512
for entry in branch_files:
1513
self.move_entry('branch', entry)
1515
self.step('Upgrading working tree')
1516
self.bzrdir.transport.mkdir('checkout', mode=dir_mode)
1517
self.make_lock('checkout')
1518
self.put_format('checkout', bzrlib.workingtree.WorkingTreeFormat3())
1519
self.bzrdir.transport.delete_multi(self.garbage_inventories, self.pb)
1520
checkout_files = [('pending-merges', True),
1521
('inventory', True),
1522
('stat-cache', False)]
1523
for entry in checkout_files:
1524
self.move_entry('checkout', entry)
1525
self.bzrdir._control_files.put_utf8('branch-format', BzrDirMetaFormat1().get_format_string())
1478
1526
return BzrDir.open(self.bzrdir.root_transport.base)
1528
def make_lock(self, name):
1529
"""Make a lock for the new control dir name."""
1530
self.step('Make %s lock' % name)
1531
self.bzrdir.transport.put('%s/lock' % name, StringIO(), mode=self.file_mode)
1533
def move_entry(self, new_dir, entry):
1534
"""Move then entry name into new_dir."""
1536
mandatory = entry[1]
1537
self.step('Moving %s' % name)
1539
self.bzrdir.transport.move(name, '%s/%s' % (new_dir, name))
1540
except errors.NoSuchFile:
1544
def put_format(self, dirname, format):
1545
self.bzrdir._control_files.put_utf8('%s/format' % dirname, format.get_format_string())
1547
def step(self, message):
1548
"""Update the pb by a step."""
1550
self.pb.update('Upgrading repository ', self.count, self.total)