7 #include "run-command.h"
13 #include "transport.h"
14 #include "string-list.h"
15 #include "sha1-array.h"
16 #include "connected.h"
17 #include "argv-array.h"
20 #include "gpg-interface.h"
23 #include "tmp-objdir.h"
25 static const char * const receive_pack_usage
[] = {
26 N_("git receive-pack <git-dir>"),
38 static int deny_deletes
;
39 static int deny_non_fast_forwards
;
40 static enum deny_action deny_current_branch
= DENY_UNCONFIGURED
;
41 static enum deny_action deny_delete_current
= DENY_UNCONFIGURED
;
42 static int receive_fsck_objects
= -1;
43 static int transfer_fsck_objects
= -1;
44 static struct strbuf fsck_msg_types
= STRBUF_INIT
;
45 static int receive_unpack_limit
= -1;
46 static int transfer_unpack_limit
= -1;
47 static int advertise_atomic_push
= 1;
48 static int advertise_push_options
;
49 static int unpack_limit
= 100;
50 static off_t max_input_size
;
51 static int report_status
;
52 static int use_sideband
;
53 static int use_atomic
;
54 static int use_push_options
;
56 static int prefer_ofs_delta
= 1;
57 static int auto_update_server_info
;
58 static int auto_gc
= 1;
59 static int reject_thin
;
60 static int stateless_rpc
;
61 static const char *service_dir
;
62 static const char *head_name
;
63 static void *head_name_to_free
;
64 static int sent_capabilities
;
65 static int shallow_update
;
66 static const char *alt_shallow_file
;
67 static struct strbuf push_cert
= STRBUF_INIT
;
68 static unsigned char push_cert_sha1
[20];
69 static struct signature_check sigcheck
;
70 static const char *push_cert_nonce
;
71 static const char *cert_nonce_seed
;
73 static const char *NONCE_UNSOLICITED
= "UNSOLICITED";
74 static const char *NONCE_BAD
= "BAD";
75 static const char *NONCE_MISSING
= "MISSING";
76 static const char *NONCE_OK
= "OK";
77 static const char *NONCE_SLOP
= "SLOP";
78 static const char *nonce_status
;
79 static long nonce_stamp_slop
;
80 static unsigned long nonce_stamp_slop_limit
;
81 static struct ref_transaction
*transaction
;
88 static int keepalive_in_sec
= 5;
90 static struct tmp_objdir
*tmp_objdir
;
92 static enum deny_action
parse_deny_action(const char *var
, const char *value
)
95 if (!strcasecmp(value
, "ignore"))
97 if (!strcasecmp(value
, "warn"))
99 if (!strcasecmp(value
, "refuse"))
101 if (!strcasecmp(value
, "updateinstead"))
102 return DENY_UPDATE_INSTEAD
;
104 if (git_config_bool(var
, value
))
109 static int receive_pack_config(const char *var
, const char *value
, void *cb
)
111 int status
= parse_hide_refs_config(var
, value
, "receive");
116 if (strcmp(var
, "receive.denydeletes") == 0) {
117 deny_deletes
= git_config_bool(var
, value
);
121 if (strcmp(var
, "receive.denynonfastforwards") == 0) {
122 deny_non_fast_forwards
= git_config_bool(var
, value
);
126 if (strcmp(var
, "receive.unpacklimit") == 0) {
127 receive_unpack_limit
= git_config_int(var
, value
);
131 if (strcmp(var
, "transfer.unpacklimit") == 0) {
132 transfer_unpack_limit
= git_config_int(var
, value
);
136 if (strcmp(var
, "receive.fsck.skiplist") == 0) {
139 if (git_config_pathname(&path
, var
, value
))
141 strbuf_addf(&fsck_msg_types
, "%cskiplist=%s",
142 fsck_msg_types
.len
? ',' : '=', path
);
147 if (skip_prefix(var
, "receive.fsck.", &var
)) {
148 if (is_valid_msg_type(var
, value
))
149 strbuf_addf(&fsck_msg_types
, "%c%s=%s",
150 fsck_msg_types
.len
? ',' : '=', var
, value
);
152 warning("Skipping unknown msg id '%s'", var
);
156 if (strcmp(var
, "receive.fsckobjects") == 0) {
157 receive_fsck_objects
= git_config_bool(var
, value
);
161 if (strcmp(var
, "transfer.fsckobjects") == 0) {
162 transfer_fsck_objects
= git_config_bool(var
, value
);
166 if (!strcmp(var
, "receive.denycurrentbranch")) {
167 deny_current_branch
= parse_deny_action(var
, value
);
171 if (strcmp(var
, "receive.denydeletecurrent") == 0) {
172 deny_delete_current
= parse_deny_action(var
, value
);
176 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
177 prefer_ofs_delta
= git_config_bool(var
, value
);
181 if (strcmp(var
, "receive.updateserverinfo") == 0) {
182 auto_update_server_info
= git_config_bool(var
, value
);
186 if (strcmp(var
, "receive.autogc") == 0) {
187 auto_gc
= git_config_bool(var
, value
);
191 if (strcmp(var
, "receive.shallowupdate") == 0) {
192 shallow_update
= git_config_bool(var
, value
);
196 if (strcmp(var
, "receive.certnonceseed") == 0)
197 return git_config_string(&cert_nonce_seed
, var
, value
);
199 if (strcmp(var
, "receive.certnonceslop") == 0) {
200 nonce_stamp_slop_limit
= git_config_ulong(var
, value
);
204 if (strcmp(var
, "receive.advertiseatomic") == 0) {
205 advertise_atomic_push
= git_config_bool(var
, value
);
209 if (strcmp(var
, "receive.advertisepushoptions") == 0) {
210 advertise_push_options
= git_config_bool(var
, value
);
214 if (strcmp(var
, "receive.keepalive") == 0) {
215 keepalive_in_sec
= git_config_int(var
, value
);
219 if (strcmp(var
, "receive.maxinputsize") == 0) {
220 max_input_size
= git_config_int64(var
, value
);
224 return git_default_config(var
, value
, cb
);
227 static void show_ref(const char *path
, const unsigned char *sha1
)
229 if (sent_capabilities
) {
230 packet_write(1, "%s %s\n", sha1_to_hex(sha1
), path
);
232 struct strbuf cap
= STRBUF_INIT
;
235 "report-status delete-refs side-band-64k quiet");
236 if (advertise_atomic_push
)
237 strbuf_addstr(&cap
, " atomic");
238 if (prefer_ofs_delta
)
239 strbuf_addstr(&cap
, " ofs-delta");
241 strbuf_addf(&cap
, " push-cert=%s", push_cert_nonce
);
242 if (advertise_push_options
)
243 strbuf_addstr(&cap
, " push-options");
244 strbuf_addf(&cap
, " agent=%s", git_user_agent_sanitized());
245 packet_write(1, "%s %s%c%s\n",
246 sha1_to_hex(sha1
), path
, 0, cap
.buf
);
247 strbuf_release(&cap
);
248 sent_capabilities
= 1;
252 static int show_ref_cb(const char *path_full
, const struct object_id
*oid
,
253 int flag
, void *unused
)
255 const char *path
= strip_namespace(path_full
);
257 if (ref_is_hidden(path
, path_full
))
261 * Advertise refs outside our current namespace as ".have"
262 * refs, so that the client can use them to minimize data
263 * transfer but will otherwise ignore them. This happens to
264 * cover ".have" that are thrown in by add_one_alternate_ref()
265 * to mark histories that are complete in our alternates as
270 show_ref(path
, oid
->hash
);
274 static void show_one_alternate_sha1(const unsigned char sha1
[20], void *unused
)
276 show_ref(".have", sha1
);
279 static void collect_one_alternate_ref(const struct ref
*ref
, void *data
)
281 struct sha1_array
*sa
= data
;
282 sha1_array_append(sa
, ref
->old_oid
.hash
);
285 static void write_head_info(void)
287 struct sha1_array sa
= SHA1_ARRAY_INIT
;
289 for_each_alternate_ref(collect_one_alternate_ref
, &sa
);
290 sha1_array_for_each_unique(&sa
, show_one_alternate_sha1
, NULL
);
291 sha1_array_clear(&sa
);
292 for_each_ref(show_ref_cb
, NULL
);
293 if (!sent_capabilities
)
294 show_ref("capabilities^{}", null_sha1
);
296 advertise_shallow_grafts(1);
303 struct command
*next
;
304 const char *error_string
;
305 unsigned int skip_update
:1,
308 unsigned char old_sha1
[20];
309 unsigned char new_sha1
[20];
310 char ref_name
[FLEX_ARRAY
]; /* more */
313 static void rp_error(const char *err
, ...) __attribute__((format (printf
, 1, 2)));
314 static void rp_warning(const char *err
, ...) __attribute__((format (printf
, 1, 2)));
316 static void report_message(const char *prefix
, const char *err
, va_list params
)
321 sz
= xsnprintf(msg
, sizeof(msg
), "%s", prefix
);
322 sz
+= vsnprintf(msg
+ sz
, sizeof(msg
) - sz
, err
, params
);
323 if (sz
> (sizeof(msg
) - 1))
324 sz
= sizeof(msg
) - 1;
328 send_sideband(1, 2, msg
, sz
, use_sideband
);
333 static void rp_warning(const char *err
, ...)
336 va_start(params
, err
);
337 report_message("warning: ", err
, params
);
341 static void rp_error(const char *err
, ...)
344 va_start(params
, err
);
345 report_message("error: ", err
, params
);
349 static int copy_to_sideband(int in
, int out
, void *arg
)
352 int keepalive_active
= 0;
354 if (keepalive_in_sec
<= 0)
355 use_keepalive
= KEEPALIVE_NEVER
;
356 if (use_keepalive
== KEEPALIVE_ALWAYS
)
357 keepalive_active
= 1;
362 if (keepalive_active
) {
368 ret
= poll(&pfd
, 1, 1000 * keepalive_in_sec
);
375 } else if (ret
== 0) {
376 /* no data; send a keepalive packet */
377 static const char buf
[] = "0005\1";
378 write_or_die(1, buf
, sizeof(buf
) - 1);
380 } /* else there is actual data to read */
383 sz
= xread(in
, data
, sizeof(data
));
387 if (use_keepalive
== KEEPALIVE_AFTER_NUL
&& !keepalive_active
) {
388 const char *p
= memchr(data
, '\0', sz
);
391 * The NUL tells us to start sending keepalives. Make
392 * sure we send any other data we read along
395 keepalive_active
= 1;
396 send_sideband(1, 2, data
, p
- data
, use_sideband
);
397 send_sideband(1, 2, p
+ 1, sz
- (p
- data
+ 1), use_sideband
);
403 * Either we're not looking for a NUL signal, or we didn't see
404 * it yet; just pass along the data.
406 send_sideband(1, 2, data
, sz
, use_sideband
);
412 #define HMAC_BLOCK_SIZE 64
414 static void hmac_sha1(unsigned char *out
,
415 const char *key_in
, size_t key_len
,
416 const char *text
, size_t text_len
)
418 unsigned char key
[HMAC_BLOCK_SIZE
];
419 unsigned char k_ipad
[HMAC_BLOCK_SIZE
];
420 unsigned char k_opad
[HMAC_BLOCK_SIZE
];
424 /* RFC 2104 2. (1) */
425 memset(key
, '\0', HMAC_BLOCK_SIZE
);
426 if (HMAC_BLOCK_SIZE
< key_len
) {
428 git_SHA1_Update(&ctx
, key_in
, key_len
);
429 git_SHA1_Final(key
, &ctx
);
431 memcpy(key
, key_in
, key_len
);
434 /* RFC 2104 2. (2) & (5) */
435 for (i
= 0; i
< sizeof(key
); i
++) {
436 k_ipad
[i
] = key
[i
] ^ 0x36;
437 k_opad
[i
] = key
[i
] ^ 0x5c;
440 /* RFC 2104 2. (3) & (4) */
442 git_SHA1_Update(&ctx
, k_ipad
, sizeof(k_ipad
));
443 git_SHA1_Update(&ctx
, text
, text_len
);
444 git_SHA1_Final(out
, &ctx
);
446 /* RFC 2104 2. (6) & (7) */
448 git_SHA1_Update(&ctx
, k_opad
, sizeof(k_opad
));
449 git_SHA1_Update(&ctx
, out
, 20);
450 git_SHA1_Final(out
, &ctx
);
453 static char *prepare_push_cert_nonce(const char *path
, unsigned long stamp
)
455 struct strbuf buf
= STRBUF_INIT
;
456 unsigned char sha1
[20];
458 strbuf_addf(&buf
, "%s:%lu", path
, stamp
);
459 hmac_sha1(sha1
, buf
.buf
, buf
.len
, cert_nonce_seed
, strlen(cert_nonce_seed
));;
460 strbuf_release(&buf
);
462 /* RFC 2104 5. HMAC-SHA1-80 */
463 strbuf_addf(&buf
, "%lu-%.*s", stamp
, 20, sha1_to_hex(sha1
));
464 return strbuf_detach(&buf
, NULL
);
468 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
469 * after dropping "_commit" from its name and possibly moving it out
472 static char *find_header(const char *msg
, size_t len
, const char *key
)
474 int key_len
= strlen(key
);
475 const char *line
= msg
;
477 while (line
&& line
< msg
+ len
) {
478 const char *eol
= strchrnul(line
, '\n');
480 if ((msg
+ len
<= eol
) || line
== eol
)
482 if (line
+ key_len
< eol
&&
483 !memcmp(line
, key
, key_len
) && line
[key_len
] == ' ') {
484 int offset
= key_len
+ 1;
485 return xmemdupz(line
+ offset
, (eol
- line
) - offset
);
487 line
= *eol
? eol
+ 1 : NULL
;
492 static const char *check_nonce(const char *buf
, size_t len
)
494 char *nonce
= find_header(buf
, len
, "nonce");
495 unsigned long stamp
, ostamp
;
496 char *bohmac
, *expect
= NULL
;
497 const char *retval
= NONCE_BAD
;
500 retval
= NONCE_MISSING
;
502 } else if (!push_cert_nonce
) {
503 retval
= NONCE_UNSOLICITED
;
505 } else if (!strcmp(push_cert_nonce
, nonce
)) {
510 if (!stateless_rpc
) {
511 /* returned nonce MUST match what we gave out earlier */
517 * In stateless mode, we may be receiving a nonce issued by
518 * another instance of the server that serving the same
519 * repository, and the timestamps may not match, but the
520 * nonce-seed and dir should match, so we can recompute and
521 * report the time slop.
523 * In addition, when a nonce issued by another instance has
524 * timestamp within receive.certnonceslop seconds, we pretend
525 * as if we issued that nonce when reporting to the hook.
528 /* nonce is concat(<seconds-since-epoch>, "-", <hmac>) */
529 if (*nonce
<= '0' || '9' < *nonce
) {
533 stamp
= strtoul(nonce
, &bohmac
, 10);
534 if (bohmac
== nonce
|| bohmac
[0] != '-') {
539 expect
= prepare_push_cert_nonce(service_dir
, stamp
);
540 if (strcmp(expect
, nonce
)) {
541 /* Not what we would have signed earlier */
547 * By how many seconds is this nonce stale? Negative value
548 * would mean it was issued by another server with its clock
549 * skewed in the future.
551 ostamp
= strtoul(push_cert_nonce
, NULL
, 10);
552 nonce_stamp_slop
= (long)ostamp
- (long)stamp
;
554 if (nonce_stamp_slop_limit
&&
555 labs(nonce_stamp_slop
) <= nonce_stamp_slop_limit
) {
557 * Pretend as if the received nonce (which passes the
558 * HMAC check, so it is not a forged by third-party)
561 free((void *)push_cert_nonce
);
562 push_cert_nonce
= xstrdup(nonce
);
574 static void prepare_push_cert_sha1(struct child_process
*proc
)
576 static int already_done
;
582 struct strbuf gpg_output
= STRBUF_INIT
;
583 struct strbuf gpg_status
= STRBUF_INIT
;
584 int bogs
/* beginning_of_gpg_sig */;
587 if (write_sha1_file(push_cert
.buf
, push_cert
.len
, "blob", push_cert_sha1
))
588 hashclr(push_cert_sha1
);
590 memset(&sigcheck
, '\0', sizeof(sigcheck
));
591 sigcheck
.result
= 'N';
593 bogs
= parse_signature(push_cert
.buf
, push_cert
.len
);
594 if (verify_signed_buffer(push_cert
.buf
, bogs
,
595 push_cert
.buf
+ bogs
, push_cert
.len
- bogs
,
596 &gpg_output
, &gpg_status
) < 0) {
597 ; /* error running gpg */
599 sigcheck
.payload
= push_cert
.buf
;
600 sigcheck
.gpg_output
= gpg_output
.buf
;
601 sigcheck
.gpg_status
= gpg_status
.buf
;
602 parse_gpg_output(&sigcheck
);
605 strbuf_release(&gpg_output
);
606 strbuf_release(&gpg_status
);
607 nonce_status
= check_nonce(push_cert
.buf
, bogs
);
609 if (!is_null_sha1(push_cert_sha1
)) {
610 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT=%s",
611 sha1_to_hex(push_cert_sha1
));
612 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT_SIGNER=%s",
613 sigcheck
.signer
? sigcheck
.signer
: "");
614 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT_KEY=%s",
615 sigcheck
.key
? sigcheck
.key
: "");
616 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT_STATUS=%c",
618 if (push_cert_nonce
) {
619 argv_array_pushf(&proc
->env_array
,
620 "GIT_PUSH_CERT_NONCE=%s",
622 argv_array_pushf(&proc
->env_array
,
623 "GIT_PUSH_CERT_NONCE_STATUS=%s",
625 if (nonce_status
== NONCE_SLOP
)
626 argv_array_pushf(&proc
->env_array
,
627 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
633 struct receive_hook_feed_state
{
637 const struct string_list
*push_options
;
640 typedef int (*feed_fn
)(void *, const char **, size_t *);
641 static int run_and_feed_hook(const char *hook_name
, feed_fn feed
,
642 struct receive_hook_feed_state
*feed_state
)
644 struct child_process proc
= CHILD_PROCESS_INIT
;
649 argv
[0] = find_hook(hook_name
);
657 proc
.stdout_to_stderr
= 1;
658 if (feed_state
->push_options
) {
660 for (i
= 0; i
< feed_state
->push_options
->nr
; i
++)
661 argv_array_pushf(&proc
.env_array
,
662 "GIT_PUSH_OPTION_%d=%s", i
,
663 feed_state
->push_options
->items
[i
].string
);
664 argv_array_pushf(&proc
.env_array
, "GIT_PUSH_OPTION_COUNT=%d",
665 feed_state
->push_options
->nr
);
667 argv_array_pushf(&proc
.env_array
, "GIT_PUSH_OPTION_COUNT");
670 argv_array_pushv(&proc
.env_array
, tmp_objdir_env(tmp_objdir
));
673 memset(&muxer
, 0, sizeof(muxer
));
674 muxer
.proc
= copy_to_sideband
;
676 code
= start_async(&muxer
);
682 prepare_push_cert_sha1(&proc
);
684 code
= start_command(&proc
);
687 finish_async(&muxer
);
691 sigchain_push(SIGPIPE
, SIG_IGN
);
696 if (feed(feed_state
, &buf
, &n
))
698 if (write_in_full(proc
.in
, buf
, n
) != n
)
703 finish_async(&muxer
);
705 sigchain_pop(SIGPIPE
);
707 return finish_command(&proc
);
710 static int feed_receive_hook(void *state_
, const char **bufp
, size_t *sizep
)
712 struct receive_hook_feed_state
*state
= state_
;
713 struct command
*cmd
= state
->cmd
;
716 state
->skip_broken
&& (cmd
->error_string
|| cmd
->did_not_exist
))
720 strbuf_reset(&state
->buf
);
721 strbuf_addf(&state
->buf
, "%s %s %s\n",
722 sha1_to_hex(cmd
->old_sha1
), sha1_to_hex(cmd
->new_sha1
),
724 state
->cmd
= cmd
->next
;
726 *bufp
= state
->buf
.buf
;
727 *sizep
= state
->buf
.len
;
732 static int run_receive_hook(struct command
*commands
,
733 const char *hook_name
,
735 const struct string_list
*push_options
)
737 struct receive_hook_feed_state state
;
740 strbuf_init(&state
.buf
, 0);
741 state
.cmd
= commands
;
742 state
.skip_broken
= skip_broken
;
743 if (feed_receive_hook(&state
, NULL
, NULL
))
745 state
.cmd
= commands
;
746 state
.push_options
= push_options
;
747 status
= run_and_feed_hook(hook_name
, feed_receive_hook
, &state
);
748 strbuf_release(&state
.buf
);
752 static int run_update_hook(struct command
*cmd
)
755 struct child_process proc
= CHILD_PROCESS_INIT
;
758 argv
[0] = find_hook("update");
762 argv
[1] = cmd
->ref_name
;
763 argv
[2] = sha1_to_hex(cmd
->old_sha1
);
764 argv
[3] = sha1_to_hex(cmd
->new_sha1
);
768 proc
.stdout_to_stderr
= 1;
769 proc
.err
= use_sideband
? -1 : 0;
771 proc
.env
= tmp_objdir_env(tmp_objdir
);
773 code
= start_command(&proc
);
777 copy_to_sideband(proc
.err
, -1, NULL
);
778 return finish_command(&proc
);
781 static int is_ref_checked_out(const char *ref
)
783 if (is_bare_repository())
788 return !strcmp(head_name
, ref
);
791 static char *refuse_unconfigured_deny_msg
=
792 N_("By default, updating the current branch in a non-bare repository\n"
793 "is denied, because it will make the index and work tree inconsistent\n"
794 "with what you pushed, and will require 'git reset --hard' to match\n"
795 "the work tree to HEAD.\n"
797 "You can set 'receive.denyCurrentBranch' configuration variable to\n"
798 "'ignore' or 'warn' in the remote repository to allow pushing into\n"
799 "its current branch; however, this is not recommended unless you\n"
800 "arranged to update its work tree to match what you pushed in some\n"
803 "To squelch this message and still keep the default behaviour, set\n"
804 "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
806 static void refuse_unconfigured_deny(void)
808 rp_error("%s", _(refuse_unconfigured_deny_msg
));
811 static char *refuse_unconfigured_deny_delete_current_msg
=
812 N_("By default, deleting the current branch is denied, because the next\n"
813 "'git clone' won't result in any file checked out, causing confusion.\n"
815 "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
816 "'warn' or 'ignore' in the remote repository to allow deleting the\n"
817 "current branch, with or without a warning message.\n"
819 "To squelch this message, you can set it to 'refuse'.");
821 static void refuse_unconfigured_deny_delete_current(void)
823 rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg
));
826 static int command_singleton_iterator(void *cb_data
, unsigned char sha1
[20]);
827 static int update_shallow_ref(struct command
*cmd
, struct shallow_info
*si
)
829 static struct lock_file shallow_lock
;
830 struct sha1_array extra
= SHA1_ARRAY_INIT
;
831 struct check_connected_options opt
= CHECK_CONNECTED_INIT
;
832 uint32_t mask
= 1 << (cmd
->index
% 32);
835 trace_printf_key(&trace_shallow
,
836 "shallow: update_shallow_ref %s\n", cmd
->ref_name
);
837 for (i
= 0; i
< si
->shallow
->nr
; i
++)
838 if (si
->used_shallow
[i
] &&
839 (si
->used_shallow
[i
][cmd
->index
/ 32] & mask
) &&
840 !delayed_reachability_test(si
, i
))
841 sha1_array_append(&extra
, si
->shallow
->sha1
[i
]);
843 opt
.env
= tmp_objdir_env(tmp_objdir
);
844 setup_alternate_shallow(&shallow_lock
, &opt
.shallow_file
, &extra
);
845 if (check_connected(command_singleton_iterator
, cmd
, &opt
)) {
846 rollback_lock_file(&shallow_lock
);
847 sha1_array_clear(&extra
);
851 commit_lock_file(&shallow_lock
);
854 * Make sure setup_alternate_shallow() for the next ref does
855 * not lose these new roots..
857 for (i
= 0; i
< extra
.nr
; i
++)
858 register_shallow(extra
.sha1
[i
]);
860 si
->shallow_ref
[cmd
->index
] = 0;
861 sha1_array_clear(&extra
);
866 * NEEDSWORK: we should consolidate various implementions of "are we
867 * on an unborn branch?" test into one, and make the unified one more
868 * robust. !get_sha1() based check used here and elsewhere would not
869 * allow us to tell an unborn branch from corrupt ref, for example.
870 * For the purpose of fixing "deploy-to-update does not work when
871 * pushing into an empty repository" issue, this should suffice for
874 static int head_has_history(void)
876 unsigned char sha1
[20];
878 return !get_sha1("HEAD", sha1
);
881 static const char *push_to_deploy(unsigned char *sha1
,
882 struct argv_array
*env
,
883 const char *work_tree
)
885 const char *update_refresh
[] = {
886 "update-index", "-q", "--ignore-submodules", "--refresh", NULL
888 const char *diff_files
[] = {
889 "diff-files", "--quiet", "--ignore-submodules", "--", NULL
891 const char *diff_index
[] = {
892 "diff-index", "--quiet", "--cached", "--ignore-submodules",
895 const char *read_tree
[] = {
896 "read-tree", "-u", "-m", NULL
, NULL
898 struct child_process child
= CHILD_PROCESS_INIT
;
900 child
.argv
= update_refresh
;
901 child
.env
= env
->argv
;
902 child
.dir
= work_tree
;
904 child
.stdout_to_stderr
= 1;
906 if (run_command(&child
))
907 return "Up-to-date check failed";
909 /* run_command() does not clean up completely; reinitialize */
910 child_process_init(&child
);
911 child
.argv
= diff_files
;
912 child
.env
= env
->argv
;
913 child
.dir
= work_tree
;
915 child
.stdout_to_stderr
= 1;
917 if (run_command(&child
))
918 return "Working directory has unstaged changes";
920 /* diff-index with either HEAD or an empty tree */
921 diff_index
[4] = head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX
;
923 child_process_init(&child
);
924 child
.argv
= diff_index
;
925 child
.env
= env
->argv
;
928 child
.stdout_to_stderr
= 0;
930 if (run_command(&child
))
931 return "Working directory has staged changes";
933 read_tree
[3] = sha1_to_hex(sha1
);
934 child_process_init(&child
);
935 child
.argv
= read_tree
;
936 child
.env
= env
->argv
;
937 child
.dir
= work_tree
;
940 child
.stdout_to_stderr
= 0;
942 if (run_command(&child
))
943 return "Could not update working tree to new HEAD";
948 static const char *push_to_checkout_hook
= "push-to-checkout";
950 static const char *push_to_checkout(unsigned char *sha1
,
951 struct argv_array
*env
,
952 const char *work_tree
)
954 argv_array_pushf(env
, "GIT_WORK_TREE=%s", absolute_path(work_tree
));
955 if (run_hook_le(env
->argv
, push_to_checkout_hook
,
956 sha1_to_hex(sha1
), NULL
))
957 return "push-to-checkout hook declined";
962 static const char *update_worktree(unsigned char *sha1
)
965 const char *work_tree
= git_work_tree_cfg
? git_work_tree_cfg
: "..";
966 struct argv_array env
= ARGV_ARRAY_INIT
;
968 if (is_bare_repository())
969 return "denyCurrentBranch = updateInstead needs a worktree";
971 argv_array_pushf(&env
, "GIT_DIR=%s", absolute_path(get_git_dir()));
973 if (!find_hook(push_to_checkout_hook
))
974 retval
= push_to_deploy(sha1
, &env
, work_tree
);
976 retval
= push_to_checkout(sha1
, &env
, work_tree
);
978 argv_array_clear(&env
);
982 static const char *update(struct command
*cmd
, struct shallow_info
*si
)
984 const char *name
= cmd
->ref_name
;
985 struct strbuf namespaced_name_buf
= STRBUF_INIT
;
986 const char *namespaced_name
, *ret
;
987 unsigned char *old_sha1
= cmd
->old_sha1
;
988 unsigned char *new_sha1
= cmd
->new_sha1
;
990 /* only refs/... are allowed */
991 if (!starts_with(name
, "refs/") || check_refname_format(name
+ 5, 0)) {
992 rp_error("refusing to create funny ref '%s' remotely", name
);
993 return "funny refname";
996 strbuf_addf(&namespaced_name_buf
, "%s%s", get_git_namespace(), name
);
997 namespaced_name
= strbuf_detach(&namespaced_name_buf
, NULL
);
999 if (is_ref_checked_out(namespaced_name
)) {
1000 switch (deny_current_branch
) {
1004 rp_warning("updating the current branch");
1007 case DENY_UNCONFIGURED
:
1008 rp_error("refusing to update checked out branch: %s", name
);
1009 if (deny_current_branch
== DENY_UNCONFIGURED
)
1010 refuse_unconfigured_deny();
1011 return "branch is currently checked out";
1012 case DENY_UPDATE_INSTEAD
:
1013 ret
= update_worktree(new_sha1
);
1020 if (!is_null_sha1(new_sha1
) && !has_sha1_file(new_sha1
)) {
1021 error("unpack should have generated %s, "
1022 "but I can't find it!", sha1_to_hex(new_sha1
));
1026 if (!is_null_sha1(old_sha1
) && is_null_sha1(new_sha1
)) {
1027 if (deny_deletes
&& starts_with(name
, "refs/heads/")) {
1028 rp_error("denying ref deletion for %s", name
);
1029 return "deletion prohibited";
1032 if (head_name
&& !strcmp(namespaced_name
, head_name
)) {
1033 switch (deny_delete_current
) {
1037 rp_warning("deleting the current branch");
1040 case DENY_UNCONFIGURED
:
1041 case DENY_UPDATE_INSTEAD
:
1042 if (deny_delete_current
== DENY_UNCONFIGURED
)
1043 refuse_unconfigured_deny_delete_current();
1044 rp_error("refusing to delete the current branch: %s", name
);
1045 return "deletion of the current branch prohibited";
1047 return "Invalid denyDeleteCurrent setting";
1052 if (deny_non_fast_forwards
&& !is_null_sha1(new_sha1
) &&
1053 !is_null_sha1(old_sha1
) &&
1054 starts_with(name
, "refs/heads/")) {
1055 struct object
*old_object
, *new_object
;
1056 struct commit
*old_commit
, *new_commit
;
1058 old_object
= parse_object(old_sha1
);
1059 new_object
= parse_object(new_sha1
);
1061 if (!old_object
|| !new_object
||
1062 old_object
->type
!= OBJ_COMMIT
||
1063 new_object
->type
!= OBJ_COMMIT
) {
1064 error("bad sha1 objects for %s", name
);
1067 old_commit
= (struct commit
*)old_object
;
1068 new_commit
= (struct commit
*)new_object
;
1069 if (!in_merge_bases(old_commit
, new_commit
)) {
1070 rp_error("denying non-fast-forward %s"
1071 " (you should pull first)", name
);
1072 return "non-fast-forward";
1075 if (run_update_hook(cmd
)) {
1076 rp_error("hook declined to update %s", name
);
1077 return "hook declined";
1080 if (is_null_sha1(new_sha1
)) {
1081 struct strbuf err
= STRBUF_INIT
;
1082 if (!parse_object(old_sha1
)) {
1084 if (ref_exists(name
)) {
1085 rp_warning("Allowing deletion of corrupt ref.");
1087 rp_warning("Deleting a non-existent ref.");
1088 cmd
->did_not_exist
= 1;
1091 if (ref_transaction_delete(transaction
,
1095 rp_error("%s", err
.buf
);
1096 strbuf_release(&err
);
1097 return "failed to delete";
1099 strbuf_release(&err
);
1100 return NULL
; /* good */
1103 struct strbuf err
= STRBUF_INIT
;
1104 if (shallow_update
&& si
->shallow_ref
[cmd
->index
] &&
1105 update_shallow_ref(cmd
, si
))
1106 return "shallow error";
1108 if (ref_transaction_update(transaction
,
1113 rp_error("%s", err
.buf
);
1114 strbuf_release(&err
);
1116 return "failed to update ref";
1118 strbuf_release(&err
);
1120 return NULL
; /* good */
1124 static void run_update_post_hook(struct command
*commands
)
1126 struct command
*cmd
;
1128 struct child_process proc
= CHILD_PROCESS_INIT
;
1131 hook
= find_hook("post-update");
1132 for (argc
= 0, cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1133 if (cmd
->error_string
|| cmd
->did_not_exist
)
1140 argv_array_push(&proc
.args
, hook
);
1141 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1142 if (cmd
->error_string
|| cmd
->did_not_exist
)
1144 argv_array_push(&proc
.args
, cmd
->ref_name
);
1148 proc
.stdout_to_stderr
= 1;
1149 proc
.err
= use_sideband
? -1 : 0;
1151 if (!start_command(&proc
)) {
1153 copy_to_sideband(proc
.err
, -1, NULL
);
1154 finish_command(&proc
);
1158 static void check_aliased_update(struct command
*cmd
, struct string_list
*list
)
1160 struct strbuf buf
= STRBUF_INIT
;
1161 const char *dst_name
;
1162 struct string_list_item
*item
;
1163 struct command
*dst_cmd
;
1164 unsigned char sha1
[GIT_SHA1_RAWSZ
];
1165 char cmd_oldh
[GIT_SHA1_HEXSZ
+ 1],
1166 cmd_newh
[GIT_SHA1_HEXSZ
+ 1],
1167 dst_oldh
[GIT_SHA1_HEXSZ
+ 1],
1168 dst_newh
[GIT_SHA1_HEXSZ
+ 1];
1171 strbuf_addf(&buf
, "%s%s", get_git_namespace(), cmd
->ref_name
);
1172 dst_name
= resolve_ref_unsafe(buf
.buf
, 0, sha1
, &flag
);
1173 strbuf_release(&buf
);
1175 if (!(flag
& REF_ISSYMREF
))
1179 rp_error("refusing update to broken symref '%s'", cmd
->ref_name
);
1180 cmd
->skip_update
= 1;
1181 cmd
->error_string
= "broken symref";
1184 dst_name
= strip_namespace(dst_name
);
1186 if ((item
= string_list_lookup(list
, dst_name
)) == NULL
)
1189 cmd
->skip_update
= 1;
1191 dst_cmd
= (struct command
*) item
->util
;
1193 if (!hashcmp(cmd
->old_sha1
, dst_cmd
->old_sha1
) &&
1194 !hashcmp(cmd
->new_sha1
, dst_cmd
->new_sha1
))
1197 dst_cmd
->skip_update
= 1;
1199 find_unique_abbrev_r(cmd_oldh
, cmd
->old_sha1
, DEFAULT_ABBREV
);
1200 find_unique_abbrev_r(cmd_newh
, cmd
->new_sha1
, DEFAULT_ABBREV
);
1201 find_unique_abbrev_r(dst_oldh
, dst_cmd
->old_sha1
, DEFAULT_ABBREV
);
1202 find_unique_abbrev_r(dst_newh
, dst_cmd
->new_sha1
, DEFAULT_ABBREV
);
1203 rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
1204 " its target '%s' (%s..%s)",
1205 cmd
->ref_name
, cmd_oldh
, cmd_newh
,
1206 dst_cmd
->ref_name
, dst_oldh
, dst_newh
);
1208 cmd
->error_string
= dst_cmd
->error_string
=
1209 "inconsistent aliased update";
1212 static void check_aliased_updates(struct command
*commands
)
1214 struct command
*cmd
;
1215 struct string_list ref_list
= STRING_LIST_INIT_NODUP
;
1217 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1218 struct string_list_item
*item
=
1219 string_list_append(&ref_list
, cmd
->ref_name
);
1220 item
->util
= (void *)cmd
;
1222 string_list_sort(&ref_list
);
1224 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1225 if (!cmd
->error_string
)
1226 check_aliased_update(cmd
, &ref_list
);
1229 string_list_clear(&ref_list
, 0);
1232 static int command_singleton_iterator(void *cb_data
, unsigned char sha1
[20])
1234 struct command
**cmd_list
= cb_data
;
1235 struct command
*cmd
= *cmd_list
;
1237 if (!cmd
|| is_null_sha1(cmd
->new_sha1
))
1238 return -1; /* end of list */
1239 *cmd_list
= NULL
; /* this returns only one */
1240 hashcpy(sha1
, cmd
->new_sha1
);
1244 static void set_connectivity_errors(struct command
*commands
,
1245 struct shallow_info
*si
)
1247 struct command
*cmd
;
1249 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1250 struct command
*singleton
= cmd
;
1251 struct check_connected_options opt
= CHECK_CONNECTED_INIT
;
1253 if (shallow_update
&& si
->shallow_ref
[cmd
->index
])
1254 /* to be checked in update_shallow_ref() */
1257 opt
.env
= tmp_objdir_env(tmp_objdir
);
1258 if (!check_connected(command_singleton_iterator
, &singleton
,
1262 cmd
->error_string
= "missing necessary objects";
1266 struct iterate_data
{
1267 struct command
*cmds
;
1268 struct shallow_info
*si
;
1271 static int iterate_receive_command_list(void *cb_data
, unsigned char sha1
[20])
1273 struct iterate_data
*data
= cb_data
;
1274 struct command
**cmd_list
= &data
->cmds
;
1275 struct command
*cmd
= *cmd_list
;
1277 for (; cmd
; cmd
= cmd
->next
) {
1278 if (shallow_update
&& data
->si
->shallow_ref
[cmd
->index
])
1279 /* to be checked in update_shallow_ref() */
1281 if (!is_null_sha1(cmd
->new_sha1
) && !cmd
->skip_update
) {
1282 hashcpy(sha1
, cmd
->new_sha1
);
1283 *cmd_list
= cmd
->next
;
1288 return -1; /* end of list */
1291 static void reject_updates_to_hidden(struct command
*commands
)
1293 struct strbuf refname_full
= STRBUF_INIT
;
1295 struct command
*cmd
;
1297 strbuf_addstr(&refname_full
, get_git_namespace());
1298 prefix_len
= refname_full
.len
;
1300 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1301 if (cmd
->error_string
)
1304 strbuf_setlen(&refname_full
, prefix_len
);
1305 strbuf_addstr(&refname_full
, cmd
->ref_name
);
1307 if (!ref_is_hidden(cmd
->ref_name
, refname_full
.buf
))
1309 if (is_null_sha1(cmd
->new_sha1
))
1310 cmd
->error_string
= "deny deleting a hidden ref";
1312 cmd
->error_string
= "deny updating a hidden ref";
1315 strbuf_release(&refname_full
);
1318 static int should_process_cmd(struct command
*cmd
)
1320 return !cmd
->error_string
&& !cmd
->skip_update
;
1323 static void warn_if_skipped_connectivity_check(struct command
*commands
,
1324 struct shallow_info
*si
)
1326 struct command
*cmd
;
1327 int checked_connectivity
= 1;
1329 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1330 if (should_process_cmd(cmd
) && si
->shallow_ref
[cmd
->index
]) {
1331 error("BUG: connectivity check has not been run on ref %s",
1333 checked_connectivity
= 0;
1336 if (!checked_connectivity
)
1337 die("BUG: connectivity check skipped???");
1340 static void execute_commands_non_atomic(struct command
*commands
,
1341 struct shallow_info
*si
)
1343 struct command
*cmd
;
1344 struct strbuf err
= STRBUF_INIT
;
1346 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1347 if (!should_process_cmd(cmd
))
1350 transaction
= ref_transaction_begin(&err
);
1352 rp_error("%s", err
.buf
);
1354 cmd
->error_string
= "transaction failed to start";
1358 cmd
->error_string
= update(cmd
, si
);
1360 if (!cmd
->error_string
1361 && ref_transaction_commit(transaction
, &err
)) {
1362 rp_error("%s", err
.buf
);
1364 cmd
->error_string
= "failed to update ref";
1366 ref_transaction_free(transaction
);
1368 strbuf_release(&err
);
1371 static void execute_commands_atomic(struct command
*commands
,
1372 struct shallow_info
*si
)
1374 struct command
*cmd
;
1375 struct strbuf err
= STRBUF_INIT
;
1376 const char *reported_error
= "atomic push failure";
1378 transaction
= ref_transaction_begin(&err
);
1380 rp_error("%s", err
.buf
);
1382 reported_error
= "transaction failed to start";
1386 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1387 if (!should_process_cmd(cmd
))
1390 cmd
->error_string
= update(cmd
, si
);
1392 if (cmd
->error_string
)
1396 if (ref_transaction_commit(transaction
, &err
)) {
1397 rp_error("%s", err
.buf
);
1398 reported_error
= "atomic transaction failed";
1404 for (cmd
= commands
; cmd
; cmd
= cmd
->next
)
1405 if (!cmd
->error_string
)
1406 cmd
->error_string
= reported_error
;
1409 ref_transaction_free(transaction
);
1410 strbuf_release(&err
);
1413 static void execute_commands(struct command
*commands
,
1414 const char *unpacker_error
,
1415 struct shallow_info
*si
,
1416 const struct string_list
*push_options
)
1418 struct check_connected_options opt
= CHECK_CONNECTED_INIT
;
1419 struct command
*cmd
;
1420 unsigned char sha1
[20];
1421 struct iterate_data data
;
1425 if (unpacker_error
) {
1426 for (cmd
= commands
; cmd
; cmd
= cmd
->next
)
1427 cmd
->error_string
= "unpacker error";
1432 memset(&muxer
, 0, sizeof(muxer
));
1433 muxer
.proc
= copy_to_sideband
;
1435 if (!start_async(&muxer
))
1437 /* ...else, continue without relaying sideband */
1440 data
.cmds
= commands
;
1442 opt
.err_fd
= err_fd
;
1443 opt
.progress
= err_fd
&& !quiet
;
1444 opt
.env
= tmp_objdir_env(tmp_objdir
);
1445 if (check_connected(iterate_receive_command_list
, &data
, &opt
))
1446 set_connectivity_errors(commands
, si
);
1449 finish_async(&muxer
);
1451 reject_updates_to_hidden(commands
);
1453 if (run_receive_hook(commands
, "pre-receive", 0, push_options
)) {
1454 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1455 if (!cmd
->error_string
)
1456 cmd
->error_string
= "pre-receive hook declined";
1462 * Now we'll start writing out refs, which means the objects need
1463 * to be in their final positions so that other processes can see them.
1465 if (tmp_objdir_migrate(tmp_objdir
) < 0) {
1466 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1467 if (!cmd
->error_string
)
1468 cmd
->error_string
= "unable to migrate objects to permanent storage";
1474 check_aliased_updates(commands
);
1476 free(head_name_to_free
);
1477 head_name
= head_name_to_free
= resolve_refdup("HEAD", 0, sha1
, NULL
);
1480 execute_commands_atomic(commands
, si
);
1482 execute_commands_non_atomic(commands
, si
);
1485 warn_if_skipped_connectivity_check(commands
, si
);
1488 static struct command
**queue_command(struct command
**tail
,
1492 unsigned char old_sha1
[20], new_sha1
[20];
1493 struct command
*cmd
;
1494 const char *refname
;
1500 get_sha1_hex(line
, old_sha1
) ||
1501 get_sha1_hex(line
+ 41, new_sha1
))
1502 die("protocol error: expected old/new/ref, got '%s'", line
);
1504 refname
= line
+ 82;
1505 reflen
= linelen
- 82;
1506 FLEX_ALLOC_MEM(cmd
, ref_name
, refname
, reflen
);
1507 hashcpy(cmd
->old_sha1
, old_sha1
);
1508 hashcpy(cmd
->new_sha1
, new_sha1
);
1513 static void queue_commands_from_cert(struct command
**tail
,
1514 struct strbuf
*push_cert
)
1516 const char *boc
, *eoc
;
1519 die("protocol error: got both push certificate and unsigned commands");
1521 boc
= strstr(push_cert
->buf
, "\n\n");
1523 die("malformed push certificate %.*s", 100, push_cert
->buf
);
1526 eoc
= push_cert
->buf
+ parse_signature(push_cert
->buf
, push_cert
->len
);
1529 const char *eol
= memchr(boc
, '\n', eoc
- boc
);
1530 tail
= queue_command(tail
, boc
, eol
? eol
- boc
: eoc
- eol
);
1531 boc
= eol
? eol
+ 1 : eoc
;
1535 static struct command
*read_head_info(struct sha1_array
*shallow
)
1537 struct command
*commands
= NULL
;
1538 struct command
**p
= &commands
;
1543 line
= packet_read_line(0, &len
);
1547 if (len
== 48 && starts_with(line
, "shallow ")) {
1548 unsigned char sha1
[20];
1549 if (get_sha1_hex(line
+ 8, sha1
))
1550 die("protocol error: expected shallow sha, got '%s'",
1552 sha1_array_append(shallow
, sha1
);
1556 linelen
= strlen(line
);
1557 if (linelen
< len
) {
1558 const char *feature_list
= line
+ linelen
+ 1;
1559 if (parse_feature_request(feature_list
, "report-status"))
1561 if (parse_feature_request(feature_list
, "side-band-64k"))
1562 use_sideband
= LARGE_PACKET_MAX
;
1563 if (parse_feature_request(feature_list
, "quiet"))
1565 if (advertise_atomic_push
1566 && parse_feature_request(feature_list
, "atomic"))
1568 if (advertise_push_options
1569 && parse_feature_request(feature_list
, "push-options"))
1570 use_push_options
= 1;
1573 if (!strcmp(line
, "push-cert")) {
1578 len
= packet_read(0, NULL
, NULL
,
1579 certbuf
, sizeof(certbuf
), 0);
1584 if (!strcmp(certbuf
, "push-cert-end\n"))
1585 break; /* end of cert */
1586 strbuf_addstr(&push_cert
, certbuf
);
1594 p
= queue_command(p
, line
, linelen
);
1598 queue_commands_from_cert(p
, &push_cert
);
1603 static void read_push_options(struct string_list
*options
)
1609 line
= packet_read_line(0, &len
);
1614 string_list_append(options
, line
);
1618 static const char *parse_pack_header(struct pack_header
*hdr
)
1620 switch (read_pack_header(0, hdr
)) {
1622 return "eof before pack header was fully read";
1624 case PH_ERROR_PACK_SIGNATURE
:
1625 return "protocol error (pack signature mismatch detected)";
1627 case PH_ERROR_PROTOCOL
:
1628 return "protocol error (pack version unsupported)";
1631 return "unknown error in parse_pack_header";
1638 static const char *pack_lockfile
;
1640 static const char *unpack(int err_fd
, struct shallow_info
*si
)
1642 struct pack_header hdr
;
1643 const char *hdr_err
;
1646 struct child_process child
= CHILD_PROCESS_INIT
;
1647 int fsck_objects
= (receive_fsck_objects
>= 0
1648 ? receive_fsck_objects
1649 : transfer_fsck_objects
>= 0
1650 ? transfer_fsck_objects
1653 hdr_err
= parse_pack_header(&hdr
);
1659 snprintf(hdr_arg
, sizeof(hdr_arg
),
1660 "--pack_header=%"PRIu32
",%"PRIu32
,
1661 ntohl(hdr
.hdr_version
), ntohl(hdr
.hdr_entries
));
1663 if (si
->nr_ours
|| si
->nr_theirs
) {
1664 alt_shallow_file
= setup_temporary_shallow(si
->shallow
);
1665 argv_array_push(&child
.args
, "--shallow-file");
1666 argv_array_push(&child
.args
, alt_shallow_file
);
1669 tmp_objdir
= tmp_objdir_create();
1671 return "unable to create temporary object directory";
1672 child
.env
= tmp_objdir_env(tmp_objdir
);
1675 * Normally we just pass the tmp_objdir environment to the child
1676 * processes that do the heavy lifting, but we may need to see these
1677 * objects ourselves to set up shallow information.
1679 tmp_objdir_add_as_alternate(tmp_objdir
);
1681 if (ntohl(hdr
.hdr_entries
) < unpack_limit
) {
1682 argv_array_pushl(&child
.args
, "unpack-objects", hdr_arg
, NULL
);
1684 argv_array_push(&child
.args
, "-q");
1686 argv_array_pushf(&child
.args
, "--strict%s",
1687 fsck_msg_types
.buf
);
1689 argv_array_pushf(&child
.args
, "--max-input-size=%"PRIuMAX
,
1690 (uintmax_t)max_input_size
);
1691 child
.no_stdout
= 1;
1694 status
= run_command(&child
);
1696 return "unpack-objects abnormal exit";
1700 argv_array_pushl(&child
.args
, "index-pack",
1701 "--stdin", hdr_arg
, NULL
);
1703 if (gethostname(hostname
, sizeof(hostname
)))
1704 xsnprintf(hostname
, sizeof(hostname
), "localhost");
1705 argv_array_pushf(&child
.args
,
1706 "--keep=receive-pack %"PRIuMAX
" on %s",
1707 (uintmax_t)getpid(),
1710 if (!quiet
&& err_fd
)
1711 argv_array_push(&child
.args
, "--show-resolving-progress");
1713 argv_array_push(&child
.args
, "--report-end-of-input");
1715 argv_array_pushf(&child
.args
, "--strict%s",
1716 fsck_msg_types
.buf
);
1718 argv_array_push(&child
.args
, "--fix-thin");
1720 argv_array_pushf(&child
.args
, "--max-input-size=%"PRIuMAX
,
1721 (uintmax_t)max_input_size
);
1725 status
= start_command(&child
);
1727 return "index-pack fork failed";
1728 pack_lockfile
= index_pack_lockfile(child
.out
);
1730 status
= finish_command(&child
);
1732 return "index-pack abnormal exit";
1733 reprepare_packed_git();
1738 static const char *unpack_with_sideband(struct shallow_info
*si
)
1744 return unpack(0, si
);
1746 use_keepalive
= KEEPALIVE_AFTER_NUL
;
1747 memset(&muxer
, 0, sizeof(muxer
));
1748 muxer
.proc
= copy_to_sideband
;
1750 if (start_async(&muxer
))
1753 ret
= unpack(muxer
.in
, si
);
1755 finish_async(&muxer
);
1759 static void prepare_shallow_update(struct command
*commands
,
1760 struct shallow_info
*si
)
1762 int i
, j
, k
, bitmap_size
= (si
->ref
->nr
+ 31) / 32;
1764 ALLOC_ARRAY(si
->used_shallow
, si
->shallow
->nr
);
1765 assign_shallow_commits_to_refs(si
, si
->used_shallow
, NULL
);
1767 si
->need_reachability_test
=
1768 xcalloc(si
->shallow
->nr
, sizeof(*si
->need_reachability_test
));
1770 xcalloc(si
->shallow
->nr
, sizeof(*si
->reachable
));
1771 si
->shallow_ref
= xcalloc(si
->ref
->nr
, sizeof(*si
->shallow_ref
));
1773 for (i
= 0; i
< si
->nr_ours
; i
++)
1774 si
->need_reachability_test
[si
->ours
[i
]] = 1;
1776 for (i
= 0; i
< si
->shallow
->nr
; i
++) {
1777 if (!si
->used_shallow
[i
])
1779 for (j
= 0; j
< bitmap_size
; j
++) {
1780 if (!si
->used_shallow
[i
][j
])
1782 si
->need_reachability_test
[i
]++;
1783 for (k
= 0; k
< 32; k
++)
1784 if (si
->used_shallow
[i
][j
] & (1U << k
))
1785 si
->shallow_ref
[j
* 32 + k
]++;
1789 * true for those associated with some refs and belong
1790 * in "ours" list aka "step 7 not done yet"
1792 si
->need_reachability_test
[i
] =
1793 si
->need_reachability_test
[i
] > 1;
1797 * keep hooks happy by forcing a temporary shallow file via
1798 * env variable because we can't add --shallow-file to every
1799 * command. check_everything_connected() will be done with
1800 * true .git/shallow though.
1802 setenv(GIT_SHALLOW_FILE_ENVIRONMENT
, alt_shallow_file
, 1);
1805 static void update_shallow_info(struct command
*commands
,
1806 struct shallow_info
*si
,
1807 struct sha1_array
*ref
)
1809 struct command
*cmd
;
1811 remove_nonexistent_theirs_shallow(si
);
1812 if (!si
->nr_ours
&& !si
->nr_theirs
) {
1817 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1818 if (is_null_sha1(cmd
->new_sha1
))
1820 sha1_array_append(ref
, cmd
->new_sha1
);
1821 cmd
->index
= ref
->nr
- 1;
1825 if (shallow_update
) {
1826 prepare_shallow_update(commands
, si
);
1830 ALLOC_ARRAY(ref_status
, ref
->nr
);
1831 assign_shallow_commits_to_refs(si
, NULL
, ref_status
);
1832 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1833 if (is_null_sha1(cmd
->new_sha1
))
1835 if (ref_status
[cmd
->index
]) {
1836 cmd
->error_string
= "shallow update not allowed";
1837 cmd
->skip_update
= 1;
1843 static void report(struct command
*commands
, const char *unpack_status
)
1845 struct command
*cmd
;
1846 struct strbuf buf
= STRBUF_INIT
;
1848 packet_buf_write(&buf
, "unpack %s\n",
1849 unpack_status
? unpack_status
: "ok");
1850 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1851 if (!cmd
->error_string
)
1852 packet_buf_write(&buf
, "ok %s\n",
1855 packet_buf_write(&buf
, "ng %s %s\n",
1856 cmd
->ref_name
, cmd
->error_string
);
1858 packet_buf_flush(&buf
);
1861 send_sideband(1, 1, buf
.buf
, buf
.len
, use_sideband
);
1863 write_or_die(1, buf
.buf
, buf
.len
);
1864 strbuf_release(&buf
);
1867 static int delete_only(struct command
*commands
)
1869 struct command
*cmd
;
1870 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1871 if (!is_null_sha1(cmd
->new_sha1
))
1877 int cmd_receive_pack(int argc
, const char **argv
, const char *prefix
)
1879 int advertise_refs
= 0;
1880 struct command
*commands
;
1881 struct sha1_array shallow
= SHA1_ARRAY_INIT
;
1882 struct sha1_array ref
= SHA1_ARRAY_INIT
;
1883 struct shallow_info si
;
1885 struct option options
[] = {
1886 OPT__QUIET(&quiet
, N_("quiet")),
1887 OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc
, NULL
),
1888 OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs
, NULL
),
1889 OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin
, NULL
),
1893 packet_trace_identity("receive-pack");
1895 argc
= parse_options(argc
, argv
, prefix
, options
, receive_pack_usage
, 0);
1898 usage_msg_opt(_("Too many arguments."), receive_pack_usage
, options
);
1900 usage_msg_opt(_("You must specify a directory."), receive_pack_usage
, options
);
1902 service_dir
= argv
[0];
1906 if (!enter_repo(service_dir
, 0))
1907 die("'%s' does not appear to be a git repository", service_dir
);
1909 git_config(receive_pack_config
, NULL
);
1910 if (cert_nonce_seed
)
1911 push_cert_nonce
= prepare_push_cert_nonce(service_dir
, time(NULL
));
1913 if (0 <= transfer_unpack_limit
)
1914 unpack_limit
= transfer_unpack_limit
;
1915 else if (0 <= receive_unpack_limit
)
1916 unpack_limit
= receive_unpack_limit
;
1918 if (advertise_refs
|| !stateless_rpc
) {
1924 if ((commands
= read_head_info(&shallow
)) != NULL
) {
1925 const char *unpack_status
= NULL
;
1926 struct string_list push_options
= STRING_LIST_INIT_DUP
;
1928 if (use_push_options
)
1929 read_push_options(&push_options
);
1931 prepare_shallow_info(&si
, &shallow
);
1932 if (!si
.nr_ours
&& !si
.nr_theirs
)
1934 if (!delete_only(commands
)) {
1935 unpack_status
= unpack_with_sideband(&si
);
1936 update_shallow_info(commands
, &si
, &ref
);
1938 use_keepalive
= KEEPALIVE_ALWAYS
;
1939 execute_commands(commands
, unpack_status
, &si
,
1942 unlink_or_warn(pack_lockfile
);
1944 report(commands
, unpack_status
);
1945 run_receive_hook(commands
, "post-receive", 1,
1947 run_update_post_hook(commands
);
1948 if (push_options
.nr
)
1949 string_list_clear(&push_options
, 0);
1951 const char *argv_gc_auto
[] = {
1952 "gc", "--auto", "--quiet", NULL
,
1954 struct child_process proc
= CHILD_PROCESS_INIT
;
1957 proc
.stdout_to_stderr
= 1;
1958 proc
.err
= use_sideband
? -1 : 0;
1960 proc
.argv
= argv_gc_auto
;
1963 if (!start_command(&proc
)) {
1965 copy_to_sideband(proc
.err
, -1, NULL
);
1966 finish_command(&proc
);
1969 if (auto_update_server_info
)
1970 update_server_info(0);
1971 clear_shallow_info(&si
);
1975 sha1_array_clear(&shallow
);
1976 sha1_array_clear(&ref
);
1977 free((void *)push_cert_nonce
);