~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/identitymap.py

  • Committer: Martin Pool
  • Date: 2006-03-21 12:26:54 UTC
  • mto: This revision was merged to the branch mainline in revision 1621.
  • Revision ID: mbp@sourcefrog.net-20060321122654-514047ed65795a17
New developer commands 'weave-list' and 'weave-join'.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
 
1
# Copyright (C) 2005 by Canonical Ltd
2
2
#   Authors: Robert Collins <robert.collins@canonical.com>
3
3
#
4
4
# This program is free software; you can redistribute it and/or modify
18
18
"""This module provides an IdentityMap."""
19
19
 
20
20
 
21
 
from bzrlib import (
22
 
    errors,
23
 
    osutils,
24
 
    )
 
21
import bzrlib.errors as errors
25
22
 
26
23
 
27
24
class IdentityMap(object):
32
29
    that is store in the map. Look for find_CLASS and add_CLASS methods.
33
30
    """
34
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
 
35
42
    def add_weave(self, id, weave):
36
43
        """Add weave to the map with a given id."""
37
44
        if self._weave_key(id) in self._map:
39
46
        self._map[self._weave_key(id)] = weave
40
47
        self._reverse_map[weave] = self._weave_key(id)
41
48
 
 
49
    def find_revision_history(self):
 
50
        return self._revision_history
 
51
 
42
52
    def find_weave(self, id):
43
53
        """Return the weave for 'id', or None if it is not present."""
44
54
        return self._map.get(self._weave_key(id), None)
47
57
        super(IdentityMap, self).__init__()
48
58
        self._map = {}
49
59
        self._reverse_map = {}
 
60
        self._revision_history = None
50
61
 
51
62
    def remove_object(self, an_object):
52
63
        """Remove object from map."""
53
64
        if isinstance(an_object, list):
54
 
            raise KeyError('%r not in identity map' % an_object)
 
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)
55
69
        else:
56
70
            self._map.pop(self._reverse_map[an_object])
57
71
            self._reverse_map.pop(an_object)
70
84
    def add_weave(self, id, weave):
71
85
        """See IdentityMap.add_weave."""
72
86
 
 
87
    def add_revision_history(self, revision_history):
 
88
        """See IdentityMap.add_revision_history."""
 
89
 
73
90
    def find_weave(self, id):
74
91
        """See IdentityMap.find_weave."""
75
92
        return None
 
93
 
 
94
    def find_revision_history(self):
 
95
        """See IdentityMap.find_revision_history."""