]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jt/cdn-offload'
authorJunio C Hamano <gitster@pobox.com>
Thu, 25 Jun 2020 19:27:47 +0000 (12:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 25 Jun 2020 19:27:47 +0000 (12:27 -0700)
The "fetch/clone" protocol has been updated to allow the server to
instruct the clients to grab pre-packaged packfile(s) in addition
to the packed object data coming over the wire.

* jt/cdn-offload:
  upload-pack: fix a sparse '0 as NULL pointer' warning
  upload-pack: send part of packfile response as uri
  fetch-pack: support more than one pack lockfile
  upload-pack: refactor reading of pack-objects out
  Documentation: add Packfile URIs design doc
  Documentation: order protocol v2 sections
  http-fetch: support fetching packfiles by URL
  http-fetch: refactor into function
  http: refactor finish_http_pack_request()
  http: use --stdin when indexing dumb HTTP pack

1  2 
Documentation/technical/protocol-v2.txt
builtin/fetch-pack.c
fetch-pack.c
http.c
http.h
t/t5702-protocol-v2.sh
transport.c
upload-pack.c

Simple merge
diff --cc fetch-pack.c
index d8bbf45ee27a732469287f99768321640f9d992a,ca2b101b8dac89acb3cfa0a980676f37824013f6..acd55ba6e82a860eeb973d9d255c8d7efc13bddc
@@@ -1569,11 -1604,13 +1616,14 @@@ static struct ref *do_fetch_pack_v2(str
                        if (process_section_header(&reader, "wanted-refs", 1))
                                receive_wanted_refs(&reader, sought, nr_sought);
  
-                       /* get the pack */
+                       /* get the pack(s) */
+                       if (process_section_header(&reader, "packfile-uris", 1))
+                               receive_packfile_uris(&reader, &packfile_uris);
                        process_section_header(&reader, "packfile", 0);
-                       if (get_pack(args, fd, pack_lockfile, sought, nr_sought))
+                       if (get_pack(args, fd, pack_lockfiles,
+                                    !packfile_uris.nr, sought, nr_sought))
                                die(_("git fetch-pack: fetch failed."));
 +                      do_check_stateless_delimiter(args, &reader);
  
                        state = FETCH_DONE;
                        break;
diff --cc http.c
Simple merge
diff --cc http.h
Simple merge
Simple merge
diff --cc transport.c
index 7d50c502adfb6c24be91c8b07260c61a0add5340,a67e1990bf24eb05d166ba1017c4428d5e6cd5fa..6ee6771f550522441aa31b0c06ca84e50ef28750
@@@ -370,15 -369,24 +370,15 @@@ static int fetch_refs_via_pack(struct t
                refs_tmp = handshake(transport, 0, NULL, must_list_refs);
        }
  
 -      switch (data->version) {
 -      case protocol_v2:
 -              refs = fetch_pack(&args, data->fd,
 -                                refs_tmp ? refs_tmp : transport->remote_refs,
 -                                to_fetch, nr_heads, &data->shallow,
 -                                &transport->pack_lockfiles, data->version);
 -              break;
 -      case protocol_v1:
 -      case protocol_v0:
 -              die_if_server_options(transport);
 -              refs = fetch_pack(&args, data->fd,
 -                                refs_tmp ? refs_tmp : transport->remote_refs,
 -                                to_fetch, nr_heads, &data->shallow,
 -                                &transport->pack_lockfiles, data->version);
 -              break;
 -      case protocol_unknown_version:
 +      if (data->version == protocol_unknown_version)
                BUG("unknown protocol version");
 -      }
 +      else if (data->version <= protocol_v1)
 +              die_if_server_options(transport);
 +
 +      refs = fetch_pack(&args, data->fd,
 +                        refs_tmp ? refs_tmp : transport->remote_refs,
 +                        to_fetch, nr_heads, &data->shallow,
-                         &transport->pack_lockfile, data->version);
++                        &transport->pack_lockfiles, data->version);
  
        close(data->fd[0]);
        close(data->fd[1]);
diff --cc upload-pack.c
index f899fdf46ad4f8dee9dac2ab48f2a4ea27e3e686,219e804dc13bea3af0a8b14f85658cc2d2cac3af..39d0cf00be70ec76368dfbce9a2efab5815aea47
@@@ -84,7 -83,7 +84,8 @@@ struct upload_pack_data 
        /* 0 for no sideband, otherwise DEFAULT_PACKET_MAX or LARGE_PACKET_MAX */
        int use_sideband;
  
+       struct string_list uri_protocols;
 +      enum allow_uor allow_uor;
  
        struct list_objects_filter_options filter_options;
  
@@@ -117,7 -116,7 +118,8 @@@ static void upload_pack_data_init(struc
        struct oid_array haves = OID_ARRAY_INIT;
        struct object_array shallows = OBJECT_ARRAY_INIT;
        struct string_list deepen_not = STRING_LIST_INIT_DUP;
+       struct string_list uri_protocols = STRING_LIST_INIT_DUP;
 +      struct object_array extra_edge_obj = OBJECT_ARRAY_INIT;
  
        memset(data, 0, sizeof(*data));
        data->symref = symref;
        data->haves = haves;
        data->shallows = shallows;
        data->deepen_not = deepen_not;
+       data->uri_protocols = uri_protocols;
 +      data->extra_edge_obj = extra_edge_obj;
        packet_writer_init(&data->writer, 1);
  
        data->keepalive = 5;