~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revfile.py

  • Committer: mbp at sourcefrog
  • Date: 2005-04-09 03:44:13 UTC
  • Revision ID: mbp@sourcefrog.net-20050409034413-1c145d732ed1b8ef49d5d60a
Revfile:
- better message when trying to get missing index
- clean up last_idx stuff
- todo

Show diffs side-by-side

added added

removed removed

Lines of Context:
95
95
 
96
96
class Revfile:
97
97
    def __init__(self, basename):
 
98
        # TODO: Option to open readonly
 
99
 
 
100
        # TODO: Lock file  while open
 
101
 
 
102
        # TODO: advise of random access
 
103
 
98
104
        self.basename = basename
99
105
        
100
106
        idxname = basename + '.irev'
115
121
            self.idxfile.flush()
116
122
        else:
117
123
            self.idxfile = open(idxname, 'r+b')
118
 
            self.dataname = open(dataname, 'r+b')
 
124
            self.datafile = open(dataname, 'r+b')
119
125
            
120
126
            h = self.idxfile.read(_RECORDSIZE)
121
127
            if h != _HEADER:
130
136
            return -1
131
137
        if l % _RECORDSIZE:
132
138
            raise RevfileError("bad length %d on index of %r" % (l, self.basename))
133
 
        return (l / _RECORDSIZE) - 1
 
139
        return (l / _RECORDSIZE) - 2
134
140
 
135
141
 
136
142
    def revision(self, rev):
163
169
        idx = self.last_idx() + 1
164
170
        self.datafile.seek(0, 2)        # to end
165
171
        self.idxfile.seek(0, 2)
166
 
        assert self.idxfile.tell() == _RECORDSIZE * idx
 
172
        assert self.idxfile.tell() == _RECORDSIZE * (idx + 1)
167
173
        data_offset = self.datafile.tell()
168
174
 
169
175
        assert isinstance(t, str) # not unicode or anything wierd
202
208
 
203
209
 
204
210
    def __len__(self):
205
 
        return int(self.last_idx())
 
211
        return int(self.last_idx()) + 1
206
212
 
207
213
 
208
214
    def __getitem__(self, idx):
280
286
    elif argv[1] == 'dump':
281
287
        r.dump()
282
288
    elif argv[1] == 'get':
283
 
        sys.stdout.write(r._get_full_text(int(argv[2])))
 
289
        try:
 
290
            sys.stdout.write(r._get_full_text(int(argv[2])))
 
291
        except IndexError:
 
292
            sys.stderr.write("no such record\n")
 
293
            sys.exit(1)
284
294
    else:
285
295
        sys.stderr.write("unknown command %r\n" % argv[1])
286
296
        sys.exit(1)