Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Commits on Jan 12, 2010
  1. http.c: mark file-local functions static

    authored
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Nov 5, 2009
  1. @spearce

    Smart push over HTTP: client side

    spearce authored 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: Shawn O. Pearce <spearce@spearce.org>
    CC: Daniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jun 6, 2009
  1. @rctay

    http*: add helper methods for fetching objects (loose)

    rctay authored committed
    The code handling the fetching of loose objects in http-push.c and
    http-walker.c have been refactored into new methods and a new struct
    (object_http_request) in http.c. They are not meant to be invoked
    elsewhere.
    
    The new methods in http.c are
     - new_http_object_request
     - process_http_object_request
     - finish_http_object_request
     - abort_http_object_request
     - release_http_object_request
    
    and the new struct is http_object_request.
    
    RANGER_HEADER_SIZE and no_pragma_header is no longer made available
    outside of http.c, since after the above changes, there are no other
    instances of usage outside of http.c.
    
    Remove members of the transfer_request struct in http-push.c and
    http-walker.c, including filename, real_sha1 and zret, as they are used
    no longer used.
    
    Move the methods append_remote_object_url() and get_remote_object_url()
    from http-push.c to http.c. Additionally, get_remote_object_url() is no
    longer defined only when USE_CURL_MULTI is defined, since
    non-USE_CURL_MULTI code in http.c uses it (namely, in
    new_http_object_request()).
    
    Refactor code from http-push.c::start_fetch_loose() and
    http-walker.c::start_object_fetch_request() that deals with the details
    of coming up with the filename to store the retrieved object, resuming
    a previously aborted request, and making a new curl request, into a new
    function, new_http_object_request().
    
    Refactor code from http-walker.c::process_object_request() into the
    function, process_http_object_request().
    
    Refactor code from http-push.c::finish_request() and
    http-walker.c::finish_object_request() into a new function,
    finish_http_object_request(). It returns the result of the
    move_temp_to_file() invocation.
    
    Add a function, release_http_object_request(), which cleans up object
    request data. http-push.c and http-walker.c invoke this function
    separately; http-push.c::release_request() and
    http-walker.c::release_object_request() do not invoke this function.
    
    Add a function, abort_http_object_request(), which unlink()s the object
    file and invokes release_http_object_request(). Update
    http-walker.c::abort_object_request() to use this.
    
    Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @rctay

    http*: add helper methods for fetching packs

    rctay authored committed
    The code handling the fetching of packs in http-push.c and
    http-walker.c have been refactored into new methods and a new struct
    (http_pack_request) in http.c. They are not meant to be invoked
    elsewhere.
    
    The new methods in http.c are
     - new_http_pack_request
     - finish_http_pack_request
     - release_http_pack_request
    
    and the new struct is http_pack_request.
    
    Add a function, new_http_pack_request(), that deals with the details of
    coming up with the filename to store the retrieved packfile, resuming a
    previously aborted request, and making a new curl request. Update
    http-push.c::start_fetch_packed() and http-walker.c::fetch_pack() to
    use this.
    
    Add a function, finish_http_pack_request(), that deals with renaming
    the pack, advancing the pack list, and installing the pack. Update
    http-push.c::finish_request() and http-walker.c::fetch_pack to use
    this.
    
    Update release_request() in http-push.c and http-walker.c to invoke
    release_http_pack_request() to clean up pack request helper data.
    
    The local_stream member of the transfer_request struct in http-push.c
    has been removed, as the packfile pointer will be managed in the struct
    http_pack_request.
    
    Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  3. @rctay

    http*: add http_get_info_packs

    rctay authored committed
    http-push.c and http-walker.c no longer have to use fetch_index or
    setup_index; they simply need to use http_get_info_packs, a new http
    method, in their fetch_indices implementations.
    
    Move fetch_index() and rename to fetch_pack_index() in http.c; this
    method is not meant to be used outside of http.c. It invokes
    end_url_with_slash with base_url; apart from that change, the code is
    identical.
    
    Move setup_index() and rename to fetch_and_setup_pack_index() in
    http.c; this method is not meant to be used outside of http.c.
    
    Do not immediately set ret to 0 in http-walker.c::fetch_indices();
    instead do it in the HTTP_MISSING_TARGET case, to make it clear that
    the HTTP_OK and HTTP_MISSING_TARGET cases both return 0.
    
    Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  4. @glandium

    http.c: new functions for the http API

    glandium authored committed
    The new functions added are:
     - http_request() (internal function)
     - http_get_strbuf()
     - http_get_file()
     - http_error()
    
    http_get_strbuf and http_get_file allow respectively to retrieve contents of
    an URL to a strbuf or an opened file handle.
    
    http_error prints out an error message containing the URL and the curl error
    (in curl_errorstr).
    
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  5. @rctay

    http*: move common variables and macros to http.[ch]

    rctay authored committed
    Move RANGE_HEADER_SIZE to http.h.
    
    Create no_pragma_header, the curl header list containing the header
    "Pragma:" in http.[ch]. It is allocated in http_init, and freed in
    http_cleanup. This replaces the no_pragma_header in http-push.c, and
    the no_pragma_header member in walker_data in http-walker.c.
    
    Create http_is_verbose. It is to be used by methods in http.c, and is
    modified at the entry points of http.c's users, namely http-push.c
    (when parsing options) and http-walker.c (in get_http_walker).
    
    Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Apr 2, 2009
  1. @mstorsjo

    Allow curl to rewind the read buffers

    mstorsjo authored committed
    When using multi-pass authentication methods, the curl library may
    need to rewind the read buffers (depending on how much already has
    been fed to the server) used for providing data to HTTP PUT, POST or
    PROPFIND, and in order to allow the library to do so, we need to tell
    it how by providing either an ioctl callback or a seek callback.
    
    This patch adds an ioctl callback, which should be usable on older
    curl versions (since 7.12.3) than the seek callback (introduced in
    curl 7.18.0).
    
    Some HTTP servers (such as Apache) give an 401 error reply immediately
    after receiving the headers (so no data has been read from the read
    buffers, and thus no rewinding is needed), but other servers (such
    as Lighttpd) only replies after the whole request has been sent and
    all data has been read from the read buffers, making rewinding necessary.
    
    Signed-off-by: Martin Storsjo <martin@martin.st>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jul 4, 2008
  1. Work around gcc warnings from curl headers

    authored
    After master.k.org upgrade, I started seeing these warning messages:
    
        transport.c: In function 'get_refs_via_curl':
        transport.c:458: error: call to '_curl_easy_setopt_err_write_callback' declared with attribute warning: curl_easy_setopt expects a curl_write_callback argument for this option
    
    It appears that the curl header wants to enforce the function signature
    for callback function given to curl_easy_setopt() to be compatible with
    that of (*curl_write_callback) or fwrite.  This patch seems to work the
    issue around.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Apr 27, 2008
  1. Make walker.fetch_ref() take a struct ref.

    Daniel Barkalow authored committed
    This simplifies a few things, makes a few things slightly more
    complicated, but, more importantly, allows that, when struct ref can
    represent a symref, http_fetch_ref() can return one.
    
    Incidentally makes the string that http_fetch_ref() gets include "refs/"
    (if appropriate), because that's how the name field of struct ref works.
    As far as I can tell, the usage in walker:interpret_target() wouldn't have
    worked previously, if it ever would have been used, which it wouldn't
    (since the fetch process uses the hash instead of the name of the ref
    there).
    
    Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Feb 27, 2008
  1. @glandium

    Set proxy override with http_init()

    glandium authored committed
    In transport.c, proxy setting (the one from the remote conf) was set through
    curl_easy_setopt() call, while http.c already does the same with the
    http.proxy setting. We now just use this infrastructure instead, and make
    http_init() now take the struct remote as argument so that it can take the
    http_proxy setting from there, and any other property that would be added
    later.
    
    At the same time, we make get_http_walker() take a struct remote argument
    too, and pass it to http_init(), which makes remote defined proxy be used
    for more than get_refs_via_curl().
    
    We leave out http-fetch and http-push, which don't use remotes for the
    moment, purposefully.
    
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Acked-by: Daniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jan 22, 2008
  1. Clarify that http-push being temporarily disabled with older cURL

    authored
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Dec 15, 2007
  1. @glandium

    Move fetch_ref from http-push.c and http-walker.c to http.c

    glandium authored committed
    Make the necessary changes to be ok with their difference, and rename the
    function http_fetch_ref.
    
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @glandium

    Use strbuf in http code

    glandium authored committed
    Also, replace whitespaces with tabs in some places
    
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  3. @glandium

    Avoid redundant declaration of missing_target()

    glandium authored committed
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Dec 9, 2007
  1. @glandium

    Cleanup variables in http.[ch]

    glandium authored committed
    Quite some variables defined as extern in http.h are only used in http.c,
    and some others, only defined in http.c, were not static.
    
    Signed-off-by: Mike Hommey <mh@glandium.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 19, 2007
  1. Make function to refill http queue a callback

    Daniel Barkalow authored committed
    This eliminates the last function provided by the code using http.h as
    a global symbol, so it should be possible to have multiple programs
    using http.h in the same executable, and it also adds an argument to
    that callback, so that info can be passed into the callback without
    being global.
    
    Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. Refactor http.h USE_CURL_MULTI fill_active_slots().

    Daniel Barkalow authored committed
    This removes all of the boilerplate and http-internal stuff from
    fill_active_slots() and makes it easy to turn into a callback.
    
    Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on May 4, 2007
  1. @julliard

    http-fetch: Disable use of curl multi support for libcurl < 7.16.

    julliard authored Junio C Hamano committed
    curl_multi_remove_handle() is broken in libcurl < 7.16, in that it
    doesn't correctly update the active handles count when a request is
    aborted. This causes the transfer to hang forever waiting for the
    handle count to become less than the number of active requests.
    
    Signed-off-by: Alexandre Julliard <julliard@winehq.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Dec 28, 2006
  1. Work around http-fetch built with cURL 7.16.0

    Junio C Hamano authored
    It appears that curl_easy_duphandle() from libcurl 7.16.0
    returns a curl session handle which fails GOOD_MULTI_HANDLE()
    check in curl_multi_add_handle().  This causes fetch_ref() to
    fail because start_active_slot() cannot start the request.
    
    For now, check for 7.16.0 to work this issue around.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Sep 20, 2006
  1. Patch for http-fetch.c and older curl releases

    Art Haas authored Junio C Hamano committed
    Older curl releases do not define CURLE_HTTP_RETURNED_ERROR, they
    use CURLE_HTTP_NOT_FOUND instead. Newer curl releases keep the
    CURLE_HTTP_NOT_FOUND definition but using a -DCURL_NO_OLDIES
    preprocessor flag the old name will not be present in the 'curl.h'
    header.
    
    This patch makes our code written for newer releases of the curl
    library but allow compiling against an older curl (older than
    0x070a03) by defining the missing CURLE_HTTP_RETURNED_ERROR as a
    synonym for CURLE_HTTP_NOT_FOUND.
    
    Signed-off-by: Art Haas <ahaas@airmail.net>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Mar 11, 2006
  1. HTTP slot reuse fixes

    Nick Hengeveld authored Junio C Hamano committed
    Incorporate into http-push a fix related to accessing slot results after
    the slot was reused, and fix a case in run_active_slot where a
    finished slot wasn't detected if the slot was reused.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Feb 7, 2006
  1. http-fetch: Abort requests for objects which arrived in packs

    Mark Wooding authored Junio C Hamano committed
    In fetch_object, there's a call to release an object request if the
    object mysteriously arrived, say in a pack.  Unfortunately, the fetch
    attempt for this object might already be in progress, and we'll leak the
    descriptor.  Instead, try to tidy away the request.
    
    Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Feb 1, 2006
  1. Fix HTTP request result processing after slot reuse

    Nick Hengeveld authored Junio C Hamano committed
    Add a way to store the results of an HTTP request when a slot finishes
    so the results can be processed after the slot has been reused.
    
    Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Nov 20, 2005
  1. Isolate shared HTTP request functionality

    Nick Hengeveld authored Junio C Hamano committed
    Move shared HTTP request functionality out of http-fetch and http-push,
    and replace the two fwrite_buffer/fwrite_buffer_dynamic functions with
    one fwrite_buffer function that does dynamic buffering.  Use slot
    callbacks to process responses to fetch object transfer requests and
    push transfer requests, and put all of http-push into an #ifdef check
    for curl multi support.
    
    Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Something went wrong with that request. Please try again.