~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/groupcompress.py

  • Committer: John Arbash Meinel
  • Date: 2009-03-11 08:16:08 UTC
  • mto: (3735.2.143 brisbane-core)
  • mto: This revision was merged to the branch mainline in revision 4280.
  • Revision ID: john@arbash-meinel.com-20090311081608-clhebqk1ld7q2dlz
Start bringing in stacking support for Groupcompress repos.

Show diffs side-by-side

added added

removed removed

Lines of Context:
555
555
        self._delta = delta
556
556
        self._unadded_refs = {}
557
557
        self._group_cache = LRUSizeCache(max_size=50*1024*1024)
 
558
        self._fallback_vfs = []
558
559
 
559
560
    def add_lines(self, key, parents, lines, parent_texts=None,
560
561
        left_matching_blocks=None, nostore_sha=None, random_id=False,
605
606
        sha1 = list(self._insert_record_stream([record], random_id=random_id))[0]
606
607
        return sha1, length, None
607
608
 
 
609
    def add_fallback_versioned_files(self, a_versioned_files):
 
610
        """Add a source of texts for texts not present in this knit.
 
611
 
 
612
        :param a_versioned_files: A VersionedFiles object.
 
613
        """
 
614
        self._fallback_vfs.append(a_versioned_files)
 
615
 
608
616
    def annotate(self, key):
609
617
        """See VersionedFiles.annotate."""
610
618
        graph = Graph(self)
657
665
            self._check_lines_are_lines(lines)
658
666
 
659
667
    def get_parent_map(self, keys):
660
 
        """Get a map of the parents of keys.
 
668
        """Get a map of the graph parents of keys.
661
669
 
662
670
        :param keys: The keys to look up parents for.
663
671
        :return: A mapping from keys to parents. Absent keys are absent from
664
672
            the mapping.
665
673
        """
 
674
        return self._get_parent_map_with_sources(keys)[0]
 
675
 
 
676
    def _get_parent_map_with_sources(self, keys):
 
677
        """Get a map of the parents of keys.
 
678
 
 
679
        :param keys: The keys to look up parents for.
 
680
        :return: A tuple. The first element is a mapping from keys to parents.
 
681
            Absent keys are absent from the mapping. The second element is a
 
682
            list with the locations each key was found in. The first element
 
683
            is the in-this-knit parents, the second the first fallback source,
 
684
            and so on.
 
685
        """
666
686
        result = {}
667
 
        sources = [self._index]
 
687
        sources = [self._index] + self._fallback_vfs
668
688
        source_results = []
669
689
        missing = set(keys)
670
690
        for source in sources:
674
694
            source_results.append(new_result)
675
695
            result.update(new_result)
676
696
            missing.difference_update(set(new_result))
677
 
        if self._unadded_refs:
678
 
            for key in missing:
679
 
                if key in self._unadded_refs:
680
 
                    result[key] = self._unadded_refs[key]
681
 
        return result
 
697
        return result, source_results
682
698
 
683
699
    def _get_block(self, index_memo):
684
700
        read_memo = index_memo[0:3]
981
997
        """See VersionedFiles.keys."""
982
998
        if 'evil' in debug.debug_flags:
983
999
            trace.mutter_callsite(2, "keys scales with size of history")
984
 
        sources = [self._index]
 
1000
        sources = [self._index] + self._fallback_vfs
985
1001
        result = set()
986
1002
        for source in sources:
987
1003
            result.update(source.keys())