~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Martin Pool
  • Date: 2005-07-11 07:33:45 UTC
  • Revision ID: mbp@sourcefrog.net-20050711073345-177b10e674961bda
- merge John's code to give the tree root an explicit file id

Show diffs side-by-side

added added

removed removed

Lines of Context:
312
312
            self.controlfile(f, 'w').write('')
313
313
        mutter('created control directory in ' + self.base)
314
314
 
315
 
        pack_xml(Inventory(), self.controlfile('inventory','w'))
 
315
        pack_xml(Inventory(gen_root_id()), self.controlfile('inventory','w'))
316
316
 
317
317
 
318
318
    def _check_format(self):
333
333
                           ['use a different bzr version',
334
334
                            'or remove the .bzr directory and "bzr init" again'])
335
335
 
 
336
    def get_root_id(self):
 
337
        """Return the id of this branches root"""
 
338
        inv = self.read_working_inventory()
 
339
        return inv.root.file_id
336
340
 
 
341
    def set_root_id(self, file_id):
 
342
        inv = self.read_working_inventory()
 
343
        orig_root_id = inv.root.file_id
 
344
        del inv._byid[inv.root.file_id]
 
345
        inv.root.file_id = file_id
 
346
        inv._byid[inv.root.file_id] = inv.root
 
347
        for fid in inv:
 
348
            entry = inv[fid]
 
349
            if entry.parent_id in (None, orig_root_id):
 
350
                entry.parent_id = inv.root.file_id
 
351
        self._write_inventory(inv)
337
352
 
338
353
    def read_working_inventory(self):
339
354
        """Read the working inventory."""
521
536
    # FIXME: this doesn't need to be a branch method
522
537
    def set_inventory(self, new_inventory_list):
523
538
        from bzrlib.inventory import Inventory, InventoryEntry
524
 
        inv = Inventory()
 
539
        inv = Inventory(self.get_root_id())
525
540
        for path, file_id, parent, kind in new_inventory_list:
526
541
            name = os.path.basename(path)
527
542
            if name == "":
619
634
        # must be the same as its revision, so this is trivial.
620
635
        if revision_id == None:
621
636
            from bzrlib.inventory import Inventory
622
 
            return Inventory()
 
637
            return Inventory(self.get_root_id())
623
638
        else:
624
639
            return self.get_inventory(revision_id)
625
640
 
1011
1026
        # TODO: refactor this to use an existing revision object
1012
1027
        # so we don't need to read it in twice.
1013
1028
        if revision_id == None:
1014
 
            return EmptyTree()
 
1029
            return EmptyTree(self.get_root_id())
1015
1030
        else:
1016
1031
            inv = self.get_revision_inventory(revision_id)
1017
1032
            return RevisionTree(self.text_store, inv)
1031
1046
        from bzrlib.tree import EmptyTree, RevisionTree
1032
1047
        r = self.last_patch()
1033
1048
        if r == None:
1034
 
            return EmptyTree()
 
1049
            return EmptyTree(self.get_root_id())
1035
1050
        else:
1036
1051
            return RevisionTree(self.text_store, self.get_revision_inventory(r))
1037
1052
 
1354
1369
 
1355
1370
    s = hexlify(rand_bytes(8))
1356
1371
    return '-'.join((name, compact_date(time()), s))
 
1372
 
 
1373
 
 
1374
def gen_root_id():
 
1375
    """Return a new tree-root file id."""
 
1376
    return gen_file_id('TREE_ROOT')
 
1377