use strpbrk(3) to search for characters from a given set
[git.git] / builtin / receive-pack.c
blob411e0b4d999acb36fb05ebde7598568f2c88dd4b
1 #include "builtin.h"
2 #include "repository.h"
3 #include "config.h"
4 #include "lockfile.h"
5 #include "pack.h"
6 #include "refs.h"
7 #include "pkt-line.h"
8 #include "sideband.h"
9 #include "run-command.h"
10 #include "exec-cmd.h"
11 #include "commit.h"
12 #include "object.h"
13 #include "remote.h"
14 #include "connect.h"
15 #include "string-list.h"
16 #include "sha1-array.h"
17 #include "connected.h"
18 #include "argv-array.h"
19 #include "version.h"
20 #include "tag.h"
21 #include "gpg-interface.h"
22 #include "sigchain.h"
23 #include "fsck.h"
24 #include "tmp-objdir.h"
25 #include "oidset.h"
26 #include "packfile.h"
27 #include "object-store.h"
28 #include "protocol.h"
29 #include "commit-reach.h"
31 static const char * const receive_pack_usage[] = {
32 N_("git receive-pack <git-dir>"),
33 NULL
36 enum deny_action {
37 DENY_UNCONFIGURED,
38 DENY_IGNORE,
39 DENY_WARN,
40 DENY_REFUSE,
41 DENY_UPDATE_INSTEAD
44 static int deny_deletes;
45 static int deny_non_fast_forwards;
46 static enum deny_action deny_current_branch = DENY_UNCONFIGURED;
47 static enum deny_action deny_delete_current = DENY_UNCONFIGURED;
48 static int receive_fsck_objects = -1;
49 static int transfer_fsck_objects = -1;
50 static struct strbuf fsck_msg_types = STRBUF_INIT;
51 static int receive_unpack_limit = -1;
52 static int transfer_unpack_limit = -1;
53 static int advertise_atomic_push = 1;
54 static int advertise_push_options;
55 static int unpack_limit = 100;
56 static off_t max_input_size;
57 static int report_status;
58 static int use_sideband;
59 static int use_atomic;
60 static int use_push_options;
61 static int quiet;
62 static int prefer_ofs_delta = 1;
63 static int auto_update_server_info;
64 static int auto_gc = 1;
65 static int reject_thin;
66 static int stateless_rpc;
67 static const char *service_dir;
68 static const char *head_name;
69 static void *head_name_to_free;
70 static int sent_capabilities;
71 static int shallow_update;
72 static const char *alt_shallow_file;
73 static struct strbuf push_cert = STRBUF_INIT;
74 static struct object_id push_cert_oid;
75 static struct signature_check sigcheck;
76 static const char *push_cert_nonce;
77 static const char *cert_nonce_seed;
79 static const char *NONCE_UNSOLICITED = "UNSOLICITED";
80 static const char *NONCE_BAD = "BAD";
81 static const char *NONCE_MISSING = "MISSING";
82 static const char *NONCE_OK = "OK";
83 static const char *NONCE_SLOP = "SLOP";
84 static const char *nonce_status;
85 static long nonce_stamp_slop;
86 static timestamp_t nonce_stamp_slop_limit;
87 static struct ref_transaction *transaction;
89 static enum {
90 KEEPALIVE_NEVER = 0,
91 KEEPALIVE_AFTER_NUL,
92 KEEPALIVE_ALWAYS
93 } use_keepalive;
94 static int keepalive_in_sec = 5;
96 static struct tmp_objdir *tmp_objdir;
98 static enum deny_action parse_deny_action(const char *var, const char *value)
100 if (value) {
101 if (!strcasecmp(value, "ignore"))
102 return DENY_IGNORE;
103 if (!strcasecmp(value, "warn"))
104 return DENY_WARN;
105 if (!strcasecmp(value, "refuse"))
106 return DENY_REFUSE;
107 if (!strcasecmp(value, "updateinstead"))
108 return DENY_UPDATE_INSTEAD;
110 if (git_config_bool(var, value))
111 return DENY_REFUSE;
112 return DENY_IGNORE;
115 static int receive_pack_config(const char *var, const char *value, void *cb)
117 int status = parse_hide_refs_config(var, value, "receive");
119 if (status)
120 return status;
122 if (strcmp(var, "receive.denydeletes") == 0) {
123 deny_deletes = git_config_bool(var, value);
124 return 0;
127 if (strcmp(var, "receive.denynonfastforwards") == 0) {
128 deny_non_fast_forwards = git_config_bool(var, value);
129 return 0;
132 if (strcmp(var, "receive.unpacklimit") == 0) {
133 receive_unpack_limit = git_config_int(var, value);
134 return 0;
137 if (strcmp(var, "transfer.unpacklimit") == 0) {
138 transfer_unpack_limit = git_config_int(var, value);
139 return 0;
142 if (strcmp(var, "receive.fsck.skiplist") == 0) {
143 const char *path;
145 if (git_config_pathname(&path, var, value))
146 return 1;
147 strbuf_addf(&fsck_msg_types, "%cskiplist=%s",
148 fsck_msg_types.len ? ',' : '=', path);
149 free((char *)path);
150 return 0;
153 if (skip_prefix(var, "receive.fsck.", &var)) {
154 if (is_valid_msg_type(var, value))
155 strbuf_addf(&fsck_msg_types, "%c%s=%s",
156 fsck_msg_types.len ? ',' : '=', var, value);
157 else
158 warning("Skipping unknown msg id '%s'", var);
159 return 0;
162 if (strcmp(var, "receive.fsckobjects") == 0) {
163 receive_fsck_objects = git_config_bool(var, value);
164 return 0;
167 if (strcmp(var, "transfer.fsckobjects") == 0) {
168 transfer_fsck_objects = git_config_bool(var, value);
169 return 0;
172 if (!strcmp(var, "receive.denycurrentbranch")) {
173 deny_current_branch = parse_deny_action(var, value);
174 return 0;
177 if (strcmp(var, "receive.denydeletecurrent") == 0) {
178 deny_delete_current = parse_deny_action(var, value);
179 return 0;
182 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
183 prefer_ofs_delta = git_config_bool(var, value);
184 return 0;
187 if (strcmp(var, "receive.updateserverinfo") == 0) {
188 auto_update_server_info = git_config_bool(var, value);
189 return 0;
192 if (strcmp(var, "receive.autogc") == 0) {
193 auto_gc = git_config_bool(var, value);
194 return 0;
197 if (strcmp(var, "receive.shallowupdate") == 0) {
198 shallow_update = git_config_bool(var, value);
199 return 0;
202 if (strcmp(var, "receive.certnonceseed") == 0)
203 return git_config_string(&cert_nonce_seed, var, value);
205 if (strcmp(var, "receive.certnonceslop") == 0) {
206 nonce_stamp_slop_limit = git_config_ulong(var, value);
207 return 0;
210 if (strcmp(var, "receive.advertiseatomic") == 0) {
211 advertise_atomic_push = git_config_bool(var, value);
212 return 0;
215 if (strcmp(var, "receive.advertisepushoptions") == 0) {
216 advertise_push_options = git_config_bool(var, value);
217 return 0;
220 if (strcmp(var, "receive.keepalive") == 0) {
221 keepalive_in_sec = git_config_int(var, value);
222 return 0;
225 if (strcmp(var, "receive.maxinputsize") == 0) {
226 max_input_size = git_config_int64(var, value);
227 return 0;
230 return git_default_config(var, value, cb);
233 static void show_ref(const char *path, const struct object_id *oid)
235 if (sent_capabilities) {
236 packet_write_fmt(1, "%s %s\n", oid_to_hex(oid), path);
237 } else {
238 struct strbuf cap = STRBUF_INIT;
240 strbuf_addstr(&cap,
241 "report-status delete-refs side-band-64k quiet");
242 if (advertise_atomic_push)
243 strbuf_addstr(&cap, " atomic");
244 if (prefer_ofs_delta)
245 strbuf_addstr(&cap, " ofs-delta");
246 if (push_cert_nonce)
247 strbuf_addf(&cap, " push-cert=%s", push_cert_nonce);
248 if (advertise_push_options)
249 strbuf_addstr(&cap, " push-options");
250 strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized());
251 packet_write_fmt(1, "%s %s%c%s\n",
252 oid_to_hex(oid), path, 0, cap.buf);
253 strbuf_release(&cap);
254 sent_capabilities = 1;
258 static int show_ref_cb(const char *path_full, const struct object_id *oid,
259 int flag, void *data)
261 struct oidset *seen = data;
262 const char *path = strip_namespace(path_full);
264 if (ref_is_hidden(path, path_full))
265 return 0;
268 * Advertise refs outside our current namespace as ".have"
269 * refs, so that the client can use them to minimize data
270 * transfer but will otherwise ignore them.
272 if (!path) {
273 if (oidset_insert(seen, oid))
274 return 0;
275 path = ".have";
276 } else {
277 oidset_insert(seen, oid);
279 show_ref(path, oid);
280 return 0;
283 static void show_one_alternate_ref(const struct object_id *oid,
284 void *data)
286 struct oidset *seen = data;
288 if (oidset_insert(seen, oid))
289 return;
291 show_ref(".have", oid);
294 static void write_head_info(void)
296 static struct oidset seen = OIDSET_INIT;
298 for_each_ref(show_ref_cb, &seen);
299 for_each_alternate_ref(show_one_alternate_ref, &seen);
300 oidset_clear(&seen);
301 if (!sent_capabilities)
302 show_ref("capabilities^{}", &null_oid);
304 advertise_shallow_grafts(1);
306 /* EOF */
307 packet_flush(1);
310 struct command {
311 struct command *next;
312 const char *error_string;
313 unsigned int skip_update:1,
314 did_not_exist:1;
315 int index;
316 struct object_id old_oid;
317 struct object_id new_oid;
318 char ref_name[FLEX_ARRAY]; /* more */
321 static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
322 static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
324 static void report_message(const char *prefix, const char *err, va_list params)
326 int sz;
327 char msg[4096];
329 sz = xsnprintf(msg, sizeof(msg), "%s", prefix);
330 sz += vsnprintf(msg + sz, sizeof(msg) - sz, err, params);
331 if (sz > (sizeof(msg) - 1))
332 sz = sizeof(msg) - 1;
333 msg[sz++] = '\n';
335 if (use_sideband)
336 send_sideband(1, 2, msg, sz, use_sideband);
337 else
338 xwrite(2, msg, sz);
341 static void rp_warning(const char *err, ...)
343 va_list params;
344 va_start(params, err);
345 report_message("warning: ", err, params);
346 va_end(params);
349 static void rp_error(const char *err, ...)
351 va_list params;
352 va_start(params, err);
353 report_message("error: ", err, params);
354 va_end(params);
357 static int copy_to_sideband(int in, int out, void *arg)
359 char data[128];
360 int keepalive_active = 0;
362 if (keepalive_in_sec <= 0)
363 use_keepalive = KEEPALIVE_NEVER;
364 if (use_keepalive == KEEPALIVE_ALWAYS)
365 keepalive_active = 1;
367 while (1) {
368 ssize_t sz;
370 if (keepalive_active) {
371 struct pollfd pfd;
372 int ret;
374 pfd.fd = in;
375 pfd.events = POLLIN;
376 ret = poll(&pfd, 1, 1000 * keepalive_in_sec);
378 if (ret < 0) {
379 if (errno == EINTR)
380 continue;
381 else
382 break;
383 } else if (ret == 0) {
384 /* no data; send a keepalive packet */
385 static const char buf[] = "0005\1";
386 write_or_die(1, buf, sizeof(buf) - 1);
387 continue;
388 } /* else there is actual data to read */
391 sz = xread(in, data, sizeof(data));
392 if (sz <= 0)
393 break;
395 if (use_keepalive == KEEPALIVE_AFTER_NUL && !keepalive_active) {
396 const char *p = memchr(data, '\0', sz);
397 if (p) {
399 * The NUL tells us to start sending keepalives. Make
400 * sure we send any other data we read along
401 * with it.
403 keepalive_active = 1;
404 send_sideband(1, 2, data, p - data, use_sideband);
405 send_sideband(1, 2, p + 1, sz - (p - data + 1), use_sideband);
406 continue;
411 * Either we're not looking for a NUL signal, or we didn't see
412 * it yet; just pass along the data.
414 send_sideband(1, 2, data, sz, use_sideband);
416 close(in);
417 return 0;
420 static void hmac(unsigned char *out,
421 const char *key_in, size_t key_len,
422 const char *text, size_t text_len)
424 unsigned char key[GIT_MAX_BLKSZ];
425 unsigned char k_ipad[GIT_MAX_BLKSZ];
426 unsigned char k_opad[GIT_MAX_BLKSZ];
427 int i;
428 git_hash_ctx ctx;
430 /* RFC 2104 2. (1) */
431 memset(key, '\0', GIT_MAX_BLKSZ);
432 if (the_hash_algo->blksz < key_len) {
433 the_hash_algo->init_fn(&ctx);
434 the_hash_algo->update_fn(&ctx, key_in, key_len);
435 the_hash_algo->final_fn(key, &ctx);
436 } else {
437 memcpy(key, key_in, key_len);
440 /* RFC 2104 2. (2) & (5) */
441 for (i = 0; i < sizeof(key); i++) {
442 k_ipad[i] = key[i] ^ 0x36;
443 k_opad[i] = key[i] ^ 0x5c;
446 /* RFC 2104 2. (3) & (4) */
447 the_hash_algo->init_fn(&ctx);
448 the_hash_algo->update_fn(&ctx, k_ipad, sizeof(k_ipad));
449 the_hash_algo->update_fn(&ctx, text, text_len);
450 the_hash_algo->final_fn(out, &ctx);
452 /* RFC 2104 2. (6) & (7) */
453 the_hash_algo->init_fn(&ctx);
454 the_hash_algo->update_fn(&ctx, k_opad, sizeof(k_opad));
455 the_hash_algo->update_fn(&ctx, out, the_hash_algo->rawsz);
456 the_hash_algo->final_fn(out, &ctx);
459 static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
461 struct strbuf buf = STRBUF_INIT;
462 unsigned char hash[GIT_MAX_RAWSZ];
464 strbuf_addf(&buf, "%s:%"PRItime, path, stamp);
465 hmac(hash, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));
466 strbuf_release(&buf);
468 /* RFC 2104 5. HMAC-SHA1-80 */
469 strbuf_addf(&buf, "%"PRItime"-%.*s", stamp, (int)the_hash_algo->hexsz, hash_to_hex(hash));
470 return strbuf_detach(&buf, NULL);
474 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
475 * after dropping "_commit" from its name and possibly moving it out
476 * of commit.c
478 static char *find_header(const char *msg, size_t len, const char *key,
479 const char **next_line)
481 int key_len = strlen(key);
482 const char *line = msg;
484 while (line && line < msg + len) {
485 const char *eol = strchrnul(line, '\n');
487 if ((msg + len <= eol) || line == eol)
488 return NULL;
489 if (line + key_len < eol &&
490 !memcmp(line, key, key_len) && line[key_len] == ' ') {
491 int offset = key_len + 1;
492 if (next_line)
493 *next_line = *eol ? eol + 1 : eol;
494 return xmemdupz(line + offset, (eol - line) - offset);
496 line = *eol ? eol + 1 : NULL;
498 return NULL;
501 static const char *check_nonce(const char *buf, size_t len)
503 char *nonce = find_header(buf, len, "nonce", NULL);
504 timestamp_t stamp, ostamp;
505 char *bohmac, *expect = NULL;
506 const char *retval = NONCE_BAD;
508 if (!nonce) {
509 retval = NONCE_MISSING;
510 goto leave;
511 } else if (!push_cert_nonce) {
512 retval = NONCE_UNSOLICITED;
513 goto leave;
514 } else if (!strcmp(push_cert_nonce, nonce)) {
515 retval = NONCE_OK;
516 goto leave;
519 if (!stateless_rpc) {
520 /* returned nonce MUST match what we gave out earlier */
521 retval = NONCE_BAD;
522 goto leave;
526 * In stateless mode, we may be receiving a nonce issued by
527 * another instance of the server that serving the same
528 * repository, and the timestamps may not match, but the
529 * nonce-seed and dir should match, so we can recompute and
530 * report the time slop.
532 * In addition, when a nonce issued by another instance has
533 * timestamp within receive.certnonceslop seconds, we pretend
534 * as if we issued that nonce when reporting to the hook.
537 /* nonce is concat(<seconds-since-epoch>, "-", <hmac>) */
538 if (*nonce <= '0' || '9' < *nonce) {
539 retval = NONCE_BAD;
540 goto leave;
542 stamp = parse_timestamp(nonce, &bohmac, 10);
543 if (bohmac == nonce || bohmac[0] != '-') {
544 retval = NONCE_BAD;
545 goto leave;
548 expect = prepare_push_cert_nonce(service_dir, stamp);
549 if (strcmp(expect, nonce)) {
550 /* Not what we would have signed earlier */
551 retval = NONCE_BAD;
552 goto leave;
556 * By how many seconds is this nonce stale? Negative value
557 * would mean it was issued by another server with its clock
558 * skewed in the future.
560 ostamp = parse_timestamp(push_cert_nonce, NULL, 10);
561 nonce_stamp_slop = (long)ostamp - (long)stamp;
563 if (nonce_stamp_slop_limit &&
564 labs(nonce_stamp_slop) <= nonce_stamp_slop_limit) {
566 * Pretend as if the received nonce (which passes the
567 * HMAC check, so it is not a forged by third-party)
568 * is what we issued.
570 free((void *)push_cert_nonce);
571 push_cert_nonce = xstrdup(nonce);
572 retval = NONCE_OK;
573 } else {
574 retval = NONCE_SLOP;
577 leave:
578 free(nonce);
579 free(expect);
580 return retval;
584 * Return 1 if there is no push_cert or if the push options in push_cert are
585 * the same as those in the argument; 0 otherwise.
587 static int check_cert_push_options(const struct string_list *push_options)
589 const char *buf = push_cert.buf;
590 int len = push_cert.len;
592 char *option;
593 const char *next_line;
594 int options_seen = 0;
596 int retval = 1;
598 if (!len)
599 return 1;
601 while ((option = find_header(buf, len, "push-option", &next_line))) {
602 len -= (next_line - buf);
603 buf = next_line;
604 options_seen++;
605 if (options_seen > push_options->nr
606 || strcmp(option,
607 push_options->items[options_seen - 1].string)) {
608 retval = 0;
609 goto leave;
611 free(option);
614 if (options_seen != push_options->nr)
615 retval = 0;
617 leave:
618 free(option);
619 return retval;
622 static void prepare_push_cert_sha1(struct child_process *proc)
624 static int already_done;
626 if (!push_cert.len)
627 return;
629 if (!already_done) {
630 int bogs /* beginning_of_gpg_sig */;
632 already_done = 1;
633 if (write_object_file(push_cert.buf, push_cert.len, "blob",
634 &push_cert_oid))
635 oidclr(&push_cert_oid);
637 memset(&sigcheck, '\0', sizeof(sigcheck));
639 bogs = parse_signature(push_cert.buf, push_cert.len);
640 check_signature(push_cert.buf, bogs, push_cert.buf + bogs,
641 push_cert.len - bogs, &sigcheck);
643 nonce_status = check_nonce(push_cert.buf, bogs);
645 if (!is_null_oid(&push_cert_oid)) {
646 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT=%s",
647 oid_to_hex(&push_cert_oid));
648 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_SIGNER=%s",
649 sigcheck.signer ? sigcheck.signer : "");
650 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_KEY=%s",
651 sigcheck.key ? sigcheck.key : "");
652 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_STATUS=%c",
653 sigcheck.result);
654 if (push_cert_nonce) {
655 argv_array_pushf(&proc->env_array,
656 "GIT_PUSH_CERT_NONCE=%s",
657 push_cert_nonce);
658 argv_array_pushf(&proc->env_array,
659 "GIT_PUSH_CERT_NONCE_STATUS=%s",
660 nonce_status);
661 if (nonce_status == NONCE_SLOP)
662 argv_array_pushf(&proc->env_array,
663 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
664 nonce_stamp_slop);
669 struct receive_hook_feed_state {
670 struct command *cmd;
671 int skip_broken;
672 struct strbuf buf;
673 const struct string_list *push_options;
676 typedef int (*feed_fn)(void *, const char **, size_t *);
677 static int run_and_feed_hook(const char *hook_name, feed_fn feed,
678 struct receive_hook_feed_state *feed_state)
680 struct child_process proc = CHILD_PROCESS_INIT;
681 struct async muxer;
682 const char *argv[2];
683 int code;
685 argv[0] = find_hook(hook_name);
686 if (!argv[0])
687 return 0;
689 argv[1] = NULL;
691 proc.argv = argv;
692 proc.in = -1;
693 proc.stdout_to_stderr = 1;
694 proc.trace2_hook_name = hook_name;
696 if (feed_state->push_options) {
697 int i;
698 for (i = 0; i < feed_state->push_options->nr; i++)
699 argv_array_pushf(&proc.env_array,
700 "GIT_PUSH_OPTION_%d=%s", i,
701 feed_state->push_options->items[i].string);
702 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT=%d",
703 feed_state->push_options->nr);
704 } else
705 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT");
707 if (tmp_objdir)
708 argv_array_pushv(&proc.env_array, tmp_objdir_env(tmp_objdir));
710 if (use_sideband) {
711 memset(&muxer, 0, sizeof(muxer));
712 muxer.proc = copy_to_sideband;
713 muxer.in = -1;
714 code = start_async(&muxer);
715 if (code)
716 return code;
717 proc.err = muxer.in;
720 prepare_push_cert_sha1(&proc);
722 code = start_command(&proc);
723 if (code) {
724 if (use_sideband)
725 finish_async(&muxer);
726 return code;
729 sigchain_push(SIGPIPE, SIG_IGN);
731 while (1) {
732 const char *buf;
733 size_t n;
734 if (feed(feed_state, &buf, &n))
735 break;
736 if (write_in_full(proc.in, buf, n) < 0)
737 break;
739 close(proc.in);
740 if (use_sideband)
741 finish_async(&muxer);
743 sigchain_pop(SIGPIPE);
745 return finish_command(&proc);
748 static int feed_receive_hook(void *state_, const char **bufp, size_t *sizep)
750 struct receive_hook_feed_state *state = state_;
751 struct command *cmd = state->cmd;
753 while (cmd &&
754 state->skip_broken && (cmd->error_string || cmd->did_not_exist))
755 cmd = cmd->next;
756 if (!cmd)
757 return -1; /* EOF */
758 strbuf_reset(&state->buf);
759 strbuf_addf(&state->buf, "%s %s %s\n",
760 oid_to_hex(&cmd->old_oid), oid_to_hex(&cmd->new_oid),
761 cmd->ref_name);
762 state->cmd = cmd->next;
763 if (bufp) {
764 *bufp = state->buf.buf;
765 *sizep = state->buf.len;
767 return 0;
770 static int run_receive_hook(struct command *commands,
771 const char *hook_name,
772 int skip_broken,
773 const struct string_list *push_options)
775 struct receive_hook_feed_state state;
776 int status;
778 strbuf_init(&state.buf, 0);
779 state.cmd = commands;
780 state.skip_broken = skip_broken;
781 if (feed_receive_hook(&state, NULL, NULL))
782 return 0;
783 state.cmd = commands;
784 state.push_options = push_options;
785 status = run_and_feed_hook(hook_name, feed_receive_hook, &state);
786 strbuf_release(&state.buf);
787 return status;
790 static int run_update_hook(struct command *cmd)
792 const char *argv[5];
793 struct child_process proc = CHILD_PROCESS_INIT;
794 int code;
796 argv[0] = find_hook("update");
797 if (!argv[0])
798 return 0;
800 argv[1] = cmd->ref_name;
801 argv[2] = oid_to_hex(&cmd->old_oid);
802 argv[3] = oid_to_hex(&cmd->new_oid);
803 argv[4] = NULL;
805 proc.no_stdin = 1;
806 proc.stdout_to_stderr = 1;
807 proc.err = use_sideband ? -1 : 0;
808 proc.argv = argv;
809 proc.trace2_hook_name = "update";
811 code = start_command(&proc);
812 if (code)
813 return code;
814 if (use_sideband)
815 copy_to_sideband(proc.err, -1, NULL);
816 return finish_command(&proc);
819 static int is_ref_checked_out(const char *ref)
821 if (is_bare_repository())
822 return 0;
824 if (!head_name)
825 return 0;
826 return !strcmp(head_name, ref);
829 static char *refuse_unconfigured_deny_msg =
830 N_("By default, updating the current branch in a non-bare repository\n"
831 "is denied, because it will make the index and work tree inconsistent\n"
832 "with what you pushed, and will require 'git reset --hard' to match\n"
833 "the work tree to HEAD.\n"
834 "\n"
835 "You can set the 'receive.denyCurrentBranch' configuration variable\n"
836 "to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
837 "its current branch; however, this is not recommended unless you\n"
838 "arranged to update its work tree to match what you pushed in some\n"
839 "other way.\n"
840 "\n"
841 "To squelch this message and still keep the default behaviour, set\n"
842 "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
844 static void refuse_unconfigured_deny(void)
846 rp_error("%s", _(refuse_unconfigured_deny_msg));
849 static char *refuse_unconfigured_deny_delete_current_msg =
850 N_("By default, deleting the current branch is denied, because the next\n"
851 "'git clone' won't result in any file checked out, causing confusion.\n"
852 "\n"
853 "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
854 "'warn' or 'ignore' in the remote repository to allow deleting the\n"
855 "current branch, with or without a warning message.\n"
856 "\n"
857 "To squelch this message, you can set it to 'refuse'.");
859 static void refuse_unconfigured_deny_delete_current(void)
861 rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
864 static int command_singleton_iterator(void *cb_data, struct object_id *oid);
865 static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
867 struct lock_file shallow_lock = LOCK_INIT;
868 struct oid_array extra = OID_ARRAY_INIT;
869 struct check_connected_options opt = CHECK_CONNECTED_INIT;
870 uint32_t mask = 1 << (cmd->index % 32);
871 int i;
873 trace_printf_key(&trace_shallow,
874 "shallow: update_shallow_ref %s\n", cmd->ref_name);
875 for (i = 0; i < si->shallow->nr; i++)
876 if (si->used_shallow[i] &&
877 (si->used_shallow[i][cmd->index / 32] & mask) &&
878 !delayed_reachability_test(si, i))
879 oid_array_append(&extra, &si->shallow->oid[i]);
881 opt.env = tmp_objdir_env(tmp_objdir);
882 setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra);
883 if (check_connected(command_singleton_iterator, cmd, &opt)) {
884 rollback_lock_file(&shallow_lock);
885 oid_array_clear(&extra);
886 return -1;
889 commit_lock_file(&shallow_lock);
892 * Make sure setup_alternate_shallow() for the next ref does
893 * not lose these new roots..
895 for (i = 0; i < extra.nr; i++)
896 register_shallow(the_repository, &extra.oid[i]);
898 si->shallow_ref[cmd->index] = 0;
899 oid_array_clear(&extra);
900 return 0;
904 * NEEDSWORK: we should consolidate various implementions of "are we
905 * on an unborn branch?" test into one, and make the unified one more
906 * robust. !get_sha1() based check used here and elsewhere would not
907 * allow us to tell an unborn branch from corrupt ref, for example.
908 * For the purpose of fixing "deploy-to-update does not work when
909 * pushing into an empty repository" issue, this should suffice for
910 * now.
912 static int head_has_history(void)
914 struct object_id oid;
916 return !get_oid("HEAD", &oid);
919 static const char *push_to_deploy(unsigned char *sha1,
920 struct argv_array *env,
921 const char *work_tree)
923 const char *update_refresh[] = {
924 "update-index", "-q", "--ignore-submodules", "--refresh", NULL
926 const char *diff_files[] = {
927 "diff-files", "--quiet", "--ignore-submodules", "--", NULL
929 const char *diff_index[] = {
930 "diff-index", "--quiet", "--cached", "--ignore-submodules",
931 NULL, "--", NULL
933 const char *read_tree[] = {
934 "read-tree", "-u", "-m", NULL, NULL
936 struct child_process child = CHILD_PROCESS_INIT;
938 child.argv = update_refresh;
939 child.env = env->argv;
940 child.dir = work_tree;
941 child.no_stdin = 1;
942 child.stdout_to_stderr = 1;
943 child.git_cmd = 1;
944 if (run_command(&child))
945 return "Up-to-date check failed";
947 /* run_command() does not clean up completely; reinitialize */
948 child_process_init(&child);
949 child.argv = diff_files;
950 child.env = env->argv;
951 child.dir = work_tree;
952 child.no_stdin = 1;
953 child.stdout_to_stderr = 1;
954 child.git_cmd = 1;
955 if (run_command(&child))
956 return "Working directory has unstaged changes";
958 /* diff-index with either HEAD or an empty tree */
959 diff_index[4] = head_has_history() ? "HEAD" : empty_tree_oid_hex();
961 child_process_init(&child);
962 child.argv = diff_index;
963 child.env = env->argv;
964 child.no_stdin = 1;
965 child.no_stdout = 1;
966 child.stdout_to_stderr = 0;
967 child.git_cmd = 1;
968 if (run_command(&child))
969 return "Working directory has staged changes";
971 read_tree[3] = hash_to_hex(sha1);
972 child_process_init(&child);
973 child.argv = read_tree;
974 child.env = env->argv;
975 child.dir = work_tree;
976 child.no_stdin = 1;
977 child.no_stdout = 1;
978 child.stdout_to_stderr = 0;
979 child.git_cmd = 1;
980 if (run_command(&child))
981 return "Could not update working tree to new HEAD";
983 return NULL;
986 static const char *push_to_checkout_hook = "push-to-checkout";
988 static const char *push_to_checkout(unsigned char *hash,
989 struct argv_array *env,
990 const char *work_tree)
992 argv_array_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
993 if (run_hook_le(env->argv, push_to_checkout_hook,
994 hash_to_hex(hash), NULL))
995 return "push-to-checkout hook declined";
996 else
997 return NULL;
1000 static const char *update_worktree(unsigned char *sha1)
1002 const char *retval;
1003 const char *work_tree = git_work_tree_cfg ? git_work_tree_cfg : "..";
1004 struct argv_array env = ARGV_ARRAY_INIT;
1006 if (is_bare_repository())
1007 return "denyCurrentBranch = updateInstead needs a worktree";
1009 argv_array_pushf(&env, "GIT_DIR=%s", absolute_path(get_git_dir()));
1011 if (!find_hook(push_to_checkout_hook))
1012 retval = push_to_deploy(sha1, &env, work_tree);
1013 else
1014 retval = push_to_checkout(sha1, &env, work_tree);
1016 argv_array_clear(&env);
1017 return retval;
1020 static const char *update(struct command *cmd, struct shallow_info *si)
1022 const char *name = cmd->ref_name;
1023 struct strbuf namespaced_name_buf = STRBUF_INIT;
1024 static char *namespaced_name;
1025 const char *ret;
1026 struct object_id *old_oid = &cmd->old_oid;
1027 struct object_id *new_oid = &cmd->new_oid;
1028 int do_update_worktree = 0;
1030 /* only refs/... are allowed */
1031 if (!starts_with(name, "refs/") || check_refname_format(name + 5, 0)) {
1032 rp_error("refusing to create funny ref '%s' remotely", name);
1033 return "funny refname";
1036 strbuf_addf(&namespaced_name_buf, "%s%s", get_git_namespace(), name);
1037 free(namespaced_name);
1038 namespaced_name = strbuf_detach(&namespaced_name_buf, NULL);
1040 if (is_ref_checked_out(namespaced_name)) {
1041 switch (deny_current_branch) {
1042 case DENY_IGNORE:
1043 break;
1044 case DENY_WARN:
1045 rp_warning("updating the current branch");
1046 break;
1047 case DENY_REFUSE:
1048 case DENY_UNCONFIGURED:
1049 rp_error("refusing to update checked out branch: %s", name);
1050 if (deny_current_branch == DENY_UNCONFIGURED)
1051 refuse_unconfigured_deny();
1052 return "branch is currently checked out";
1053 case DENY_UPDATE_INSTEAD:
1054 /* pass -- let other checks intervene first */
1055 do_update_worktree = 1;
1056 break;
1060 if (!is_null_oid(new_oid) && !has_object_file(new_oid)) {
1061 error("unpack should have generated %s, "
1062 "but I can't find it!", oid_to_hex(new_oid));
1063 return "bad pack";
1066 if (!is_null_oid(old_oid) && is_null_oid(new_oid)) {
1067 if (deny_deletes && starts_with(name, "refs/heads/")) {
1068 rp_error("denying ref deletion for %s", name);
1069 return "deletion prohibited";
1072 if (head_name && !strcmp(namespaced_name, head_name)) {
1073 switch (deny_delete_current) {
1074 case DENY_IGNORE:
1075 break;
1076 case DENY_WARN:
1077 rp_warning("deleting the current branch");
1078 break;
1079 case DENY_REFUSE:
1080 case DENY_UNCONFIGURED:
1081 case DENY_UPDATE_INSTEAD:
1082 if (deny_delete_current == DENY_UNCONFIGURED)
1083 refuse_unconfigured_deny_delete_current();
1084 rp_error("refusing to delete the current branch: %s", name);
1085 return "deletion of the current branch prohibited";
1086 default:
1087 return "Invalid denyDeleteCurrent setting";
1092 if (deny_non_fast_forwards && !is_null_oid(new_oid) &&
1093 !is_null_oid(old_oid) &&
1094 starts_with(name, "refs/heads/")) {
1095 struct object *old_object, *new_object;
1096 struct commit *old_commit, *new_commit;
1098 old_object = parse_object(the_repository, old_oid);
1099 new_object = parse_object(the_repository, new_oid);
1101 if (!old_object || !new_object ||
1102 old_object->type != OBJ_COMMIT ||
1103 new_object->type != OBJ_COMMIT) {
1104 error("bad sha1 objects for %s", name);
1105 return "bad ref";
1107 old_commit = (struct commit *)old_object;
1108 new_commit = (struct commit *)new_object;
1109 if (!in_merge_bases(old_commit, new_commit)) {
1110 rp_error("denying non-fast-forward %s"
1111 " (you should pull first)", name);
1112 return "non-fast-forward";
1115 if (run_update_hook(cmd)) {
1116 rp_error("hook declined to update %s", name);
1117 return "hook declined";
1120 if (do_update_worktree) {
1121 ret = update_worktree(new_oid->hash);
1122 if (ret)
1123 return ret;
1126 if (is_null_oid(new_oid)) {
1127 struct strbuf err = STRBUF_INIT;
1128 if (!parse_object(the_repository, old_oid)) {
1129 old_oid = NULL;
1130 if (ref_exists(name)) {
1131 rp_warning("Allowing deletion of corrupt ref.");
1132 } else {
1133 rp_warning("Deleting a non-existent ref.");
1134 cmd->did_not_exist = 1;
1137 if (ref_transaction_delete(transaction,
1138 namespaced_name,
1139 old_oid,
1140 0, "push", &err)) {
1141 rp_error("%s", err.buf);
1142 strbuf_release(&err);
1143 return "failed to delete";
1145 strbuf_release(&err);
1146 return NULL; /* good */
1148 else {
1149 struct strbuf err = STRBUF_INIT;
1150 if (shallow_update && si->shallow_ref[cmd->index] &&
1151 update_shallow_ref(cmd, si))
1152 return "shallow error";
1154 if (ref_transaction_update(transaction,
1155 namespaced_name,
1156 new_oid, old_oid,
1157 0, "push",
1158 &err)) {
1159 rp_error("%s", err.buf);
1160 strbuf_release(&err);
1162 return "failed to update ref";
1164 strbuf_release(&err);
1166 return NULL; /* good */
1170 static void run_update_post_hook(struct command *commands)
1172 struct command *cmd;
1173 struct child_process proc = CHILD_PROCESS_INIT;
1174 const char *hook;
1176 hook = find_hook("post-update");
1177 if (!hook)
1178 return;
1180 for (cmd = commands; cmd; cmd = cmd->next) {
1181 if (cmd->error_string || cmd->did_not_exist)
1182 continue;
1183 if (!proc.args.argc)
1184 argv_array_push(&proc.args, hook);
1185 argv_array_push(&proc.args, cmd->ref_name);
1187 if (!proc.args.argc)
1188 return;
1190 proc.no_stdin = 1;
1191 proc.stdout_to_stderr = 1;
1192 proc.err = use_sideband ? -1 : 0;
1193 proc.trace2_hook_name = "post-update";
1195 if (!start_command(&proc)) {
1196 if (use_sideband)
1197 copy_to_sideband(proc.err, -1, NULL);
1198 finish_command(&proc);
1202 static void check_aliased_update_internal(struct command *cmd,
1203 struct string_list *list,
1204 const char *dst_name, int flag)
1206 struct string_list_item *item;
1207 struct command *dst_cmd;
1209 if (!(flag & REF_ISSYMREF))
1210 return;
1212 if (!dst_name) {
1213 rp_error("refusing update to broken symref '%s'", cmd->ref_name);
1214 cmd->skip_update = 1;
1215 cmd->error_string = "broken symref";
1216 return;
1218 dst_name = strip_namespace(dst_name);
1220 if ((item = string_list_lookup(list, dst_name)) == NULL)
1221 return;
1223 cmd->skip_update = 1;
1225 dst_cmd = (struct command *) item->util;
1227 if (oideq(&cmd->old_oid, &dst_cmd->old_oid) &&
1228 oideq(&cmd->new_oid, &dst_cmd->new_oid))
1229 return;
1231 dst_cmd->skip_update = 1;
1233 rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
1234 " its target '%s' (%s..%s)",
1235 cmd->ref_name,
1236 find_unique_abbrev(&cmd->old_oid, DEFAULT_ABBREV),
1237 find_unique_abbrev(&cmd->new_oid, DEFAULT_ABBREV),
1238 dst_cmd->ref_name,
1239 find_unique_abbrev(&dst_cmd->old_oid, DEFAULT_ABBREV),
1240 find_unique_abbrev(&dst_cmd->new_oid, DEFAULT_ABBREV));
1242 cmd->error_string = dst_cmd->error_string =
1243 "inconsistent aliased update";
1246 static void check_aliased_update(struct command *cmd, struct string_list *list)
1248 struct strbuf buf = STRBUF_INIT;
1249 const char *dst_name;
1250 int flag;
1252 strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
1253 dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flag);
1254 check_aliased_update_internal(cmd, list, dst_name, flag);
1255 strbuf_release(&buf);
1258 static void check_aliased_updates(struct command *commands)
1260 struct command *cmd;
1261 struct string_list ref_list = STRING_LIST_INIT_NODUP;
1263 for (cmd = commands; cmd; cmd = cmd->next) {
1264 struct string_list_item *item =
1265 string_list_append(&ref_list, cmd->ref_name);
1266 item->util = (void *)cmd;
1268 string_list_sort(&ref_list);
1270 for (cmd = commands; cmd; cmd = cmd->next) {
1271 if (!cmd->error_string)
1272 check_aliased_update(cmd, &ref_list);
1275 string_list_clear(&ref_list, 0);
1278 static int command_singleton_iterator(void *cb_data, struct object_id *oid)
1280 struct command **cmd_list = cb_data;
1281 struct command *cmd = *cmd_list;
1283 if (!cmd || is_null_oid(&cmd->new_oid))
1284 return -1; /* end of list */
1285 *cmd_list = NULL; /* this returns only one */
1286 oidcpy(oid, &cmd->new_oid);
1287 return 0;
1290 static void set_connectivity_errors(struct command *commands,
1291 struct shallow_info *si)
1293 struct command *cmd;
1295 for (cmd = commands; cmd; cmd = cmd->next) {
1296 struct command *singleton = cmd;
1297 struct check_connected_options opt = CHECK_CONNECTED_INIT;
1299 if (shallow_update && si->shallow_ref[cmd->index])
1300 /* to be checked in update_shallow_ref() */
1301 continue;
1303 opt.env = tmp_objdir_env(tmp_objdir);
1304 if (!check_connected(command_singleton_iterator, &singleton,
1305 &opt))
1306 continue;
1308 cmd->error_string = "missing necessary objects";
1312 struct iterate_data {
1313 struct command *cmds;
1314 struct shallow_info *si;
1317 static int iterate_receive_command_list(void *cb_data, struct object_id *oid)
1319 struct iterate_data *data = cb_data;
1320 struct command **cmd_list = &data->cmds;
1321 struct command *cmd = *cmd_list;
1323 for (; cmd; cmd = cmd->next) {
1324 if (shallow_update && data->si->shallow_ref[cmd->index])
1325 /* to be checked in update_shallow_ref() */
1326 continue;
1327 if (!is_null_oid(&cmd->new_oid) && !cmd->skip_update) {
1328 oidcpy(oid, &cmd->new_oid);
1329 *cmd_list = cmd->next;
1330 return 0;
1333 *cmd_list = NULL;
1334 return -1; /* end of list */
1337 static void reject_updates_to_hidden(struct command *commands)
1339 struct strbuf refname_full = STRBUF_INIT;
1340 size_t prefix_len;
1341 struct command *cmd;
1343 strbuf_addstr(&refname_full, get_git_namespace());
1344 prefix_len = refname_full.len;
1346 for (cmd = commands; cmd; cmd = cmd->next) {
1347 if (cmd->error_string)
1348 continue;
1350 strbuf_setlen(&refname_full, prefix_len);
1351 strbuf_addstr(&refname_full, cmd->ref_name);
1353 if (!ref_is_hidden(cmd->ref_name, refname_full.buf))
1354 continue;
1355 if (is_null_oid(&cmd->new_oid))
1356 cmd->error_string = "deny deleting a hidden ref";
1357 else
1358 cmd->error_string = "deny updating a hidden ref";
1361 strbuf_release(&refname_full);
1364 static int should_process_cmd(struct command *cmd)
1366 return !cmd->error_string && !cmd->skip_update;
1369 static void warn_if_skipped_connectivity_check(struct command *commands,
1370 struct shallow_info *si)
1372 struct command *cmd;
1373 int checked_connectivity = 1;
1375 for (cmd = commands; cmd; cmd = cmd->next) {
1376 if (should_process_cmd(cmd) && si->shallow_ref[cmd->index]) {
1377 error("BUG: connectivity check has not been run on ref %s",
1378 cmd->ref_name);
1379 checked_connectivity = 0;
1382 if (!checked_connectivity)
1383 BUG("connectivity check skipped???");
1386 static void execute_commands_non_atomic(struct command *commands,
1387 struct shallow_info *si)
1389 struct command *cmd;
1390 struct strbuf err = STRBUF_INIT;
1392 for (cmd = commands; cmd; cmd = cmd->next) {
1393 if (!should_process_cmd(cmd))
1394 continue;
1396 transaction = ref_transaction_begin(&err);
1397 if (!transaction) {
1398 rp_error("%s", err.buf);
1399 strbuf_reset(&err);
1400 cmd->error_string = "transaction failed to start";
1401 continue;
1404 cmd->error_string = update(cmd, si);
1406 if (!cmd->error_string
1407 && ref_transaction_commit(transaction, &err)) {
1408 rp_error("%s", err.buf);
1409 strbuf_reset(&err);
1410 cmd->error_string = "failed to update ref";
1412 ref_transaction_free(transaction);
1414 strbuf_release(&err);
1417 static void execute_commands_atomic(struct command *commands,
1418 struct shallow_info *si)
1420 struct command *cmd;
1421 struct strbuf err = STRBUF_INIT;
1422 const char *reported_error = "atomic push failure";
1424 transaction = ref_transaction_begin(&err);
1425 if (!transaction) {
1426 rp_error("%s", err.buf);
1427 strbuf_reset(&err);
1428 reported_error = "transaction failed to start";
1429 goto failure;
1432 for (cmd = commands; cmd; cmd = cmd->next) {
1433 if (!should_process_cmd(cmd))
1434 continue;
1436 cmd->error_string = update(cmd, si);
1438 if (cmd->error_string)
1439 goto failure;
1442 if (ref_transaction_commit(transaction, &err)) {
1443 rp_error("%s", err.buf);
1444 reported_error = "atomic transaction failed";
1445 goto failure;
1447 goto cleanup;
1449 failure:
1450 for (cmd = commands; cmd; cmd = cmd->next)
1451 if (!cmd->error_string)
1452 cmd->error_string = reported_error;
1454 cleanup:
1455 ref_transaction_free(transaction);
1456 strbuf_release(&err);
1459 static void execute_commands(struct command *commands,
1460 const char *unpacker_error,
1461 struct shallow_info *si,
1462 const struct string_list *push_options)
1464 struct check_connected_options opt = CHECK_CONNECTED_INIT;
1465 struct command *cmd;
1466 struct iterate_data data;
1467 struct async muxer;
1468 int err_fd = 0;
1470 if (unpacker_error) {
1471 for (cmd = commands; cmd; cmd = cmd->next)
1472 cmd->error_string = "unpacker error";
1473 return;
1476 if (use_sideband) {
1477 memset(&muxer, 0, sizeof(muxer));
1478 muxer.proc = copy_to_sideband;
1479 muxer.in = -1;
1480 if (!start_async(&muxer))
1481 err_fd = muxer.in;
1482 /* ...else, continue without relaying sideband */
1485 data.cmds = commands;
1486 data.si = si;
1487 opt.err_fd = err_fd;
1488 opt.progress = err_fd && !quiet;
1489 opt.env = tmp_objdir_env(tmp_objdir);
1490 if (check_connected(iterate_receive_command_list, &data, &opt))
1491 set_connectivity_errors(commands, si);
1493 if (use_sideband)
1494 finish_async(&muxer);
1496 reject_updates_to_hidden(commands);
1498 if (run_receive_hook(commands, "pre-receive", 0, push_options)) {
1499 for (cmd = commands; cmd; cmd = cmd->next) {
1500 if (!cmd->error_string)
1501 cmd->error_string = "pre-receive hook declined";
1503 return;
1507 * Now we'll start writing out refs, which means the objects need
1508 * to be in their final positions so that other processes can see them.
1510 if (tmp_objdir_migrate(tmp_objdir) < 0) {
1511 for (cmd = commands; cmd; cmd = cmd->next) {
1512 if (!cmd->error_string)
1513 cmd->error_string = "unable to migrate objects to permanent storage";
1515 return;
1517 tmp_objdir = NULL;
1519 check_aliased_updates(commands);
1521 free(head_name_to_free);
1522 head_name = head_name_to_free = resolve_refdup("HEAD", 0, NULL, NULL);
1524 if (use_atomic)
1525 execute_commands_atomic(commands, si);
1526 else
1527 execute_commands_non_atomic(commands, si);
1529 if (shallow_update)
1530 warn_if_skipped_connectivity_check(commands, si);
1533 static struct command **queue_command(struct command **tail,
1534 const char *line,
1535 int linelen)
1537 struct object_id old_oid, new_oid;
1538 struct command *cmd;
1539 const char *refname;
1540 int reflen;
1541 const char *p;
1543 if (parse_oid_hex(line, &old_oid, &p) ||
1544 *p++ != ' ' ||
1545 parse_oid_hex(p, &new_oid, &p) ||
1546 *p++ != ' ')
1547 die("protocol error: expected old/new/ref, got '%s'", line);
1549 refname = p;
1550 reflen = linelen - (p - line);
1551 FLEX_ALLOC_MEM(cmd, ref_name, refname, reflen);
1552 oidcpy(&cmd->old_oid, &old_oid);
1553 oidcpy(&cmd->new_oid, &new_oid);
1554 *tail = cmd;
1555 return &cmd->next;
1558 static void queue_commands_from_cert(struct command **tail,
1559 struct strbuf *push_cert)
1561 const char *boc, *eoc;
1563 if (*tail)
1564 die("protocol error: got both push certificate and unsigned commands");
1566 boc = strstr(push_cert->buf, "\n\n");
1567 if (!boc)
1568 die("malformed push certificate %.*s", 100, push_cert->buf);
1569 else
1570 boc += 2;
1571 eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
1573 while (boc < eoc) {
1574 const char *eol = memchr(boc, '\n', eoc - boc);
1575 tail = queue_command(tail, boc, eol ? eol - boc : eoc - boc);
1576 boc = eol ? eol + 1 : eoc;
1580 static struct command *read_head_info(struct packet_reader *reader,
1581 struct oid_array *shallow)
1583 struct command *commands = NULL;
1584 struct command **p = &commands;
1585 for (;;) {
1586 int linelen;
1588 if (packet_reader_read(reader) != PACKET_READ_NORMAL)
1589 break;
1591 if (reader->pktlen > 8 && starts_with(reader->line, "shallow ")) {
1592 struct object_id oid;
1593 if (get_oid_hex(reader->line + 8, &oid))
1594 die("protocol error: expected shallow sha, got '%s'",
1595 reader->line + 8);
1596 oid_array_append(shallow, &oid);
1597 continue;
1600 linelen = strlen(reader->line);
1601 if (linelen < reader->pktlen) {
1602 const char *feature_list = reader->line + linelen + 1;
1603 if (parse_feature_request(feature_list, "report-status"))
1604 report_status = 1;
1605 if (parse_feature_request(feature_list, "side-band-64k"))
1606 use_sideband = LARGE_PACKET_MAX;
1607 if (parse_feature_request(feature_list, "quiet"))
1608 quiet = 1;
1609 if (advertise_atomic_push
1610 && parse_feature_request(feature_list, "atomic"))
1611 use_atomic = 1;
1612 if (advertise_push_options
1613 && parse_feature_request(feature_list, "push-options"))
1614 use_push_options = 1;
1617 if (!strcmp(reader->line, "push-cert")) {
1618 int true_flush = 0;
1619 int saved_options = reader->options;
1620 reader->options &= ~PACKET_READ_CHOMP_NEWLINE;
1622 for (;;) {
1623 packet_reader_read(reader);
1624 if (reader->status == PACKET_READ_FLUSH) {
1625 true_flush = 1;
1626 break;
1628 if (reader->status != PACKET_READ_NORMAL) {
1629 die("protocol error: got an unexpected packet");
1631 if (!strcmp(reader->line, "push-cert-end\n"))
1632 break; /* end of cert */
1633 strbuf_addstr(&push_cert, reader->line);
1635 reader->options = saved_options;
1637 if (true_flush)
1638 break;
1639 continue;
1642 p = queue_command(p, reader->line, linelen);
1645 if (push_cert.len)
1646 queue_commands_from_cert(p, &push_cert);
1648 return commands;
1651 static void read_push_options(struct packet_reader *reader,
1652 struct string_list *options)
1654 while (1) {
1655 if (packet_reader_read(reader) != PACKET_READ_NORMAL)
1656 break;
1658 string_list_append(options, reader->line);
1662 static const char *parse_pack_header(struct pack_header *hdr)
1664 switch (read_pack_header(0, hdr)) {
1665 case PH_ERROR_EOF:
1666 return "eof before pack header was fully read";
1668 case PH_ERROR_PACK_SIGNATURE:
1669 return "protocol error (pack signature mismatch detected)";
1671 case PH_ERROR_PROTOCOL:
1672 return "protocol error (pack version unsupported)";
1674 default:
1675 return "unknown error in parse_pack_header";
1677 case 0:
1678 return NULL;
1682 static const char *pack_lockfile;
1684 static void push_header_arg(struct argv_array *args, struct pack_header *hdr)
1686 argv_array_pushf(args, "--pack_header=%"PRIu32",%"PRIu32,
1687 ntohl(hdr->hdr_version), ntohl(hdr->hdr_entries));
1690 static const char *unpack(int err_fd, struct shallow_info *si)
1692 struct pack_header hdr;
1693 const char *hdr_err;
1694 int status;
1695 struct child_process child = CHILD_PROCESS_INIT;
1696 int fsck_objects = (receive_fsck_objects >= 0
1697 ? receive_fsck_objects
1698 : transfer_fsck_objects >= 0
1699 ? transfer_fsck_objects
1700 : 0);
1702 hdr_err = parse_pack_header(&hdr);
1703 if (hdr_err) {
1704 if (err_fd > 0)
1705 close(err_fd);
1706 return hdr_err;
1709 if (si->nr_ours || si->nr_theirs) {
1710 alt_shallow_file = setup_temporary_shallow(si->shallow);
1711 argv_array_push(&child.args, "--shallow-file");
1712 argv_array_push(&child.args, alt_shallow_file);
1715 tmp_objdir = tmp_objdir_create();
1716 if (!tmp_objdir) {
1717 if (err_fd > 0)
1718 close(err_fd);
1719 return "unable to create temporary object directory";
1721 child.env = tmp_objdir_env(tmp_objdir);
1724 * Normally we just pass the tmp_objdir environment to the child
1725 * processes that do the heavy lifting, but we may need to see these
1726 * objects ourselves to set up shallow information.
1728 tmp_objdir_add_as_alternate(tmp_objdir);
1730 if (ntohl(hdr.hdr_entries) < unpack_limit) {
1731 argv_array_push(&child.args, "unpack-objects");
1732 push_header_arg(&child.args, &hdr);
1733 if (quiet)
1734 argv_array_push(&child.args, "-q");
1735 if (fsck_objects)
1736 argv_array_pushf(&child.args, "--strict%s",
1737 fsck_msg_types.buf);
1738 if (max_input_size)
1739 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1740 (uintmax_t)max_input_size);
1741 child.no_stdout = 1;
1742 child.err = err_fd;
1743 child.git_cmd = 1;
1744 status = run_command(&child);
1745 if (status)
1746 return "unpack-objects abnormal exit";
1747 } else {
1748 char hostname[HOST_NAME_MAX + 1];
1750 argv_array_pushl(&child.args, "index-pack", "--stdin", NULL);
1751 push_header_arg(&child.args, &hdr);
1753 if (xgethostname(hostname, sizeof(hostname)))
1754 xsnprintf(hostname, sizeof(hostname), "localhost");
1755 argv_array_pushf(&child.args,
1756 "--keep=receive-pack %"PRIuMAX" on %s",
1757 (uintmax_t)getpid(),
1758 hostname);
1760 if (!quiet && err_fd)
1761 argv_array_push(&child.args, "--show-resolving-progress");
1762 if (use_sideband)
1763 argv_array_push(&child.args, "--report-end-of-input");
1764 if (fsck_objects)
1765 argv_array_pushf(&child.args, "--strict%s",
1766 fsck_msg_types.buf);
1767 if (!reject_thin)
1768 argv_array_push(&child.args, "--fix-thin");
1769 if (max_input_size)
1770 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1771 (uintmax_t)max_input_size);
1772 child.out = -1;
1773 child.err = err_fd;
1774 child.git_cmd = 1;
1775 status = start_command(&child);
1776 if (status)
1777 return "index-pack fork failed";
1778 pack_lockfile = index_pack_lockfile(child.out);
1779 close(child.out);
1780 status = finish_command(&child);
1781 if (status)
1782 return "index-pack abnormal exit";
1783 reprepare_packed_git(the_repository);
1785 return NULL;
1788 static const char *unpack_with_sideband(struct shallow_info *si)
1790 struct async muxer;
1791 const char *ret;
1793 if (!use_sideband)
1794 return unpack(0, si);
1796 use_keepalive = KEEPALIVE_AFTER_NUL;
1797 memset(&muxer, 0, sizeof(muxer));
1798 muxer.proc = copy_to_sideband;
1799 muxer.in = -1;
1800 if (start_async(&muxer))
1801 return NULL;
1803 ret = unpack(muxer.in, si);
1805 finish_async(&muxer);
1806 return ret;
1809 static void prepare_shallow_update(struct shallow_info *si)
1811 int i, j, k, bitmap_size = DIV_ROUND_UP(si->ref->nr, 32);
1813 ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
1814 assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
1816 si->need_reachability_test =
1817 xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
1818 si->reachable =
1819 xcalloc(si->shallow->nr, sizeof(*si->reachable));
1820 si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
1822 for (i = 0; i < si->nr_ours; i++)
1823 si->need_reachability_test[si->ours[i]] = 1;
1825 for (i = 0; i < si->shallow->nr; i++) {
1826 if (!si->used_shallow[i])
1827 continue;
1828 for (j = 0; j < bitmap_size; j++) {
1829 if (!si->used_shallow[i][j])
1830 continue;
1831 si->need_reachability_test[i]++;
1832 for (k = 0; k < 32; k++)
1833 if (si->used_shallow[i][j] & (1U << k))
1834 si->shallow_ref[j * 32 + k]++;
1838 * true for those associated with some refs and belong
1839 * in "ours" list aka "step 7 not done yet"
1841 si->need_reachability_test[i] =
1842 si->need_reachability_test[i] > 1;
1846 * keep hooks happy by forcing a temporary shallow file via
1847 * env variable because we can't add --shallow-file to every
1848 * command. check_connected() will be done with
1849 * true .git/shallow though.
1851 setenv(GIT_SHALLOW_FILE_ENVIRONMENT, alt_shallow_file, 1);
1854 static void update_shallow_info(struct command *commands,
1855 struct shallow_info *si,
1856 struct oid_array *ref)
1858 struct command *cmd;
1859 int *ref_status;
1860 remove_nonexistent_theirs_shallow(si);
1861 if (!si->nr_ours && !si->nr_theirs) {
1862 shallow_update = 0;
1863 return;
1866 for (cmd = commands; cmd; cmd = cmd->next) {
1867 if (is_null_oid(&cmd->new_oid))
1868 continue;
1869 oid_array_append(ref, &cmd->new_oid);
1870 cmd->index = ref->nr - 1;
1872 si->ref = ref;
1874 if (shallow_update) {
1875 prepare_shallow_update(si);
1876 return;
1879 ALLOC_ARRAY(ref_status, ref->nr);
1880 assign_shallow_commits_to_refs(si, NULL, ref_status);
1881 for (cmd = commands; cmd; cmd = cmd->next) {
1882 if (is_null_oid(&cmd->new_oid))
1883 continue;
1884 if (ref_status[cmd->index]) {
1885 cmd->error_string = "shallow update not allowed";
1886 cmd->skip_update = 1;
1889 free(ref_status);
1892 static void report(struct command *commands, const char *unpack_status)
1894 struct command *cmd;
1895 struct strbuf buf = STRBUF_INIT;
1897 packet_buf_write(&buf, "unpack %s\n",
1898 unpack_status ? unpack_status : "ok");
1899 for (cmd = commands; cmd; cmd = cmd->next) {
1900 if (!cmd->error_string)
1901 packet_buf_write(&buf, "ok %s\n",
1902 cmd->ref_name);
1903 else
1904 packet_buf_write(&buf, "ng %s %s\n",
1905 cmd->ref_name, cmd->error_string);
1907 packet_buf_flush(&buf);
1909 if (use_sideband)
1910 send_sideband(1, 1, buf.buf, buf.len, use_sideband);
1911 else
1912 write_or_die(1, buf.buf, buf.len);
1913 strbuf_release(&buf);
1916 static int delete_only(struct command *commands)
1918 struct command *cmd;
1919 for (cmd = commands; cmd; cmd = cmd->next) {
1920 if (!is_null_oid(&cmd->new_oid))
1921 return 0;
1923 return 1;
1926 int cmd_receive_pack(int argc, const char **argv, const char *prefix)
1928 int advertise_refs = 0;
1929 struct command *commands;
1930 struct oid_array shallow = OID_ARRAY_INIT;
1931 struct oid_array ref = OID_ARRAY_INIT;
1932 struct shallow_info si;
1933 struct packet_reader reader;
1935 struct option options[] = {
1936 OPT__QUIET(&quiet, N_("quiet")),
1937 OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
1938 OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
1939 OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),
1940 OPT_END()
1943 packet_trace_identity("receive-pack");
1945 argc = parse_options(argc, argv, prefix, options, receive_pack_usage, 0);
1947 if (argc > 1)
1948 usage_msg_opt(_("Too many arguments."), receive_pack_usage, options);
1949 if (argc == 0)
1950 usage_msg_opt(_("You must specify a directory."), receive_pack_usage, options);
1952 service_dir = argv[0];
1954 setup_path();
1956 if (!enter_repo(service_dir, 0))
1957 die("'%s' does not appear to be a git repository", service_dir);
1959 git_config(receive_pack_config, NULL);
1960 if (cert_nonce_seed)
1961 push_cert_nonce = prepare_push_cert_nonce(service_dir, time(NULL));
1963 if (0 <= transfer_unpack_limit)
1964 unpack_limit = transfer_unpack_limit;
1965 else if (0 <= receive_unpack_limit)
1966 unpack_limit = receive_unpack_limit;
1968 switch (determine_protocol_version_server()) {
1969 case protocol_v2:
1971 * push support for protocol v2 has not been implemented yet,
1972 * so ignore the request to use v2 and fallback to using v0.
1974 break;
1975 case protocol_v1:
1977 * v1 is just the original protocol with a version string,
1978 * so just fall through after writing the version string.
1980 if (advertise_refs || !stateless_rpc)
1981 packet_write_fmt(1, "version 1\n");
1983 /* fallthrough */
1984 case protocol_v0:
1985 break;
1986 case protocol_unknown_version:
1987 BUG("unknown protocol version");
1990 if (advertise_refs || !stateless_rpc) {
1991 write_head_info();
1993 if (advertise_refs)
1994 return 0;
1996 packet_reader_init(&reader, 0, NULL, 0,
1997 PACKET_READ_CHOMP_NEWLINE |
1998 PACKET_READ_DIE_ON_ERR_PACKET);
2000 if ((commands = read_head_info(&reader, &shallow)) != NULL) {
2001 const char *unpack_status = NULL;
2002 struct string_list push_options = STRING_LIST_INIT_DUP;
2004 if (use_push_options)
2005 read_push_options(&reader, &push_options);
2006 if (!check_cert_push_options(&push_options)) {
2007 struct command *cmd;
2008 for (cmd = commands; cmd; cmd = cmd->next)
2009 cmd->error_string = "inconsistent push options";
2012 prepare_shallow_info(&si, &shallow);
2013 if (!si.nr_ours && !si.nr_theirs)
2014 shallow_update = 0;
2015 if (!delete_only(commands)) {
2016 unpack_status = unpack_with_sideband(&si);
2017 update_shallow_info(commands, &si, &ref);
2019 use_keepalive = KEEPALIVE_ALWAYS;
2020 execute_commands(commands, unpack_status, &si,
2021 &push_options);
2022 if (pack_lockfile)
2023 unlink_or_warn(pack_lockfile);
2024 if (report_status)
2025 report(commands, unpack_status);
2026 run_receive_hook(commands, "post-receive", 1,
2027 &push_options);
2028 run_update_post_hook(commands);
2029 string_list_clear(&push_options, 0);
2030 if (auto_gc) {
2031 const char *argv_gc_auto[] = {
2032 "gc", "--auto", "--quiet", NULL,
2034 struct child_process proc = CHILD_PROCESS_INIT;
2036 proc.no_stdin = 1;
2037 proc.stdout_to_stderr = 1;
2038 proc.err = use_sideband ? -1 : 0;
2039 proc.git_cmd = 1;
2040 proc.argv = argv_gc_auto;
2042 close_object_store(the_repository->objects);
2043 if (!start_command(&proc)) {
2044 if (use_sideband)
2045 copy_to_sideband(proc.err, -1, NULL);
2046 finish_command(&proc);
2049 if (auto_update_server_info)
2050 update_server_info(0);
2051 clear_shallow_info(&si);
2053 if (use_sideband)
2054 packet_flush(1);
2055 oid_array_clear(&shallow);
2056 oid_array_clear(&ref);
2057 free((void *)push_cert_nonce);
2058 return 0;