/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/versionedfile.py

merge bzr.dev@3883

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
2
2
#
3
3
# Authors:
4
4
#   Johan Rydberg <jrydberg@gnu.org>
30
30
 
31
31
from bzrlib import (
32
32
    errors,
 
33
    index,
33
34
    osutils,
34
35
    multiparent,
35
36
    tsort,
520
521
    """
521
522
 
522
523
    def __init__(self, backing_vf):
523
 
        """Create a RecordingVersionedFileDsecorator decorating backing_vf.
 
524
        """Create a RecordingVersionedFilesDecorator decorating backing_vf.
524
525
        
525
526
        :param backing_vf: The versioned file to answer all methods.
526
527
        """
561
562
        return self._backing_vf.keys()
562
563
 
563
564
 
 
565
class OrderingVersionedFilesDecorator(RecordingVersionedFilesDecorator):
 
566
    """A VF that records calls, and returns keys in specific order.
 
567
 
 
568
    :ivar calls: A list of the calls made; can be reset at any time by
 
569
        assigning [] to it.
 
570
    """
 
571
 
 
572
    def __init__(self, backing_vf, key_priority):
 
573
        """Create a RecordingVersionedFilesDecorator decorating backing_vf.
 
574
 
 
575
        :param backing_vf: The versioned file to answer all methods.
 
576
        :param key_priority: A dictionary defining what order keys should be
 
577
            returned from an 'unordered' get_record_stream request.
 
578
            Keys with lower priority are returned first, keys not present in
 
579
            the map get an implicit priority of 0, and are returned in
 
580
            lexicographical order.
 
581
        """
 
582
        RecordingVersionedFilesDecorator.__init__(self, backing_vf)
 
583
        self._key_priority = key_priority
 
584
 
 
585
    def get_record_stream(self, keys, sort_order, include_delta_closure):
 
586
        self.calls.append(("get_record_stream", list(keys), sort_order,
 
587
            include_delta_closure))
 
588
        if sort_order == 'unordered':
 
589
            def sort_key(key):
 
590
                return (self._key_priority.get(key, 0), key)
 
591
            # Use a defined order by asking for the keys one-by-one from the
 
592
            # backing_vf
 
593
            for key in sorted(keys, key=sort_key):
 
594
                for record in self._backing_vf.get_record_stream([key],
 
595
                                'unordered', include_delta_closure):
 
596
                    yield record
 
597
        else:
 
598
            for record in self._backing_vf.get_record_stream(keys, sort_order,
 
599
                            include_delta_closure):
 
600
                yield record
 
601
 
 
602
 
564
603
class KeyMapper(object):
565
604
    """KeyMappers map between keys and underlying partitioned storage."""
566
605
 
846
885
        """
847
886
        raise NotImplementedError(self.get_sha1s)
848
887
 
 
888
    has_key = index._has_key_from_parent_map
 
889
 
849
890
    def insert_record_stream(self, stream):
850
891
        """Insert a record stream into this container.
851
892
 
922
963
                parent_lines, left_parent_blocks))
923
964
        return diffs
924
965
 
 
966
    missing_keys = index._missing_keys_from_parent_map
 
967
 
925
968
    def _extract_blocks(self, version_id, source, target):
926
969
        return None
927
970