13 |
13 |
14 from node import nullid |
14 from node import nullid |
15 from i18n import _ |
15 from i18n import _ |
16 import os, tempfile, shutil |
16 import os, tempfile, shutil |
17 import changegroup, util, mdiff, discovery, cmdutil, scmutil, exchange |
17 import changegroup, util, mdiff, discovery, cmdutil, scmutil, exchange |
18 import localrepo, changelog, manifest, filelog, revlog, error |
18 import localrepo, changelog, manifest, filelog, revlog, error, phases |
19 |
19 |
20 class bundlerevlog(revlog.revlog): |
20 class bundlerevlog(revlog.revlog): |
21 def __init__(self, opener, indexfile, bundle, linkmapper): |
21 def __init__(self, opener, indexfile, bundle, linkmapper): |
22 # How it works: |
22 # How it works: |
23 # To retrieve a revision, we need to know the offset of the revision in |
23 # To retrieve a revision, we need to know the offset of the revision in |
182 |
182 |
183 class bundlepeer(localrepo.localpeer): |
183 class bundlepeer(localrepo.localpeer): |
184 def canpush(self): |
184 def canpush(self): |
185 return False |
185 return False |
186 |
186 |
|
187 class bundlephasecache(phases.phasecache): |
|
188 def __init__(self, *args, **kwargs): |
|
189 super(bundlephasecache, self).__init__(*args, **kwargs) |
|
190 if util.safehasattr(self, 'opener'): |
|
191 self.opener = scmutil.readonlyvfs(self.opener) |
|
192 |
|
193 def write(self): |
|
194 raise NotImplementedError |
|
195 |
|
196 def _write(self, fp): |
|
197 raise NotImplementedError |
|
198 |
|
199 def _updateroots(self, phase, newroots, tr): |
|
200 self.phaseroots[phase] = newroots |
|
201 self.invalidate() |
|
202 self.dirty = True |
|
203 |
187 class bundlerepository(localrepo.localrepository): |
204 class bundlerepository(localrepo.localrepository): |
188 def __init__(self, ui, path, bundlename): |
205 def __init__(self, ui, path, bundlename): |
189 self._tempparent = None |
206 self._tempparent = None |
190 try: |
207 try: |
191 localrepo.localrepository.__init__(self, ui, path) |
208 localrepo.localrepository.__init__(self, ui, path) |
222 f = self.vfs.open(self.tempfile, mode="rb") |
239 f = self.vfs.open(self.tempfile, mode="rb") |
223 self.bundle = exchange.readbundle(ui, f, bundlename, self.vfs) |
240 self.bundle = exchange.readbundle(ui, f, bundlename, self.vfs) |
224 |
241 |
225 # dict with the mapping 'filename' -> position in the bundle |
242 # dict with the mapping 'filename' -> position in the bundle |
226 self.bundlefilespos = {} |
243 self.bundlefilespos = {} |
|
244 |
|
245 @localrepo.unfilteredpropertycache |
|
246 def _phasecache(self): |
|
247 return bundlephasecache(self, self._phasedefaults) |
227 |
248 |
228 @localrepo.unfilteredpropertycache |
249 @localrepo.unfilteredpropertycache |
229 def changelog(self): |
250 def changelog(self): |
230 # consume the header if it exists |
251 # consume the header if it exists |
231 self.bundle.changelogheader() |
252 self.bundle.changelogheader() |