1 #define USE_THE_REPOSITORY_VARIABLE
2 #define DISABLE_SIGN_COMPARE_WARNINGS
4 #include "git-compat-util.h"
5 #include "repository.h"
8 #include "environment.h"
18 #include "fetch-pack.h"
20 #include "run-command.h"
24 #include "oid-array.h"
27 #include "object-store.h"
29 #include "connected.h"
30 #include "fetch-negotiator.h"
33 #include "commit-reach.h"
34 #include "commit-graph.h"
36 #include "mergesort.h"
38 static int transfer_unpack_limit
= -1;
39 static int fetch_unpack_limit
= -1;
40 static int unpack_limit
= 100;
41 static int prefer_ofs_delta
= 1;
43 static int deepen_since_ok
;
44 static int deepen_not_ok
;
45 static int fetch_fsck_objects
= -1;
46 static int transfer_fsck_objects
= -1;
47 static int agent_supported
;
48 static int server_supports_filtering
;
49 static int advertise_sid
;
50 static struct shallow_lock shallow_lock
;
51 static const char *alternate_shallow_file
;
52 static struct fsck_options fsck_options
= FSCK_OPTIONS_MISSING_GITMODULES
;
53 static struct strbuf fsck_msg_types
= STRBUF_INIT
;
54 static struct string_list uri_protocols
= STRING_LIST_INIT_DUP
;
56 /* Remember to update object flag allocation in object.h */
57 #define COMPLETE (1U << 0)
58 #define ALTERNATE (1U << 1)
59 #define COMMON (1U << 6)
60 #define REACH_SCRATCH (1U << 7)
63 * After sending this many "have"s if we do not get any new ACK , we
64 * give up traversing our history.
66 #define MAX_IN_VAIN 256
68 static int multi_ack
, use_sideband
;
69 /* Allow specifying sha1 if it is a ref tip. */
70 #define ALLOW_TIP_SHA1 01
71 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
72 #define ALLOW_REACHABLE_SHA1 02
73 static unsigned int allow_unadvertised_object_request
;
75 __attribute__((format (printf
, 2, 3)))
76 static inline void print_verbose(const struct fetch_pack_args
*args
,
84 va_start(params
, fmt
);
85 vfprintf(stderr
, fmt
, params
);
90 struct alternate_object_cache
{
91 struct object
**items
;
95 static void cache_one_alternate(const struct object_id
*oid
,
98 struct alternate_object_cache
*cache
= vcache
;
99 struct object
*obj
= parse_object(the_repository
, oid
);
101 if (!obj
|| (obj
->flags
& ALTERNATE
))
104 obj
->flags
|= ALTERNATE
;
105 ALLOC_GROW(cache
->items
, cache
->nr
+ 1, cache
->alloc
);
106 cache
->items
[cache
->nr
++] = obj
;
109 static void for_each_cached_alternate(struct fetch_negotiator
*negotiator
,
110 void (*cb
)(struct fetch_negotiator
*,
113 static int initialized
;
114 static struct alternate_object_cache cache
;
118 for_each_alternate_ref(cache_one_alternate
, &cache
);
122 for (i
= 0; i
< cache
.nr
; i
++)
123 cb(negotiator
, cache
.items
[i
]);
126 static void die_in_commit_graph_only(const struct object_id
*oid
)
128 die(_("You are attempting to fetch %s, which is in the commit graph file but not in the object database.\n"
129 "This is probably due to repo corruption.\n"
130 "If you are attempting to repair this repo corruption by refetching the missing object, use 'git fetch --refetch' with the missing object."),
134 static struct commit
*deref_without_lazy_fetch(const struct object_id
*oid
,
135 int mark_tags_complete_and_check_obj_db
)
137 enum object_type type
;
138 struct object_info info
= { .typep
= &type
};
139 struct commit
*commit
;
141 commit
= lookup_commit_in_graph(the_repository
, oid
);
143 if (mark_tags_complete_and_check_obj_db
) {
144 if (!has_object(the_repository
, oid
, 0))
145 die_in_commit_graph_only(oid
);
151 if (oid_object_info_extended(the_repository
, oid
, &info
,
152 OBJECT_INFO_SKIP_FETCH_OBJECT
| OBJECT_INFO_QUICK
))
154 if (type
== OBJ_TAG
) {
155 struct tag
*tag
= (struct tag
*)
156 parse_object(the_repository
, oid
);
160 if (mark_tags_complete_and_check_obj_db
)
161 tag
->object
.flags
|= COMPLETE
;
162 oid
= &tag
->tagged
->oid
;
168 if (type
== OBJ_COMMIT
) {
169 struct commit
*commit
= lookup_commit(the_repository
, oid
);
170 if (!commit
|| repo_parse_commit(the_repository
, commit
))
178 static int rev_list_insert_ref(struct fetch_negotiator
*negotiator
,
179 const struct object_id
*oid
)
181 struct commit
*c
= deref_without_lazy_fetch(oid
, 0);
184 negotiator
->add_tip(negotiator
, c
);
188 static int rev_list_insert_ref_oid(const char *refname UNUSED
,
189 const char *referent UNUSED
,
190 const struct object_id
*oid
,
194 return rev_list_insert_ref(cb_data
, oid
);
205 static void consume_shallow_list(struct fetch_pack_args
*args
,
206 struct packet_reader
*reader
)
208 if (args
->stateless_rpc
&& args
->deepen
) {
209 /* If we sent a depth we will get back "duplicate"
210 * shallow and unshallow commands every time there
211 * is a block of have lines exchanged.
213 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
214 if (starts_with(reader
->line
, "shallow "))
216 if (starts_with(reader
->line
, "unshallow "))
218 die(_("git fetch-pack: expected shallow list"));
220 if (reader
->status
!= PACKET_READ_FLUSH
)
221 die(_("git fetch-pack: expected a flush packet after shallow list"));
225 static enum ack_type
get_ack(struct packet_reader
*reader
,
226 struct object_id
*result_oid
)
231 if (packet_reader_read(reader
) != PACKET_READ_NORMAL
)
232 die(_("git fetch-pack: expected ACK/NAK, got a flush packet"));
233 len
= reader
->pktlen
;
235 if (!strcmp(reader
->line
, "NAK"))
237 if (skip_prefix(reader
->line
, "ACK ", &arg
)) {
239 if (!parse_oid_hex(arg
, result_oid
, &p
)) {
240 len
-= p
- reader
->line
;
243 if (strstr(p
, "continue"))
245 if (strstr(p
, "common"))
247 if (strstr(p
, "ready"))
252 die(_("git fetch-pack: expected ACK/NAK, got '%s'"), reader
->line
);
255 static void send_request(struct fetch_pack_args
*args
,
256 int fd
, struct strbuf
*buf
)
258 if (args
->stateless_rpc
) {
259 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
262 if (write_in_full(fd
, buf
->buf
, buf
->len
) < 0)
263 die_errno(_("unable to write to remote"));
267 static void insert_one_alternate_object(struct fetch_negotiator
*negotiator
,
270 rev_list_insert_ref(negotiator
, &obj
->oid
);
273 #define INITIAL_FLUSH 16
274 #define PIPESAFE_FLUSH 32
275 #define LARGE_FLUSH 16384
277 static int next_flush(int stateless_rpc
, int count
)
280 if (count
< LARGE_FLUSH
)
283 count
= count
* 11 / 10;
285 if (count
< PIPESAFE_FLUSH
)
288 count
+= PIPESAFE_FLUSH
;
293 static void mark_tips(struct fetch_negotiator
*negotiator
,
294 const struct oid_array
*negotiation_tips
)
298 if (!negotiation_tips
) {
299 refs_for_each_rawref(get_main_ref_store(the_repository
),
300 rev_list_insert_ref_oid
, negotiator
);
304 for (i
= 0; i
< negotiation_tips
->nr
; i
++)
305 rev_list_insert_ref(negotiator
, &negotiation_tips
->oid
[i
]);
309 static void send_filter(struct fetch_pack_args
*args
,
310 struct strbuf
*req_buf
,
311 int server_supports_filter
)
313 if (args
->filter_options
.choice
) {
315 expand_list_objects_filter_spec(&args
->filter_options
);
316 if (server_supports_filter
) {
317 print_verbose(args
, _("Server supports filter"));
318 packet_buf_write(req_buf
, "filter %s", spec
);
319 trace2_data_string("fetch", the_repository
,
320 "filter/effective", spec
);
322 warning("filtering not recognized by server, ignoring");
323 trace2_data_string("fetch", the_repository
,
324 "filter/unsupported", spec
);
327 trace2_data_string("fetch", the_repository
,
332 static int find_common(struct fetch_negotiator
*negotiator
,
333 struct fetch_pack_args
*args
,
334 int fd
[2], struct object_id
*result_oid
,
338 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
339 int negotiation_round
= 0, haves
= 0;
340 const struct object_id
*oid
;
341 unsigned in_vain
= 0;
342 int got_continue
= 0;
344 struct strbuf req_buf
= STRBUF_INIT
;
345 size_t state_len
= 0;
346 struct packet_reader reader
;
348 if (args
->stateless_rpc
&& multi_ack
== 1)
349 die(_("the option '%s' requires '%s'"), "--stateless-rpc", "multi_ack_detailed");
351 packet_reader_init(&reader
, fd
[0], NULL
, 0,
352 PACKET_READ_CHOMP_NEWLINE
|
353 PACKET_READ_DIE_ON_ERR_PACKET
);
355 mark_tips(negotiator
, args
->negotiation_tips
);
356 for_each_cached_alternate(negotiator
, insert_one_alternate_object
);
359 for ( ; refs
; refs
= refs
->next
) {
360 struct object_id
*remote
= &refs
->old_oid
;
361 const char *remote_hex
;
364 if (!args
->refetch
) {
366 * If that object is complete (i.e. it is an ancestor of a
367 * local ref), we tell them we have it but do not have to
368 * tell them about its ancestors, which they already know
371 * We use lookup_object here because we are only
372 * interested in the case we *know* the object is
373 * reachable and we have already scanned it.
375 if (((o
= lookup_object(the_repository
, remote
)) != NULL
) &&
376 (o
->flags
& COMPLETE
)) {
381 remote_hex
= oid_to_hex(remote
);
383 struct strbuf c
= STRBUF_INIT
;
384 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
385 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
386 if (no_done
) strbuf_addstr(&c
, " no-done");
387 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
388 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
389 if (args
->deepen_relative
) strbuf_addstr(&c
, " deepen-relative");
390 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
391 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
392 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
393 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
394 if (deepen_since_ok
) strbuf_addstr(&c
, " deepen-since");
395 if (deepen_not_ok
) strbuf_addstr(&c
, " deepen-not");
396 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
397 git_user_agent_sanitized());
399 strbuf_addf(&c
, " session-id=%s", trace2_session_id());
400 if (args
->filter_options
.choice
)
401 strbuf_addstr(&c
, " filter");
402 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
405 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
410 strbuf_release(&req_buf
);
415 if (is_repository_shallow(the_repository
))
416 write_shallow_commits(&req_buf
, 1, NULL
);
418 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
419 if (args
->deepen_since
) {
420 timestamp_t max_age
= approxidate(args
->deepen_since
);
421 packet_buf_write(&req_buf
, "deepen-since %"PRItime
, max_age
);
423 if (args
->deepen_not
) {
425 for (i
= 0; i
< args
->deepen_not
->nr
; i
++) {
426 struct string_list_item
*s
= args
->deepen_not
->items
+ i
;
427 packet_buf_write(&req_buf
, "deepen-not %s", s
->string
);
430 send_filter(args
, &req_buf
, server_supports_filtering
);
431 packet_buf_flush(&req_buf
);
432 state_len
= req_buf
.len
;
436 struct object_id oid
;
438 send_request(args
, fd
[1], &req_buf
);
439 while (packet_reader_read(&reader
) == PACKET_READ_NORMAL
) {
440 if (skip_prefix(reader
.line
, "shallow ", &arg
)) {
441 if (get_oid_hex(arg
, &oid
))
442 die(_("invalid shallow line: %s"), reader
.line
);
443 register_shallow(the_repository
, &oid
);
446 if (skip_prefix(reader
.line
, "unshallow ", &arg
)) {
447 if (get_oid_hex(arg
, &oid
))
448 die(_("invalid unshallow line: %s"), reader
.line
);
449 if (!lookup_object(the_repository
, &oid
))
450 die(_("object not found: %s"), reader
.line
);
451 /* make sure that it is parsed as shallow */
452 if (!parse_object(the_repository
, &oid
))
453 die(_("error in object: %s"), reader
.line
);
454 if (unregister_shallow(&oid
))
455 die(_("no shallow found: %s"), reader
.line
);
458 die(_("expected shallow/unshallow, got %s"), reader
.line
);
460 } else if (!args
->stateless_rpc
)
461 send_request(args
, fd
[1], &req_buf
);
463 if (!args
->stateless_rpc
) {
464 /* If we aren't using the stateless-rpc interface
465 * we don't need to retain the headers.
467 strbuf_setlen(&req_buf
, 0);
471 trace2_region_enter("fetch-pack", "negotiation_v0_v1", the_repository
);
474 while ((oid
= negotiator
->next(negotiator
))) {
475 packet_buf_write(&req_buf
, "have %s\n", oid_to_hex(oid
));
476 print_verbose(args
, "have %s", oid_to_hex(oid
));
479 if (flush_at
<= ++count
) {
483 trace2_region_enter_printf("negotiation_v0_v1", "round",
484 the_repository
, "%d",
486 trace2_data_intmax("negotiation_v0_v1", the_repository
,
487 "haves_added", haves
);
488 trace2_data_intmax("negotiation_v0_v1", the_repository
,
491 packet_buf_flush(&req_buf
);
492 send_request(args
, fd
[1], &req_buf
);
493 strbuf_setlen(&req_buf
, state_len
);
495 flush_at
= next_flush(args
->stateless_rpc
, count
);
498 * We keep one window "ahead" of the other side, and
499 * will wait for an ACK only on the next one
501 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
504 consume_shallow_list(args
, &reader
);
506 ack
= get_ack(&reader
, result_oid
);
508 print_verbose(args
, _("got %s %d %s"), "ack",
509 ack
, oid_to_hex(result_oid
));
512 trace2_region_leave_printf("negotiation_v0_v1", "round",
513 the_repository
, "%d",
522 struct commit
*commit
=
523 lookup_commit(the_repository
,
528 die(_("invalid commit %s"), oid_to_hex(result_oid
));
529 was_common
= negotiator
->ack(negotiator
, commit
);
530 if (args
->stateless_rpc
533 /* We need to replay the have for this object
534 * on the next RPC request so the peer knows
535 * it is in common with us.
537 const char *hex
= oid_to_hex(result_oid
);
538 packet_buf_write(&req_buf
, "have %s\n", hex
);
539 state_len
= req_buf
.len
;
542 * Reset in_vain because an ack
543 * for this commit has not been
547 } else if (!args
->stateless_rpc
548 || ack
!= ACK_common
)
552 if (ack
== ACK_ready
)
559 trace2_region_leave_printf("negotiation_v0_v1", "round",
560 the_repository
, "%d",
562 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
563 print_verbose(args
, _("giving up"));
571 trace2_region_leave("fetch-pack", "negotiation_v0_v1", the_repository
);
572 trace2_data_intmax("negotiation_v0_v1", the_repository
, "total_rounds",
574 if (!got_ready
|| !no_done
) {
575 packet_buf_write(&req_buf
, "done\n");
576 send_request(args
, fd
[1], &req_buf
);
578 print_verbose(args
, _("done"));
583 strbuf_release(&req_buf
);
585 if (!got_ready
|| !no_done
)
586 consume_shallow_list(args
, &reader
);
587 while (flushes
|| multi_ack
) {
588 int ack
= get_ack(&reader
, result_oid
);
590 print_verbose(args
, _("got %s (%d) %s"), "ack",
591 ack
, oid_to_hex(result_oid
));
599 /* it is no error to fetch into a completely empty repo */
600 return count
? retval
: 0;
603 static struct commit_list
*complete
;
605 static int mark_complete(const struct object_id
*oid
)
607 struct commit
*commit
= deref_without_lazy_fetch(oid
, 1);
609 if (commit
&& !(commit
->object
.flags
& COMPLETE
)) {
610 commit
->object
.flags
|= COMPLETE
;
611 commit_list_insert(commit
, &complete
);
616 static int mark_complete_oid(const char *refname UNUSED
,
617 const char *referent UNUSED
,
618 const struct object_id
*oid
,
620 void *cb_data UNUSED
)
622 return mark_complete(oid
);
625 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
628 while (complete
&& cutoff
<= complete
->item
->date
) {
629 print_verbose(args
, _("Marking %s as complete"),
630 oid_to_hex(&complete
->item
->object
.oid
));
631 pop_most_recent_commit(&complete
, COMPLETE
);
635 static void add_refs_to_oidset(struct oidset
*oids
, struct ref
*refs
)
637 for (; refs
; refs
= refs
->next
)
638 oidset_insert(oids
, &refs
->old_oid
);
641 static int is_unmatched_ref(const struct ref
*ref
)
643 struct object_id oid
;
645 return ref
->match_status
== REF_NOT_MATCHED
&&
646 !parse_oid_hex(ref
->name
, &oid
, &p
) &&
648 oideq(&oid
, &ref
->old_oid
);
651 static void filter_refs(struct fetch_pack_args
*args
,
653 struct ref
**sought
, int nr_sought
)
655 struct ref
*newlist
= NULL
;
656 struct ref
**newtail
= &newlist
;
657 struct ref
*unmatched
= NULL
;
658 struct ref
*ref
, *next
;
659 struct oidset tip_oids
= OIDSET_INIT
;
661 int strict
= !(allow_unadvertised_object_request
&
662 (ALLOW_TIP_SHA1
| ALLOW_REACHABLE_SHA1
));
665 for (ref
= *refs
; ref
; ref
= next
) {
669 if (starts_with(ref
->name
, "refs/") &&
670 check_refname_format(ref
->name
, 0)) {
672 * trash or a peeled value; do not even add it to
678 while (i
< nr_sought
) {
679 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
681 break; /* definitely do not have it */
683 keep
= 1; /* definitely have it */
684 sought
[i
]->match_status
= REF_MATCHED
;
689 if (!keep
&& args
->fetch_all
&&
690 (!args
->deepen
|| !starts_with(ref
->name
, "refs/tags/")))
697 newtail
= &ref
->next
;
699 ref
->next
= unmatched
;
705 for (i
= 0; i
< nr_sought
; i
++) {
707 if (!is_unmatched_ref(ref
))
710 add_refs_to_oidset(&tip_oids
, unmatched
);
711 add_refs_to_oidset(&tip_oids
, newlist
);
716 /* Append unmatched requests to the list */
717 for (i
= 0; i
< nr_sought
; i
++) {
719 if (!is_unmatched_ref(ref
))
722 if (!strict
|| oidset_contains(&tip_oids
, &ref
->old_oid
)) {
723 ref
->match_status
= REF_MATCHED
;
724 *newtail
= copy_ref(ref
);
725 newtail
= &(*newtail
)->next
;
727 ref
->match_status
= REF_UNADVERTISED_NOT_ALLOWED
;
731 oidset_clear(&tip_oids
);
732 free_refs(unmatched
);
737 static void mark_alternate_complete(struct fetch_negotiator
*negotiator UNUSED
,
740 mark_complete(&obj
->oid
);
744 * Mark recent commits available locally and reachable from a local ref as
747 * The cutoff time for recency is determined by this heuristic: it is the
748 * earliest commit time of the objects in refs that are commits and that we know
749 * the commit time of.
751 static void mark_complete_and_common_ref(struct fetch_negotiator
*negotiator
,
752 struct fetch_pack_args
*args
,
756 int old_save_commit_buffer
= save_commit_buffer
;
757 timestamp_t cutoff
= 0;
762 save_commit_buffer
= 0;
764 trace2_region_enter("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL
);
765 for (ref
= *refs
; ref
; ref
= ref
->next
) {
766 struct commit
*commit
;
768 commit
= lookup_commit_in_graph(the_repository
, &ref
->old_oid
);
772 if (!has_object(the_repository
, &ref
->old_oid
, 0))
774 o
= parse_object(the_repository
, &ref
->old_oid
);
775 if (!o
|| o
->type
!= OBJ_COMMIT
)
778 commit
= (struct commit
*)o
;
782 * We already have it -- which may mean that we were
783 * in sync with the other side at some time after
784 * that (it is OK if we guess wrong here).
786 if (!cutoff
|| cutoff
< commit
->date
)
787 cutoff
= commit
->date
;
789 trace2_region_leave("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL
);
792 * This block marks all local refs as COMPLETE, and then recursively marks all
793 * parents of those refs as COMPLETE.
795 trace2_region_enter("fetch-pack", "mark_complete_local_refs", NULL
);
797 refs_for_each_rawref(get_main_ref_store(the_repository
),
798 mark_complete_oid
, NULL
);
799 for_each_cached_alternate(NULL
, mark_alternate_complete
);
800 commit_list_sort_by_date(&complete
);
802 mark_recent_complete_commits(args
, cutoff
);
804 trace2_region_leave("fetch-pack", "mark_complete_local_refs", NULL
);
807 * Mark all complete remote refs as common refs.
808 * Don't mark them common yet; the server has to be told so first.
810 trace2_region_enter("fetch-pack", "mark_common_remote_refs", NULL
);
811 for (ref
= *refs
; ref
; ref
= ref
->next
) {
812 struct commit
*c
= deref_without_lazy_fetch(&ref
->old_oid
, 0);
814 if (!c
|| !(c
->object
.flags
& COMPLETE
))
817 negotiator
->known_common(negotiator
, c
);
819 trace2_region_leave("fetch-pack", "mark_common_remote_refs", NULL
);
821 save_commit_buffer
= old_save_commit_buffer
;
825 * Returns 1 if every object pointed to by the given remote refs is available
826 * locally and reachable from a local ref, and 0 otherwise.
828 static int everything_local(struct fetch_pack_args
*args
,
834 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
835 const struct object_id
*remote
= &ref
->old_oid
;
838 o
= lookup_object(the_repository
, remote
);
839 if (!o
|| !(o
->flags
& COMPLETE
)) {
841 print_verbose(args
, "want %s (%s)", oid_to_hex(remote
),
845 print_verbose(args
, _("already have %s (%s)"), oid_to_hex(remote
),
852 static int sideband_demux(int in UNUSED
, int out
, void *data
)
857 ret
= recv_sideband("fetch-pack", xd
[0], out
);
862 static void create_promisor_file(const char *keep_name
,
863 struct ref
**sought
, int nr_sought
)
865 struct strbuf promisor_name
= STRBUF_INIT
;
868 strbuf_addstr(&promisor_name
, keep_name
);
869 suffix_stripped
= strbuf_strip_suffix(&promisor_name
, ".keep");
870 if (!suffix_stripped
)
871 BUG("name of pack lockfile should end with .keep (was '%s')",
873 strbuf_addstr(&promisor_name
, ".promisor");
875 write_promisor_file(promisor_name
.buf
, sought
, nr_sought
);
877 strbuf_release(&promisor_name
);
880 static void parse_gitmodules_oids(int fd
, struct oidset
*gitmodules_oids
)
882 int len
= the_hash_algo
->hexsz
+ 1; /* hash + NL */
885 char hex_hash
[GIT_MAX_HEXSZ
+ 1];
886 int read_len
= read_in_full(fd
, hex_hash
, len
);
887 struct object_id oid
;
893 die("invalid length read %d", read_len
);
894 if (parse_oid_hex(hex_hash
, &oid
, &end
) || *end
!= '\n')
896 oidset_insert(gitmodules_oids
, &oid
);
900 static void add_index_pack_keep_option(struct strvec
*args
)
902 char hostname
[HOST_NAME_MAX
+ 1];
904 if (xgethostname(hostname
, sizeof(hostname
)))
905 xsnprintf(hostname
, sizeof(hostname
), "localhost");
906 strvec_pushf(args
, "--keep=fetch-pack %"PRIuMAX
" on %s",
907 (uintmax_t)getpid(), hostname
);
911 * If packfile URIs were provided, pass a non-NULL pointer to index_pack_args.
912 * The strings to pass as the --index-pack-arg arguments to http-fetch will be
913 * stored there. (It must be freed by the caller.)
915 static int get_pack(struct fetch_pack_args
*args
,
916 int xd
[2], struct string_list
*pack_lockfiles
,
917 struct strvec
*index_pack_args
,
918 struct ref
**sought
, int nr_sought
,
919 struct oidset
*gitmodules_oids
)
922 int do_keep
= args
->keep_pack
;
923 const char *cmd_name
;
924 struct pack_header header
;
926 struct child_process cmd
= CHILD_PROCESS_INIT
;
927 int fsck_objects
= 0;
930 memset(&demux
, 0, sizeof(demux
));
932 /* xd[] is talking with upload-pack; subprocess reads from
933 * xd[0], spits out band#2 to stderr, and feeds us band#1
934 * through demux->out.
936 demux
.proc
= sideband_demux
;
939 demux
.isolate_sigpipe
= 1;
940 if (start_async(&demux
))
941 die(_("fetch-pack: unable to fork off sideband demultiplexer"));
946 if (!args
->keep_pack
&& unpack_limit
&& !index_pack_args
) {
948 if (read_pack_header(demux
.out
, &header
))
949 die(_("protocol error: bad pack header"));
951 if (ntohl(header
.hdr_entries
) < unpack_limit
)
957 if (alternate_shallow_file
) {
958 strvec_push(&cmd
.args
, "--shallow-file");
959 strvec_push(&cmd
.args
, alternate_shallow_file
);
962 fsck_objects
= fetch_pack_fsck_objects();
964 if (do_keep
|| args
->from_promisor
|| index_pack_args
|| fsck_objects
) {
965 if (pack_lockfiles
|| fsck_objects
)
967 cmd_name
= "index-pack";
968 strvec_push(&cmd
.args
, cmd_name
);
969 strvec_push(&cmd
.args
, "--stdin");
970 if (!args
->quiet
&& !args
->no_progress
)
971 strvec_push(&cmd
.args
, "-v");
972 if (args
->use_thin_pack
)
973 strvec_push(&cmd
.args
, "--fix-thin");
974 if ((do_keep
|| index_pack_args
) && (args
->lock_pack
|| unpack_limit
))
975 add_index_pack_keep_option(&cmd
.args
);
976 if (!index_pack_args
&& args
->check_self_contained_and_connected
)
977 strvec_push(&cmd
.args
, "--check-self-contained-and-connected");
980 * We cannot perform any connectivity checks because
981 * not all packs have been downloaded; let the caller
982 * have this responsibility.
984 args
->check_self_contained_and_connected
= 0;
986 if (args
->from_promisor
)
988 * create_promisor_file() may be called afterwards but
989 * we still need index-pack to know that this is a
990 * promisor pack. For example, if transfer.fsckobjects
991 * is true, index-pack needs to know that .gitmodules
992 * is a promisor object (so that it won't complain if
995 strvec_push(&cmd
.args
, "--promisor");
998 cmd_name
= "unpack-objects";
999 strvec_push(&cmd
.args
, cmd_name
);
1000 if (args
->quiet
|| args
->no_progress
)
1001 strvec_push(&cmd
.args
, "-q");
1002 args
->check_self_contained_and_connected
= 0;
1006 strvec_pushf(&cmd
.args
, "--pack_header=%"PRIu32
",%"PRIu32
,
1007 ntohl(header
.hdr_version
),
1008 ntohl(header
.hdr_entries
));
1010 if (args
->from_promisor
|| index_pack_args
)
1012 * We cannot use --strict in index-pack because it
1013 * checks both broken objects and links, but we only
1014 * want to check for broken objects.
1016 strvec_push(&cmd
.args
, "--fsck-objects");
1018 strvec_pushf(&cmd
.args
, "--strict%s",
1019 fsck_msg_types
.buf
);
1022 if (index_pack_args
) {
1025 for (i
= 0; i
< cmd
.args
.nr
; i
++)
1026 strvec_push(index_pack_args
, cmd
.args
.v
[i
]);
1029 sigchain_push(SIGPIPE
, SIG_IGN
);
1033 if (start_command(&cmd
))
1034 die(_("fetch-pack: unable to fork off %s"), cmd_name
);
1035 if (do_keep
&& (pack_lockfiles
|| fsck_objects
)) {
1037 char *pack_lockfile
= index_pack_lockfile(the_repository
,
1041 if (!is_well_formed
)
1042 die(_("fetch-pack: invalid index-pack output"));
1043 if (pack_lockfiles
&& pack_lockfile
)
1044 string_list_append_nodup(pack_lockfiles
, pack_lockfile
);
1046 free(pack_lockfile
);
1047 parse_gitmodules_oids(cmd
.out
, gitmodules_oids
);
1052 /* Closed by start_command() */
1055 ret
= finish_command(&cmd
);
1056 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
1057 args
->self_contained_and_connected
=
1058 args
->check_self_contained_and_connected
&&
1061 die(_("%s failed"), cmd_name
);
1062 if (use_sideband
&& finish_async(&demux
))
1063 die(_("error in sideband demultiplexer"));
1065 sigchain_pop(SIGPIPE
);
1068 * Now that index-pack has succeeded, write the promisor file using the
1069 * obtained .keep filename if necessary
1071 if (do_keep
&& pack_lockfiles
&& pack_lockfiles
->nr
&& args
->from_promisor
)
1072 create_promisor_file(pack_lockfiles
->items
[0].string
, sought
, nr_sought
);
1077 static int ref_compare_name(const struct ref
*a
, const struct ref
*b
)
1079 return strcmp(a
->name
, b
->name
);
1082 DEFINE_LIST_SORT(static, sort_ref_list
, struct ref
, next
);
1084 static int cmp_ref_by_name(const void *a_
, const void *b_
)
1086 const struct ref
*a
= *((const struct ref
**)a_
);
1087 const struct ref
*b
= *((const struct ref
**)b_
);
1088 return strcmp(a
->name
, b
->name
);
1091 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
1093 const struct ref
*orig_ref
,
1094 struct ref
**sought
, int nr_sought
,
1095 struct shallow_info
*si
,
1096 struct string_list
*pack_lockfiles
)
1098 struct repository
*r
= the_repository
;
1099 struct ref
*ref
= copy_ref_list(orig_ref
);
1100 struct object_id oid
;
1101 const char *agent_feature
;
1103 struct fetch_negotiator negotiator_alloc
;
1104 struct fetch_negotiator
*negotiator
;
1106 negotiator
= &negotiator_alloc
;
1107 if (args
->refetch
) {
1108 fetch_negotiator_init_noop(negotiator
);
1110 fetch_negotiator_init(r
, negotiator
);
1113 sort_ref_list(&ref
, ref_compare_name
);
1114 QSORT(sought
, nr_sought
, cmp_ref_by_name
);
1116 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
1117 agent_supported
= 1;
1119 print_verbose(args
, _("Server version is %.*s"),
1120 (int)agent_len
, agent_feature
);
1123 if (!server_supports("session-id"))
1126 if (server_supports("shallow"))
1127 print_verbose(args
, _("Server supports %s"), "shallow");
1128 else if (args
->depth
> 0 || is_repository_shallow(r
))
1129 die(_("Server does not support shallow clients"));
1130 if (args
->depth
> 0 || args
->deepen_since
|| args
->deepen_not
)
1132 if (server_supports("multi_ack_detailed")) {
1133 print_verbose(args
, _("Server supports %s"), "multi_ack_detailed");
1135 if (server_supports("no-done")) {
1136 print_verbose(args
, _("Server supports %s"), "no-done");
1137 if (args
->stateless_rpc
)
1141 else if (server_supports("multi_ack")) {
1142 print_verbose(args
, _("Server supports %s"), "multi_ack");
1145 if (server_supports("side-band-64k")) {
1146 print_verbose(args
, _("Server supports %s"), "side-band-64k");
1149 else if (server_supports("side-band")) {
1150 print_verbose(args
, _("Server supports %s"), "side-band");
1153 if (server_supports("allow-tip-sha1-in-want")) {
1154 print_verbose(args
, _("Server supports %s"), "allow-tip-sha1-in-want");
1155 allow_unadvertised_object_request
|= ALLOW_TIP_SHA1
;
1157 if (server_supports("allow-reachable-sha1-in-want")) {
1158 print_verbose(args
, _("Server supports %s"), "allow-reachable-sha1-in-want");
1159 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
1161 if (server_supports("thin-pack"))
1162 print_verbose(args
, _("Server supports %s"), "thin-pack");
1164 args
->use_thin_pack
= 0;
1165 if (server_supports("no-progress"))
1166 print_verbose(args
, _("Server supports %s"), "no-progress");
1168 args
->no_progress
= 0;
1169 if (server_supports("include-tag"))
1170 print_verbose(args
, _("Server supports %s"), "include-tag");
1172 args
->include_tag
= 0;
1173 if (server_supports("ofs-delta"))
1174 print_verbose(args
, _("Server supports %s"), "ofs-delta");
1176 prefer_ofs_delta
= 0;
1178 if (server_supports("filter")) {
1179 server_supports_filtering
= 1;
1180 print_verbose(args
, _("Server supports %s"), "filter");
1181 } else if (args
->filter_options
.choice
) {
1182 warning("filtering not recognized by server, ignoring");
1185 if (server_supports("deepen-since")) {
1186 print_verbose(args
, _("Server supports %s"), "deepen-since");
1187 deepen_since_ok
= 1;
1188 } else if (args
->deepen_since
)
1189 die(_("Server does not support --shallow-since"));
1190 if (server_supports("deepen-not")) {
1191 print_verbose(args
, _("Server supports %s"), "deepen-not");
1193 } else if (args
->deepen_not
)
1194 die(_("Server does not support --shallow-exclude"));
1195 if (server_supports("deepen-relative"))
1196 print_verbose(args
, _("Server supports %s"), "deepen-relative");
1197 else if (args
->deepen_relative
)
1198 die(_("Server does not support --deepen"));
1199 if (!server_supports_hash(the_hash_algo
->name
, NULL
))
1200 die(_("Server does not support this repository's object format"));
1202 mark_complete_and_common_ref(negotiator
, args
, &ref
);
1203 filter_refs(args
, &ref
, sought
, nr_sought
);
1204 if (!args
->refetch
&& everything_local(args
, &ref
)) {
1205 packet_flush(fd
[1]);
1208 if (find_common(negotiator
, args
, fd
, &oid
, ref
) < 0)
1209 if (!args
->keep_pack
)
1210 /* When cloning, it is not unusual to have
1213 warning(_("no common commits"));
1215 if (args
->stateless_rpc
)
1216 packet_flush(fd
[1]);
1218 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
1220 else if (si
->nr_ours
|| si
->nr_theirs
) {
1221 if (args
->reject_shallow_remote
)
1222 die(_("source repository is shallow, reject to clone."));
1223 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
1225 alternate_shallow_file
= NULL
;
1226 if (get_pack(args
, fd
, pack_lockfiles
, NULL
, sought
, nr_sought
,
1227 &fsck_options
.gitmodules_found
))
1228 die(_("git fetch-pack: fetch failed."));
1229 if (fsck_finish(&fsck_options
))
1234 negotiator
->release(negotiator
);
1238 static void add_shallow_requests(struct strbuf
*req_buf
,
1239 const struct fetch_pack_args
*args
)
1241 if (is_repository_shallow(the_repository
))
1242 write_shallow_commits(req_buf
, 1, NULL
);
1243 if (args
->depth
> 0)
1244 packet_buf_write(req_buf
, "deepen %d", args
->depth
);
1245 if (args
->deepen_since
) {
1246 timestamp_t max_age
= approxidate(args
->deepen_since
);
1247 packet_buf_write(req_buf
, "deepen-since %"PRItime
, max_age
);
1249 if (args
->deepen_not
) {
1251 for (i
= 0; i
< args
->deepen_not
->nr
; i
++) {
1252 struct string_list_item
*s
= args
->deepen_not
->items
+ i
;
1253 packet_buf_write(req_buf
, "deepen-not %s", s
->string
);
1256 if (args
->deepen_relative
)
1257 packet_buf_write(req_buf
, "deepen-relative\n");
1260 static void add_wants(const struct ref
*wants
, struct strbuf
*req_buf
)
1262 int use_ref_in_want
= server_supports_feature("fetch", "ref-in-want", 0);
1264 for ( ; wants
; wants
= wants
->next
) {
1265 const struct object_id
*remote
= &wants
->old_oid
;
1269 * If that object is complete (i.e. it is an ancestor of a
1270 * local ref), we tell them we have it but do not have to
1271 * tell them about its ancestors, which they already know
1274 * We use lookup_object here because we are only
1275 * interested in the case we *know* the object is
1276 * reachable and we have already scanned it.
1278 if (((o
= lookup_object(the_repository
, remote
)) != NULL
) &&
1279 (o
->flags
& COMPLETE
)) {
1283 if (!use_ref_in_want
|| wants
->exact_oid
)
1284 packet_buf_write(req_buf
, "want %s\n", oid_to_hex(remote
));
1286 packet_buf_write(req_buf
, "want-ref %s\n", wants
->name
);
1290 static void add_common(struct strbuf
*req_buf
, struct oidset
*common
)
1292 struct oidset_iter iter
;
1293 const struct object_id
*oid
;
1294 oidset_iter_init(common
, &iter
);
1296 while ((oid
= oidset_iter_next(&iter
))) {
1297 packet_buf_write(req_buf
, "have %s\n", oid_to_hex(oid
));
1301 static int add_haves(struct fetch_negotiator
*negotiator
,
1302 struct strbuf
*req_buf
,
1305 int haves_added
= 0;
1306 const struct object_id
*oid
;
1308 while ((oid
= negotiator
->next(negotiator
))) {
1309 packet_buf_write(req_buf
, "have %s\n", oid_to_hex(oid
));
1310 if (++haves_added
>= *haves_to_send
)
1314 /* Increase haves to send on next round */
1315 *haves_to_send
= next_flush(1, *haves_to_send
);
1320 static void write_fetch_command_and_capabilities(struct strbuf
*req_buf
,
1321 const struct string_list
*server_options
)
1323 const char *hash_name
;
1325 ensure_server_supports_v2("fetch");
1326 packet_buf_write(req_buf
, "command=fetch");
1327 if (server_supports_v2("agent"))
1328 packet_buf_write(req_buf
, "agent=%s", git_user_agent_sanitized());
1329 if (advertise_sid
&& server_supports_v2("session-id"))
1330 packet_buf_write(req_buf
, "session-id=%s", trace2_session_id());
1331 if (server_options
&& server_options
->nr
) {
1333 ensure_server_supports_v2("server-option");
1334 for (i
= 0; i
< server_options
->nr
; i
++)
1335 packet_buf_write(req_buf
, "server-option=%s",
1336 server_options
->items
[i
].string
);
1339 if (server_feature_v2("object-format", &hash_name
)) {
1340 int hash_algo
= hash_algo_by_name(hash_name
);
1341 if (hash_algo_by_ptr(the_hash_algo
) != hash_algo
)
1342 die(_("mismatched algorithms: client %s; server %s"),
1343 the_hash_algo
->name
, hash_name
);
1344 packet_buf_write(req_buf
, "object-format=%s", the_hash_algo
->name
);
1345 } else if (hash_algo_by_ptr(the_hash_algo
) != GIT_HASH_SHA1
) {
1346 die(_("the server does not support algorithm '%s'"),
1347 the_hash_algo
->name
);
1349 packet_buf_delim(req_buf
);
1352 static int send_fetch_request(struct fetch_negotiator
*negotiator
, int fd_out
,
1353 struct fetch_pack_args
*args
,
1354 const struct ref
*wants
, struct oidset
*common
,
1355 int *haves_to_send
, int *in_vain
,
1356 int sideband_all
, int seen_ack
)
1360 struct strbuf req_buf
= STRBUF_INIT
;
1362 write_fetch_command_and_capabilities(&req_buf
, args
->server_options
);
1364 if (args
->use_thin_pack
)
1365 packet_buf_write(&req_buf
, "thin-pack");
1366 if (args
->no_progress
)
1367 packet_buf_write(&req_buf
, "no-progress");
1368 if (args
->include_tag
)
1369 packet_buf_write(&req_buf
, "include-tag");
1370 if (prefer_ofs_delta
)
1371 packet_buf_write(&req_buf
, "ofs-delta");
1373 packet_buf_write(&req_buf
, "sideband-all");
1375 /* Add shallow-info and deepen request */
1376 if (server_supports_feature("fetch", "shallow", 0))
1377 add_shallow_requests(&req_buf
, args
);
1378 else if (is_repository_shallow(the_repository
) || args
->deepen
)
1379 die(_("Server does not support shallow requests"));
1382 send_filter(args
, &req_buf
,
1383 server_supports_feature("fetch", "filter", 0));
1385 if (server_supports_feature("fetch", "packfile-uris", 0)) {
1387 struct strbuf to_send
= STRBUF_INIT
;
1389 for (i
= 0; i
< uri_protocols
.nr
; i
++) {
1390 const char *s
= uri_protocols
.items
[i
].string
;
1392 if (!strcmp(s
, "https") || !strcmp(s
, "http")) {
1394 strbuf_addch(&to_send
, ',');
1395 strbuf_addstr(&to_send
, s
);
1399 packet_buf_write(&req_buf
, "packfile-uris %s",
1401 strbuf_release(&to_send
);
1406 add_wants(wants
, &req_buf
);
1408 /* Add all of the common commits we've found in previous rounds */
1409 add_common(&req_buf
, common
);
1411 haves_added
= add_haves(negotiator
, &req_buf
, haves_to_send
);
1412 *in_vain
+= haves_added
;
1413 trace2_data_intmax("negotiation_v2", the_repository
, "haves_added", haves_added
);
1414 trace2_data_intmax("negotiation_v2", the_repository
, "in_vain", *in_vain
);
1415 if (!haves_added
|| (seen_ack
&& *in_vain
>= MAX_IN_VAIN
)) {
1417 packet_buf_write(&req_buf
, "done\n");
1422 packet_buf_flush(&req_buf
);
1423 if (write_in_full(fd_out
, req_buf
.buf
, req_buf
.len
) < 0)
1424 die_errno(_("unable to write request to remote"));
1426 strbuf_release(&req_buf
);
1431 * Processes a section header in a server's response and checks if it matches
1432 * `section`. If the value of `peek` is 1, the header line will be peeked (and
1433 * not consumed); if 0, the line will be consumed and the function will die if
1434 * the section header doesn't match what was expected.
1436 static int process_section_header(struct packet_reader
*reader
,
1437 const char *section
, int peek
)
1441 if (packet_reader_peek(reader
) == PACKET_READ_NORMAL
&&
1442 !strcmp(reader
->line
, section
))
1448 die(_("expected '%s', received '%s'"),
1449 section
, reader
->line
);
1451 die(_("expected '%s'"), section
);
1453 packet_reader_read(reader
);
1459 static int process_ack(struct fetch_negotiator
*negotiator
,
1460 struct packet_reader
*reader
,
1461 struct object_id
*common_oid
,
1462 int *received_ready
)
1464 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
1467 if (!strcmp(reader
->line
, "NAK"))
1470 if (skip_prefix(reader
->line
, "ACK ", &arg
)) {
1471 if (!get_oid_hex(arg
, common_oid
)) {
1472 struct commit
*commit
;
1473 commit
= lookup_commit(the_repository
, common_oid
);
1475 negotiator
->ack(negotiator
, commit
);
1480 if (!strcmp(reader
->line
, "ready")) {
1481 *received_ready
= 1;
1485 die(_("unexpected acknowledgment line: '%s'"), reader
->line
);
1488 if (reader
->status
!= PACKET_READ_FLUSH
&&
1489 reader
->status
!= PACKET_READ_DELIM
)
1490 die(_("error processing acks: %d"), reader
->status
);
1493 * If an "acknowledgments" section is sent, a packfile is sent if and
1494 * only if "ready" was sent in this section. The other sections
1495 * ("shallow-info" and "wanted-refs") are sent only if a packfile is
1496 * sent. Therefore, a DELIM is expected if "ready" is sent, and a FLUSH
1499 if (*received_ready
&& reader
->status
!= PACKET_READ_DELIM
)
1501 * TRANSLATORS: The parameter will be 'ready', a protocol
1504 die(_("expected packfile to be sent after '%s'"), "ready");
1505 if (!*received_ready
&& reader
->status
!= PACKET_READ_FLUSH
)
1507 * TRANSLATORS: The parameter will be 'ready', a protocol
1510 die(_("expected no other sections to be sent after no '%s'"), "ready");
1515 static void receive_shallow_info(struct fetch_pack_args
*args
,
1516 struct packet_reader
*reader
,
1517 struct oid_array
*shallows
,
1518 struct shallow_info
*si
)
1520 int unshallow_received
= 0;
1522 process_section_header(reader
, "shallow-info", 0);
1523 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
1525 struct object_id oid
;
1527 if (skip_prefix(reader
->line
, "shallow ", &arg
)) {
1528 if (get_oid_hex(arg
, &oid
))
1529 die(_("invalid shallow line: %s"), reader
->line
);
1530 oid_array_append(shallows
, &oid
);
1533 if (skip_prefix(reader
->line
, "unshallow ", &arg
)) {
1534 if (get_oid_hex(arg
, &oid
))
1535 die(_("invalid unshallow line: %s"), reader
->line
);
1536 if (!lookup_object(the_repository
, &oid
))
1537 die(_("object not found: %s"), reader
->line
);
1538 /* make sure that it is parsed as shallow */
1539 if (!parse_object(the_repository
, &oid
))
1540 die(_("error in object: %s"), reader
->line
);
1541 if (unregister_shallow(&oid
))
1542 die(_("no shallow found: %s"), reader
->line
);
1543 unshallow_received
= 1;
1546 die(_("expected shallow/unshallow, got %s"), reader
->line
);
1549 if (reader
->status
!= PACKET_READ_FLUSH
&&
1550 reader
->status
!= PACKET_READ_DELIM
)
1551 die(_("error processing shallow info: %d"), reader
->status
);
1553 if (args
->deepen
|| unshallow_received
) {
1555 * Treat these as shallow lines caused by our depth settings.
1556 * In v0, these lines cannot cause refs to be rejected; do the
1561 for (i
= 0; i
< shallows
->nr
; i
++)
1562 register_shallow(the_repository
, &shallows
->oid
[i
]);
1563 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
1566 } else if (shallows
->nr
) {
1568 * Treat these as shallow lines caused by the remote being
1569 * shallow. In v0, remote refs that reach these objects are
1570 * rejected (unless --update-shallow is set); do the same.
1572 prepare_shallow_info(si
, shallows
);
1573 if (si
->nr_ours
|| si
->nr_theirs
) {
1574 if (args
->reject_shallow_remote
)
1575 die(_("source repository is shallow, reject to clone."));
1576 alternate_shallow_file
=
1577 setup_temporary_shallow(si
->shallow
);
1579 alternate_shallow_file
= NULL
;
1581 alternate_shallow_file
= NULL
;
1585 static int cmp_name_ref(const void *name
, const void *ref
)
1587 return strcmp(name
, (*(struct ref
**)ref
)->name
);
1590 static void receive_wanted_refs(struct packet_reader
*reader
,
1591 struct ref
**sought
, int nr_sought
)
1593 process_section_header(reader
, "wanted-refs", 0);
1594 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
1595 struct object_id oid
;
1599 if (parse_oid_hex(reader
->line
, &oid
, &end
) || *end
++ != ' ')
1600 die(_("expected wanted-ref, got '%s'"), reader
->line
);
1602 found
= bsearch(end
, sought
, nr_sought
, sizeof(*sought
),
1605 die(_("unexpected wanted-ref: '%s'"), reader
->line
);
1606 oidcpy(&(*found
)->old_oid
, &oid
);
1609 if (reader
->status
!= PACKET_READ_DELIM
)
1610 die(_("error processing wanted refs: %d"), reader
->status
);
1613 static void receive_packfile_uris(struct packet_reader
*reader
,
1614 struct string_list
*uris
)
1616 process_section_header(reader
, "packfile-uris", 0);
1617 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
1618 if (reader
->pktlen
< the_hash_algo
->hexsz
||
1619 reader
->line
[the_hash_algo
->hexsz
] != ' ')
1620 die("expected '<hash> <uri>', got: %s", reader
->line
);
1622 string_list_append(uris
, reader
->line
);
1624 if (reader
->status
!= PACKET_READ_DELIM
)
1625 die("expected DELIM");
1629 FETCH_CHECK_LOCAL
= 0,
1636 static void do_check_stateless_delimiter(int stateless_rpc
,
1637 struct packet_reader
*reader
)
1639 check_stateless_delimiter(stateless_rpc
, reader
,
1640 _("git fetch-pack: expected response end packet"));
1643 static struct ref
*do_fetch_pack_v2(struct fetch_pack_args
*args
,
1645 const struct ref
*orig_ref
,
1646 struct ref
**sought
, int nr_sought
,
1647 struct oid_array
*shallows
,
1648 struct shallow_info
*si
,
1649 struct string_list
*pack_lockfiles
)
1651 struct repository
*r
= the_repository
;
1652 struct ref
*ref
= copy_ref_list(orig_ref
);
1653 enum fetch_state state
= FETCH_CHECK_LOCAL
;
1654 struct oidset common
= OIDSET_INIT
;
1655 struct packet_reader reader
;
1656 int in_vain
= 0, negotiation_started
= 0;
1657 int negotiation_round
= 0;
1658 int haves_to_send
= INITIAL_FLUSH
;
1659 struct fetch_negotiator negotiator_alloc
;
1660 struct fetch_negotiator
*negotiator
;
1662 struct object_id common_oid
;
1663 int received_ready
= 0;
1664 struct string_list packfile_uris
= STRING_LIST_INIT_DUP
;
1666 struct strvec index_pack_args
= STRVEC_INIT
;
1668 negotiator
= &negotiator_alloc
;
1670 fetch_negotiator_init_noop(negotiator
);
1672 fetch_negotiator_init(r
, negotiator
);
1674 packet_reader_init(&reader
, fd
[0], NULL
, 0,
1675 PACKET_READ_CHOMP_NEWLINE
|
1676 PACKET_READ_DIE_ON_ERR_PACKET
);
1677 if (git_env_bool("GIT_TEST_SIDEBAND_ALL", 1) &&
1678 server_supports_feature("fetch", "sideband-all", 0)) {
1679 reader
.use_sideband
= 1;
1680 reader
.me
= "fetch-pack";
1683 while (state
!= FETCH_DONE
) {
1685 case FETCH_CHECK_LOCAL
:
1686 sort_ref_list(&ref
, ref_compare_name
);
1687 QSORT(sought
, nr_sought
, cmp_ref_by_name
);
1689 /* v2 supports these by default */
1690 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
1692 if (args
->depth
> 0 || args
->deepen_since
|| args
->deepen_not
)
1695 /* Filter 'ref' by 'sought' and those that aren't local */
1696 mark_complete_and_common_ref(negotiator
, args
, &ref
);
1697 filter_refs(args
, &ref
, sought
, nr_sought
);
1698 if (!args
->refetch
&& everything_local(args
, &ref
))
1701 state
= FETCH_SEND_REQUEST
;
1703 mark_tips(negotiator
, args
->negotiation_tips
);
1704 for_each_cached_alternate(negotiator
,
1705 insert_one_alternate_object
);
1707 case FETCH_SEND_REQUEST
:
1708 if (!negotiation_started
) {
1709 negotiation_started
= 1;
1710 trace2_region_enter("fetch-pack",
1714 negotiation_round
++;
1715 trace2_region_enter_printf("negotiation_v2", "round",
1716 the_repository
, "%d",
1718 if (send_fetch_request(negotiator
, fd
[1], args
, ref
,
1720 &haves_to_send
, &in_vain
,
1721 reader
.use_sideband
,
1723 trace2_region_leave_printf("negotiation_v2", "round",
1724 the_repository
, "%d",
1726 state
= FETCH_GET_PACK
;
1729 state
= FETCH_PROCESS_ACKS
;
1731 case FETCH_PROCESS_ACKS
:
1732 /* Process ACKs/NAKs */
1733 process_section_header(&reader
, "acknowledgments", 0);
1734 while (process_ack(negotiator
, &reader
, &common_oid
,
1738 oidset_insert(&common
, &common_oid
);
1740 trace2_region_leave_printf("negotiation_v2", "round",
1741 the_repository
, "%d",
1743 if (received_ready
) {
1745 * Don't check for response delimiter; get_pack() will
1746 * read the rest of this response.
1748 state
= FETCH_GET_PACK
;
1750 do_check_stateless_delimiter(args
->stateless_rpc
, &reader
);
1751 state
= FETCH_SEND_REQUEST
;
1754 case FETCH_GET_PACK
:
1755 trace2_region_leave("fetch-pack",
1758 trace2_data_intmax("negotiation_v2", the_repository
,
1759 "total_rounds", negotiation_round
);
1760 /* Check for shallow-info section */
1761 if (process_section_header(&reader
, "shallow-info", 1))
1762 receive_shallow_info(args
, &reader
, shallows
, si
);
1764 if (process_section_header(&reader
, "wanted-refs", 1))
1765 receive_wanted_refs(&reader
, sought
, nr_sought
);
1767 /* get the pack(s) */
1768 if (git_env_bool("GIT_TRACE_REDACT", 1))
1769 reader
.options
|= PACKET_READ_REDACT_URI_PATH
;
1770 if (process_section_header(&reader
, "packfile-uris", 1))
1771 receive_packfile_uris(&reader
, &packfile_uris
);
1772 /* We don't expect more URIs. Reset to avoid expensive URI check. */
1773 reader
.options
&= ~PACKET_READ_REDACT_URI_PATH
;
1775 process_section_header(&reader
, "packfile", 0);
1778 * this is the final request we'll make of the server;
1779 * do a half-duplex shutdown to indicate that they can
1780 * hang up as soon as the pack is sent.
1785 if (get_pack(args
, fd
, pack_lockfiles
,
1786 packfile_uris
.nr
? &index_pack_args
: NULL
,
1787 sought
, nr_sought
, &fsck_options
.gitmodules_found
))
1788 die(_("git fetch-pack: fetch failed."));
1789 do_check_stateless_delimiter(args
->stateless_rpc
, &reader
);
1798 for (i
= 0; i
< packfile_uris
.nr
; i
++) {
1800 struct child_process cmd
= CHILD_PROCESS_INIT
;
1801 char packname
[GIT_MAX_HEXSZ
+ 1];
1802 const char *uri
= packfile_uris
.items
[i
].string
+
1803 the_hash_algo
->hexsz
+ 1;
1805 strvec_push(&cmd
.args
, "http-fetch");
1806 strvec_pushf(&cmd
.args
, "--packfile=%.*s",
1807 (int) the_hash_algo
->hexsz
,
1808 packfile_uris
.items
[i
].string
);
1809 for (j
= 0; j
< index_pack_args
.nr
; j
++)
1810 strvec_pushf(&cmd
.args
, "--index-pack-arg=%s",
1811 index_pack_args
.v
[j
]);
1812 strvec_push(&cmd
.args
, uri
);
1816 if (start_command(&cmd
))
1817 die("fetch-pack: unable to spawn http-fetch");
1819 if (read_in_full(cmd
.out
, packname
, 5) < 0 ||
1820 memcmp(packname
, "keep\t", 5))
1821 die("fetch-pack: expected keep then TAB at start of http-fetch output");
1823 if (read_in_full(cmd
.out
, packname
,
1824 the_hash_algo
->hexsz
+ 1) < 0 ||
1825 packname
[the_hash_algo
->hexsz
] != '\n')
1826 die("fetch-pack: expected hash then LF at end of http-fetch output");
1828 packname
[the_hash_algo
->hexsz
] = '\0';
1830 parse_gitmodules_oids(cmd
.out
, &fsck_options
.gitmodules_found
);
1834 if (finish_command(&cmd
))
1835 die("fetch-pack: unable to finish http-fetch");
1837 if (memcmp(packfile_uris
.items
[i
].string
, packname
,
1838 the_hash_algo
->hexsz
))
1839 die("fetch-pack: pack downloaded from %s does not match expected hash %.*s",
1840 uri
, (int) the_hash_algo
->hexsz
,
1841 packfile_uris
.items
[i
].string
);
1843 string_list_append_nodup(pack_lockfiles
,
1844 xstrfmt("%s/pack/pack-%s.keep",
1845 repo_get_object_directory(the_repository
),
1848 string_list_clear(&packfile_uris
, 0);
1849 strvec_clear(&index_pack_args
);
1851 if (fsck_finish(&fsck_options
))
1855 negotiator
->release(negotiator
);
1857 oidset_clear(&common
);
1861 int fetch_pack_fsck_config(const char *var
, const char *value
,
1862 struct strbuf
*msg_types
)
1866 if (strcmp(var
, "fetch.fsck.skiplist") == 0) {
1869 if (git_config_pathname(&path
, var
, value
))
1871 strbuf_addf(msg_types
, "%cskiplist=%s",
1872 msg_types
->len
? ',' : '=', path
);
1877 if (skip_prefix(var
, "fetch.fsck.", &msg_id
)) {
1879 return config_error_nonbool(var
);
1880 if (is_valid_msg_type(msg_id
, value
))
1881 strbuf_addf(msg_types
, "%c%s=%s",
1882 msg_types
->len
? ',' : '=', msg_id
, value
);
1884 warning("Skipping unknown msg id '%s'", msg_id
);
1891 static int fetch_pack_config_cb(const char *var
, const char *value
,
1892 const struct config_context
*ctx
, void *cb
)
1894 int ret
= fetch_pack_fsck_config(var
, value
, &fsck_msg_types
);
1896 return git_default_config(var
, value
, ctx
, cb
);
1901 static void fetch_pack_config(void)
1903 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit
);
1904 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit
);
1905 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta
);
1906 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects
);
1907 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects
);
1908 git_config_get_bool("transfer.advertisesid", &advertise_sid
);
1909 if (!uri_protocols
.nr
) {
1912 if (!git_config_get_string("fetch.uriprotocols", &str
) && str
) {
1913 string_list_split(&uri_protocols
, str
, ',', -1);
1918 git_config(fetch_pack_config_cb
, NULL
);
1921 static void fetch_pack_setup(void)
1923 static int did_setup
;
1926 fetch_pack_config();
1927 if (0 <= fetch_unpack_limit
)
1928 unpack_limit
= fetch_unpack_limit
;
1929 else if (0 <= transfer_unpack_limit
)
1930 unpack_limit
= transfer_unpack_limit
;
1934 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
1936 struct string_list names
= STRING_LIST_INIT_NODUP
;
1939 for (src
= dst
= 0; src
< nr
; src
++) {
1940 struct string_list_item
*item
;
1941 item
= string_list_insert(&names
, ref
[src
]->name
);
1943 continue; /* already have it */
1944 item
->util
= ref
[src
];
1946 ref
[dst
] = ref
[src
];
1949 for (src
= dst
; src
< nr
; src
++)
1951 string_list_clear(&names
, 0);
1955 static void update_shallow(struct fetch_pack_args
*args
,
1956 struct ref
**sought
, int nr_sought
,
1957 struct shallow_info
*si
)
1959 struct oid_array ref
= OID_ARRAY_INIT
;
1963 if (args
->deepen
&& alternate_shallow_file
) {
1964 if (*alternate_shallow_file
== '\0') { /* --unshallow */
1965 unlink_or_warn(git_path_shallow(the_repository
));
1966 rollback_shallow_file(the_repository
, &shallow_lock
);
1968 commit_shallow_file(the_repository
, &shallow_lock
);
1969 alternate_shallow_file
= NULL
;
1973 if (!si
->shallow
|| !si
->shallow
->nr
)
1976 if (args
->cloning
) {
1978 * remote is shallow, but this is a clone, there are
1979 * no objects in repo to worry about. Accept any
1980 * shallow points that exist in the pack (iow in repo
1981 * after get_pack() and reprepare_packed_git())
1983 struct oid_array extra
= OID_ARRAY_INIT
;
1984 struct object_id
*oid
= si
->shallow
->oid
;
1985 for (i
= 0; i
< si
->shallow
->nr
; i
++)
1986 if (has_object(the_repository
, &oid
[i
],
1987 HAS_OBJECT_RECHECK_PACKED
| HAS_OBJECT_FETCH_PROMISOR
))
1988 oid_array_append(&extra
, &oid
[i
]);
1990 setup_alternate_shallow(&shallow_lock
,
1991 &alternate_shallow_file
,
1993 commit_shallow_file(the_repository
, &shallow_lock
);
1994 alternate_shallow_file
= NULL
;
1996 oid_array_clear(&extra
);
2000 if (!si
->nr_ours
&& !si
->nr_theirs
)
2003 remove_nonexistent_theirs_shallow(si
);
2004 if (!si
->nr_ours
&& !si
->nr_theirs
)
2006 for (i
= 0; i
< nr_sought
; i
++)
2007 oid_array_append(&ref
, &sought
[i
]->old_oid
);
2010 if (args
->update_shallow
) {
2012 * remote is also shallow, .git/shallow may be updated
2013 * so all refs can be accepted. Make sure we only add
2014 * shallow roots that are actually reachable from new
2017 struct oid_array extra
= OID_ARRAY_INIT
;
2018 struct object_id
*oid
= si
->shallow
->oid
;
2019 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
2020 if (!si
->nr_ours
&& !si
->nr_theirs
) {
2021 oid_array_clear(&ref
);
2024 for (i
= 0; i
< si
->nr_ours
; i
++)
2025 oid_array_append(&extra
, &oid
[si
->ours
[i
]]);
2026 for (i
= 0; i
< si
->nr_theirs
; i
++)
2027 oid_array_append(&extra
, &oid
[si
->theirs
[i
]]);
2028 setup_alternate_shallow(&shallow_lock
,
2029 &alternate_shallow_file
,
2031 commit_shallow_file(the_repository
, &shallow_lock
);
2032 oid_array_clear(&extra
);
2033 oid_array_clear(&ref
);
2034 alternate_shallow_file
= NULL
;
2039 * remote is also shallow, check what ref is safe to update
2040 * without updating .git/shallow
2042 CALLOC_ARRAY(status
, nr_sought
);
2043 assign_shallow_commits_to_refs(si
, NULL
, status
);
2044 if (si
->nr_ours
|| si
->nr_theirs
) {
2045 for (i
= 0; i
< nr_sought
; i
++)
2047 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
2050 oid_array_clear(&ref
);
2053 static const struct object_id
*iterate_ref_map(void *cb_data
)
2055 struct ref
**rm
= cb_data
;
2056 struct ref
*ref
= *rm
;
2061 return &ref
->old_oid
;
2064 int fetch_pack_fsck_objects(void)
2067 if (fetch_fsck_objects
>= 0)
2068 return fetch_fsck_objects
;
2069 if (transfer_fsck_objects
>= 0)
2070 return transfer_fsck_objects
;
2074 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
2076 const struct ref
*ref
,
2077 struct ref
**sought
, int nr_sought
,
2078 struct oid_array
*shallow
,
2079 struct string_list
*pack_lockfiles
,
2080 enum protocol_version version
)
2082 struct ref
*ref_cpy
;
2083 struct shallow_info si
;
2084 struct oid_array shallows_scratch
= OID_ARRAY_INIT
;
2088 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
2090 if (version
!= protocol_v2
&& !ref
) {
2091 packet_flush(fd
[1]);
2092 die(_("no matching remote head"));
2094 if (version
== protocol_v2
) {
2096 BUG("Protocol V2 does not provide shallows at this point in the fetch");
2097 memset(&si
, 0, sizeof(si
));
2098 ref_cpy
= do_fetch_pack_v2(args
, fd
, ref
, sought
, nr_sought
,
2099 &shallows_scratch
, &si
,
2102 prepare_shallow_info(&si
, shallow
);
2103 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
2104 &si
, pack_lockfiles
);
2106 reprepare_packed_git(the_repository
);
2108 if (!args
->cloning
&& args
->deepen
) {
2109 struct check_connected_options opt
= CHECK_CONNECTED_INIT
;
2110 struct ref
*iterator
= ref_cpy
;
2111 opt
.shallow_file
= alternate_shallow_file
;
2113 opt
.is_deepening_fetch
= 1;
2114 if (check_connected(iterate_ref_map
, &iterator
, &opt
)) {
2115 error(_("remote did not send all necessary objects"));
2118 rollback_shallow_file(the_repository
, &shallow_lock
);
2121 args
->connectivity_checked
= 1;
2124 update_shallow(args
, sought
, nr_sought
, &si
);
2126 clear_shallow_info(&si
);
2127 oid_array_clear(&shallows_scratch
);
2131 static int add_to_object_array(const struct object_id
*oid
, void *data
)
2133 struct object_array
*a
= data
;
2135 add_object_array(lookup_object(the_repository
, oid
), "", a
);
2139 static void clear_common_flag(struct oidset
*s
)
2141 struct oidset_iter iter
;
2142 const struct object_id
*oid
;
2143 oidset_iter_init(s
, &iter
);
2145 while ((oid
= oidset_iter_next(&iter
))) {
2146 struct object
*obj
= lookup_object(the_repository
, oid
);
2147 obj
->flags
&= ~COMMON
;
2151 void negotiate_using_fetch(const struct oid_array
*negotiation_tips
,
2152 const struct string_list
*server_options
,
2155 struct oidset
*acked_commits
)
2157 struct fetch_negotiator negotiator
;
2158 struct packet_reader reader
;
2159 struct object_array nt_object_array
= OBJECT_ARRAY_INIT
;
2160 struct strbuf req_buf
= STRBUF_INIT
;
2161 int haves_to_send
= INITIAL_FLUSH
;
2164 int last_iteration
= 0;
2165 int negotiation_round
= 0;
2166 timestamp_t min_generation
= GENERATION_NUMBER_INFINITY
;
2168 fetch_negotiator_init(the_repository
, &negotiator
);
2169 mark_tips(&negotiator
, negotiation_tips
);
2171 packet_reader_init(&reader
, fd
[0], NULL
, 0,
2172 PACKET_READ_CHOMP_NEWLINE
|
2173 PACKET_READ_DIE_ON_ERR_PACKET
);
2175 oid_array_for_each((struct oid_array
*) negotiation_tips
,
2176 add_to_object_array
,
2179 trace2_region_enter("fetch-pack", "negotiate_using_fetch", the_repository
);
2180 while (!last_iteration
) {
2182 struct object_id common_oid
;
2183 int received_ready
= 0;
2185 negotiation_round
++;
2187 trace2_region_enter_printf("negotiate_using_fetch", "round",
2188 the_repository
, "%d",
2190 strbuf_reset(&req_buf
);
2191 write_fetch_command_and_capabilities(&req_buf
, server_options
);
2193 packet_buf_write(&req_buf
, "wait-for-done");
2195 haves_added
= add_haves(&negotiator
, &req_buf
, &haves_to_send
);
2196 in_vain
+= haves_added
;
2197 if (!haves_added
|| (seen_ack
&& in_vain
>= MAX_IN_VAIN
))
2200 trace2_data_intmax("negotiate_using_fetch", the_repository
,
2201 "haves_added", haves_added
);
2202 trace2_data_intmax("negotiate_using_fetch", the_repository
,
2203 "in_vain", in_vain
);
2206 packet_buf_flush(&req_buf
);
2207 if (write_in_full(fd
[1], req_buf
.buf
, req_buf
.len
) < 0)
2208 die_errno(_("unable to write request to remote"));
2210 /* Process ACKs/NAKs */
2211 process_section_header(&reader
, "acknowledgments", 0);
2212 while (process_ack(&negotiator
, &reader
, &common_oid
,
2214 struct commit
*commit
= lookup_commit(the_repository
,
2217 timestamp_t generation
;
2219 parse_commit_or_die(commit
);
2220 commit
->object
.flags
|= COMMON
;
2221 generation
= commit_graph_generation(commit
);
2222 if (generation
< min_generation
)
2223 min_generation
= generation
;
2227 oidset_insert(acked_commits
, &common_oid
);
2230 die(_("unexpected 'ready' from remote"));
2232 do_check_stateless_delimiter(stateless_rpc
, &reader
);
2233 if (can_all_from_reach_with_flag(&nt_object_array
, COMMON
,
2237 trace2_region_leave_printf("negotiation", "round",
2238 the_repository
, "%d",
2241 trace2_region_leave("fetch-pack", "negotiate_using_fetch", the_repository
);
2242 trace2_data_intmax("negotiate_using_fetch", the_repository
,
2243 "total_rounds", negotiation_round
);
2245 clear_common_flag(acked_commits
);
2246 object_array_clear(&nt_object_array
);
2247 negotiator
.release(&negotiator
);
2248 strbuf_release(&req_buf
);
2251 int report_unmatched_refs(struct ref
**sought
, int nr_sought
)
2255 for (i
= 0; i
< nr_sought
; i
++) {
2258 switch (sought
[i
]->match_status
) {
2261 case REF_NOT_MATCHED
:
2262 error(_("no such remote ref %s"), sought
[i
]->name
);
2264 case REF_UNADVERTISED_NOT_ALLOWED
:
2265 error(_("Server does not allow request for unadvertised object %s"),