~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revfile.py

  • Committer: Martin Pool
  • Date: 2005-04-29 00:49:59 UTC
  • Revision ID: mbp@sourcefrog.net-20050429004959-9dbacdad6742c430
- Update ElementTree to 1.2.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
is that sequence numbers are stable references.  But not every
53
53
repository in the world will assign the same sequence numbers,
54
54
therefore the SHA-1 is the only universally unique reference.
 
55
 
 
56
This is meant to scale to hold 100,000 revisions of a single file, by
 
57
which time the index file will be ~4.8MB and a bit big to read
 
58
sequentially.
 
59
 
 
60
Some of the reserved fields could be used to implement a (semi?)
 
61
balanced tree indexed by SHA1 so we can much more efficiently find the
 
62
index associated with a particular hash.  For 100,000 revs we would be
 
63
able to find it in about 17 random reads, which is not too bad.
 
64
 
 
65
This performs pretty well except when trying to calculate deltas of
 
66
really large files.  For that the main thing would be to plug in
 
67
something faster than difflib, which is after all pure Python.
 
68
Another approach is to just store the gzipped full text of big files,
 
69
though perhaps that's too perverse?
 
70
 
55
71
The iter method here will generally read through the whole index file
56
72
in one go.  With readahead in the kernel and python/libc (typically
57
73
128kB) this means that there should be no seeks and often only one
105
121
class LimitHitException(Exception):
106
122
    pass
107
123
 
108
 
class Revfile(object):
 
124
class Revfile:
109
125
    def __init__(self, basename, mode):
110
126
        # TODO: Lock file  while open
111
127