Example #1
0
 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()
Example #2
0
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
Example #3
0
File: perf.py Project: leszfb/eden
 def run():
     with open(bundlepath, "rb") as fh:
         bundle = exchange.readbundle(ui, fh, bundlepath)
         for part in bundle.iterparts():
             while part.read(size):
                 pass
Example #4
0
File: perf.py Project: leszfb/eden
 def run():
     with open(bundlepath, "rb") as fh:
         bundle = exchange.readbundle(ui, fh, bundlepath)
         while bundle.read(size):
             pass
Example #5
0
File: perf.py Project: leszfb/eden
 def run():
     with open(bundlepath, "rb") as fh:
         bundle = exchange.readbundle(ui, fh, bundlepath)
         fn(bundle)
Example #6
0
File: perf.py Project: leszfb/eden
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()