Skip to content
  • Shawn O. Pearce's avatar
    Smart push over HTTP: client side · de1a2fdd
    Shawn O. Pearce authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    The git-remote-curl backend detects if the remote server supports
    the git-receive-pack service, and if so, runs git-send-pack in a
    pipe to dump the command and pack data as a single POST request.
    
    The advertisements from the server that were obtained during the
    discovery are passed into git-send-pack before the POST request
    starts.  This permits git-send-pack to operate largely unmodified.
    
    For smaller packs (those under 1 MiB) a HTTP/1.0 POST with a
    Content-Length is used, permitting interaction with any server.
    The 1 MiB limit is arbitrary, but is sufficent to fit most deltas
    created by human authors against text sources with the occasional
    small binary file (e.g. few KiB icon image).  The configuration
    option http.postBuffer can be used to increase (or shink) this
    buffer if the default is not sufficient.
    
    For larger packs which cannot be spooled entirely into the helper's
    memory space (due to http.postBuffer being too small), the POST
    request requires HTTP/1.1 and sets "Transfer-Encoding: chunked".
    This permits the client to upload an unknown amount of data in one
    HTTP transaction without needing to pregenerate the entire pack
    file locally.
    
    Signed-off-by: default avatarShawn O. Pearce <spearce@spearce.org>
    CC: Daniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    de1a2fdd