2 #include "repository.h"
12 #include "fetch-pack.h"
14 #include "run-command.h"
16 #include "transport.h"
18 #include "prio-queue.h"
19 #include "sha1-array.h"
22 #include "object-store.h"
24 static int transfer_unpack_limit
= -1;
25 static int fetch_unpack_limit
= -1;
26 static int unpack_limit
= 100;
27 static int prefer_ofs_delta
= 1;
29 static int deepen_since_ok
;
30 static int deepen_not_ok
;
31 static int fetch_fsck_objects
= -1;
32 static int transfer_fsck_objects
= -1;
33 static int agent_supported
;
34 static int server_supports_filtering
;
35 static struct lock_file shallow_lock
;
36 static const char *alternate_shallow_file
;
38 /* Remember to update object flag allocation in object.h */
39 #define COMPLETE (1U << 0)
40 #define COMMON (1U << 1)
41 #define COMMON_REF (1U << 2)
42 #define SEEN (1U << 3)
43 #define POPPED (1U << 4)
44 #define ALTERNATE (1U << 5)
49 * After sending this many "have"s if we do not get any new ACK , we
50 * give up traversing our history.
52 #define MAX_IN_VAIN 256
54 static struct prio_queue rev_list
= { compare_commits_by_commit_date
};
55 static int non_common_revs
, multi_ack
, use_sideband
;
56 /* Allow specifying sha1 if it is a ref tip. */
57 #define ALLOW_TIP_SHA1 01
58 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
59 #define ALLOW_REACHABLE_SHA1 02
60 static unsigned int allow_unadvertised_object_request
;
62 __attribute__((format (printf
, 2, 3)))
63 static inline void print_verbose(const struct fetch_pack_args
*args
,
71 va_start(params
, fmt
);
72 vfprintf(stderr
, fmt
, params
);
77 struct alternate_object_cache
{
78 struct object
**items
;
82 static void cache_one_alternate(const char *refname
,
83 const struct object_id
*oid
,
86 struct alternate_object_cache
*cache
= vcache
;
87 struct object
*obj
= parse_object(the_repository
, oid
);
89 if (!obj
|| (obj
->flags
& ALTERNATE
))
92 obj
->flags
|= ALTERNATE
;
93 ALLOC_GROW(cache
->items
, cache
->nr
+ 1, cache
->alloc
);
94 cache
->items
[cache
->nr
++] = obj
;
97 static void for_each_cached_alternate(void (*cb
)(struct object
*))
99 static int initialized
;
100 static struct alternate_object_cache cache
;
104 for_each_alternate_ref(cache_one_alternate
, &cache
);
108 for (i
= 0; i
< cache
.nr
; i
++)
112 static void rev_list_push(struct commit
*commit
, int mark
)
114 if (!(commit
->object
.flags
& mark
)) {
115 commit
->object
.flags
|= mark
;
117 if (parse_commit(commit
))
120 prio_queue_put(&rev_list
, commit
);
122 if (!(commit
->object
.flags
& COMMON
))
127 static int rev_list_insert_ref(const char *refname
, const struct object_id
*oid
)
129 struct object
*o
= deref_tag(the_repository
,
130 parse_object(the_repository
, oid
),
133 if (o
&& o
->type
== OBJ_COMMIT
)
134 rev_list_push((struct commit
*)o
, SEEN
);
139 static int rev_list_insert_ref_oid(const char *refname
, const struct object_id
*oid
,
140 int flag
, void *cb_data
)
142 return rev_list_insert_ref(refname
, oid
);
145 static int clear_marks(const char *refname
, const struct object_id
*oid
,
146 int flag
, void *cb_data
)
148 struct object
*o
= deref_tag(the_repository
,
149 parse_object(the_repository
, oid
),
152 if (o
&& o
->type
== OBJ_COMMIT
)
153 clear_commit_marks((struct commit
*)o
,
154 COMMON
| COMMON_REF
| SEEN
| POPPED
);
159 This function marks a rev and its ancestors as common.
160 In some cases, it is desirable to mark only the ancestors (for example
161 when only the server does not yet know that they are common).
164 static void mark_common(struct commit
*commit
,
165 int ancestors_only
, int dont_parse
)
167 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
168 struct object
*o
= (struct object
*)commit
;
173 if (!(o
->flags
& SEEN
))
174 rev_list_push(commit
, SEEN
);
176 struct commit_list
*parents
;
178 if (!ancestors_only
&& !(o
->flags
& POPPED
))
180 if (!o
->parsed
&& !dont_parse
)
181 if (parse_commit(commit
))
184 for (parents
= commit
->parents
;
186 parents
= parents
->next
)
187 mark_common(parents
->item
, 0, dont_parse
);
193 Get the next rev to send, ignoring the common.
196 static const struct object_id
*get_rev(void)
198 struct commit
*commit
= NULL
;
200 while (commit
== NULL
) {
202 struct commit_list
*parents
;
204 if (rev_list
.nr
== 0 || non_common_revs
== 0)
207 commit
= prio_queue_get(&rev_list
);
208 parse_commit(commit
);
209 parents
= commit
->parents
;
211 commit
->object
.flags
|= POPPED
;
212 if (!(commit
->object
.flags
& COMMON
))
215 if (commit
->object
.flags
& COMMON
) {
216 /* do not send "have", and ignore ancestors */
218 mark
= COMMON
| SEEN
;
219 } else if (commit
->object
.flags
& COMMON_REF
)
220 /* send "have", and ignore ancestors */
221 mark
= COMMON
| SEEN
;
223 /* send "have", also for its ancestors */
227 if (!(parents
->item
->object
.flags
& SEEN
))
228 rev_list_push(parents
->item
, mark
);
230 mark_common(parents
->item
, 1, 0);
231 parents
= parents
->next
;
235 return &commit
->object
.oid
;
246 static void consume_shallow_list(struct fetch_pack_args
*args
, int fd
)
248 if (args
->stateless_rpc
&& args
->deepen
) {
249 /* If we sent a depth we will get back "duplicate"
250 * shallow and unshallow commands every time there
251 * is a block of have lines exchanged.
254 while ((line
= packet_read_line(fd
, NULL
))) {
255 if (starts_with(line
, "shallow "))
257 if (starts_with(line
, "unshallow "))
259 die(_("git fetch-pack: expected shallow list"));
264 static enum ack_type
get_ack(int fd
, struct object_id
*result_oid
)
267 char *line
= packet_read_line(fd
, &len
);
271 die(_("git fetch-pack: expected ACK/NAK, got a flush packet"));
272 if (!strcmp(line
, "NAK"))
274 if (skip_prefix(line
, "ACK ", &arg
)) {
275 if (!get_oid_hex(arg
, result_oid
)) {
280 if (strstr(arg
, "continue"))
282 if (strstr(arg
, "common"))
284 if (strstr(arg
, "ready"))
289 if (skip_prefix(line
, "ERR ", &arg
))
290 die(_("remote error: %s"), arg
);
291 die(_("git fetch-pack: expected ACK/NAK, got '%s'"), line
);
294 static void send_request(struct fetch_pack_args
*args
,
295 int fd
, struct strbuf
*buf
)
297 if (args
->stateless_rpc
) {
298 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
301 write_or_die(fd
, buf
->buf
, buf
->len
);
304 static void insert_one_alternate_object(struct object
*obj
)
306 rev_list_insert_ref(NULL
, &obj
->oid
);
309 #define INITIAL_FLUSH 16
310 #define PIPESAFE_FLUSH 32
311 #define LARGE_FLUSH 16384
313 static int next_flush(int stateless_rpc
, int count
)
316 if (count
< LARGE_FLUSH
)
319 count
= count
* 11 / 10;
321 if (count
< PIPESAFE_FLUSH
)
324 count
+= PIPESAFE_FLUSH
;
329 static int find_common(struct fetch_pack_args
*args
,
330 int fd
[2], struct object_id
*result_oid
,
334 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
335 const struct object_id
*oid
;
336 unsigned in_vain
= 0;
337 int got_continue
= 0;
339 struct strbuf req_buf
= STRBUF_INIT
;
340 size_t state_len
= 0;
342 if (args
->stateless_rpc
&& multi_ack
== 1)
343 die(_("--stateless-rpc requires multi_ack_detailed"));
345 for_each_ref(clear_marks
, NULL
);
348 for_each_ref(rev_list_insert_ref_oid
, NULL
);
349 for_each_cached_alternate(insert_one_alternate_object
);
352 for ( ; refs
; refs
= refs
->next
) {
353 struct object_id
*remote
= &refs
->old_oid
;
354 const char *remote_hex
;
358 * If that object is complete (i.e. it is an ancestor of a
359 * local ref), we tell them we have it but do not have to
360 * tell them about its ancestors, which they already know
363 * We use lookup_object here because we are only
364 * interested in the case we *know* the object is
365 * reachable and we have already scanned it.
367 if (((o
= lookup_object(the_repository
, remote
->hash
)) != NULL
) &&
368 (o
->flags
& COMPLETE
)) {
372 remote_hex
= oid_to_hex(remote
);
374 struct strbuf c
= STRBUF_INIT
;
375 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
376 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
377 if (no_done
) strbuf_addstr(&c
, " no-done");
378 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
379 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
380 if (args
->deepen_relative
) strbuf_addstr(&c
, " deepen-relative");
381 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
382 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
383 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
384 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
385 if (deepen_since_ok
) strbuf_addstr(&c
, " deepen-since");
386 if (deepen_not_ok
) strbuf_addstr(&c
, " deepen-not");
387 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
388 git_user_agent_sanitized());
389 if (args
->filter_options
.choice
)
390 strbuf_addstr(&c
, " filter");
391 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
394 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
399 strbuf_release(&req_buf
);
404 if (is_repository_shallow(the_repository
))
405 write_shallow_commits(&req_buf
, 1, NULL
);
407 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
408 if (args
->deepen_since
) {
409 timestamp_t max_age
= approxidate(args
->deepen_since
);
410 packet_buf_write(&req_buf
, "deepen-since %"PRItime
, max_age
);
412 if (args
->deepen_not
) {
414 for (i
= 0; i
< args
->deepen_not
->nr
; i
++) {
415 struct string_list_item
*s
= args
->deepen_not
->items
+ i
;
416 packet_buf_write(&req_buf
, "deepen-not %s", s
->string
);
419 if (server_supports_filtering
&& args
->filter_options
.choice
)
420 packet_buf_write(&req_buf
, "filter %s",
421 args
->filter_options
.filter_spec
);
422 packet_buf_flush(&req_buf
);
423 state_len
= req_buf
.len
;
428 struct object_id oid
;
430 send_request(args
, fd
[1], &req_buf
);
431 while ((line
= packet_read_line(fd
[0], NULL
))) {
432 if (skip_prefix(line
, "shallow ", &arg
)) {
433 if (get_oid_hex(arg
, &oid
))
434 die(_("invalid shallow line: %s"), line
);
435 register_shallow(the_repository
, &oid
);
438 if (skip_prefix(line
, "unshallow ", &arg
)) {
439 if (get_oid_hex(arg
, &oid
))
440 die(_("invalid unshallow line: %s"), line
);
441 if (!lookup_object(the_repository
, oid
.hash
))
442 die(_("object not found: %s"), line
);
443 /* make sure that it is parsed as shallow */
444 if (!parse_object(the_repository
, &oid
))
445 die(_("error in object: %s"), line
);
446 if (unregister_shallow(&oid
))
447 die(_("no shallow found: %s"), line
);
450 die(_("expected shallow/unshallow, got %s"), line
);
452 } else if (!args
->stateless_rpc
)
453 send_request(args
, fd
[1], &req_buf
);
455 if (!args
->stateless_rpc
) {
456 /* If we aren't using the stateless-rpc interface
457 * we don't need to retain the headers.
459 strbuf_setlen(&req_buf
, 0);
465 if (args
->no_dependents
)
467 while ((oid
= get_rev())) {
468 packet_buf_write(&req_buf
, "have %s\n", oid_to_hex(oid
));
469 print_verbose(args
, "have %s", oid_to_hex(oid
));
471 if (flush_at
<= ++count
) {
474 packet_buf_flush(&req_buf
);
475 send_request(args
, fd
[1], &req_buf
);
476 strbuf_setlen(&req_buf
, state_len
);
478 flush_at
= next_flush(args
->stateless_rpc
, count
);
481 * We keep one window "ahead" of the other side, and
482 * will wait for an ACK only on the next one
484 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
487 consume_shallow_list(args
, fd
[0]);
489 ack
= get_ack(fd
[0], result_oid
);
491 print_verbose(args
, _("got %s %d %s"), "ack",
492 ack
, oid_to_hex(result_oid
));
502 struct commit
*commit
=
503 lookup_commit(the_repository
,
506 die(_("invalid commit %s"), oid_to_hex(result_oid
));
507 if (args
->stateless_rpc
509 && !(commit
->object
.flags
& COMMON
)) {
510 /* We need to replay the have for this object
511 * on the next RPC request so the peer knows
512 * it is in common with us.
514 const char *hex
= oid_to_hex(result_oid
);
515 packet_buf_write(&req_buf
, "have %s\n", hex
);
516 state_len
= req_buf
.len
;
518 * Reset in_vain because an ack
519 * for this commit has not been
523 } else if (!args
->stateless_rpc
524 || ack
!= ACK_common
)
526 mark_common(commit
, 0, 1);
529 if (ack
== ACK_ready
) {
530 clear_prio_queue(&rev_list
);
538 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
539 print_verbose(args
, _("giving up"));
545 if (!got_ready
|| !no_done
) {
546 packet_buf_write(&req_buf
, "done\n");
547 send_request(args
, fd
[1], &req_buf
);
549 print_verbose(args
, _("done"));
554 strbuf_release(&req_buf
);
556 if (!got_ready
|| !no_done
)
557 consume_shallow_list(args
, fd
[0]);
558 while (flushes
|| multi_ack
) {
559 int ack
= get_ack(fd
[0], result_oid
);
561 print_verbose(args
, _("got %s (%d) %s"), "ack",
562 ack
, oid_to_hex(result_oid
));
570 /* it is no error to fetch into a completely empty repo */
571 return count
? retval
: 0;
574 static struct commit_list
*complete
;
576 static int mark_complete(const struct object_id
*oid
)
578 struct object
*o
= parse_object(the_repository
, oid
);
580 while (o
&& o
->type
== OBJ_TAG
) {
581 struct tag
*t
= (struct tag
*) o
;
583 break; /* broken repository */
584 o
->flags
|= COMPLETE
;
585 o
= parse_object(the_repository
, &t
->tagged
->oid
);
587 if (o
&& o
->type
== OBJ_COMMIT
) {
588 struct commit
*commit
= (struct commit
*)o
;
589 if (!(commit
->object
.flags
& COMPLETE
)) {
590 commit
->object
.flags
|= COMPLETE
;
591 commit_list_insert(commit
, &complete
);
597 static int mark_complete_oid(const char *refname
, const struct object_id
*oid
,
598 int flag
, void *cb_data
)
600 return mark_complete(oid
);
603 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
606 while (complete
&& cutoff
<= complete
->item
->date
) {
607 print_verbose(args
, _("Marking %s as complete"),
608 oid_to_hex(&complete
->item
->object
.oid
));
609 pop_most_recent_commit(&complete
, COMPLETE
);
613 static void add_refs_to_oidset(struct oidset
*oids
, struct ref
*refs
)
615 for (; refs
; refs
= refs
->next
)
616 oidset_insert(oids
, &refs
->old_oid
);
619 static int tip_oids_contain(struct oidset
*tip_oids
,
620 struct ref
*unmatched
, struct ref
*newlist
,
621 const struct object_id
*id
)
624 * Note that this only looks at the ref lists the first time it's
625 * called. This works out in filter_refs() because even though it may
626 * add to "newlist" between calls, the additions will always be for
627 * oids that are already in the set.
629 if (!tip_oids
->map
.map
.tablesize
) {
630 add_refs_to_oidset(tip_oids
, unmatched
);
631 add_refs_to_oidset(tip_oids
, newlist
);
633 return oidset_contains(tip_oids
, id
);
636 static void filter_refs(struct fetch_pack_args
*args
,
638 struct ref
**sought
, int nr_sought
)
640 struct ref
*newlist
= NULL
;
641 struct ref
**newtail
= &newlist
;
642 struct ref
*unmatched
= NULL
;
643 struct ref
*ref
, *next
;
644 struct oidset tip_oids
= OIDSET_INIT
;
648 for (ref
= *refs
; ref
; ref
= next
) {
652 if (starts_with(ref
->name
, "refs/") &&
653 check_refname_format(ref
->name
, 0))
656 while (i
< nr_sought
) {
657 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
659 break; /* definitely do not have it */
661 keep
= 1; /* definitely have it */
662 sought
[i
]->match_status
= REF_MATCHED
;
667 if (!keep
&& args
->fetch_all
&&
668 (!args
->deepen
|| !starts_with(ref
->name
, "refs/tags/")))
675 newtail
= &ref
->next
;
677 ref
->next
= unmatched
;
682 /* Append unmatched requests to the list */
683 for (i
= 0; i
< nr_sought
; i
++) {
684 struct object_id oid
;
688 if (ref
->match_status
!= REF_NOT_MATCHED
)
690 if (parse_oid_hex(ref
->name
, &oid
, &p
) ||
692 oidcmp(&oid
, &ref
->old_oid
))
695 if ((allow_unadvertised_object_request
&
696 (ALLOW_TIP_SHA1
| ALLOW_REACHABLE_SHA1
)) ||
697 tip_oids_contain(&tip_oids
, unmatched
, newlist
,
699 ref
->match_status
= REF_MATCHED
;
700 *newtail
= copy_ref(ref
);
701 newtail
= &(*newtail
)->next
;
703 ref
->match_status
= REF_UNADVERTISED_NOT_ALLOWED
;
707 oidset_clear(&tip_oids
);
708 for (ref
= unmatched
; ref
; ref
= next
) {
716 static void mark_alternate_complete(struct object
*obj
)
718 mark_complete(&obj
->oid
);
721 struct loose_object_iter
{
722 struct oidset
*loose_object_set
;
727 * If the number of refs is not larger than the number of loose objects,
728 * this function stops inserting.
730 static int add_loose_objects_to_set(const struct object_id
*oid
,
734 struct loose_object_iter
*iter
= data
;
735 oidset_insert(iter
->loose_object_set
, oid
);
736 if (iter
->refs
== NULL
)
739 iter
->refs
= iter
->refs
->next
;
743 static int everything_local(struct fetch_pack_args
*args
,
745 struct ref
**sought
, int nr_sought
)
749 int old_save_commit_buffer
= save_commit_buffer
;
750 timestamp_t cutoff
= 0;
751 struct oidset loose_oid_set
= OIDSET_INIT
;
753 struct loose_object_iter iter
= {&loose_oid_set
, *refs
};
755 /* Enumerate all loose objects or know refs are not so many. */
756 use_oidset
= !for_each_loose_object(add_loose_objects_to_set
,
759 save_commit_buffer
= 0;
761 for (ref
= *refs
; ref
; ref
= ref
->next
) {
763 unsigned int flags
= OBJECT_INFO_QUICK
;
766 !oidset_contains(&loose_oid_set
, &ref
->old_oid
)) {
768 * I know this does not exist in the loose form,
769 * so check if it exists in a non-loose form.
771 flags
|= OBJECT_INFO_IGNORE_LOOSE
;
774 if (!has_object_file_with_flags(&ref
->old_oid
, flags
))
776 o
= parse_object(the_repository
, &ref
->old_oid
);
780 /* We already have it -- which may mean that we were
781 * in sync with the other side at some time after
782 * that (it is OK if we guess wrong here).
784 if (o
->type
== OBJ_COMMIT
) {
785 struct commit
*commit
= (struct commit
*)o
;
786 if (!cutoff
|| cutoff
< commit
->date
)
787 cutoff
= commit
->date
;
791 oidset_clear(&loose_oid_set
);
793 if (!args
->no_dependents
) {
795 for_each_ref(mark_complete_oid
, NULL
);
796 for_each_cached_alternate(mark_alternate_complete
);
797 commit_list_sort_by_date(&complete
);
799 mark_recent_complete_commits(args
, cutoff
);
803 * Mark all complete remote refs as common refs.
804 * Don't mark them common yet; the server has to be told so first.
806 for (ref
= *refs
; ref
; ref
= ref
->next
) {
807 struct object
*o
= deref_tag(the_repository
,
808 lookup_object(the_repository
,
812 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
815 if (!(o
->flags
& SEEN
)) {
816 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
818 mark_common((struct commit
*)o
, 1, 1);
823 filter_refs(args
, refs
, sought
, nr_sought
);
825 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
826 const struct object_id
*remote
= &ref
->old_oid
;
829 o
= lookup_object(the_repository
, remote
->hash
);
830 if (!o
|| !(o
->flags
& COMPLETE
)) {
832 print_verbose(args
, "want %s (%s)", oid_to_hex(remote
),
836 print_verbose(args
, _("already have %s (%s)"), oid_to_hex(remote
),
840 save_commit_buffer
= old_save_commit_buffer
;
845 static int sideband_demux(int in
, int out
, void *data
)
850 ret
= recv_sideband("fetch-pack", xd
[0], out
);
855 static int get_pack(struct fetch_pack_args
*args
,
856 int xd
[2], char **pack_lockfile
)
859 int do_keep
= args
->keep_pack
;
860 const char *cmd_name
;
861 struct pack_header header
;
863 struct child_process cmd
= CHILD_PROCESS_INIT
;
866 memset(&demux
, 0, sizeof(demux
));
868 /* xd[] is talking with upload-pack; subprocess reads from
869 * xd[0], spits out band#2 to stderr, and feeds us band#1
870 * through demux->out.
872 demux
.proc
= sideband_demux
;
875 demux
.isolate_sigpipe
= 1;
876 if (start_async(&demux
))
877 die(_("fetch-pack: unable to fork off sideband demultiplexer"));
882 if (!args
->keep_pack
&& unpack_limit
) {
884 if (read_pack_header(demux
.out
, &header
))
885 die(_("protocol error: bad pack header"));
887 if (ntohl(header
.hdr_entries
) < unpack_limit
)
893 if (alternate_shallow_file
) {
894 argv_array_push(&cmd
.args
, "--shallow-file");
895 argv_array_push(&cmd
.args
, alternate_shallow_file
);
898 if (do_keep
|| args
->from_promisor
) {
901 cmd_name
= "index-pack";
902 argv_array_push(&cmd
.args
, cmd_name
);
903 argv_array_push(&cmd
.args
, "--stdin");
904 if (!args
->quiet
&& !args
->no_progress
)
905 argv_array_push(&cmd
.args
, "-v");
906 if (args
->use_thin_pack
)
907 argv_array_push(&cmd
.args
, "--fix-thin");
908 if (do_keep
&& (args
->lock_pack
|| unpack_limit
)) {
909 char hostname
[HOST_NAME_MAX
+ 1];
910 if (xgethostname(hostname
, sizeof(hostname
)))
911 xsnprintf(hostname
, sizeof(hostname
), "localhost");
912 argv_array_pushf(&cmd
.args
,
913 "--keep=fetch-pack %"PRIuMAX
" on %s",
914 (uintmax_t)getpid(), hostname
);
916 if (args
->check_self_contained_and_connected
)
917 argv_array_push(&cmd
.args
, "--check-self-contained-and-connected");
918 if (args
->from_promisor
)
919 argv_array_push(&cmd
.args
, "--promisor");
922 cmd_name
= "unpack-objects";
923 argv_array_push(&cmd
.args
, cmd_name
);
924 if (args
->quiet
|| args
->no_progress
)
925 argv_array_push(&cmd
.args
, "-q");
926 args
->check_self_contained_and_connected
= 0;
930 argv_array_pushf(&cmd
.args
, "--pack_header=%"PRIu32
",%"PRIu32
,
931 ntohl(header
.hdr_version
),
932 ntohl(header
.hdr_entries
));
933 if (fetch_fsck_objects
>= 0
935 : transfer_fsck_objects
>= 0
936 ? transfer_fsck_objects
938 if (args
->from_promisor
)
940 * We cannot use --strict in index-pack because it
941 * checks both broken objects and links, but we only
942 * want to check for broken objects.
944 argv_array_push(&cmd
.args
, "--fsck-objects");
946 argv_array_push(&cmd
.args
, "--strict");
951 if (start_command(&cmd
))
952 die(_("fetch-pack: unable to fork off %s"), cmd_name
);
953 if (do_keep
&& pack_lockfile
) {
954 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
959 /* Closed by start_command() */
962 ret
= finish_command(&cmd
);
963 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
964 args
->self_contained_and_connected
=
965 args
->check_self_contained_and_connected
&&
968 die(_("%s failed"), cmd_name
);
969 if (use_sideband
&& finish_async(&demux
))
970 die(_("error in sideband demultiplexer"));
974 static int cmp_ref_by_name(const void *a_
, const void *b_
)
976 const struct ref
*a
= *((const struct ref
**)a_
);
977 const struct ref
*b
= *((const struct ref
**)b_
);
978 return strcmp(a
->name
, b
->name
);
981 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
983 const struct ref
*orig_ref
,
984 struct ref
**sought
, int nr_sought
,
985 struct shallow_info
*si
,
986 char **pack_lockfile
)
988 struct ref
*ref
= copy_ref_list(orig_ref
);
989 struct object_id oid
;
990 const char *agent_feature
;
993 sort_ref_list(&ref
, ref_compare_name
);
994 QSORT(sought
, nr_sought
, cmp_ref_by_name
);
996 if ((args
->depth
> 0 || is_repository_shallow(the_repository
)) && !server_supports("shallow"))
997 die(_("Server does not support shallow clients"));
998 if (args
->depth
> 0 || args
->deepen_since
|| args
->deepen_not
)
1000 if (server_supports("multi_ack_detailed")) {
1001 print_verbose(args
, _("Server supports multi_ack_detailed"));
1003 if (server_supports("no-done")) {
1004 print_verbose(args
, _("Server supports no-done"));
1005 if (args
->stateless_rpc
)
1009 else if (server_supports("multi_ack")) {
1010 print_verbose(args
, _("Server supports multi_ack"));
1013 if (server_supports("side-band-64k")) {
1014 print_verbose(args
, _("Server supports side-band-64k"));
1017 else if (server_supports("side-band")) {
1018 print_verbose(args
, _("Server supports side-band"));
1021 if (server_supports("allow-tip-sha1-in-want")) {
1022 print_verbose(args
, _("Server supports allow-tip-sha1-in-want"));
1023 allow_unadvertised_object_request
|= ALLOW_TIP_SHA1
;
1025 if (server_supports("allow-reachable-sha1-in-want")) {
1026 print_verbose(args
, _("Server supports allow-reachable-sha1-in-want"));
1027 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
1029 if (!server_supports("thin-pack"))
1030 args
->use_thin_pack
= 0;
1031 if (!server_supports("no-progress"))
1032 args
->no_progress
= 0;
1033 if (!server_supports("include-tag"))
1034 args
->include_tag
= 0;
1035 if (server_supports("ofs-delta"))
1036 print_verbose(args
, _("Server supports ofs-delta"));
1038 prefer_ofs_delta
= 0;
1040 if (server_supports("filter")) {
1041 server_supports_filtering
= 1;
1042 print_verbose(args
, _("Server supports filter"));
1043 } else if (args
->filter_options
.choice
) {
1044 warning("filtering not recognized by server, ignoring");
1047 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
1048 agent_supported
= 1;
1050 print_verbose(args
, _("Server version is %.*s"),
1051 agent_len
, agent_feature
);
1053 if (server_supports("deepen-since"))
1054 deepen_since_ok
= 1;
1055 else if (args
->deepen_since
)
1056 die(_("Server does not support --shallow-since"));
1057 if (server_supports("deepen-not"))
1059 else if (args
->deepen_not
)
1060 die(_("Server does not support --shallow-exclude"));
1061 if (!server_supports("deepen-relative") && args
->deepen_relative
)
1062 die(_("Server does not support --deepen"));
1064 if (everything_local(args
, &ref
, sought
, nr_sought
)) {
1065 packet_flush(fd
[1]);
1068 if (find_common(args
, fd
, &oid
, ref
) < 0)
1069 if (!args
->keep_pack
)
1070 /* When cloning, it is not unusual to have
1073 warning(_("no common commits"));
1075 if (args
->stateless_rpc
)
1076 packet_flush(fd
[1]);
1078 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
1080 else if (si
->nr_ours
|| si
->nr_theirs
)
1081 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
1083 alternate_shallow_file
= NULL
;
1084 if (get_pack(args
, fd
, pack_lockfile
))
1085 die(_("git fetch-pack: fetch failed."));
1091 static void add_shallow_requests(struct strbuf
*req_buf
,
1092 const struct fetch_pack_args
*args
)
1094 if (is_repository_shallow(the_repository
))
1095 write_shallow_commits(req_buf
, 1, NULL
);
1096 if (args
->depth
> 0)
1097 packet_buf_write(req_buf
, "deepen %d", args
->depth
);
1098 if (args
->deepen_since
) {
1099 timestamp_t max_age
= approxidate(args
->deepen_since
);
1100 packet_buf_write(req_buf
, "deepen-since %"PRItime
, max_age
);
1102 if (args
->deepen_not
) {
1104 for (i
= 0; i
< args
->deepen_not
->nr
; i
++) {
1105 struct string_list_item
*s
= args
->deepen_not
->items
+ i
;
1106 packet_buf_write(req_buf
, "deepen-not %s", s
->string
);
1111 static void add_wants(const struct ref
*wants
, struct strbuf
*req_buf
)
1113 for ( ; wants
; wants
= wants
->next
) {
1114 const struct object_id
*remote
= &wants
->old_oid
;
1115 const char *remote_hex
;
1119 * If that object is complete (i.e. it is an ancestor of a
1120 * local ref), we tell them we have it but do not have to
1121 * tell them about its ancestors, which they already know
1124 * We use lookup_object here because we are only
1125 * interested in the case we *know* the object is
1126 * reachable and we have already scanned it.
1128 if (((o
= lookup_object(the_repository
, remote
->hash
)) != NULL
) &&
1129 (o
->flags
& COMPLETE
)) {
1133 remote_hex
= oid_to_hex(remote
);
1134 packet_buf_write(req_buf
, "want %s\n", remote_hex
);
1138 static void add_common(struct strbuf
*req_buf
, struct oidset
*common
)
1140 struct oidset_iter iter
;
1141 const struct object_id
*oid
;
1142 oidset_iter_init(common
, &iter
);
1144 while ((oid
= oidset_iter_next(&iter
))) {
1145 packet_buf_write(req_buf
, "have %s\n", oid_to_hex(oid
));
1149 static int add_haves(struct strbuf
*req_buf
, int *haves_to_send
, int *in_vain
)
1152 int haves_added
= 0;
1153 const struct object_id
*oid
;
1155 while ((oid
= get_rev())) {
1156 packet_buf_write(req_buf
, "have %s\n", oid_to_hex(oid
));
1157 if (++haves_added
>= *haves_to_send
)
1161 *in_vain
+= haves_added
;
1162 if (!haves_added
|| *in_vain
>= MAX_IN_VAIN
) {
1164 packet_buf_write(req_buf
, "done\n");
1168 /* Increase haves to send on next round */
1169 *haves_to_send
= next_flush(1, *haves_to_send
);
1174 static int send_fetch_request(int fd_out
, const struct fetch_pack_args
*args
,
1175 const struct ref
*wants
, struct oidset
*common
,
1176 int *haves_to_send
, int *in_vain
)
1179 struct strbuf req_buf
= STRBUF_INIT
;
1181 if (server_supports_v2("fetch", 1))
1182 packet_buf_write(&req_buf
, "command=fetch");
1183 if (server_supports_v2("agent", 0))
1184 packet_buf_write(&req_buf
, "agent=%s", git_user_agent_sanitized());
1185 if (args
->server_options
&& args
->server_options
->nr
&&
1186 server_supports_v2("server-option", 1)) {
1188 for (i
= 0; i
< args
->server_options
->nr
; i
++)
1189 packet_write_fmt(fd_out
, "server-option=%s",
1190 args
->server_options
->items
[i
].string
);
1193 packet_buf_delim(&req_buf
);
1194 if (args
->use_thin_pack
)
1195 packet_buf_write(&req_buf
, "thin-pack");
1196 if (args
->no_progress
)
1197 packet_buf_write(&req_buf
, "no-progress");
1198 if (args
->include_tag
)
1199 packet_buf_write(&req_buf
, "include-tag");
1200 if (prefer_ofs_delta
)
1201 packet_buf_write(&req_buf
, "ofs-delta");
1203 /* Add shallow-info and deepen request */
1204 if (server_supports_feature("fetch", "shallow", 0))
1205 add_shallow_requests(&req_buf
, args
);
1206 else if (is_repository_shallow(the_repository
) || args
->deepen
)
1207 die(_("Server does not support shallow requests"));
1210 if (server_supports_feature("fetch", "filter", 0) &&
1211 args
->filter_options
.choice
) {
1212 print_verbose(args
, _("Server supports filter"));
1213 packet_buf_write(&req_buf
, "filter %s",
1214 args
->filter_options
.filter_spec
);
1215 } else if (args
->filter_options
.choice
) {
1216 warning("filtering not recognized by server, ignoring");
1220 add_wants(wants
, &req_buf
);
1222 if (args
->no_dependents
) {
1223 packet_buf_write(&req_buf
, "done");
1226 /* Add all of the common commits we've found in previous rounds */
1227 add_common(&req_buf
, common
);
1229 /* Add initial haves */
1230 ret
= add_haves(&req_buf
, haves_to_send
, in_vain
);
1234 packet_buf_flush(&req_buf
);
1235 write_or_die(fd_out
, req_buf
.buf
, req_buf
.len
);
1237 strbuf_release(&req_buf
);
1242 * Processes a section header in a server's response and checks if it matches
1243 * `section`. If the value of `peek` is 1, the header line will be peeked (and
1244 * not consumed); if 0, the line will be consumed and the function will die if
1245 * the section header doesn't match what was expected.
1247 static int process_section_header(struct packet_reader
*reader
,
1248 const char *section
, int peek
)
1252 if (packet_reader_peek(reader
) != PACKET_READ_NORMAL
)
1253 die("error reading section header '%s'", section
);
1255 ret
= !strcmp(reader
->line
, section
);
1259 die("expected '%s', received '%s'",
1260 section
, reader
->line
);
1261 packet_reader_read(reader
);
1267 static int process_acks(struct packet_reader
*reader
, struct oidset
*common
)
1270 int received_ready
= 0;
1271 int received_ack
= 0;
1273 process_section_header(reader
, "acknowledgments", 0);
1274 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
1277 if (!strcmp(reader
->line
, "NAK"))
1280 if (skip_prefix(reader
->line
, "ACK ", &arg
)) {
1281 struct object_id oid
;
1282 if (!get_oid_hex(arg
, &oid
)) {
1283 struct commit
*commit
;
1284 oidset_insert(common
, &oid
);
1285 commit
= lookup_commit(the_repository
, &oid
);
1286 mark_common(commit
, 0, 1);
1291 if (!strcmp(reader
->line
, "ready")) {
1292 clear_prio_queue(&rev_list
);
1297 die("unexpected acknowledgment line: '%s'", reader
->line
);
1300 if (reader
->status
!= PACKET_READ_FLUSH
&&
1301 reader
->status
!= PACKET_READ_DELIM
)
1302 die("error processing acks: %d", reader
->status
);
1304 /* return 0 if no common, 1 if there are common, or 2 if ready */
1305 return received_ready
? 2 : (received_ack
? 1 : 0);
1308 static void receive_shallow_info(struct fetch_pack_args
*args
,
1309 struct packet_reader
*reader
)
1311 process_section_header(reader
, "shallow-info", 0);
1312 while (packet_reader_read(reader
) == PACKET_READ_NORMAL
) {
1314 struct object_id oid
;
1316 if (skip_prefix(reader
->line
, "shallow ", &arg
)) {
1317 if (get_oid_hex(arg
, &oid
))
1318 die(_("invalid shallow line: %s"), reader
->line
);
1319 register_shallow(the_repository
, &oid
);
1322 if (skip_prefix(reader
->line
, "unshallow ", &arg
)) {
1323 if (get_oid_hex(arg
, &oid
))
1324 die(_("invalid unshallow line: %s"), reader
->line
);
1325 if (!lookup_object(the_repository
, oid
.hash
))
1326 die(_("object not found: %s"), reader
->line
);
1327 /* make sure that it is parsed as shallow */
1328 if (!parse_object(the_repository
, &oid
))
1329 die(_("error in object: %s"), reader
->line
);
1330 if (unregister_shallow(&oid
))
1331 die(_("no shallow found: %s"), reader
->line
);
1334 die(_("expected shallow/unshallow, got %s"), reader
->line
);
1337 if (reader
->status
!= PACKET_READ_FLUSH
&&
1338 reader
->status
!= PACKET_READ_DELIM
)
1339 die("error processing shallow info: %d", reader
->status
);
1341 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
, NULL
);
1346 FETCH_CHECK_LOCAL
= 0,
1353 static struct ref
*do_fetch_pack_v2(struct fetch_pack_args
*args
,
1355 const struct ref
*orig_ref
,
1356 struct ref
**sought
, int nr_sought
,
1357 char **pack_lockfile
)
1359 struct ref
*ref
= copy_ref_list(orig_ref
);
1360 enum fetch_state state
= FETCH_CHECK_LOCAL
;
1361 struct oidset common
= OIDSET_INIT
;
1362 struct packet_reader reader
;
1364 int haves_to_send
= INITIAL_FLUSH
;
1365 packet_reader_init(&reader
, fd
[0], NULL
, 0,
1366 PACKET_READ_CHOMP_NEWLINE
);
1368 while (state
!= FETCH_DONE
) {
1370 case FETCH_CHECK_LOCAL
:
1371 sort_ref_list(&ref
, ref_compare_name
);
1372 QSORT(sought
, nr_sought
, cmp_ref_by_name
);
1374 /* v2 supports these by default */
1375 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
1377 if (args
->depth
> 0 || args
->deepen_since
|| args
->deepen_not
)
1381 for_each_ref(clear_marks
, NULL
);
1384 for_each_ref(rev_list_insert_ref_oid
, NULL
);
1385 for_each_cached_alternate(insert_one_alternate_object
);
1387 /* Filter 'ref' by 'sought' and those that aren't local */
1388 if (everything_local(args
, &ref
, sought
, nr_sought
))
1391 state
= FETCH_SEND_REQUEST
;
1393 case FETCH_SEND_REQUEST
:
1394 if (send_fetch_request(fd
[1], args
, ref
, &common
,
1395 &haves_to_send
, &in_vain
))
1396 state
= FETCH_GET_PACK
;
1398 state
= FETCH_PROCESS_ACKS
;
1400 case FETCH_PROCESS_ACKS
:
1401 /* Process ACKs/NAKs */
1402 switch (process_acks(&reader
, &common
)) {
1404 state
= FETCH_GET_PACK
;
1410 state
= FETCH_SEND_REQUEST
;
1414 case FETCH_GET_PACK
:
1415 /* Check for shallow-info section */
1416 if (process_section_header(&reader
, "shallow-info", 1))
1417 receive_shallow_info(args
, &reader
);
1420 process_section_header(&reader
, "packfile", 0);
1421 if (get_pack(args
, fd
, pack_lockfile
))
1422 die(_("git fetch-pack: fetch failed."));
1431 oidset_clear(&common
);
1435 static void fetch_pack_config(void)
1437 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit
);
1438 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit
);
1439 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta
);
1440 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects
);
1441 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects
);
1443 git_config(git_default_config
, NULL
);
1446 static void fetch_pack_setup(void)
1448 static int did_setup
;
1451 fetch_pack_config();
1452 if (0 <= transfer_unpack_limit
)
1453 unpack_limit
= transfer_unpack_limit
;
1454 else if (0 <= fetch_unpack_limit
)
1455 unpack_limit
= fetch_unpack_limit
;
1459 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
1461 struct string_list names
= STRING_LIST_INIT_NODUP
;
1464 for (src
= dst
= 0; src
< nr
; src
++) {
1465 struct string_list_item
*item
;
1466 item
= string_list_insert(&names
, ref
[src
]->name
);
1468 continue; /* already have it */
1469 item
->util
= ref
[src
];
1471 ref
[dst
] = ref
[src
];
1474 for (src
= dst
; src
< nr
; src
++)
1476 string_list_clear(&names
, 0);
1480 static void update_shallow(struct fetch_pack_args
*args
,
1481 struct ref
**sought
, int nr_sought
,
1482 struct shallow_info
*si
)
1484 struct oid_array ref
= OID_ARRAY_INIT
;
1488 if (args
->deepen
&& alternate_shallow_file
) {
1489 if (*alternate_shallow_file
== '\0') { /* --unshallow */
1490 unlink_or_warn(git_path_shallow(the_repository
));
1491 rollback_lock_file(&shallow_lock
);
1493 commit_lock_file(&shallow_lock
);
1497 if (!si
->shallow
|| !si
->shallow
->nr
)
1500 if (args
->cloning
) {
1502 * remote is shallow, but this is a clone, there are
1503 * no objects in repo to worry about. Accept any
1504 * shallow points that exist in the pack (iow in repo
1505 * after get_pack() and reprepare_packed_git())
1507 struct oid_array extra
= OID_ARRAY_INIT
;
1508 struct object_id
*oid
= si
->shallow
->oid
;
1509 for (i
= 0; i
< si
->shallow
->nr
; i
++)
1510 if (has_object_file(&oid
[i
]))
1511 oid_array_append(&extra
, &oid
[i
]);
1513 setup_alternate_shallow(&shallow_lock
,
1514 &alternate_shallow_file
,
1516 commit_lock_file(&shallow_lock
);
1518 oid_array_clear(&extra
);
1522 if (!si
->nr_ours
&& !si
->nr_theirs
)
1525 remove_nonexistent_theirs_shallow(si
);
1526 if (!si
->nr_ours
&& !si
->nr_theirs
)
1528 for (i
= 0; i
< nr_sought
; i
++)
1529 oid_array_append(&ref
, &sought
[i
]->old_oid
);
1532 if (args
->update_shallow
) {
1534 * remote is also shallow, .git/shallow may be updated
1535 * so all refs can be accepted. Make sure we only add
1536 * shallow roots that are actually reachable from new
1539 struct oid_array extra
= OID_ARRAY_INIT
;
1540 struct object_id
*oid
= si
->shallow
->oid
;
1541 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
1542 if (!si
->nr_ours
&& !si
->nr_theirs
) {
1543 oid_array_clear(&ref
);
1546 for (i
= 0; i
< si
->nr_ours
; i
++)
1547 oid_array_append(&extra
, &oid
[si
->ours
[i
]]);
1548 for (i
= 0; i
< si
->nr_theirs
; i
++)
1549 oid_array_append(&extra
, &oid
[si
->theirs
[i
]]);
1550 setup_alternate_shallow(&shallow_lock
,
1551 &alternate_shallow_file
,
1553 commit_lock_file(&shallow_lock
);
1554 oid_array_clear(&extra
);
1555 oid_array_clear(&ref
);
1560 * remote is also shallow, check what ref is safe to update
1561 * without updating .git/shallow
1563 status
= xcalloc(nr_sought
, sizeof(*status
));
1564 assign_shallow_commits_to_refs(si
, NULL
, status
);
1565 if (si
->nr_ours
|| si
->nr_theirs
) {
1566 for (i
= 0; i
< nr_sought
; i
++)
1568 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
1571 oid_array_clear(&ref
);
1574 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1575 int fd
[], struct child_process
*conn
,
1576 const struct ref
*ref
,
1578 struct ref
**sought
, int nr_sought
,
1579 struct oid_array
*shallow
,
1580 char **pack_lockfile
,
1581 enum protocol_version version
)
1583 struct ref
*ref_cpy
;
1584 struct shallow_info si
;
1588 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
1591 packet_flush(fd
[1]);
1592 die(_("no matching remote head"));
1594 prepare_shallow_info(&si
, shallow
);
1595 if (version
== protocol_v2
)
1596 ref_cpy
= do_fetch_pack_v2(args
, fd
, ref
, sought
, nr_sought
,
1599 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
1600 &si
, pack_lockfile
);
1601 reprepare_packed_git(the_repository
);
1602 update_shallow(args
, sought
, nr_sought
, &si
);
1603 clear_shallow_info(&si
);
1607 int report_unmatched_refs(struct ref
**sought
, int nr_sought
)
1611 for (i
= 0; i
< nr_sought
; i
++) {
1614 switch (sought
[i
]->match_status
) {
1617 case REF_NOT_MATCHED
:
1618 error(_("no such remote ref %s"), sought
[i
]->name
);
1620 case REF_UNADVERTISED_NOT_ALLOWED
:
1621 error(_("Server does not allow request for unadvertised object %s"),