~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:50:18 UTC
  • Revision ID: mbp@sourcefrog.net-20050409035018-e206758f05bfdb895960de10
revfile:
- remove last_idx in favour of just __len__
- better command-line handling

Show diffs side-by-side

added added

removed removed

Lines of Context:
129
129
                                   % (h, self.basename))
130
130
 
131
131
 
132
 
    def last_idx(self):
133
 
        """Return last index already present, or -1 if none."""
134
 
        l = os.fstat(self.idxfile.fileno())[stat.ST_SIZE]
135
 
        if l == 0:
136
 
            return -1
137
 
        if l % _RECORDSIZE:
138
 
            raise RevfileError("bad length %d on index of %r" % (l, self.basename))
139
 
        return (l / _RECORDSIZE) - 2
140
 
 
141
 
 
142
132
    def revision(self, rev):
143
133
        base = self.index[rev][0]
144
134
        start = self.index[base][1]
166
156
        This is not compressed against any reference version.
167
157
 
168
158
        Returns the index for that text."""
169
 
        idx = self.last_idx() + 1
 
159
        idx = len(self)
170
160
        self.datafile.seek(0, 2)        # to end
171
161
        self.idxfile.seek(0, 2)
172
162
        assert self.idxfile.tell() == _RECORDSIZE * (idx + 1)
208
198
 
209
199
 
210
200
    def __len__(self):
211
 
        return int(self.last_idx()) + 1
 
201
        """Return number of revisions."""
 
202
        l = os.fstat(self.idxfile.fileno())[stat.ST_SIZE]
 
203
        if l % _RECORDSIZE:
 
204
            raise RevfileError("bad length %d on index of %r" % (l, self.basename))
 
205
        if l < _RECORDSIZE:
 
206
            raise RevfileError("no header present in index of %r" % (self.basename))
 
207
        return int(l / _RECORDSIZE) - 1
212
208
 
213
209
 
214
210
    def __getitem__(self, idx):
274
270
 
275
271
def main(argv):
276
272
    r = Revfile("testrev")
277
 
    if len(argv) < 2:
 
273
 
 
274
    try:
 
275
        cmd = argv[1]
 
276
    except IndexError:
278
277
        sys.stderr.write("usage: revfile dump\n"
279
278
                         "       revfile add\n"
280
279
                         "       revfile get IDX\n")
281
 
        sys.exit(1)
 
280
        return 1
282
281
        
283
 
    if argv[1] == 'add':
 
282
 
 
283
    if cmd == 'add':
284
284
        new_idx = r.add_full_text(sys.stdin.read())
285
285
        print 'added idx %d' % new_idx
286
 
    elif argv[1] == 'dump':
 
286
    elif cmd == 'dump':
287
287
        r.dump()
288
 
    elif argv[1] == 'get':
 
288
    elif cmd == 'get':
289
289
        try:
290
 
            sys.stdout.write(r._get_full_text(int(argv[2])))
 
290
            idx = int(argv[2])
291
291
        except IndexError:
292
 
            sys.stderr.write("no such record\n")
293
 
            sys.exit(1)
 
292
            sys.stderr.write("usage: revfile get IDX\n")
 
293
            return 1
 
294
 
 
295
        if idx < 0 or idx >= len(r):
 
296
            sys.stderr.write("invalid index %r\n" % idx)
 
297
            return 1
 
298
 
 
299
        sys.stdout.write(r._get_full_text(idx))
294
300
    else:
295
 
        sys.stderr.write("unknown command %r\n" % argv[1])
296
 
        sys.exit(1)
 
301
        sys.stderr.write("unknown command %r\n" % cmd)
 
302
        return 1
297
303
    
298
304
 
299
305
if __name__ == '__main__':
300
306
    import sys
301
 
    main(sys.argv)
 
307
    sys.exit(main(sys.argv) or 0)