~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/store.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-07 03:35:00 UTC
  • Revision ID: mbp@sourcefrog.net-20050407033500-4fb3d1184d0e91a80dd65d0b
fix inverted sense introduced in previous pychecker fixup

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
    pass
35
35
 
36
36
 
37
 
class ImmutableStore(object):
 
37
class ImmutableStore:
38
38
    """Store that holds files indexed by unique names.
39
39
 
40
40
    Files can be added, but not modified once they are in.  Typically
57
57
    >>> st['123123'].read()
58
58
    'goodbye'
59
59
 
60
 
    TODO: Atomic add by writing to a temporary file and renaming.
 
60
    :todo: Atomic add by writing to a temporary file and renaming.
61
61
 
62
 
    TODO: Perhaps automatically transform to/from XML in a method?
 
62
    :todo: Perhaps automatically transform to/from XML in a method?
63
63
           Would just need to tell the constructor what class to
64
64
           use...
65
65
 
66
 
    TODO: Even within a simple disk store like this, we could
 
66
    :todo: Even within a simple disk store like this, we could
67
67
           gzip the files.  But since many are less than one disk
68
68
           block, that might not help a lot.
69
69
 
74
74
        self._basedir = basedir
75
75
 
76
76
    def _path(self, id):
77
 
        assert '/' not in id
78
77
        return os.path.join(self._basedir, id)
79
78
 
80
79
    def __repr__(self):
83
82
    def add(self, f, fileid, compressed=True):
84
83
        """Add contents of a file into the store.
85
84
 
86
 
        f -- An open file, or file-like object."""
 
85
        :param f: An open file, or file-like object."""
87
86
        # FIXME: Only works on smallish files
88
87
        # TODO: Can be optimized by copying at the same time as
89
88
        # computing the sum.
107
106
        f.write(content)
108
107
        f.close()
109
108
 
110
 
    def copy_multi(self, other, ids):
111
 
        """Copy texts for ids from other into self.
112
 
 
113
 
        If an id is present in self, it is skipped.  A count of copied
114
 
        ids is returned, which may be less than len(ids).
115
 
        """
116
 
        count = 0
117
 
        for id in ids:
118
 
            if id in self:
119
 
                continue
120
 
            self.add(other[id], id)
121
 
            count += 1
122
 
        return count
123
109
 
124
110
    def __contains__(self, fileid):
125
111
        """"""