9 #include "fetch-pack.h"
11 #include "run-command.h"
13 #include "transport.h"
15 #include "prio-queue.h"
16 #include "sha1-array.h"
18 static int transfer_unpack_limit
= -1;
19 static int fetch_unpack_limit
= -1;
20 static int unpack_limit
= 100;
21 static int prefer_ofs_delta
= 1;
23 static int fetch_fsck_objects
= -1;
24 static int transfer_fsck_objects
= -1;
25 static int agent_supported
;
26 static struct lock_file shallow_lock
;
27 static const char *alternate_shallow_file
;
29 /* Remember to update object flag allocation in object.h */
30 #define COMPLETE (1U << 0)
31 #define COMMON (1U << 1)
32 #define COMMON_REF (1U << 2)
33 #define SEEN (1U << 3)
34 #define POPPED (1U << 4)
39 * After sending this many "have"s if we do not get any new ACK , we
40 * give up traversing our history.
42 #define MAX_IN_VAIN 256
44 static struct prio_queue rev_list
= { compare_commits_by_commit_date
};
45 static int non_common_revs
, multi_ack
, use_sideband
, allow_tip_sha1_in_want
;
47 static void rev_list_push(struct commit
*commit
, int mark
)
49 if (!(commit
->object
.flags
& mark
)) {
50 commit
->object
.flags
|= mark
;
52 if (parse_commit(commit
))
55 prio_queue_put(&rev_list
, commit
);
57 if (!(commit
->object
.flags
& COMMON
))
62 static int rev_list_insert_ref(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
64 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
66 if (o
&& o
->type
== OBJ_COMMIT
)
67 rev_list_push((struct commit
*)o
, SEEN
);
72 static int clear_marks(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
74 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
76 if (o
&& o
->type
== OBJ_COMMIT
)
77 clear_commit_marks((struct commit
*)o
,
78 COMMON
| COMMON_REF
| SEEN
| POPPED
);
83 This function marks a rev and its ancestors as common.
84 In some cases, it is desirable to mark only the ancestors (for example
85 when only the server does not yet know that they are common).
88 static void mark_common(struct commit
*commit
,
89 int ancestors_only
, int dont_parse
)
91 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
92 struct object
*o
= (struct object
*)commit
;
97 if (!(o
->flags
& SEEN
))
98 rev_list_push(commit
, SEEN
);
100 struct commit_list
*parents
;
102 if (!ancestors_only
&& !(o
->flags
& POPPED
))
104 if (!o
->parsed
&& !dont_parse
)
105 if (parse_commit(commit
))
108 for (parents
= commit
->parents
;
110 parents
= parents
->next
)
111 mark_common(parents
->item
, 0, dont_parse
);
117 Get the next rev to send, ignoring the common.
120 static const unsigned char *get_rev(void)
122 struct commit
*commit
= NULL
;
124 while (commit
== NULL
) {
126 struct commit_list
*parents
;
128 if (rev_list
.nr
== 0 || non_common_revs
== 0)
131 commit
= prio_queue_get(&rev_list
);
132 parse_commit(commit
);
133 parents
= commit
->parents
;
135 commit
->object
.flags
|= POPPED
;
136 if (!(commit
->object
.flags
& COMMON
))
139 if (commit
->object
.flags
& COMMON
) {
140 /* do not send "have", and ignore ancestors */
142 mark
= COMMON
| SEEN
;
143 } else if (commit
->object
.flags
& COMMON_REF
)
144 /* send "have", and ignore ancestors */
145 mark
= COMMON
| SEEN
;
147 /* send "have", also for its ancestors */
151 if (!(parents
->item
->object
.flags
& SEEN
))
152 rev_list_push(parents
->item
, mark
);
154 mark_common(parents
->item
, 1, 0);
155 parents
= parents
->next
;
159 return commit
->object
.sha1
;
170 static void consume_shallow_list(struct fetch_pack_args
*args
, int fd
)
172 if (args
->stateless_rpc
&& args
->depth
> 0) {
173 /* If we sent a depth we will get back "duplicate"
174 * shallow and unshallow commands every time there
175 * is a block of have lines exchanged.
178 while ((line
= packet_read_line(fd
, NULL
))) {
179 if (starts_with(line
, "shallow "))
181 if (starts_with(line
, "unshallow "))
183 die("git fetch-pack: expected shallow list");
188 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
191 char *line
= packet_read_line(fd
, &len
);
194 die("git fetch-pack: expected ACK/NAK, got EOF");
195 if (!strcmp(line
, "NAK"))
197 if (starts_with(line
, "ACK ")) {
198 if (!get_sha1_hex(line
+4, result_sha1
)) {
201 if (strstr(line
+45, "continue"))
203 if (strstr(line
+45, "common"))
205 if (strstr(line
+45, "ready"))
210 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
213 static void send_request(struct fetch_pack_args
*args
,
214 int fd
, struct strbuf
*buf
)
216 if (args
->stateless_rpc
) {
217 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
220 write_or_die(fd
, buf
->buf
, buf
->len
);
223 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
225 rev_list_insert_ref(NULL
, ref
->old_sha1
, 0, NULL
);
228 #define INITIAL_FLUSH 16
229 #define PIPESAFE_FLUSH 32
230 #define LARGE_FLUSH 1024
232 static int next_flush(struct fetch_pack_args
*args
, int count
)
234 int flush_limit
= args
->stateless_rpc
? LARGE_FLUSH
: PIPESAFE_FLUSH
;
236 if (count
< flush_limit
)
239 count
+= flush_limit
;
243 static int find_common(struct fetch_pack_args
*args
,
244 int fd
[2], unsigned char *result_sha1
,
248 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
249 const unsigned char *sha1
;
250 unsigned in_vain
= 0;
251 int got_continue
= 0;
253 struct strbuf req_buf
= STRBUF_INIT
;
254 size_t state_len
= 0;
256 if (args
->stateless_rpc
&& multi_ack
== 1)
257 die("--stateless-rpc requires multi_ack_detailed");
259 for_each_ref(clear_marks
, NULL
);
262 for_each_ref(rev_list_insert_ref
, NULL
);
263 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
266 for ( ; refs
; refs
= refs
->next
) {
267 unsigned char *remote
= refs
->old_sha1
;
268 const char *remote_hex
;
272 * If that object is complete (i.e. it is an ancestor of a
273 * local ref), we tell them we have it but do not have to
274 * tell them about its ancestors, which they already know
277 * We use lookup_object here because we are only
278 * interested in the case we *know* the object is
279 * reachable and we have already scanned it.
281 if (((o
= lookup_object(remote
)) != NULL
) &&
282 (o
->flags
& COMPLETE
)) {
286 remote_hex
= sha1_to_hex(remote
);
288 struct strbuf c
= STRBUF_INIT
;
289 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
290 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
291 if (no_done
) strbuf_addstr(&c
, " no-done");
292 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
293 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
294 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
295 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
296 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
297 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
298 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
299 git_user_agent_sanitized());
300 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
303 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
308 strbuf_release(&req_buf
);
313 if (is_repository_shallow())
314 write_shallow_commits(&req_buf
, 1, NULL
);
316 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
317 packet_buf_flush(&req_buf
);
318 state_len
= req_buf
.len
;
320 if (args
->depth
> 0) {
323 unsigned char sha1
[20];
325 send_request(args
, fd
[1], &req_buf
);
326 while ((line
= packet_read_line(fd
[0], NULL
))) {
327 if (skip_prefix(line
, "shallow ", &arg
)) {
328 if (get_sha1_hex(arg
, sha1
))
329 die("invalid shallow line: %s", line
);
330 register_shallow(sha1
);
333 if (skip_prefix(line
, "unshallow ", &arg
)) {
334 if (get_sha1_hex(arg
, sha1
))
335 die("invalid unshallow line: %s", line
);
336 if (!lookup_object(sha1
))
337 die("object not found: %s", line
);
338 /* make sure that it is parsed as shallow */
339 if (!parse_object(sha1
))
340 die("error in object: %s", line
);
341 if (unregister_shallow(sha1
))
342 die("no shallow found: %s", line
);
345 die("expected shallow/unshallow, got %s", line
);
347 } else if (!args
->stateless_rpc
)
348 send_request(args
, fd
[1], &req_buf
);
350 if (!args
->stateless_rpc
) {
351 /* If we aren't using the stateless-rpc interface
352 * we don't need to retain the headers.
354 strbuf_setlen(&req_buf
, 0);
360 while ((sha1
= get_rev())) {
361 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
363 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
365 if (flush_at
<= ++count
) {
368 packet_buf_flush(&req_buf
);
369 send_request(args
, fd
[1], &req_buf
);
370 strbuf_setlen(&req_buf
, state_len
);
372 flush_at
= next_flush(args
, count
);
375 * We keep one window "ahead" of the other side, and
376 * will wait for an ACK only on the next one
378 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
381 consume_shallow_list(args
, fd
[0]);
383 ack
= get_ack(fd
[0], result_sha1
);
384 if (args
->verbose
&& ack
)
385 fprintf(stderr
, "got ack %d %s\n", ack
,
386 sha1_to_hex(result_sha1
));
396 struct commit
*commit
=
397 lookup_commit(result_sha1
);
399 die("invalid commit %s", sha1_to_hex(result_sha1
));
400 if (args
->stateless_rpc
402 && !(commit
->object
.flags
& COMMON
)) {
403 /* We need to replay the have for this object
404 * on the next RPC request so the peer knows
405 * it is in common with us.
407 const char *hex
= sha1_to_hex(result_sha1
);
408 packet_buf_write(&req_buf
, "have %s\n", hex
);
409 state_len
= req_buf
.len
;
411 mark_common(commit
, 0, 1);
415 if (ack
== ACK_ready
) {
416 clear_prio_queue(&rev_list
);
424 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
426 fprintf(stderr
, "giving up\n");
432 if (!got_ready
|| !no_done
) {
433 packet_buf_write(&req_buf
, "done\n");
434 send_request(args
, fd
[1], &req_buf
);
437 fprintf(stderr
, "done\n");
442 strbuf_release(&req_buf
);
444 if (!got_ready
|| !no_done
)
445 consume_shallow_list(args
, fd
[0]);
446 while (flushes
|| multi_ack
) {
447 int ack
= get_ack(fd
[0], result_sha1
);
450 fprintf(stderr
, "got ack (%d) %s\n", ack
,
451 sha1_to_hex(result_sha1
));
459 /* it is no error to fetch into a completely empty repo */
460 return count
? retval
: 0;
463 static struct commit_list
*complete
;
465 static int mark_complete(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
467 struct object
*o
= parse_object(sha1
);
469 while (o
&& o
->type
== OBJ_TAG
) {
470 struct tag
*t
= (struct tag
*) o
;
472 break; /* broken repository */
473 o
->flags
|= COMPLETE
;
474 o
= parse_object(t
->tagged
->sha1
);
476 if (o
&& o
->type
== OBJ_COMMIT
) {
477 struct commit
*commit
= (struct commit
*)o
;
478 if (!(commit
->object
.flags
& COMPLETE
)) {
479 commit
->object
.flags
|= COMPLETE
;
480 commit_list_insert(commit
, &complete
);
486 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
487 unsigned long cutoff
)
489 while (complete
&& cutoff
<= complete
->item
->date
) {
491 fprintf(stderr
, "Marking %s as complete\n",
492 sha1_to_hex(complete
->item
->object
.sha1
));
493 pop_most_recent_commit(&complete
, COMPLETE
);
497 static void filter_refs(struct fetch_pack_args
*args
,
499 struct ref
**sought
, int nr_sought
)
501 struct ref
*newlist
= NULL
;
502 struct ref
**newtail
= &newlist
;
503 struct ref
*ref
, *next
;
507 for (ref
= *refs
; ref
; ref
= next
) {
511 if (!memcmp(ref
->name
, "refs/", 5) &&
512 check_refname_format(ref
->name
, 0))
515 while (i
< nr_sought
) {
516 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
518 break; /* definitely do not have it */
520 keep
= 1; /* definitely have it */
521 sought
[i
]->matched
= 1;
527 if (!keep
&& args
->fetch_all
&&
528 (!args
->depth
|| !starts_with(ref
->name
, "refs/tags/")))
534 newtail
= &ref
->next
;
540 /* Append unmatched requests to the list */
541 if (allow_tip_sha1_in_want
) {
542 for (i
= 0; i
< nr_sought
; i
++) {
546 if (get_sha1_hex(ref
->name
, ref
->old_sha1
))
552 newtail
= &ref
->next
;
558 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
560 mark_complete(NULL
, ref
->old_sha1
, 0, NULL
);
563 static int everything_local(struct fetch_pack_args
*args
,
565 struct ref
**sought
, int nr_sought
)
569 unsigned long cutoff
= 0;
571 save_commit_buffer
= 0;
573 for (ref
= *refs
; ref
; ref
= ref
->next
) {
576 if (!has_sha1_file(ref
->old_sha1
))
579 o
= parse_object(ref
->old_sha1
);
583 /* We already have it -- which may mean that we were
584 * in sync with the other side at some time after
585 * that (it is OK if we guess wrong here).
587 if (o
->type
== OBJ_COMMIT
) {
588 struct commit
*commit
= (struct commit
*)o
;
589 if (!cutoff
|| cutoff
< commit
->date
)
590 cutoff
= commit
->date
;
595 for_each_ref(mark_complete
, NULL
);
596 for_each_alternate_ref(mark_alternate_complete
, NULL
);
597 commit_list_sort_by_date(&complete
);
599 mark_recent_complete_commits(args
, cutoff
);
603 * Mark all complete remote refs as common refs.
604 * Don't mark them common yet; the server has to be told so first.
606 for (ref
= *refs
; ref
; ref
= ref
->next
) {
607 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
610 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
613 if (!(o
->flags
& SEEN
)) {
614 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
616 mark_common((struct commit
*)o
, 1, 1);
620 filter_refs(args
, refs
, sought
, nr_sought
);
622 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
623 const unsigned char *remote
= ref
->old_sha1
;
624 unsigned char local
[20];
627 o
= lookup_object(remote
);
628 if (!o
|| !(o
->flags
& COMPLETE
)) {
633 "want %s (%s)\n", sha1_to_hex(remote
),
638 hashcpy(ref
->new_sha1
, local
);
642 "already have %s (%s)\n", sha1_to_hex(remote
),
648 static int sideband_demux(int in
, int out
, void *data
)
652 int ret
= recv_sideband("fetch-pack", xd
[0], out
);
657 static int get_pack(struct fetch_pack_args
*args
,
658 int xd
[2], char **pack_lockfile
)
661 const char *argv
[22];
664 const char **av
, *cmd_name
;
665 int do_keep
= args
->keep_pack
;
666 struct child_process cmd
;
669 memset(&demux
, 0, sizeof(demux
));
671 /* xd[] is talking with upload-pack; subprocess reads from
672 * xd[0], spits out band#2 to stderr, and feeds us band#1
673 * through demux->out.
675 demux
.proc
= sideband_demux
;
678 if (start_async(&demux
))
679 die("fetch-pack: unable to fork off sideband"
685 memset(&cmd
, 0, sizeof(cmd
));
689 if (!args
->keep_pack
&& unpack_limit
) {
690 struct pack_header header
;
692 if (read_pack_header(demux
.out
, &header
))
693 die("protocol error: bad pack header");
694 snprintf(hdr_arg
, sizeof(hdr_arg
),
695 "--pack_header=%"PRIu32
",%"PRIu32
,
696 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
697 if (ntohl(header
.hdr_entries
) < unpack_limit
)
703 if (alternate_shallow_file
) {
704 *av
++ = "--shallow-file";
705 *av
++ = alternate_shallow_file
;
711 *av
++ = cmd_name
= "index-pack";
713 if (!args
->quiet
&& !args
->no_progress
)
715 if (args
->use_thin_pack
)
716 *av
++ = "--fix-thin";
717 if (args
->lock_pack
|| unpack_limit
) {
718 int s
= sprintf(keep_arg
,
719 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
720 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
721 strcpy(keep_arg
+ s
, "localhost");
724 if (args
->check_self_contained_and_connected
)
725 *av
++ = "--check-self-contained-and-connected";
728 *av
++ = cmd_name
= "unpack-objects";
729 if (args
->quiet
|| args
->no_progress
)
731 args
->check_self_contained_and_connected
= 0;
735 if (fetch_fsck_objects
>= 0
737 : transfer_fsck_objects
>= 0
738 ? transfer_fsck_objects
745 if (start_command(&cmd
))
746 die("fetch-pack: unable to fork off %s", cmd_name
);
747 if (do_keep
&& pack_lockfile
) {
748 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
753 /* Closed by start_command() */
756 ret
= finish_command(&cmd
);
757 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
758 args
->self_contained_and_connected
=
759 args
->check_self_contained_and_connected
&&
762 die("%s failed", cmd_name
);
763 if (use_sideband
&& finish_async(&demux
))
764 die("error in sideband demultiplexer");
768 static int cmp_ref_by_name(const void *a_
, const void *b_
)
770 const struct ref
*a
= *((const struct ref
**)a_
);
771 const struct ref
*b
= *((const struct ref
**)b_
);
772 return strcmp(a
->name
, b
->name
);
775 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
777 const struct ref
*orig_ref
,
778 struct ref
**sought
, int nr_sought
,
779 struct shallow_info
*si
,
780 char **pack_lockfile
)
782 struct ref
*ref
= copy_ref_list(orig_ref
);
783 unsigned char sha1
[20];
784 const char *agent_feature
;
787 sort_ref_list(&ref
, ref_compare_name
);
788 qsort(sought
, nr_sought
, sizeof(*sought
), cmp_ref_by_name
);
790 if (is_repository_shallow() && !server_supports("shallow"))
791 die("Server does not support shallow clients");
792 if (server_supports("multi_ack_detailed")) {
794 fprintf(stderr
, "Server supports multi_ack_detailed\n");
796 if (server_supports("no-done")) {
798 fprintf(stderr
, "Server supports no-done\n");
799 if (args
->stateless_rpc
)
803 else if (server_supports("multi_ack")) {
805 fprintf(stderr
, "Server supports multi_ack\n");
808 if (server_supports("side-band-64k")) {
810 fprintf(stderr
, "Server supports side-band-64k\n");
813 else if (server_supports("side-band")) {
815 fprintf(stderr
, "Server supports side-band\n");
818 if (server_supports("allow-tip-sha1-in-want")) {
820 fprintf(stderr
, "Server supports allow-tip-sha1-in-want\n");
821 allow_tip_sha1_in_want
= 1;
823 if (!server_supports("thin-pack"))
824 args
->use_thin_pack
= 0;
825 if (!server_supports("no-progress"))
826 args
->no_progress
= 0;
827 if (!server_supports("include-tag"))
828 args
->include_tag
= 0;
829 if (server_supports("ofs-delta")) {
831 fprintf(stderr
, "Server supports ofs-delta\n");
833 prefer_ofs_delta
= 0;
835 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
837 if (args
->verbose
&& agent_len
)
838 fprintf(stderr
, "Server version is %.*s\n",
839 agent_len
, agent_feature
);
842 if (everything_local(args
, &ref
, sought
, nr_sought
)) {
846 if (find_common(args
, fd
, sha1
, ref
) < 0)
847 if (!args
->keep_pack
)
848 /* When cloning, it is not unusual to have
851 warning("no common commits");
853 if (args
->stateless_rpc
)
856 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
858 else if (si
->nr_ours
|| si
->nr_theirs
)
859 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
861 alternate_shallow_file
= NULL
;
862 if (get_pack(args
, fd
, pack_lockfile
))
863 die("git fetch-pack: fetch failed.");
869 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
871 if (strcmp(var
, "fetch.unpacklimit") == 0) {
872 fetch_unpack_limit
= git_config_int(var
, value
);
876 if (strcmp(var
, "transfer.unpacklimit") == 0) {
877 transfer_unpack_limit
= git_config_int(var
, value
);
881 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
882 prefer_ofs_delta
= git_config_bool(var
, value
);
886 if (!strcmp(var
, "fetch.fsckobjects")) {
887 fetch_fsck_objects
= git_config_bool(var
, value
);
891 if (!strcmp(var
, "transfer.fsckobjects")) {
892 transfer_fsck_objects
= git_config_bool(var
, value
);
896 return git_default_config(var
, value
, cb
);
899 static void fetch_pack_setup(void)
901 static int did_setup
;
904 git_config(fetch_pack_config
, NULL
);
905 if (0 <= transfer_unpack_limit
)
906 unpack_limit
= transfer_unpack_limit
;
907 else if (0 <= fetch_unpack_limit
)
908 unpack_limit
= fetch_unpack_limit
;
912 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
914 struct string_list names
= STRING_LIST_INIT_NODUP
;
917 for (src
= dst
= 0; src
< nr
; src
++) {
918 struct string_list_item
*item
;
919 item
= string_list_insert(&names
, ref
[src
]->name
);
921 continue; /* already have it */
922 item
->util
= ref
[src
];
927 for (src
= dst
; src
< nr
; src
++)
929 string_list_clear(&names
, 0);
933 static void update_shallow(struct fetch_pack_args
*args
,
934 struct ref
**sought
, int nr_sought
,
935 struct shallow_info
*si
)
937 struct sha1_array ref
= SHA1_ARRAY_INIT
;
941 if (args
->depth
> 0 && alternate_shallow_file
) {
942 if (*alternate_shallow_file
== '\0') { /* --unshallow */
943 unlink_or_warn(git_path("shallow"));
944 rollback_lock_file(&shallow_lock
);
946 commit_lock_file(&shallow_lock
);
950 if (!si
->shallow
|| !si
->shallow
->nr
)
955 * remote is shallow, but this is a clone, there are
956 * no objects in repo to worry about. Accept any
957 * shallow points that exist in the pack (iow in repo
958 * after get_pack() and reprepare_packed_git())
960 struct sha1_array extra
= SHA1_ARRAY_INIT
;
961 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
962 for (i
= 0; i
< si
->shallow
->nr
; i
++)
963 if (has_sha1_file(sha1
[i
]))
964 sha1_array_append(&extra
, sha1
[i
]);
966 setup_alternate_shallow(&shallow_lock
,
967 &alternate_shallow_file
,
969 commit_lock_file(&shallow_lock
);
971 sha1_array_clear(&extra
);
975 if (!si
->nr_ours
&& !si
->nr_theirs
)
978 remove_nonexistent_theirs_shallow(si
);
979 if (!si
->nr_ours
&& !si
->nr_theirs
)
981 for (i
= 0; i
< nr_sought
; i
++)
982 sha1_array_append(&ref
, sought
[i
]->old_sha1
);
985 if (args
->update_shallow
) {
987 * remote is also shallow, .git/shallow may be updated
988 * so all refs can be accepted. Make sure we only add
989 * shallow roots that are actually reachable from new
992 struct sha1_array extra
= SHA1_ARRAY_INIT
;
993 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
994 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
995 if (!si
->nr_ours
&& !si
->nr_theirs
) {
996 sha1_array_clear(&ref
);
999 for (i
= 0; i
< si
->nr_ours
; i
++)
1000 sha1_array_append(&extra
, sha1
[si
->ours
[i
]]);
1001 for (i
= 0; i
< si
->nr_theirs
; i
++)
1002 sha1_array_append(&extra
, sha1
[si
->theirs
[i
]]);
1003 setup_alternate_shallow(&shallow_lock
,
1004 &alternate_shallow_file
,
1006 commit_lock_file(&shallow_lock
);
1007 sha1_array_clear(&extra
);
1008 sha1_array_clear(&ref
);
1013 * remote is also shallow, check what ref is safe to update
1014 * without updating .git/shallow
1016 status
= xcalloc(nr_sought
, sizeof(*status
));
1017 assign_shallow_commits_to_refs(si
, NULL
, status
);
1018 if (si
->nr_ours
|| si
->nr_theirs
) {
1019 for (i
= 0; i
< nr_sought
; i
++)
1021 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
1024 sha1_array_clear(&ref
);
1027 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1028 int fd
[], struct child_process
*conn
,
1029 const struct ref
*ref
,
1031 struct ref
**sought
, int nr_sought
,
1032 struct sha1_array
*shallow
,
1033 char **pack_lockfile
)
1035 struct ref
*ref_cpy
;
1036 struct shallow_info si
;
1040 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
1043 packet_flush(fd
[1]);
1044 die("no matching remote head");
1046 prepare_shallow_info(&si
, shallow
);
1047 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
1048 &si
, pack_lockfile
);
1049 reprepare_packed_git();
1050 update_shallow(args
, sought
, nr_sought
, &si
);
1051 clear_shallow_info(&si
);