~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/identitymap.py

  • Committer: Robert Collins
  • Date: 2005-10-11 02:52:47 UTC
  • mfrom: (1417.1.13)
  • Revision ID: robertc@robertcollins.net-20051011025247-4b95466bb6509385
merge in revision-history caching, and tuning of fetch to not retrieve more data than needed when nothing needs to be pulled

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
    that is store in the map. Look for find_CLASS and add_CLASS methods.
30
30
    """
31
31
 
 
32
    def add_revision_history(self, revision_history):
 
33
        """Add a revision_history object to the map.
 
34
 
 
35
        There can only be one!
 
36
        """
 
37
        if self._revision_history is not None:
 
38
            raise errors.BzrError("A revision history (%s) is already "
 
39
                                  "identity map" % self._revision_history)
 
40
        self._revision_history = revision_history
 
41
 
32
42
    def add_weave(self, id, weave):
33
43
        """Add weave to the map with a given id."""
34
44
        if self._weave_key(id) in self._map:
35
45
            raise errors.BzrError('weave %s already in the identity map' % id)
36
46
        self._map[self._weave_key(id)] = weave
 
47
        self._reverse_map[weave] = self._weave_key(id)
 
48
 
 
49
    def find_revision_history(self):
 
50
        return self._revision_history
37
51
 
38
52
    def find_weave(self, id):
39
53
        """Return the weave for 'id', or None if it is not present."""
42
56
    def __init__(self):
43
57
        super(IdentityMap, self).__init__()
44
58
        self._map = {}
 
59
        self._reverse_map = {}
 
60
        self._revision_history = None
 
61
 
 
62
    def remove_object(self, an_object):
 
63
        """Remove object from map."""
 
64
        if isinstance(an_object, list):
 
65
            if self._revision_history is an_object:
 
66
                self._revision_history = None
 
67
            else:
 
68
                raise KeyError('%r not in identity map' % an_object)
 
69
        else:
 
70
            self._map.pop(self._reverse_map[an_object])
 
71
            self._reverse_map.pop(an_object)
 
72
        
45
73
 
46
74
    def _weave_key(self, id):
47
75
        """Return the key for a weaves id."""
57
85
    def add_weave(self, id, weave):
58
86
        """See IdentityMap.add_weave."""
59
87
 
 
88
    def add_revision_history(self, revision_history):
 
89
        """See IdentityMap.add_revision_history."""
 
90
 
60
91
    def find_weave(self, id):
61
92
        """See IdentityMap.find_weave."""
62
93
        return None
63
94
 
 
95
    def find_revision_history(self):
 
96
        """See IdentityMap.find_revision_history."""