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"
24 static const char * const receive_pack_usage
[] = {
25 N_("git receive-pack <git-dir>"),
37 static int deny_deletes
;
38 static int deny_non_fast_forwards
;
39 static enum deny_action deny_current_branch
= DENY_UNCONFIGURED
;
40 static enum deny_action deny_delete_current
= DENY_UNCONFIGURED
;
41 static int receive_fsck_objects
= -1;
42 static int transfer_fsck_objects
= -1;
43 static struct strbuf fsck_msg_types
= STRBUF_INIT
;
44 static int receive_unpack_limit
= -1;
45 static int transfer_unpack_limit
= -1;
46 static int advertise_atomic_push
= 1;
47 static int advertise_push_options
;
48 static int unpack_limit
= 100;
49 static off_t max_input_size
;
50 static int report_status
;
51 static int use_sideband
;
52 static int use_atomic
;
53 static int use_push_options
;
55 static int prefer_ofs_delta
= 1;
56 static int auto_update_server_info
;
57 static int auto_gc
= 1;
58 static int reject_thin
;
59 static int stateless_rpc
;
60 static const char *service_dir
;
61 static const char *head_name
;
62 static void *head_name_to_free
;
63 static int sent_capabilities
;
64 static int shallow_update
;
65 static const char *alt_shallow_file
;
66 static struct strbuf push_cert
= STRBUF_INIT
;
67 static unsigned char push_cert_sha1
[20];
68 static struct signature_check sigcheck
;
69 static const char *push_cert_nonce
;
70 static const char *cert_nonce_seed
;
72 static const char *NONCE_UNSOLICITED
= "UNSOLICITED";
73 static const char *NONCE_BAD
= "BAD";
74 static const char *NONCE_MISSING
= "MISSING";
75 static const char *NONCE_OK
= "OK";
76 static const char *NONCE_SLOP
= "SLOP";
77 static const char *nonce_status
;
78 static long nonce_stamp_slop
;
79 static unsigned long nonce_stamp_slop_limit
;
80 static struct ref_transaction
*transaction
;
87 static int keepalive_in_sec
= 5;
89 static enum deny_action
parse_deny_action(const char *var
, const char *value
)
92 if (!strcasecmp(value
, "ignore"))
94 if (!strcasecmp(value
, "warn"))
96 if (!strcasecmp(value
, "refuse"))
98 if (!strcasecmp(value
, "updateinstead"))
99 return DENY_UPDATE_INSTEAD
;
101 if (git_config_bool(var
, value
))
106 static int receive_pack_config(const char *var
, const char *value
, void *cb
)
108 int status
= parse_hide_refs_config(var
, value
, "receive");
113 if (strcmp(var
, "receive.denydeletes") == 0) {
114 deny_deletes
= git_config_bool(var
, value
);
118 if (strcmp(var
, "receive.denynonfastforwards") == 0) {
119 deny_non_fast_forwards
= git_config_bool(var
, value
);
123 if (strcmp(var
, "receive.unpacklimit") == 0) {
124 receive_unpack_limit
= git_config_int(var
, value
);
128 if (strcmp(var
, "transfer.unpacklimit") == 0) {
129 transfer_unpack_limit
= git_config_int(var
, value
);
133 if (strcmp(var
, "receive.fsck.skiplist") == 0) {
136 if (git_config_pathname(&path
, var
, value
))
138 strbuf_addf(&fsck_msg_types
, "%cskiplist=%s",
139 fsck_msg_types
.len
? ',' : '=', path
);
144 if (skip_prefix(var
, "receive.fsck.", &var
)) {
145 if (is_valid_msg_type(var
, value
))
146 strbuf_addf(&fsck_msg_types
, "%c%s=%s",
147 fsck_msg_types
.len
? ',' : '=', var
, value
);
149 warning("Skipping unknown msg id '%s'", var
);
153 if (strcmp(var
, "receive.fsckobjects") == 0) {
154 receive_fsck_objects
= git_config_bool(var
, value
);
158 if (strcmp(var
, "transfer.fsckobjects") == 0) {
159 transfer_fsck_objects
= git_config_bool(var
, value
);
163 if (!strcmp(var
, "receive.denycurrentbranch")) {
164 deny_current_branch
= parse_deny_action(var
, value
);
168 if (strcmp(var
, "receive.denydeletecurrent") == 0) {
169 deny_delete_current
= parse_deny_action(var
, value
);
173 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
174 prefer_ofs_delta
= git_config_bool(var
, value
);
178 if (strcmp(var
, "receive.updateserverinfo") == 0) {
179 auto_update_server_info
= git_config_bool(var
, value
);
183 if (strcmp(var
, "receive.autogc") == 0) {
184 auto_gc
= git_config_bool(var
, value
);
188 if (strcmp(var
, "receive.shallowupdate") == 0) {
189 shallow_update
= git_config_bool(var
, value
);
193 if (strcmp(var
, "receive.certnonceseed") == 0)
194 return git_config_string(&cert_nonce_seed
, var
, value
);
196 if (strcmp(var
, "receive.certnonceslop") == 0) {
197 nonce_stamp_slop_limit
= git_config_ulong(var
, value
);
201 if (strcmp(var
, "receive.advertiseatomic") == 0) {
202 advertise_atomic_push
= git_config_bool(var
, value
);
206 if (strcmp(var
, "receive.advertisepushoptions") == 0) {
207 advertise_push_options
= git_config_bool(var
, value
);
211 if (strcmp(var
, "receive.keepalive") == 0) {
212 keepalive_in_sec
= git_config_int(var
, value
);
216 if (strcmp(var
, "receive.maxinputsize") == 0) {
217 max_input_size
= git_config_int64(var
, value
);
221 return git_default_config(var
, value
, cb
);
224 static void show_ref(const char *path
, const unsigned char *sha1
)
226 if (sent_capabilities
) {
227 packet_write(1, "%s %s\n", sha1_to_hex(sha1
), path
);
229 struct strbuf cap
= STRBUF_INIT
;
232 "report-status delete-refs side-band-64k quiet");
233 if (advertise_atomic_push
)
234 strbuf_addstr(&cap
, " atomic");
235 if (prefer_ofs_delta
)
236 strbuf_addstr(&cap
, " ofs-delta");
238 strbuf_addf(&cap
, " push-cert=%s", push_cert_nonce
);
239 if (advertise_push_options
)
240 strbuf_addstr(&cap
, " push-options");
241 strbuf_addf(&cap
, " agent=%s", git_user_agent_sanitized());
242 packet_write(1, "%s %s%c%s\n",
243 sha1_to_hex(sha1
), path
, 0, cap
.buf
);
244 strbuf_release(&cap
);
245 sent_capabilities
= 1;
249 static int show_ref_cb(const char *path_full
, const struct object_id
*oid
,
250 int flag
, void *unused
)
252 const char *path
= strip_namespace(path_full
);
254 if (ref_is_hidden(path
, path_full
))
258 * Advertise refs outside our current namespace as ".have"
259 * refs, so that the client can use them to minimize data
260 * transfer but will otherwise ignore them. This happens to
261 * cover ".have" that are thrown in by add_one_alternate_ref()
262 * to mark histories that are complete in our alternates as
267 show_ref(path
, oid
->hash
);
271 static int show_one_alternate_sha1(const unsigned char sha1
[20], void *unused
)
273 show_ref(".have", sha1
);
277 static void collect_one_alternate_ref(const struct ref
*ref
, void *data
)
279 struct sha1_array
*sa
= data
;
280 sha1_array_append(sa
, ref
->old_oid
.hash
);
283 static void write_head_info(void)
285 struct sha1_array sa
= SHA1_ARRAY_INIT
;
287 for_each_alternate_ref(collect_one_alternate_ref
, &sa
);
288 sha1_array_for_each_unique(&sa
, show_one_alternate_sha1
, NULL
);
289 sha1_array_clear(&sa
);
290 for_each_ref(show_ref_cb
, NULL
);
291 if (!sent_capabilities
)
292 show_ref("capabilities^{}", null_sha1
);
294 advertise_shallow_grafts(1);
301 struct command
*next
;
302 const char *error_string
;
303 unsigned int skip_update
:1,
306 unsigned char old_sha1
[20];
307 unsigned char new_sha1
[20];
308 char ref_name
[FLEX_ARRAY
]; /* more */
311 static void rp_error(const char *err
, ...) __attribute__((format (printf
, 1, 2)));
312 static void rp_warning(const char *err
, ...) __attribute__((format (printf
, 1, 2)));
314 static void report_message(const char *prefix
, const char *err
, va_list params
)
319 sz
= xsnprintf(msg
, sizeof(msg
), "%s", prefix
);
320 sz
+= vsnprintf(msg
+ sz
, sizeof(msg
) - sz
, err
, params
);
321 if (sz
> (sizeof(msg
) - 1))
322 sz
= sizeof(msg
) - 1;
326 send_sideband(1, 2, msg
, sz
, use_sideband
);
331 static void rp_warning(const char *err
, ...)
334 va_start(params
, err
);
335 report_message("warning: ", err
, params
);
339 static void rp_error(const char *err
, ...)
342 va_start(params
, err
);
343 report_message("error: ", err
, params
);
347 static int copy_to_sideband(int in
, int out
, void *arg
)
350 int keepalive_active
= 0;
352 if (keepalive_in_sec
<= 0)
353 use_keepalive
= KEEPALIVE_NEVER
;
354 if (use_keepalive
== KEEPALIVE_ALWAYS
)
355 keepalive_active
= 1;
360 if (keepalive_active
) {
366 ret
= poll(&pfd
, 1, 1000 * keepalive_in_sec
);
373 } else if (ret
== 0) {
374 /* no data; send a keepalive packet */
375 static const char buf
[] = "0005\1";
376 write_or_die(1, buf
, sizeof(buf
) - 1);
378 } /* else there is actual data to read */
381 sz
= xread(in
, data
, sizeof(data
));
385 if (use_keepalive
== KEEPALIVE_AFTER_NUL
&& !keepalive_active
) {
386 const char *p
= memchr(data
, '\0', sz
);
389 * The NUL tells us to start sending keepalives. Make
390 * sure we send any other data we read along
393 keepalive_active
= 1;
394 send_sideband(1, 2, data
, p
- data
, use_sideband
);
395 send_sideband(1, 2, p
+ 1, sz
- (p
- data
+ 1), use_sideband
);
401 * Either we're not looking for a NUL signal, or we didn't see
402 * it yet; just pass along the data.
404 send_sideband(1, 2, data
, sz
, use_sideband
);
410 #define HMAC_BLOCK_SIZE 64
412 static void hmac_sha1(unsigned char *out
,
413 const char *key_in
, size_t key_len
,
414 const char *text
, size_t text_len
)
416 unsigned char key
[HMAC_BLOCK_SIZE
];
417 unsigned char k_ipad
[HMAC_BLOCK_SIZE
];
418 unsigned char k_opad
[HMAC_BLOCK_SIZE
];
422 /* RFC 2104 2. (1) */
423 memset(key
, '\0', HMAC_BLOCK_SIZE
);
424 if (HMAC_BLOCK_SIZE
< key_len
) {
426 git_SHA1_Update(&ctx
, key_in
, key_len
);
427 git_SHA1_Final(key
, &ctx
);
429 memcpy(key
, key_in
, key_len
);
432 /* RFC 2104 2. (2) & (5) */
433 for (i
= 0; i
< sizeof(key
); i
++) {
434 k_ipad
[i
] = key
[i
] ^ 0x36;
435 k_opad
[i
] = key
[i
] ^ 0x5c;
438 /* RFC 2104 2. (3) & (4) */
440 git_SHA1_Update(&ctx
, k_ipad
, sizeof(k_ipad
));
441 git_SHA1_Update(&ctx
, text
, text_len
);
442 git_SHA1_Final(out
, &ctx
);
444 /* RFC 2104 2. (6) & (7) */
446 git_SHA1_Update(&ctx
, k_opad
, sizeof(k_opad
));
447 git_SHA1_Update(&ctx
, out
, 20);
448 git_SHA1_Final(out
, &ctx
);
451 static char *prepare_push_cert_nonce(const char *path
, unsigned long stamp
)
453 struct strbuf buf
= STRBUF_INIT
;
454 unsigned char sha1
[20];
456 strbuf_addf(&buf
, "%s:%lu", path
, stamp
);
457 hmac_sha1(sha1
, buf
.buf
, buf
.len
, cert_nonce_seed
, strlen(cert_nonce_seed
));;
458 strbuf_release(&buf
);
460 /* RFC 2104 5. HMAC-SHA1-80 */
461 strbuf_addf(&buf
, "%lu-%.*s", stamp
, 20, sha1_to_hex(sha1
));
462 return strbuf_detach(&buf
, NULL
);
466 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
467 * after dropping "_commit" from its name and possibly moving it out
470 static char *find_header(const char *msg
, size_t len
, const char *key
)
472 int key_len
= strlen(key
);
473 const char *line
= msg
;
475 while (line
&& line
< msg
+ len
) {
476 const char *eol
= strchrnul(line
, '\n');
478 if ((msg
+ len
<= eol
) || line
== eol
)
480 if (line
+ key_len
< eol
&&
481 !memcmp(line
, key
, key_len
) && line
[key_len
] == ' ') {
482 int offset
= key_len
+ 1;
483 return xmemdupz(line
+ offset
, (eol
- line
) - offset
);
485 line
= *eol
? eol
+ 1 : NULL
;
490 static const char *check_nonce(const char *buf
, size_t len
)
492 char *nonce
= find_header(buf
, len
, "nonce");
493 unsigned long stamp
, ostamp
;
494 char *bohmac
, *expect
= NULL
;
495 const char *retval
= NONCE_BAD
;
498 retval
= NONCE_MISSING
;
500 } else if (!push_cert_nonce
) {
501 retval
= NONCE_UNSOLICITED
;
503 } else if (!strcmp(push_cert_nonce
, nonce
)) {
508 if (!stateless_rpc
) {
509 /* returned nonce MUST match what we gave out earlier */
515 * In stateless mode, we may be receiving a nonce issued by
516 * another instance of the server that serving the same
517 * repository, and the timestamps may not match, but the
518 * nonce-seed and dir should match, so we can recompute and
519 * report the time slop.
521 * In addition, when a nonce issued by another instance has
522 * timestamp within receive.certnonceslop seconds, we pretend
523 * as if we issued that nonce when reporting to the hook.
526 /* nonce is concat(<seconds-since-epoch>, "-", <hmac>) */
527 if (*nonce
<= '0' || '9' < *nonce
) {
531 stamp
= strtoul(nonce
, &bohmac
, 10);
532 if (bohmac
== nonce
|| bohmac
[0] != '-') {
537 expect
= prepare_push_cert_nonce(service_dir
, stamp
);
538 if (strcmp(expect
, nonce
)) {
539 /* Not what we would have signed earlier */
545 * By how many seconds is this nonce stale? Negative value
546 * would mean it was issued by another server with its clock
547 * skewed in the future.
549 ostamp
= strtoul(push_cert_nonce
, NULL
, 10);
550 nonce_stamp_slop
= (long)ostamp
- (long)stamp
;
552 if (nonce_stamp_slop_limit
&&
553 labs(nonce_stamp_slop
) <= nonce_stamp_slop_limit
) {
555 * Pretend as if the received nonce (which passes the
556 * HMAC check, so it is not a forged by third-party)
559 free((void *)push_cert_nonce
);
560 push_cert_nonce
= xstrdup(nonce
);
572 static void prepare_push_cert_sha1(struct child_process
*proc
)
574 static int already_done
;
580 struct strbuf gpg_output
= STRBUF_INIT
;
581 struct strbuf gpg_status
= STRBUF_INIT
;
582 int bogs
/* beginning_of_gpg_sig */;
585 if (write_sha1_file(push_cert
.buf
, push_cert
.len
, "blob", push_cert_sha1
))
586 hashclr(push_cert_sha1
);
588 memset(&sigcheck
, '\0', sizeof(sigcheck
));
589 sigcheck
.result
= 'N';
591 bogs
= parse_signature(push_cert
.buf
, push_cert
.len
);
592 if (verify_signed_buffer(push_cert
.buf
, bogs
,
593 push_cert
.buf
+ bogs
, push_cert
.len
- bogs
,
594 &gpg_output
, &gpg_status
) < 0) {
595 ; /* error running gpg */
597 sigcheck
.payload
= push_cert
.buf
;
598 sigcheck
.gpg_output
= gpg_output
.buf
;
599 sigcheck
.gpg_status
= gpg_status
.buf
;
600 parse_gpg_output(&sigcheck
);
603 strbuf_release(&gpg_output
);
604 strbuf_release(&gpg_status
);
605 nonce_status
= check_nonce(push_cert
.buf
, bogs
);
607 if (!is_null_sha1(push_cert_sha1
)) {
608 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT=%s",
609 sha1_to_hex(push_cert_sha1
));
610 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT_SIGNER=%s",
611 sigcheck
.signer
? sigcheck
.signer
: "");
612 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT_KEY=%s",
613 sigcheck
.key
? sigcheck
.key
: "");
614 argv_array_pushf(&proc
->env_array
, "GIT_PUSH_CERT_STATUS=%c",
616 if (push_cert_nonce
) {
617 argv_array_pushf(&proc
->env_array
,
618 "GIT_PUSH_CERT_NONCE=%s",
620 argv_array_pushf(&proc
->env_array
,
621 "GIT_PUSH_CERT_NONCE_STATUS=%s",
623 if (nonce_status
== NONCE_SLOP
)
624 argv_array_pushf(&proc
->env_array
,
625 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
631 struct receive_hook_feed_state
{
635 const struct string_list
*push_options
;
638 typedef int (*feed_fn
)(void *, const char **, size_t *);
639 static int run_and_feed_hook(const char *hook_name
, feed_fn feed
,
640 struct receive_hook_feed_state
*feed_state
)
642 struct child_process proc
= CHILD_PROCESS_INIT
;
647 argv
[0] = find_hook(hook_name
);
655 proc
.stdout_to_stderr
= 1;
656 if (feed_state
->push_options
) {
658 for (i
= 0; i
< feed_state
->push_options
->nr
; i
++)
659 argv_array_pushf(&proc
.env_array
,
660 "GIT_PUSH_OPTION_%d=%s", i
,
661 feed_state
->push_options
->items
[i
].string
);
662 argv_array_pushf(&proc
.env_array
, "GIT_PUSH_OPTION_COUNT=%d",
663 feed_state
->push_options
->nr
);
665 argv_array_pushf(&proc
.env_array
, "GIT_PUSH_OPTION_COUNT");
668 memset(&muxer
, 0, sizeof(muxer
));
669 muxer
.proc
= copy_to_sideband
;
671 code
= start_async(&muxer
);
677 prepare_push_cert_sha1(&proc
);
679 code
= start_command(&proc
);
682 finish_async(&muxer
);
686 sigchain_push(SIGPIPE
, SIG_IGN
);
691 if (feed(feed_state
, &buf
, &n
))
693 if (write_in_full(proc
.in
, buf
, n
) != n
)
698 finish_async(&muxer
);
700 sigchain_pop(SIGPIPE
);
702 return finish_command(&proc
);
705 static int feed_receive_hook(void *state_
, const char **bufp
, size_t *sizep
)
707 struct receive_hook_feed_state
*state
= state_
;
708 struct command
*cmd
= state
->cmd
;
711 state
->skip_broken
&& (cmd
->error_string
|| cmd
->did_not_exist
))
715 strbuf_reset(&state
->buf
);
716 strbuf_addf(&state
->buf
, "%s %s %s\n",
717 sha1_to_hex(cmd
->old_sha1
), sha1_to_hex(cmd
->new_sha1
),
719 state
->cmd
= cmd
->next
;
721 *bufp
= state
->buf
.buf
;
722 *sizep
= state
->buf
.len
;
727 static int run_receive_hook(struct command
*commands
,
728 const char *hook_name
,
730 const struct string_list
*push_options
)
732 struct receive_hook_feed_state state
;
735 strbuf_init(&state
.buf
, 0);
736 state
.cmd
= commands
;
737 state
.skip_broken
= skip_broken
;
738 if (feed_receive_hook(&state
, NULL
, NULL
))
740 state
.cmd
= commands
;
741 state
.push_options
= push_options
;
742 status
= run_and_feed_hook(hook_name
, feed_receive_hook
, &state
);
743 strbuf_release(&state
.buf
);
747 static int run_update_hook(struct command
*cmd
)
750 struct child_process proc
= CHILD_PROCESS_INIT
;
753 argv
[0] = find_hook("update");
757 argv
[1] = cmd
->ref_name
;
758 argv
[2] = sha1_to_hex(cmd
->old_sha1
);
759 argv
[3] = sha1_to_hex(cmd
->new_sha1
);
763 proc
.stdout_to_stderr
= 1;
764 proc
.err
= use_sideband
? -1 : 0;
767 code
= start_command(&proc
);
771 copy_to_sideband(proc
.err
, -1, NULL
);
772 return finish_command(&proc
);
775 static int is_ref_checked_out(const char *ref
)
777 if (is_bare_repository())
782 return !strcmp(head_name
, ref
);
785 static char *refuse_unconfigured_deny_msg
=
786 N_("By default, updating the current branch in a non-bare repository\n"
787 "is denied, because it will make the index and work tree inconsistent\n"
788 "with what you pushed, and will require 'git reset --hard' to match\n"
789 "the work tree to HEAD.\n"
791 "You can set 'receive.denyCurrentBranch' configuration variable to\n"
792 "'ignore' or 'warn' in the remote repository to allow pushing into\n"
793 "its current branch; however, this is not recommended unless you\n"
794 "arranged to update its work tree to match what you pushed in some\n"
797 "To squelch this message and still keep the default behaviour, set\n"
798 "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
800 static void refuse_unconfigured_deny(void)
802 rp_error("%s", _(refuse_unconfigured_deny_msg
));
805 static char *refuse_unconfigured_deny_delete_current_msg
=
806 N_("By default, deleting the current branch is denied, because the next\n"
807 "'git clone' won't result in any file checked out, causing confusion.\n"
809 "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
810 "'warn' or 'ignore' in the remote repository to allow deleting the\n"
811 "current branch, with or without a warning message.\n"
813 "To squelch this message, you can set it to 'refuse'.");
815 static void refuse_unconfigured_deny_delete_current(void)
817 rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg
));
820 static int command_singleton_iterator(void *cb_data
, unsigned char sha1
[20]);
821 static int update_shallow_ref(struct command
*cmd
, struct shallow_info
*si
)
823 static struct lock_file shallow_lock
;
824 struct sha1_array extra
= SHA1_ARRAY_INIT
;
825 struct check_connected_options opt
= CHECK_CONNECTED_INIT
;
826 uint32_t mask
= 1 << (cmd
->index
% 32);
829 trace_printf_key(&trace_shallow
,
830 "shallow: update_shallow_ref %s\n", cmd
->ref_name
);
831 for (i
= 0; i
< si
->shallow
->nr
; i
++)
832 if (si
->used_shallow
[i
] &&
833 (si
->used_shallow
[i
][cmd
->index
/ 32] & mask
) &&
834 !delayed_reachability_test(si
, i
))
835 sha1_array_append(&extra
, si
->shallow
->sha1
[i
]);
837 setup_alternate_shallow(&shallow_lock
, &opt
.shallow_file
, &extra
);
838 if (check_connected(command_singleton_iterator
, cmd
, &opt
)) {
839 rollback_lock_file(&shallow_lock
);
840 sha1_array_clear(&extra
);
844 commit_lock_file(&shallow_lock
);
847 * Make sure setup_alternate_shallow() for the next ref does
848 * not lose these new roots..
850 for (i
= 0; i
< extra
.nr
; i
++)
851 register_shallow(extra
.sha1
[i
]);
853 si
->shallow_ref
[cmd
->index
] = 0;
854 sha1_array_clear(&extra
);
859 * NEEDSWORK: we should consolidate various implementions of "are we
860 * on an unborn branch?" test into one, and make the unified one more
861 * robust. !get_sha1() based check used here and elsewhere would not
862 * allow us to tell an unborn branch from corrupt ref, for example.
863 * For the purpose of fixing "deploy-to-update does not work when
864 * pushing into an empty repository" issue, this should suffice for
867 static int head_has_history(void)
869 unsigned char sha1
[20];
871 return !get_sha1("HEAD", sha1
);
874 static const char *push_to_deploy(unsigned char *sha1
,
875 struct argv_array
*env
,
876 const char *work_tree
)
878 const char *update_refresh
[] = {
879 "update-index", "-q", "--ignore-submodules", "--refresh", NULL
881 const char *diff_files
[] = {
882 "diff-files", "--quiet", "--ignore-submodules", "--", NULL
884 const char *diff_index
[] = {
885 "diff-index", "--quiet", "--cached", "--ignore-submodules",
888 const char *read_tree
[] = {
889 "read-tree", "-u", "-m", NULL
, NULL
891 struct child_process child
= CHILD_PROCESS_INIT
;
893 child
.argv
= update_refresh
;
894 child
.env
= env
->argv
;
895 child
.dir
= work_tree
;
897 child
.stdout_to_stderr
= 1;
899 if (run_command(&child
))
900 return "Up-to-date check failed";
902 /* run_command() does not clean up completely; reinitialize */
903 child_process_init(&child
);
904 child
.argv
= diff_files
;
905 child
.env
= env
->argv
;
906 child
.dir
= work_tree
;
908 child
.stdout_to_stderr
= 1;
910 if (run_command(&child
))
911 return "Working directory has unstaged changes";
913 /* diff-index with either HEAD or an empty tree */
914 diff_index
[4] = head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX
;
916 child_process_init(&child
);
917 child
.argv
= diff_index
;
918 child
.env
= env
->argv
;
921 child
.stdout_to_stderr
= 0;
923 if (run_command(&child
))
924 return "Working directory has staged changes";
926 read_tree
[3] = sha1_to_hex(sha1
);
927 child_process_init(&child
);
928 child
.argv
= read_tree
;
929 child
.env
= env
->argv
;
930 child
.dir
= work_tree
;
933 child
.stdout_to_stderr
= 0;
935 if (run_command(&child
))
936 return "Could not update working tree to new HEAD";
941 static const char *push_to_checkout_hook
= "push-to-checkout";
943 static const char *push_to_checkout(unsigned char *sha1
,
944 struct argv_array
*env
,
945 const char *work_tree
)
947 argv_array_pushf(env
, "GIT_WORK_TREE=%s", absolute_path(work_tree
));
948 if (run_hook_le(env
->argv
, push_to_checkout_hook
,
949 sha1_to_hex(sha1
), NULL
))
950 return "push-to-checkout hook declined";
955 static const char *update_worktree(unsigned char *sha1
)
958 const char *work_tree
= git_work_tree_cfg
? git_work_tree_cfg
: "..";
959 struct argv_array env
= ARGV_ARRAY_INIT
;
961 if (is_bare_repository())
962 return "denyCurrentBranch = updateInstead needs a worktree";
964 argv_array_pushf(&env
, "GIT_DIR=%s", absolute_path(get_git_dir()));
966 if (!find_hook(push_to_checkout_hook
))
967 retval
= push_to_deploy(sha1
, &env
, work_tree
);
969 retval
= push_to_checkout(sha1
, &env
, work_tree
);
971 argv_array_clear(&env
);
975 static const char *update(struct command
*cmd
, struct shallow_info
*si
)
977 const char *name
= cmd
->ref_name
;
978 struct strbuf namespaced_name_buf
= STRBUF_INIT
;
979 const char *namespaced_name
, *ret
;
980 unsigned char *old_sha1
= cmd
->old_sha1
;
981 unsigned char *new_sha1
= cmd
->new_sha1
;
983 /* only refs/... are allowed */
984 if (!starts_with(name
, "refs/") || check_refname_format(name
+ 5, 0)) {
985 rp_error("refusing to create funny ref '%s' remotely", name
);
986 return "funny refname";
989 strbuf_addf(&namespaced_name_buf
, "%s%s", get_git_namespace(), name
);
990 namespaced_name
= strbuf_detach(&namespaced_name_buf
, NULL
);
992 if (is_ref_checked_out(namespaced_name
)) {
993 switch (deny_current_branch
) {
997 rp_warning("updating the current branch");
1000 case DENY_UNCONFIGURED
:
1001 rp_error("refusing to update checked out branch: %s", name
);
1002 if (deny_current_branch
== DENY_UNCONFIGURED
)
1003 refuse_unconfigured_deny();
1004 return "branch is currently checked out";
1005 case DENY_UPDATE_INSTEAD
:
1006 ret
= update_worktree(new_sha1
);
1013 if (!is_null_sha1(new_sha1
) && !has_sha1_file(new_sha1
)) {
1014 error("unpack should have generated %s, "
1015 "but I can't find it!", sha1_to_hex(new_sha1
));
1019 if (!is_null_sha1(old_sha1
) && is_null_sha1(new_sha1
)) {
1020 if (deny_deletes
&& starts_with(name
, "refs/heads/")) {
1021 rp_error("denying ref deletion for %s", name
);
1022 return "deletion prohibited";
1025 if (head_name
&& !strcmp(namespaced_name
, head_name
)) {
1026 switch (deny_delete_current
) {
1030 rp_warning("deleting the current branch");
1033 case DENY_UNCONFIGURED
:
1034 case DENY_UPDATE_INSTEAD
:
1035 if (deny_delete_current
== DENY_UNCONFIGURED
)
1036 refuse_unconfigured_deny_delete_current();
1037 rp_error("refusing to delete the current branch: %s", name
);
1038 return "deletion of the current branch prohibited";
1040 return "Invalid denyDeleteCurrent setting";
1045 if (deny_non_fast_forwards
&& !is_null_sha1(new_sha1
) &&
1046 !is_null_sha1(old_sha1
) &&
1047 starts_with(name
, "refs/heads/")) {
1048 struct object
*old_object
, *new_object
;
1049 struct commit
*old_commit
, *new_commit
;
1051 old_object
= parse_object(old_sha1
);
1052 new_object
= parse_object(new_sha1
);
1054 if (!old_object
|| !new_object
||
1055 old_object
->type
!= OBJ_COMMIT
||
1056 new_object
->type
!= OBJ_COMMIT
) {
1057 error("bad sha1 objects for %s", name
);
1060 old_commit
= (struct commit
*)old_object
;
1061 new_commit
= (struct commit
*)new_object
;
1062 if (!in_merge_bases(old_commit
, new_commit
)) {
1063 rp_error("denying non-fast-forward %s"
1064 " (you should pull first)", name
);
1065 return "non-fast-forward";
1068 if (run_update_hook(cmd
)) {
1069 rp_error("hook declined to update %s", name
);
1070 return "hook declined";
1073 if (is_null_sha1(new_sha1
)) {
1074 struct strbuf err
= STRBUF_INIT
;
1075 if (!parse_object(old_sha1
)) {
1077 if (ref_exists(name
)) {
1078 rp_warning("Allowing deletion of corrupt ref.");
1080 rp_warning("Deleting a non-existent ref.");
1081 cmd
->did_not_exist
= 1;
1084 if (ref_transaction_delete(transaction
,
1088 rp_error("%s", err
.buf
);
1089 strbuf_release(&err
);
1090 return "failed to delete";
1092 strbuf_release(&err
);
1093 return NULL
; /* good */
1096 struct strbuf err
= STRBUF_INIT
;
1097 if (shallow_update
&& si
->shallow_ref
[cmd
->index
] &&
1098 update_shallow_ref(cmd
, si
))
1099 return "shallow error";
1101 if (ref_transaction_update(transaction
,
1106 rp_error("%s", err
.buf
);
1107 strbuf_release(&err
);
1109 return "failed to update ref";
1111 strbuf_release(&err
);
1113 return NULL
; /* good */
1117 static void run_update_post_hook(struct command
*commands
)
1119 struct command
*cmd
;
1121 struct child_process proc
= CHILD_PROCESS_INIT
;
1124 hook
= find_hook("post-update");
1125 for (argc
= 0, cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1126 if (cmd
->error_string
|| cmd
->did_not_exist
)
1133 argv_array_push(&proc
.args
, hook
);
1134 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1135 if (cmd
->error_string
|| cmd
->did_not_exist
)
1137 argv_array_push(&proc
.args
, cmd
->ref_name
);
1141 proc
.stdout_to_stderr
= 1;
1142 proc
.err
= use_sideband
? -1 : 0;
1144 if (!start_command(&proc
)) {
1146 copy_to_sideband(proc
.err
, -1, NULL
);
1147 finish_command(&proc
);
1151 static void check_aliased_update(struct command
*cmd
, struct string_list
*list
)
1153 struct strbuf buf
= STRBUF_INIT
;
1154 const char *dst_name
;
1155 struct string_list_item
*item
;
1156 struct command
*dst_cmd
;
1157 unsigned char sha1
[GIT_SHA1_RAWSZ
];
1158 char cmd_oldh
[GIT_SHA1_HEXSZ
+ 1],
1159 cmd_newh
[GIT_SHA1_HEXSZ
+ 1],
1160 dst_oldh
[GIT_SHA1_HEXSZ
+ 1],
1161 dst_newh
[GIT_SHA1_HEXSZ
+ 1];
1164 strbuf_addf(&buf
, "%s%s", get_git_namespace(), cmd
->ref_name
);
1165 dst_name
= resolve_ref_unsafe(buf
.buf
, 0, sha1
, &flag
);
1166 strbuf_release(&buf
);
1168 if (!(flag
& REF_ISSYMREF
))
1172 rp_error("refusing update to broken symref '%s'", cmd
->ref_name
);
1173 cmd
->skip_update
= 1;
1174 cmd
->error_string
= "broken symref";
1177 dst_name
= strip_namespace(dst_name
);
1179 if ((item
= string_list_lookup(list
, dst_name
)) == NULL
)
1182 cmd
->skip_update
= 1;
1184 dst_cmd
= (struct command
*) item
->util
;
1186 if (!hashcmp(cmd
->old_sha1
, dst_cmd
->old_sha1
) &&
1187 !hashcmp(cmd
->new_sha1
, dst_cmd
->new_sha1
))
1190 dst_cmd
->skip_update
= 1;
1192 find_unique_abbrev_r(cmd_oldh
, cmd
->old_sha1
, DEFAULT_ABBREV
);
1193 find_unique_abbrev_r(cmd_newh
, cmd
->new_sha1
, DEFAULT_ABBREV
);
1194 find_unique_abbrev_r(dst_oldh
, dst_cmd
->old_sha1
, DEFAULT_ABBREV
);
1195 find_unique_abbrev_r(dst_newh
, dst_cmd
->new_sha1
, DEFAULT_ABBREV
);
1196 rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
1197 " its target '%s' (%s..%s)",
1198 cmd
->ref_name
, cmd_oldh
, cmd_newh
,
1199 dst_cmd
->ref_name
, dst_oldh
, dst_newh
);
1201 cmd
->error_string
= dst_cmd
->error_string
=
1202 "inconsistent aliased update";
1205 static void check_aliased_updates(struct command
*commands
)
1207 struct command
*cmd
;
1208 struct string_list ref_list
= STRING_LIST_INIT_NODUP
;
1210 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1211 struct string_list_item
*item
=
1212 string_list_append(&ref_list
, cmd
->ref_name
);
1213 item
->util
= (void *)cmd
;
1215 string_list_sort(&ref_list
);
1217 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1218 if (!cmd
->error_string
)
1219 check_aliased_update(cmd
, &ref_list
);
1222 string_list_clear(&ref_list
, 0);
1225 static int command_singleton_iterator(void *cb_data
, unsigned char sha1
[20])
1227 struct command
**cmd_list
= cb_data
;
1228 struct command
*cmd
= *cmd_list
;
1230 if (!cmd
|| is_null_sha1(cmd
->new_sha1
))
1231 return -1; /* end of list */
1232 *cmd_list
= NULL
; /* this returns only one */
1233 hashcpy(sha1
, cmd
->new_sha1
);
1237 static void set_connectivity_errors(struct command
*commands
,
1238 struct shallow_info
*si
)
1240 struct command
*cmd
;
1242 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1243 struct command
*singleton
= cmd
;
1244 if (shallow_update
&& si
->shallow_ref
[cmd
->index
])
1245 /* to be checked in update_shallow_ref() */
1247 if (!check_connected(command_singleton_iterator
, &singleton
,
1250 cmd
->error_string
= "missing necessary objects";
1254 struct iterate_data
{
1255 struct command
*cmds
;
1256 struct shallow_info
*si
;
1259 static int iterate_receive_command_list(void *cb_data
, unsigned char sha1
[20])
1261 struct iterate_data
*data
= cb_data
;
1262 struct command
**cmd_list
= &data
->cmds
;
1263 struct command
*cmd
= *cmd_list
;
1265 for (; cmd
; cmd
= cmd
->next
) {
1266 if (shallow_update
&& data
->si
->shallow_ref
[cmd
->index
])
1267 /* to be checked in update_shallow_ref() */
1269 if (!is_null_sha1(cmd
->new_sha1
) && !cmd
->skip_update
) {
1270 hashcpy(sha1
, cmd
->new_sha1
);
1271 *cmd_list
= cmd
->next
;
1276 return -1; /* end of list */
1279 static void reject_updates_to_hidden(struct command
*commands
)
1281 struct strbuf refname_full
= STRBUF_INIT
;
1283 struct command
*cmd
;
1285 strbuf_addstr(&refname_full
, get_git_namespace());
1286 prefix_len
= refname_full
.len
;
1288 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1289 if (cmd
->error_string
)
1292 strbuf_setlen(&refname_full
, prefix_len
);
1293 strbuf_addstr(&refname_full
, cmd
->ref_name
);
1295 if (!ref_is_hidden(cmd
->ref_name
, refname_full
.buf
))
1297 if (is_null_sha1(cmd
->new_sha1
))
1298 cmd
->error_string
= "deny deleting a hidden ref";
1300 cmd
->error_string
= "deny updating a hidden ref";
1303 strbuf_release(&refname_full
);
1306 static int should_process_cmd(struct command
*cmd
)
1308 return !cmd
->error_string
&& !cmd
->skip_update
;
1311 static void warn_if_skipped_connectivity_check(struct command
*commands
,
1312 struct shallow_info
*si
)
1314 struct command
*cmd
;
1315 int checked_connectivity
= 1;
1317 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1318 if (should_process_cmd(cmd
) && si
->shallow_ref
[cmd
->index
]) {
1319 error("BUG: connectivity check has not been run on ref %s",
1321 checked_connectivity
= 0;
1324 if (!checked_connectivity
)
1325 die("BUG: connectivity check skipped???");
1328 static void execute_commands_non_atomic(struct command
*commands
,
1329 struct shallow_info
*si
)
1331 struct command
*cmd
;
1332 struct strbuf err
= STRBUF_INIT
;
1334 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1335 if (!should_process_cmd(cmd
))
1338 transaction
= ref_transaction_begin(&err
);
1340 rp_error("%s", err
.buf
);
1342 cmd
->error_string
= "transaction failed to start";
1346 cmd
->error_string
= update(cmd
, si
);
1348 if (!cmd
->error_string
1349 && ref_transaction_commit(transaction
, &err
)) {
1350 rp_error("%s", err
.buf
);
1352 cmd
->error_string
= "failed to update ref";
1354 ref_transaction_free(transaction
);
1356 strbuf_release(&err
);
1359 static void execute_commands_atomic(struct command
*commands
,
1360 struct shallow_info
*si
)
1362 struct command
*cmd
;
1363 struct strbuf err
= STRBUF_INIT
;
1364 const char *reported_error
= "atomic push failure";
1366 transaction
= ref_transaction_begin(&err
);
1368 rp_error("%s", err
.buf
);
1370 reported_error
= "transaction failed to start";
1374 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1375 if (!should_process_cmd(cmd
))
1378 cmd
->error_string
= update(cmd
, si
);
1380 if (cmd
->error_string
)
1384 if (ref_transaction_commit(transaction
, &err
)) {
1385 rp_error("%s", err
.buf
);
1386 reported_error
= "atomic transaction failed";
1392 for (cmd
= commands
; cmd
; cmd
= cmd
->next
)
1393 if (!cmd
->error_string
)
1394 cmd
->error_string
= reported_error
;
1397 ref_transaction_free(transaction
);
1398 strbuf_release(&err
);
1401 static void execute_commands(struct command
*commands
,
1402 const char *unpacker_error
,
1403 struct shallow_info
*si
,
1404 const struct string_list
*push_options
)
1406 struct check_connected_options opt
= CHECK_CONNECTED_INIT
;
1407 struct command
*cmd
;
1408 unsigned char sha1
[20];
1409 struct iterate_data data
;
1413 if (unpacker_error
) {
1414 for (cmd
= commands
; cmd
; cmd
= cmd
->next
)
1415 cmd
->error_string
= "unpacker error";
1420 memset(&muxer
, 0, sizeof(muxer
));
1421 muxer
.proc
= copy_to_sideband
;
1423 if (!start_async(&muxer
))
1425 /* ...else, continue without relaying sideband */
1428 data
.cmds
= commands
;
1430 opt
.err_fd
= err_fd
;
1431 opt
.progress
= err_fd
&& !quiet
;
1432 if (check_connected(iterate_receive_command_list
, &data
, &opt
))
1433 set_connectivity_errors(commands
, si
);
1436 finish_async(&muxer
);
1438 reject_updates_to_hidden(commands
);
1440 if (run_receive_hook(commands
, "pre-receive", 0, push_options
)) {
1441 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1442 if (!cmd
->error_string
)
1443 cmd
->error_string
= "pre-receive hook declined";
1448 check_aliased_updates(commands
);
1450 free(head_name_to_free
);
1451 head_name
= head_name_to_free
= resolve_refdup("HEAD", 0, sha1
, NULL
);
1454 execute_commands_atomic(commands
, si
);
1456 execute_commands_non_atomic(commands
, si
);
1459 warn_if_skipped_connectivity_check(commands
, si
);
1462 static struct command
**queue_command(struct command
**tail
,
1466 unsigned char old_sha1
[20], new_sha1
[20];
1467 struct command
*cmd
;
1468 const char *refname
;
1474 get_sha1_hex(line
, old_sha1
) ||
1475 get_sha1_hex(line
+ 41, new_sha1
))
1476 die("protocol error: expected old/new/ref, got '%s'", line
);
1478 refname
= line
+ 82;
1479 reflen
= linelen
- 82;
1480 FLEX_ALLOC_MEM(cmd
, ref_name
, refname
, reflen
);
1481 hashcpy(cmd
->old_sha1
, old_sha1
);
1482 hashcpy(cmd
->new_sha1
, new_sha1
);
1487 static void queue_commands_from_cert(struct command
**tail
,
1488 struct strbuf
*push_cert
)
1490 const char *boc
, *eoc
;
1493 die("protocol error: got both push certificate and unsigned commands");
1495 boc
= strstr(push_cert
->buf
, "\n\n");
1497 die("malformed push certificate %.*s", 100, push_cert
->buf
);
1500 eoc
= push_cert
->buf
+ parse_signature(push_cert
->buf
, push_cert
->len
);
1503 const char *eol
= memchr(boc
, '\n', eoc
- boc
);
1504 tail
= queue_command(tail
, boc
, eol
? eol
- boc
: eoc
- eol
);
1505 boc
= eol
? eol
+ 1 : eoc
;
1509 static struct command
*read_head_info(struct sha1_array
*shallow
)
1511 struct command
*commands
= NULL
;
1512 struct command
**p
= &commands
;
1517 line
= packet_read_line(0, &len
);
1521 if (len
== 48 && starts_with(line
, "shallow ")) {
1522 unsigned char sha1
[20];
1523 if (get_sha1_hex(line
+ 8, sha1
))
1524 die("protocol error: expected shallow sha, got '%s'",
1526 sha1_array_append(shallow
, sha1
);
1530 linelen
= strlen(line
);
1531 if (linelen
< len
) {
1532 const char *feature_list
= line
+ linelen
+ 1;
1533 if (parse_feature_request(feature_list
, "report-status"))
1535 if (parse_feature_request(feature_list
, "side-band-64k"))
1536 use_sideband
= LARGE_PACKET_MAX
;
1537 if (parse_feature_request(feature_list
, "quiet"))
1539 if (advertise_atomic_push
1540 && parse_feature_request(feature_list
, "atomic"))
1542 if (advertise_push_options
1543 && parse_feature_request(feature_list
, "push-options"))
1544 use_push_options
= 1;
1547 if (!strcmp(line
, "push-cert")) {
1552 len
= packet_read(0, NULL
, NULL
,
1553 certbuf
, sizeof(certbuf
), 0);
1558 if (!strcmp(certbuf
, "push-cert-end\n"))
1559 break; /* end of cert */
1560 strbuf_addstr(&push_cert
, certbuf
);
1568 p
= queue_command(p
, line
, linelen
);
1572 queue_commands_from_cert(p
, &push_cert
);
1577 static void read_push_options(struct string_list
*options
)
1583 line
= packet_read_line(0, &len
);
1588 string_list_append(options
, line
);
1592 static const char *parse_pack_header(struct pack_header
*hdr
)
1594 switch (read_pack_header(0, hdr
)) {
1596 return "eof before pack header was fully read";
1598 case PH_ERROR_PACK_SIGNATURE
:
1599 return "protocol error (pack signature mismatch detected)";
1601 case PH_ERROR_PROTOCOL
:
1602 return "protocol error (pack version unsupported)";
1605 return "unknown error in parse_pack_header";
1612 static const char *pack_lockfile
;
1614 static const char *unpack(int err_fd
, struct shallow_info
*si
)
1616 struct pack_header hdr
;
1617 const char *hdr_err
;
1620 struct child_process child
= CHILD_PROCESS_INIT
;
1621 int fsck_objects
= (receive_fsck_objects
>= 0
1622 ? receive_fsck_objects
1623 : transfer_fsck_objects
>= 0
1624 ? transfer_fsck_objects
1627 hdr_err
= parse_pack_header(&hdr
);
1633 snprintf(hdr_arg
, sizeof(hdr_arg
),
1634 "--pack_header=%"PRIu32
",%"PRIu32
,
1635 ntohl(hdr
.hdr_version
), ntohl(hdr
.hdr_entries
));
1637 if (si
->nr_ours
|| si
->nr_theirs
) {
1638 alt_shallow_file
= setup_temporary_shallow(si
->shallow
);
1639 argv_array_push(&child
.args
, "--shallow-file");
1640 argv_array_push(&child
.args
, alt_shallow_file
);
1643 if (ntohl(hdr
.hdr_entries
) < unpack_limit
) {
1644 argv_array_pushl(&child
.args
, "unpack-objects", hdr_arg
, NULL
);
1646 argv_array_push(&child
.args
, "-q");
1648 argv_array_pushf(&child
.args
, "--strict%s",
1649 fsck_msg_types
.buf
);
1651 argv_array_pushf(&child
.args
, "--max-input-size=%"PRIuMAX
,
1652 (uintmax_t)max_input_size
);
1653 child
.no_stdout
= 1;
1656 status
= run_command(&child
);
1658 return "unpack-objects abnormal exit";
1662 argv_array_pushl(&child
.args
, "index-pack",
1663 "--stdin", hdr_arg
, NULL
);
1665 if (gethostname(hostname
, sizeof(hostname
)))
1666 xsnprintf(hostname
, sizeof(hostname
), "localhost");
1667 argv_array_pushf(&child
.args
,
1668 "--keep=receive-pack %"PRIuMAX
" on %s",
1669 (uintmax_t)getpid(),
1672 if (!quiet
&& err_fd
)
1673 argv_array_push(&child
.args
, "--show-resolving-progress");
1675 argv_array_push(&child
.args
, "--report-end-of-input");
1677 argv_array_pushf(&child
.args
, "--strict%s",
1678 fsck_msg_types
.buf
);
1680 argv_array_push(&child
.args
, "--fix-thin");
1682 argv_array_pushf(&child
.args
, "--max-input-size=%"PRIuMAX
,
1683 (uintmax_t)max_input_size
);
1687 status
= start_command(&child
);
1689 return "index-pack fork failed";
1690 pack_lockfile
= index_pack_lockfile(child
.out
);
1692 status
= finish_command(&child
);
1694 return "index-pack abnormal exit";
1695 reprepare_packed_git();
1700 static const char *unpack_with_sideband(struct shallow_info
*si
)
1706 return unpack(0, si
);
1708 use_keepalive
= KEEPALIVE_AFTER_NUL
;
1709 memset(&muxer
, 0, sizeof(muxer
));
1710 muxer
.proc
= copy_to_sideband
;
1712 if (start_async(&muxer
))
1715 ret
= unpack(muxer
.in
, si
);
1717 finish_async(&muxer
);
1721 static void prepare_shallow_update(struct command
*commands
,
1722 struct shallow_info
*si
)
1724 int i
, j
, k
, bitmap_size
= (si
->ref
->nr
+ 31) / 32;
1726 ALLOC_ARRAY(si
->used_shallow
, si
->shallow
->nr
);
1727 assign_shallow_commits_to_refs(si
, si
->used_shallow
, NULL
);
1729 si
->need_reachability_test
=
1730 xcalloc(si
->shallow
->nr
, sizeof(*si
->need_reachability_test
));
1732 xcalloc(si
->shallow
->nr
, sizeof(*si
->reachable
));
1733 si
->shallow_ref
= xcalloc(si
->ref
->nr
, sizeof(*si
->shallow_ref
));
1735 for (i
= 0; i
< si
->nr_ours
; i
++)
1736 si
->need_reachability_test
[si
->ours
[i
]] = 1;
1738 for (i
= 0; i
< si
->shallow
->nr
; i
++) {
1739 if (!si
->used_shallow
[i
])
1741 for (j
= 0; j
< bitmap_size
; j
++) {
1742 if (!si
->used_shallow
[i
][j
])
1744 si
->need_reachability_test
[i
]++;
1745 for (k
= 0; k
< 32; k
++)
1746 if (si
->used_shallow
[i
][j
] & (1U << k
))
1747 si
->shallow_ref
[j
* 32 + k
]++;
1751 * true for those associated with some refs and belong
1752 * in "ours" list aka "step 7 not done yet"
1754 si
->need_reachability_test
[i
] =
1755 si
->need_reachability_test
[i
] > 1;
1759 * keep hooks happy by forcing a temporary shallow file via
1760 * env variable because we can't add --shallow-file to every
1761 * command. check_everything_connected() will be done with
1762 * true .git/shallow though.
1764 setenv(GIT_SHALLOW_FILE_ENVIRONMENT
, alt_shallow_file
, 1);
1767 static void update_shallow_info(struct command
*commands
,
1768 struct shallow_info
*si
,
1769 struct sha1_array
*ref
)
1771 struct command
*cmd
;
1773 remove_nonexistent_theirs_shallow(si
);
1774 if (!si
->nr_ours
&& !si
->nr_theirs
) {
1779 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1780 if (is_null_sha1(cmd
->new_sha1
))
1782 sha1_array_append(ref
, cmd
->new_sha1
);
1783 cmd
->index
= ref
->nr
- 1;
1787 if (shallow_update
) {
1788 prepare_shallow_update(commands
, si
);
1792 ALLOC_ARRAY(ref_status
, ref
->nr
);
1793 assign_shallow_commits_to_refs(si
, NULL
, ref_status
);
1794 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1795 if (is_null_sha1(cmd
->new_sha1
))
1797 if (ref_status
[cmd
->index
]) {
1798 cmd
->error_string
= "shallow update not allowed";
1799 cmd
->skip_update
= 1;
1805 static void report(struct command
*commands
, const char *unpack_status
)
1807 struct command
*cmd
;
1808 struct strbuf buf
= STRBUF_INIT
;
1810 packet_buf_write(&buf
, "unpack %s\n",
1811 unpack_status
? unpack_status
: "ok");
1812 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1813 if (!cmd
->error_string
)
1814 packet_buf_write(&buf
, "ok %s\n",
1817 packet_buf_write(&buf
, "ng %s %s\n",
1818 cmd
->ref_name
, cmd
->error_string
);
1820 packet_buf_flush(&buf
);
1823 send_sideband(1, 1, buf
.buf
, buf
.len
, use_sideband
);
1825 write_or_die(1, buf
.buf
, buf
.len
);
1826 strbuf_release(&buf
);
1829 static int delete_only(struct command
*commands
)
1831 struct command
*cmd
;
1832 for (cmd
= commands
; cmd
; cmd
= cmd
->next
) {
1833 if (!is_null_sha1(cmd
->new_sha1
))
1839 int cmd_receive_pack(int argc
, const char **argv
, const char *prefix
)
1841 int advertise_refs
= 0;
1842 struct command
*commands
;
1843 struct sha1_array shallow
= SHA1_ARRAY_INIT
;
1844 struct sha1_array ref
= SHA1_ARRAY_INIT
;
1845 struct shallow_info si
;
1847 struct option options
[] = {
1848 OPT__QUIET(&quiet
, N_("quiet")),
1849 OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc
, NULL
),
1850 OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs
, NULL
),
1851 OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin
, NULL
),
1855 packet_trace_identity("receive-pack");
1857 argc
= parse_options(argc
, argv
, prefix
, options
, receive_pack_usage
, 0);
1860 usage_msg_opt(_("Too many arguments."), receive_pack_usage
, options
);
1862 usage_msg_opt(_("You must specify a directory."), receive_pack_usage
, options
);
1864 service_dir
= argv
[0];
1868 if (!enter_repo(service_dir
, 0))
1869 die("'%s' does not appear to be a git repository", service_dir
);
1871 git_config(receive_pack_config
, NULL
);
1872 if (cert_nonce_seed
)
1873 push_cert_nonce
= prepare_push_cert_nonce(service_dir
, time(NULL
));
1875 if (0 <= transfer_unpack_limit
)
1876 unpack_limit
= transfer_unpack_limit
;
1877 else if (0 <= receive_unpack_limit
)
1878 unpack_limit
= receive_unpack_limit
;
1880 if (advertise_refs
|| !stateless_rpc
) {
1886 if ((commands
= read_head_info(&shallow
)) != NULL
) {
1887 const char *unpack_status
= NULL
;
1888 struct string_list push_options
= STRING_LIST_INIT_DUP
;
1890 if (use_push_options
)
1891 read_push_options(&push_options
);
1893 prepare_shallow_info(&si
, &shallow
);
1894 if (!si
.nr_ours
&& !si
.nr_theirs
)
1896 if (!delete_only(commands
)) {
1897 unpack_status
= unpack_with_sideband(&si
);
1898 update_shallow_info(commands
, &si
, &ref
);
1900 use_keepalive
= KEEPALIVE_ALWAYS
;
1901 execute_commands(commands
, unpack_status
, &si
,
1904 unlink_or_warn(pack_lockfile
);
1906 report(commands
, unpack_status
);
1907 run_receive_hook(commands
, "post-receive", 1,
1909 run_update_post_hook(commands
);
1910 if (push_options
.nr
)
1911 string_list_clear(&push_options
, 0);
1913 const char *argv_gc_auto
[] = {
1914 "gc", "--auto", "--quiet", NULL
,
1916 struct child_process proc
= CHILD_PROCESS_INIT
;
1919 proc
.stdout_to_stderr
= 1;
1920 proc
.err
= use_sideband
? -1 : 0;
1922 proc
.argv
= argv_gc_auto
;
1925 if (!start_command(&proc
)) {
1927 copy_to_sideband(proc
.err
, -1, NULL
);
1928 finish_command(&proc
);
1931 if (auto_update_server_info
)
1932 update_server_info(0);
1933 clear_shallow_info(&si
);
1937 sha1_array_clear(&shallow
);
1938 sha1_array_clear(&ref
);
1939 free((void *)push_cert_nonce
);