10 #include "fetch-pack.h"
12 #include "run-command.h"
14 #include "transport.h"
16 #include "prio-queue.h"
17 #include "sha1-array.h"
19 static int transfer_unpack_limit
= -1;
20 static int fetch_unpack_limit
= -1;
21 static int unpack_limit
= 100;
22 static int prefer_ofs_delta
= 1;
24 static int fetch_fsck_objects
= -1;
25 static int transfer_fsck_objects
= -1;
26 static int agent_supported
;
27 static struct lock_file shallow_lock
;
28 static const char *alternate_shallow_file
;
30 /* Remember to update object flag allocation in object.h */
31 #define COMPLETE (1U << 0)
32 #define COMMON (1U << 1)
33 #define COMMON_REF (1U << 2)
34 #define SEEN (1U << 3)
35 #define POPPED (1U << 4)
40 * After sending this many "have"s if we do not get any new ACK , we
41 * give up traversing our history.
43 #define MAX_IN_VAIN 256
45 static struct prio_queue rev_list
= { compare_commits_by_commit_date
};
46 static int non_common_revs
, multi_ack
, use_sideband
;
47 /* Allow specifying sha1 if it is a ref tip. */
48 #define ALLOW_TIP_SHA1 01
49 static unsigned int allow_unadvertised_object_request
;
51 static void rev_list_push(struct commit
*commit
, int mark
)
53 if (!(commit
->object
.flags
& mark
)) {
54 commit
->object
.flags
|= mark
;
56 if (parse_commit(commit
))
59 prio_queue_put(&rev_list
, commit
);
61 if (!(commit
->object
.flags
& COMMON
))
66 static int rev_list_insert_ref(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
68 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
70 if (o
&& o
->type
== OBJ_COMMIT
)
71 rev_list_push((struct commit
*)o
, SEEN
);
76 static int clear_marks(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
78 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
80 if (o
&& o
->type
== OBJ_COMMIT
)
81 clear_commit_marks((struct commit
*)o
,
82 COMMON
| COMMON_REF
| SEEN
| POPPED
);
87 This function marks a rev and its ancestors as common.
88 In some cases, it is desirable to mark only the ancestors (for example
89 when only the server does not yet know that they are common).
92 static void mark_common(struct commit
*commit
,
93 int ancestors_only
, int dont_parse
)
95 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
96 struct object
*o
= (struct object
*)commit
;
101 if (!(o
->flags
& SEEN
))
102 rev_list_push(commit
, SEEN
);
104 struct commit_list
*parents
;
106 if (!ancestors_only
&& !(o
->flags
& POPPED
))
108 if (!o
->parsed
&& !dont_parse
)
109 if (parse_commit(commit
))
112 for (parents
= commit
->parents
;
114 parents
= parents
->next
)
115 mark_common(parents
->item
, 0, dont_parse
);
121 Get the next rev to send, ignoring the common.
124 static const unsigned char *get_rev(void)
126 struct commit
*commit
= NULL
;
128 while (commit
== NULL
) {
130 struct commit_list
*parents
;
132 if (rev_list
.nr
== 0 || non_common_revs
== 0)
135 commit
= prio_queue_get(&rev_list
);
136 parse_commit(commit
);
137 parents
= commit
->parents
;
139 commit
->object
.flags
|= POPPED
;
140 if (!(commit
->object
.flags
& COMMON
))
143 if (commit
->object
.flags
& COMMON
) {
144 /* do not send "have", and ignore ancestors */
146 mark
= COMMON
| SEEN
;
147 } else if (commit
->object
.flags
& COMMON_REF
)
148 /* send "have", and ignore ancestors */
149 mark
= COMMON
| SEEN
;
151 /* send "have", also for its ancestors */
155 if (!(parents
->item
->object
.flags
& SEEN
))
156 rev_list_push(parents
->item
, mark
);
158 mark_common(parents
->item
, 1, 0);
159 parents
= parents
->next
;
163 return commit
->object
.sha1
;
174 static void consume_shallow_list(struct fetch_pack_args
*args
, int fd
)
176 if (args
->stateless_rpc
&& args
->depth
> 0) {
177 /* If we sent a depth we will get back "duplicate"
178 * shallow and unshallow commands every time there
179 * is a block of have lines exchanged.
182 while ((line
= packet_read_line(fd
, NULL
))) {
183 if (starts_with(line
, "shallow "))
185 if (starts_with(line
, "unshallow "))
187 die("git fetch-pack: expected shallow list");
192 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
195 char *line
= packet_read_line(fd
, &len
);
199 die("git fetch-pack: expected ACK/NAK, got EOF");
200 if (!strcmp(line
, "NAK"))
202 if (skip_prefix(line
, "ACK ", &arg
)) {
203 if (!get_sha1_hex(arg
, result_sha1
)) {
208 if (strstr(arg
, "continue"))
210 if (strstr(arg
, "common"))
212 if (strstr(arg
, "ready"))
217 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
220 static void send_request(struct fetch_pack_args
*args
,
221 int fd
, struct strbuf
*buf
)
223 if (args
->stateless_rpc
) {
224 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
227 write_or_die(fd
, buf
->buf
, buf
->len
);
230 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
232 rev_list_insert_ref(NULL
, ref
->old_sha1
, 0, NULL
);
235 #define INITIAL_FLUSH 16
236 #define PIPESAFE_FLUSH 32
237 #define LARGE_FLUSH 1024
239 static int next_flush(struct fetch_pack_args
*args
, int count
)
241 int flush_limit
= args
->stateless_rpc
? LARGE_FLUSH
: PIPESAFE_FLUSH
;
243 if (count
< flush_limit
)
246 count
+= flush_limit
;
250 static int find_common(struct fetch_pack_args
*args
,
251 int fd
[2], unsigned char *result_sha1
,
255 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
256 const unsigned char *sha1
;
257 unsigned in_vain
= 0;
258 int got_continue
= 0;
260 struct strbuf req_buf
= STRBUF_INIT
;
261 size_t state_len
= 0;
263 if (args
->stateless_rpc
&& multi_ack
== 1)
264 die("--stateless-rpc requires multi_ack_detailed");
266 for_each_ref(clear_marks
, NULL
);
269 for_each_ref(rev_list_insert_ref
, NULL
);
270 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
273 for ( ; refs
; refs
= refs
->next
) {
274 unsigned char *remote
= refs
->old_sha1
;
275 const char *remote_hex
;
279 * If that object is complete (i.e. it is an ancestor of a
280 * local ref), we tell them we have it but do not have to
281 * tell them about its ancestors, which they already know
284 * We use lookup_object here because we are only
285 * interested in the case we *know* the object is
286 * reachable and we have already scanned it.
288 if (((o
= lookup_object(remote
)) != NULL
) &&
289 (o
->flags
& COMPLETE
)) {
293 remote_hex
= sha1_to_hex(remote
);
295 struct strbuf c
= STRBUF_INIT
;
296 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
297 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
298 if (no_done
) strbuf_addstr(&c
, " no-done");
299 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
300 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
301 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
302 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
303 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
304 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
305 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
306 git_user_agent_sanitized());
307 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
310 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
315 strbuf_release(&req_buf
);
320 if (is_repository_shallow())
321 write_shallow_commits(&req_buf
, 1, NULL
);
323 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
324 packet_buf_flush(&req_buf
);
325 state_len
= req_buf
.len
;
327 if (args
->depth
> 0) {
330 unsigned char sha1
[20];
332 send_request(args
, fd
[1], &req_buf
);
333 while ((line
= packet_read_line(fd
[0], NULL
))) {
334 if (skip_prefix(line
, "shallow ", &arg
)) {
335 if (get_sha1_hex(arg
, sha1
))
336 die("invalid shallow line: %s", line
);
337 register_shallow(sha1
);
340 if (skip_prefix(line
, "unshallow ", &arg
)) {
341 if (get_sha1_hex(arg
, sha1
))
342 die("invalid unshallow line: %s", line
);
343 if (!lookup_object(sha1
))
344 die("object not found: %s", line
);
345 /* make sure that it is parsed as shallow */
346 if (!parse_object(sha1
))
347 die("error in object: %s", line
);
348 if (unregister_shallow(sha1
))
349 die("no shallow found: %s", line
);
352 die("expected shallow/unshallow, got %s", line
);
354 } else if (!args
->stateless_rpc
)
355 send_request(args
, fd
[1], &req_buf
);
357 if (!args
->stateless_rpc
) {
358 /* If we aren't using the stateless-rpc interface
359 * we don't need to retain the headers.
361 strbuf_setlen(&req_buf
, 0);
367 while ((sha1
= get_rev())) {
368 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
370 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
372 if (flush_at
<= ++count
) {
375 packet_buf_flush(&req_buf
);
376 send_request(args
, fd
[1], &req_buf
);
377 strbuf_setlen(&req_buf
, state_len
);
379 flush_at
= next_flush(args
, count
);
382 * We keep one window "ahead" of the other side, and
383 * will wait for an ACK only on the next one
385 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
388 consume_shallow_list(args
, fd
[0]);
390 ack
= get_ack(fd
[0], result_sha1
);
391 if (args
->verbose
&& ack
)
392 fprintf(stderr
, "got ack %d %s\n", ack
,
393 sha1_to_hex(result_sha1
));
403 struct commit
*commit
=
404 lookup_commit(result_sha1
);
406 die("invalid commit %s", sha1_to_hex(result_sha1
));
407 if (args
->stateless_rpc
409 && !(commit
->object
.flags
& COMMON
)) {
410 /* We need to replay the have for this object
411 * on the next RPC request so the peer knows
412 * it is in common with us.
414 const char *hex
= sha1_to_hex(result_sha1
);
415 packet_buf_write(&req_buf
, "have %s\n", hex
);
416 state_len
= req_buf
.len
;
418 mark_common(commit
, 0, 1);
422 if (ack
== ACK_ready
) {
423 clear_prio_queue(&rev_list
);
431 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
433 fprintf(stderr
, "giving up\n");
439 if (!got_ready
|| !no_done
) {
440 packet_buf_write(&req_buf
, "done\n");
441 send_request(args
, fd
[1], &req_buf
);
444 fprintf(stderr
, "done\n");
449 strbuf_release(&req_buf
);
451 if (!got_ready
|| !no_done
)
452 consume_shallow_list(args
, fd
[0]);
453 while (flushes
|| multi_ack
) {
454 int ack
= get_ack(fd
[0], result_sha1
);
457 fprintf(stderr
, "got ack (%d) %s\n", ack
,
458 sha1_to_hex(result_sha1
));
466 /* it is no error to fetch into a completely empty repo */
467 return count
? retval
: 0;
470 static struct commit_list
*complete
;
472 static int mark_complete(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
474 struct object
*o
= parse_object(sha1
);
476 while (o
&& o
->type
== OBJ_TAG
) {
477 struct tag
*t
= (struct tag
*) o
;
479 break; /* broken repository */
480 o
->flags
|= COMPLETE
;
481 o
= parse_object(t
->tagged
->sha1
);
483 if (o
&& o
->type
== OBJ_COMMIT
) {
484 struct commit
*commit
= (struct commit
*)o
;
485 if (!(commit
->object
.flags
& COMPLETE
)) {
486 commit
->object
.flags
|= COMPLETE
;
487 commit_list_insert(commit
, &complete
);
493 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
494 unsigned long cutoff
)
496 while (complete
&& cutoff
<= complete
->item
->date
) {
498 fprintf(stderr
, "Marking %s as complete\n",
499 sha1_to_hex(complete
->item
->object
.sha1
));
500 pop_most_recent_commit(&complete
, COMPLETE
);
504 static void filter_refs(struct fetch_pack_args
*args
,
506 struct ref
**sought
, int nr_sought
)
508 struct ref
*newlist
= NULL
;
509 struct ref
**newtail
= &newlist
;
510 struct ref
*ref
, *next
;
514 for (ref
= *refs
; ref
; ref
= next
) {
518 if (starts_with(ref
->name
, "refs/") &&
519 check_refname_format(ref
->name
, 0))
522 while (i
< nr_sought
) {
523 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
525 break; /* definitely do not have it */
527 keep
= 1; /* definitely have it */
528 sought
[i
]->matched
= 1;
534 if (!keep
&& args
->fetch_all
&&
535 (!args
->depth
|| !starts_with(ref
->name
, "refs/tags/")))
541 newtail
= &ref
->next
;
547 /* Append unmatched requests to the list */
548 if ((allow_unadvertised_object_request
& ALLOW_TIP_SHA1
)) {
549 for (i
= 0; i
< nr_sought
; i
++) {
550 unsigned char sha1
[20];
555 if (get_sha1_hex(ref
->name
, sha1
) ||
556 ref
->name
[40] != '\0' ||
557 hashcmp(sha1
, ref
->old_sha1
))
561 *newtail
= copy_ref(ref
);
562 newtail
= &(*newtail
)->next
;
568 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
570 mark_complete(NULL
, ref
->old_sha1
, 0, NULL
);
573 static int everything_local(struct fetch_pack_args
*args
,
575 struct ref
**sought
, int nr_sought
)
579 unsigned long cutoff
= 0;
581 save_commit_buffer
= 0;
583 for (ref
= *refs
; ref
; ref
= ref
->next
) {
586 if (!has_sha1_file(ref
->old_sha1
))
589 o
= parse_object(ref
->old_sha1
);
593 /* We already have it -- which may mean that we were
594 * in sync with the other side at some time after
595 * that (it is OK if we guess wrong here).
597 if (o
->type
== OBJ_COMMIT
) {
598 struct commit
*commit
= (struct commit
*)o
;
599 if (!cutoff
|| cutoff
< commit
->date
)
600 cutoff
= commit
->date
;
605 for_each_ref(mark_complete
, NULL
);
606 for_each_alternate_ref(mark_alternate_complete
, NULL
);
607 commit_list_sort_by_date(&complete
);
609 mark_recent_complete_commits(args
, cutoff
);
613 * Mark all complete remote refs as common refs.
614 * Don't mark them common yet; the server has to be told so first.
616 for (ref
= *refs
; ref
; ref
= ref
->next
) {
617 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
620 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
623 if (!(o
->flags
& SEEN
)) {
624 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
626 mark_common((struct commit
*)o
, 1, 1);
630 filter_refs(args
, refs
, sought
, nr_sought
);
632 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
633 const unsigned char *remote
= ref
->old_sha1
;
636 o
= lookup_object(remote
);
637 if (!o
|| !(o
->flags
& COMPLETE
)) {
642 "want %s (%s)\n", sha1_to_hex(remote
),
649 "already have %s (%s)\n", sha1_to_hex(remote
),
655 static int sideband_demux(int in
, int out
, void *data
)
659 int ret
= recv_sideband("fetch-pack", xd
[0], out
);
664 static int get_pack(struct fetch_pack_args
*args
,
665 int xd
[2], char **pack_lockfile
)
668 const char *argv
[22];
671 const char **av
, *cmd_name
;
672 int do_keep
= args
->keep_pack
;
673 struct child_process cmd
= CHILD_PROCESS_INIT
;
676 memset(&demux
, 0, sizeof(demux
));
678 /* xd[] is talking with upload-pack; subprocess reads from
679 * xd[0], spits out band#2 to stderr, and feeds us band#1
680 * through demux->out.
682 demux
.proc
= sideband_demux
;
685 if (start_async(&demux
))
686 die("fetch-pack: unable to fork off sideband"
695 if (!args
->keep_pack
&& unpack_limit
) {
696 struct pack_header header
;
698 if (read_pack_header(demux
.out
, &header
))
699 die("protocol error: bad pack header");
700 snprintf(hdr_arg
, sizeof(hdr_arg
),
701 "--pack_header=%"PRIu32
",%"PRIu32
,
702 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
703 if (ntohl(header
.hdr_entries
) < unpack_limit
)
709 if (alternate_shallow_file
) {
710 *av
++ = "--shallow-file";
711 *av
++ = alternate_shallow_file
;
717 *av
++ = cmd_name
= "index-pack";
719 if (!args
->quiet
&& !args
->no_progress
)
721 if (args
->use_thin_pack
)
722 *av
++ = "--fix-thin";
723 if (args
->lock_pack
|| unpack_limit
) {
724 int s
= sprintf(keep_arg
,
725 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
726 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
727 strcpy(keep_arg
+ s
, "localhost");
730 if (args
->check_self_contained_and_connected
)
731 *av
++ = "--check-self-contained-and-connected";
734 *av
++ = cmd_name
= "unpack-objects";
735 if (args
->quiet
|| args
->no_progress
)
737 args
->check_self_contained_and_connected
= 0;
741 if (fetch_fsck_objects
>= 0
743 : transfer_fsck_objects
>= 0
744 ? transfer_fsck_objects
751 if (start_command(&cmd
))
752 die("fetch-pack: unable to fork off %s", cmd_name
);
753 if (do_keep
&& pack_lockfile
) {
754 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
759 /* Closed by start_command() */
762 ret
= finish_command(&cmd
);
763 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
764 args
->self_contained_and_connected
=
765 args
->check_self_contained_and_connected
&&
768 die("%s failed", cmd_name
);
769 if (use_sideband
&& finish_async(&demux
))
770 die("error in sideband demultiplexer");
774 static int cmp_ref_by_name(const void *a_
, const void *b_
)
776 const struct ref
*a
= *((const struct ref
**)a_
);
777 const struct ref
*b
= *((const struct ref
**)b_
);
778 return strcmp(a
->name
, b
->name
);
781 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
783 const struct ref
*orig_ref
,
784 struct ref
**sought
, int nr_sought
,
785 struct shallow_info
*si
,
786 char **pack_lockfile
)
788 struct ref
*ref
= copy_ref_list(orig_ref
);
789 unsigned char sha1
[20];
790 const char *agent_feature
;
793 sort_ref_list(&ref
, ref_compare_name
);
794 qsort(sought
, nr_sought
, sizeof(*sought
), cmp_ref_by_name
);
796 if (is_repository_shallow() && !server_supports("shallow"))
797 die("Server does not support shallow clients");
798 if (server_supports("multi_ack_detailed")) {
800 fprintf(stderr
, "Server supports multi_ack_detailed\n");
802 if (server_supports("no-done")) {
804 fprintf(stderr
, "Server supports no-done\n");
805 if (args
->stateless_rpc
)
809 else if (server_supports("multi_ack")) {
811 fprintf(stderr
, "Server supports multi_ack\n");
814 if (server_supports("side-band-64k")) {
816 fprintf(stderr
, "Server supports side-band-64k\n");
819 else if (server_supports("side-band")) {
821 fprintf(stderr
, "Server supports side-band\n");
824 if (server_supports("allow-tip-sha1-in-want")) {
826 fprintf(stderr
, "Server supports allow-tip-sha1-in-want\n");
827 allow_unadvertised_object_request
|= ALLOW_TIP_SHA1
;
829 if (!server_supports("thin-pack"))
830 args
->use_thin_pack
= 0;
831 if (!server_supports("no-progress"))
832 args
->no_progress
= 0;
833 if (!server_supports("include-tag"))
834 args
->include_tag
= 0;
835 if (server_supports("ofs-delta")) {
837 fprintf(stderr
, "Server supports ofs-delta\n");
839 prefer_ofs_delta
= 0;
841 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
843 if (args
->verbose
&& agent_len
)
844 fprintf(stderr
, "Server version is %.*s\n",
845 agent_len
, agent_feature
);
848 if (everything_local(args
, &ref
, sought
, nr_sought
)) {
852 if (find_common(args
, fd
, sha1
, ref
) < 0)
853 if (!args
->keep_pack
)
854 /* When cloning, it is not unusual to have
857 warning("no common commits");
859 if (args
->stateless_rpc
)
862 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
864 else if (si
->nr_ours
|| si
->nr_theirs
)
865 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
867 alternate_shallow_file
= NULL
;
868 if (get_pack(args
, fd
, pack_lockfile
))
869 die("git fetch-pack: fetch failed.");
875 static void fetch_pack_config(void)
877 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit
);
878 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit
);
879 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta
);
880 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects
);
881 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects
);
883 git_config(git_default_config
, NULL
);
886 static void fetch_pack_setup(void)
888 static int did_setup
;
892 if (0 <= transfer_unpack_limit
)
893 unpack_limit
= transfer_unpack_limit
;
894 else if (0 <= fetch_unpack_limit
)
895 unpack_limit
= fetch_unpack_limit
;
899 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
901 struct string_list names
= STRING_LIST_INIT_NODUP
;
904 for (src
= dst
= 0; src
< nr
; src
++) {
905 struct string_list_item
*item
;
906 item
= string_list_insert(&names
, ref
[src
]->name
);
908 continue; /* already have it */
909 item
->util
= ref
[src
];
914 for (src
= dst
; src
< nr
; src
++)
916 string_list_clear(&names
, 0);
920 static void update_shallow(struct fetch_pack_args
*args
,
921 struct ref
**sought
, int nr_sought
,
922 struct shallow_info
*si
)
924 struct sha1_array ref
= SHA1_ARRAY_INIT
;
928 if (args
->depth
> 0 && alternate_shallow_file
) {
929 if (*alternate_shallow_file
== '\0') { /* --unshallow */
930 unlink_or_warn(git_path("shallow"));
931 rollback_lock_file(&shallow_lock
);
933 commit_lock_file(&shallow_lock
);
937 if (!si
->shallow
|| !si
->shallow
->nr
)
942 * remote is shallow, but this is a clone, there are
943 * no objects in repo to worry about. Accept any
944 * shallow points that exist in the pack (iow in repo
945 * after get_pack() and reprepare_packed_git())
947 struct sha1_array extra
= SHA1_ARRAY_INIT
;
948 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
949 for (i
= 0; i
< si
->shallow
->nr
; i
++)
950 if (has_sha1_file(sha1
[i
]))
951 sha1_array_append(&extra
, sha1
[i
]);
953 setup_alternate_shallow(&shallow_lock
,
954 &alternate_shallow_file
,
956 commit_lock_file(&shallow_lock
);
958 sha1_array_clear(&extra
);
962 if (!si
->nr_ours
&& !si
->nr_theirs
)
965 remove_nonexistent_theirs_shallow(si
);
966 if (!si
->nr_ours
&& !si
->nr_theirs
)
968 for (i
= 0; i
< nr_sought
; i
++)
969 sha1_array_append(&ref
, sought
[i
]->old_sha1
);
972 if (args
->update_shallow
) {
974 * remote is also shallow, .git/shallow may be updated
975 * so all refs can be accepted. Make sure we only add
976 * shallow roots that are actually reachable from new
979 struct sha1_array extra
= SHA1_ARRAY_INIT
;
980 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
981 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
982 if (!si
->nr_ours
&& !si
->nr_theirs
) {
983 sha1_array_clear(&ref
);
986 for (i
= 0; i
< si
->nr_ours
; i
++)
987 sha1_array_append(&extra
, sha1
[si
->ours
[i
]]);
988 for (i
= 0; i
< si
->nr_theirs
; i
++)
989 sha1_array_append(&extra
, sha1
[si
->theirs
[i
]]);
990 setup_alternate_shallow(&shallow_lock
,
991 &alternate_shallow_file
,
993 commit_lock_file(&shallow_lock
);
994 sha1_array_clear(&extra
);
995 sha1_array_clear(&ref
);
1000 * remote is also shallow, check what ref is safe to update
1001 * without updating .git/shallow
1003 status
= xcalloc(nr_sought
, sizeof(*status
));
1004 assign_shallow_commits_to_refs(si
, NULL
, status
);
1005 if (si
->nr_ours
|| si
->nr_theirs
) {
1006 for (i
= 0; i
< nr_sought
; i
++)
1008 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
1011 sha1_array_clear(&ref
);
1014 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1015 int fd
[], struct child_process
*conn
,
1016 const struct ref
*ref
,
1018 struct ref
**sought
, int nr_sought
,
1019 struct sha1_array
*shallow
,
1020 char **pack_lockfile
)
1022 struct ref
*ref_cpy
;
1023 struct shallow_info si
;
1027 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
1030 packet_flush(fd
[1]);
1031 die("no matching remote head");
1033 prepare_shallow_info(&si
, shallow
);
1034 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
1035 &si
, pack_lockfile
);
1036 reprepare_packed_git();
1037 update_shallow(args
, sought
, nr_sought
, &si
);
1038 clear_shallow_info(&si
);