15 import changegroup, util, os, struct, bz2, tempfile |
15 import changegroup, util, os, struct, bz2, tempfile |
16 |
16 |
17 import localrepo, changelog, manifest, filelog, revlog |
17 import localrepo, changelog, manifest, filelog, revlog |
18 |
18 |
19 class bundlerevlog(revlog.revlog): |
19 class bundlerevlog(revlog.revlog): |
20 def __init__(self, opener, indexfile, datafile, bundlefile, |
20 def __init__(self, opener, indexfile, bundlefile, |
21 linkmapper=None): |
21 linkmapper=None): |
22 # How it works: |
22 # How it works: |
23 # to retrieve a revision, we need to know the offset of |
23 # to retrieve a revision, we need to know the offset of |
24 # the revision in the bundlefile (an opened file). |
24 # the revision in the bundlefile (an opened file). |
25 # |
25 # |
26 # We store this offset in the index (start), to differentiate a |
26 # We store this offset in the index (start), to differentiate a |
27 # rev in the bundle and from a rev in the revlog, we check |
27 # rev in the bundle and from a rev in the revlog, we check |
28 # len(index[r]). If the tuple is bigger than 7, it is a bundle |
28 # len(index[r]). If the tuple is bigger than 7, it is a bundle |
29 # (it is bigger since we store the node to which the delta is) |
29 # (it is bigger since we store the node to which the delta is) |
30 # |
30 # |
31 revlog.revlog.__init__(self, opener, indexfile, datafile) |
31 revlog.revlog.__init__(self, opener, indexfile) |
32 self.bundlefile = bundlefile |
32 self.bundlefile = bundlefile |
33 self.basemap = {} |
33 self.basemap = {} |
34 def chunkpositer(): |
34 def chunkpositer(): |
35 for chunk in changegroup.chunkiter(bundlefile): |
35 for chunk in changegroup.chunkiter(bundlefile): |
36 pos = bundlefile.tell() |
36 pos = bundlefile.tell() |
138 raise NotImplementedError |
138 raise NotImplementedError |
139 |
139 |
140 class bundlechangelog(bundlerevlog, changelog.changelog): |
140 class bundlechangelog(bundlerevlog, changelog.changelog): |
141 def __init__(self, opener, bundlefile): |
141 def __init__(self, opener, bundlefile): |
142 changelog.changelog.__init__(self, opener) |
142 changelog.changelog.__init__(self, opener) |
143 bundlerevlog.__init__(self, opener, self.indexfile, self.datafile, |
143 bundlerevlog.__init__(self, opener, self.indexfile, bundlefile) |
144 bundlefile) |
|
145 |
144 |
146 class bundlemanifest(bundlerevlog, manifest.manifest): |
145 class bundlemanifest(bundlerevlog, manifest.manifest): |
147 def __init__(self, opener, bundlefile, linkmapper): |
146 def __init__(self, opener, bundlefile, linkmapper): |
148 manifest.manifest.__init__(self, opener) |
147 manifest.manifest.__init__(self, opener) |
149 bundlerevlog.__init__(self, opener, self.indexfile, self.datafile, |
148 bundlerevlog.__init__(self, opener, self.indexfile, bundlefile, |
150 bundlefile, linkmapper) |
149 linkmapper) |
151 |
150 |
152 class bundlefilelog(bundlerevlog, filelog.filelog): |
151 class bundlefilelog(bundlerevlog, filelog.filelog): |
153 def __init__(self, opener, path, bundlefile, linkmapper): |
152 def __init__(self, opener, path, bundlefile, linkmapper): |
154 filelog.filelog.__init__(self, opener, path) |
153 filelog.filelog.__init__(self, opener, path) |
155 bundlerevlog.__init__(self, opener, self.indexfile, self.datafile, |
154 bundlerevlog.__init__(self, opener, self.indexfile, bundlefile, |
156 bundlefile, linkmapper) |
155 linkmapper) |
157 |
156 |
158 class bundlerepository(localrepo.localrepository): |
157 class bundlerepository(localrepo.localrepository): |
159 def __init__(self, ui, path, bundlename): |
158 def __init__(self, ui, path, bundlename): |
160 localrepo.localrepository.__init__(self, ui, path) |
159 localrepo.localrepository.__init__(self, ui, path) |
161 |
160 |