mercurial/bundlerepo.py
changeset 24073 ff5caa8dfd99
parent 24072 145b823f5ce7
child 24306 6ddc86eedc3b
equal deleted inserted replaced
24072:145b823f5ce7 24073:ff5caa8dfd99
    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, phases
    18 import localrepo, changelog, manifest, filelog, revlog, error, phases, bundle2
    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
   236             f = self.vfs.open(self.tempfile, mode="rb")
   236             f = self.vfs.open(self.tempfile, mode="rb")
   237             self.bundlefile = self.bundle = exchange.readbundle(ui, f,
   237             self.bundlefile = self.bundle = exchange.readbundle(ui, f,
   238                                                                 bundlename,
   238                                                                 bundlename,
   239                                                                 self.vfs)
   239                                                                 self.vfs)
   240 
   240 
       
   241         if isinstance(self.bundle, bundle2.unbundle20):
       
   242             cgparts = [part for part in self.bundle.iterparts()
       
   243                        if (part.type == 'b2x:changegroup')
       
   244                        and (part.params.get('version', '01')
       
   245                             in changegroup.packermap)]
       
   246 
       
   247             if not cgparts:
       
   248                 raise util.Abort('No changegroups found')
       
   249             version = cgparts[0].params.get('version', '01')
       
   250             cgparts = [p for p in cgparts
       
   251                        if p.params.get('version', '01') == version]
       
   252             if len(cgparts) > 1:
       
   253                 raise NotImplementedError("Can't process multiple changegroups")
       
   254             part = cgparts[0]
       
   255 
       
   256             part.seek(0)
       
   257             self.bundle = changegroup.packermap[version][1](part, 'UN')
       
   258 
   241         # dict with the mapping 'filename' -> position in the bundle
   259         # dict with the mapping 'filename' -> position in the bundle
   242         self.bundlefilespos = {}
   260         self.bundlefilespos = {}
   243 
   261 
   244         self.firstnewrev = self.changelog.repotiprev + 1
   262         self.firstnewrev = self.changelog.repotiprev + 1
   245         phases.retractboundary(self, None, phases.draft,
   263         phases.retractboundary(self, None, phases.draft,