hgext/infinitepush/bundleparts.py
changeset 50803 609a3b8058c3
parent 50802 cf0502231d56
child 50806 337bc83c1275
--- a/hgext/infinitepush/bundleparts.py	Fri Jun 23 13:27:09 2023 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-# Copyright 2017 Facebook, Inc.
-#
-# This software may be used and distributed according to the terms of the
-# GNU General Public License version 2 or any later version.
-
-
-from mercurial.i18n import _
-from mercurial.node import hex
-
-from mercurial import (
-    bundle2,
-    changegroup,
-    error,
-    extensions,
-    revsetlang,
-    util,
-)
-
-from . import common
-
-isremotebooksenabled = common.isremotebooksenabled
-
-scratchbranchparttype = b'b2x:infinitepush'
-
-
-def getscratchbranchparts(repo, peer, outgoing, ui, bookmark):
-    if not outgoing.missing:
-        raise error.Abort(_(b'no commits to push'))
-
-    if scratchbranchparttype not in bundle2.bundle2caps(peer):
-        raise error.Abort(
-            _(b'no server support for %r') % scratchbranchparttype
-        )
-
-    _validaterevset(
-        repo, revsetlang.formatspec(b'%ln', outgoing.missing), bookmark
-    )
-
-    supportedversions = changegroup.supportedoutgoingversions(repo)
-    # Explicitly avoid using '01' changegroup version in infinitepush to
-    # support general delta
-    supportedversions.discard(b'01')
-    cgversion = min(supportedversions)
-    _handlelfs(repo, outgoing.missing)
-    cg = changegroup.makestream(repo, outgoing, cgversion, b'push')
-
-    params = {}
-    params[b'cgversion'] = cgversion
-    if bookmark:
-        params[b'bookmark'] = bookmark
-        # 'prevbooknode' is necessary for pushkey reply part
-        params[b'bookprevnode'] = b''
-        bookmarks = repo._bookmarks
-        if bookmark in bookmarks:
-            params[b'bookprevnode'] = hex(bookmarks[bookmark])
-
-    # Do not send pushback bundle2 part with bookmarks if remotenames extension
-    # is enabled. It will be handled manually in `_push()`
-    if not isremotebooksenabled(ui):
-        params[b'pushbackbookmarks'] = b'1'
-
-    parts = []
-
-    # .upper() marks this as a mandatory part: server will abort if there's no
-    #  handler
-    parts.append(
-        bundle2.bundlepart(
-            scratchbranchparttype.upper(),
-            advisoryparams=params.items(),
-            data=cg,
-        )
-    )
-
-    return parts
-
-
-def _validaterevset(repo, revset, bookmark):
-    """Abort if the revs to be pushed aren't valid for a scratch branch."""
-    if not repo.revs(revset):
-        raise error.Abort(_(b'nothing to push'))
-    if bookmark:
-        # Allow bundle with many heads only if no bookmark is specified
-        heads = repo.revs(b'heads(%r)', revset)
-        if len(heads) > 1:
-            raise error.Abort(
-                _(b'cannot push more than one head to a scratch branch')
-            )
-
-
-def _handlelfs(repo, missing):
-    """Special case if lfs is enabled
-
-    If lfs is enabled then we need to call prepush hook
-    to make sure large files are uploaded to lfs
-    """
-    try:
-        lfsmod = extensions.find(b'lfs')
-        lfsmod.wrapper.uploadblobsfromrevs(repo, missing)
-    except KeyError:
-        # Ignore if lfs extension is not enabled
-        return
-
-
-class copiedpart:
-    """a copy of unbundlepart content that can be consumed later"""
-
-    def __init__(self, part):
-        # copy "public properties"
-        self.type = part.type
-        self.id = part.id
-        self.mandatory = part.mandatory
-        self.mandatoryparams = part.mandatoryparams
-        self.advisoryparams = part.advisoryparams
-        self.params = part.params
-        self.mandatorykeys = part.mandatorykeys
-        # copy the buffer
-        self._io = util.stringio(part.read())
-
-    def consume(self):
-        return
-
-    def read(self, size=None):
-        if size is None:
-            return self._io.read()
-        else:
-            return self._io.read(size)