def applybundle(self): fp = self.opener() try: gen = exchange.readbundle(self.repo.ui, fp, self.fname, self.vfs) bundle2.applybundle( self.repo, gen, self.repo.currenttransaction(), source="unshelve", url="bundle:" + self.vfs.join(self.fname), ) finally: fp.close()
def _generateoutputparts( head, cgversion, bundlecaps, bundlerepo, bundleroots, bundlefile ): """generates bundle that will be send to the user returns tuple with raw bundle string and bundle type """ parts = [] if not _needsrebundling(head, bundlerepo): with util.posixfile(bundlefile, "rb") as f: unbundler = exchange.readbundle(bundlerepo.ui, f, bundlefile) if isinstance(unbundler, changegroup.cg1unpacker): part = bundle2.bundlepart("changegroup", data=unbundler._stream.read()) part.addparam("version", "01") parts.append(part) elif isinstance(unbundler, bundle2.unbundle20): haschangegroup = False for part in unbundler.iterparts(): if part.type == "changegroup": haschangegroup = True newpart = bundle2.bundlepart(part.type, data=part.read()) for key, value in pycompat.iteritems(part.params): newpart.addparam(key, value) parts.append(newpart) if not haschangegroup: raise error.Abort( "unexpected bundle without changegroup part, " + "head: %s" % hex(head), hint="report to administrator", ) else: raise error.Abort("unknown bundle type") else: parts = _rebundle(bundlerepo, bundleroots, head, cgversion, bundlecaps) return parts
def run(): with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) for part in bundle.iterparts(): while part.read(size): pass
def run(): with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) while bundle.read(size): pass
def run(): with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) fn(bundle)
def perfbundleread(ui, repo, bundlepath, **opts): """Benchmark reading of bundle files. This command is meant to isolate the I/O part of bundle reading as much as possible. """ from edenscm.mercurial import bundle2, exchange, streamclone def makebench(fn): def run(): with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) fn(bundle) return run def makereadnbytes(size): def run(): with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) while bundle.read(size): pass return run def makestdioread(size): def run(): with open(bundlepath, "rb") as fh: while fh.read(size): pass return run # bundle1 def deltaiter(bundle): for delta in bundle.deltaiter(): pass def iterchunks(bundle): for chunk in bundle.getchunks(): pass # bundle2 def forwardchunks(bundle): for chunk in bundle._forwardchunks(): pass def iterparts(bundle): for part in bundle.iterparts(): pass def iterpartsseekable(bundle): for part in bundle.iterparts(seekable=True): pass def seek(bundle): for part in bundle.iterparts(seekable=True): part.seek(0, os.SEEK_END) def makepartreadnbytes(size): def run(): with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) for part in bundle.iterparts(): while part.read(size): pass return run benches = [ (makestdioread(8192), "read(8k)"), (makestdioread(16384), "read(16k)"), (makestdioread(32768), "read(32k)"), (makestdioread(131072), "read(128k)"), ] with open(bundlepath, "rb") as fh: bundle = exchange.readbundle(ui, fh, bundlepath) if isinstance(bundle, changegroup.cg1unpacker): benches.extend([ (makebench(deltaiter), "cg1 deltaiter()"), (makebench(iterchunks), "cg1 getchunks()"), (makereadnbytes(8192), "cg1 read(8k)"), (makereadnbytes(16384), "cg1 read(16k)"), (makereadnbytes(32768), "cg1 read(32k)"), (makereadnbytes(131072), "cg1 read(128k)"), ]) elif isinstance(bundle, bundle2.unbundle20): benches.extend([ (makebench(forwardchunks), "bundle2 forwardchunks()"), (makebench(iterparts), "bundle2 iterparts()"), (makebench(iterpartsseekable), "bundle2 iterparts() seekable"), (makebench(seek), "bundle2 part seek()"), (makepartreadnbytes(8192), "bundle2 part read(8k)"), (makepartreadnbytes(16384), "bundle2 part read(16k)"), (makepartreadnbytes(32768), "bundle2 part read(32k)"), (makepartreadnbytes(131072), "bundle2 part read(128k)"), ]) elif isinstance(bundle, streamclone.streamcloneapplier): raise error.Abort("stream clone bundles not supported") else: raise error.Abort("unhandled bundle type: %s" % type(bundle)) for fn, title in benches: timer, fm = gettimer(ui, opts) timer(fn, title=title) fm.end()