~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

Get a working chk_map using inventory implementation bootstrapped.

Show diffs side-by-side

added added

removed removed

Lines of Context:
519
519
        """
520
520
        if self._write_group is not self.get_transaction():
521
521
            # has an unlock or relock occured ?
522
 
            raise errors.BzrError('mismatched lock context and write group.')
 
522
            raise errors.BzrError(
 
523
                'mismatched lock context and write group. %r, %r' %
 
524
                (self._write_group, self.get_transaction()))
523
525
        self._abort_write_group()
524
526
        self._write_group = None
525
527
 
549
551
        self.inventories.add_fallback_versioned_files(repository.inventories)
550
552
        self.revisions.add_fallback_versioned_files(repository.revisions)
551
553
        self.signatures.add_fallback_versioned_files(repository.signatures)
 
554
        if self.chk_bytes is not None:
 
555
            self.chk_bytes.add_fallback_versioned_files(repository.chk_bytes)
552
556
 
553
557
    def _check_fallback_repository(self, repository):
554
558
        """Check that this repository can fallback to repository safely.
578
582
                % (inv.revision_id, revision_id))
579
583
        if inv.root is None:
580
584
            raise AssertionError()
 
585
        return self._add_inventory_checked(revision_id, inv, parents)
 
586
 
 
587
    def _add_inventory_checked(self, revision_id, inv, parents):
 
588
        """Add inv to the repository after checking the inputs.
 
589
 
 
590
        This function can be overridden to allow different inventory styles.
 
591
 
 
592
        :seealso: add_inventory, for the contract.
 
593
        """
581
594
        inv_lines = self._serialise_inventory_to_lines(inv)
582
595
        return self._inventory_add_lines(revision_id, parents,
583
596
            inv_lines, check_content=False)
1201
1214
    def find_text_key_references(self):
1202
1215
        """Find the text key references within the repository.
1203
1216
 
1204
 
        :return: a dictionary mapping (file_id, revision_id) tuples to altered file-ids to an iterable of
1205
 
        revision_ids. Each altered file-ids has the exact revision_ids that
1206
 
        altered it listed explicitly.
1207
1217
        :return: A dictionary mapping text keys ((fileid, revision_id) tuples)
1208
1218
            to whether they were referred to by the inventory of the
1209
1219
            revision_id that they contain. The inventory texts from all present
1458
1468
                            except KeyError:
1459
1469
                                inv = self.revision_tree(parent_id).inventory
1460
1470
                                inventory_cache[parent_id] = inv
1461
 
                            parent_entry = inv._byid.get(text_key[0], None)
 
1471
                            try:
 
1472
                                parent_entry = inv[text_key[0]]
 
1473
                            except (KeyError, errors.NoSuchId):
 
1474
                                parent_entry = None
1462
1475
                            if parent_entry is not None:
1463
1476
                                parent_text_key = (
1464
1477
                                    text_key[0], parent_entry.revision)
2760
2773
        We don't test for the stores being of specific types because that
2761
2774
        could lead to confusing results, and there is no need to be 
2762
2775
        overly general.
 
2776
 
 
2777
        Do not support CHK based repositories at this point.
2763
2778
        """
2764
2779
        from bzrlib.repofmt.pack_repo import RepositoryFormatPack
2765
2780
        try:
2767
2782
                isinstance(target._format, RepositoryFormatPack))
2768
2783
        except AttributeError:
2769
2784
            return False
2770
 
        return are_packs and InterRepository._same_model(source, target)
 
2785
        return (are_packs and InterRepository._same_model(source, target) and
 
2786
            not source._format.supports_chks)
2771
2787
 
2772
2788
    @needs_write_lock
2773
2789
    def fetch(self, revision_id=None, pb=None, find_ghosts=False):