Merge branch 'jk/ambiguous-short-object-names'
[git/git-svn.git] / builtin / receive-pack.c
blobf7cd1802524e2ba41a41d6479e69534dc042b404
1 #include "builtin.h"
2 #include "lockfile.h"
3 #include "pack.h"
4 #include "refs.h"
5 #include "pkt-line.h"
6 #include "sideband.h"
7 #include "run-command.h"
8 #include "exec_cmd.h"
9 #include "commit.h"
10 #include "object.h"
11 #include "remote.h"
12 #include "connect.h"
13 #include "transport.h"
14 #include "string-list.h"
15 #include "sha1-array.h"
16 #include "connected.h"
17 #include "argv-array.h"
18 #include "version.h"
19 #include "tag.h"
20 #include "gpg-interface.h"
21 #include "sigchain.h"
22 #include "fsck.h"
24 static const char * const receive_pack_usage[] = {
25 N_("git receive-pack <git-dir>"),
26 NULL
29 enum deny_action {
30 DENY_UNCONFIGURED,
31 DENY_IGNORE,
32 DENY_WARN,
33 DENY_REFUSE,
34 DENY_UPDATE_INSTEAD
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;
54 static int quiet;
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;
82 static enum {
83 KEEPALIVE_NEVER = 0,
84 KEEPALIVE_AFTER_NUL,
85 KEEPALIVE_ALWAYS
86 } use_keepalive;
87 static int keepalive_in_sec = 5;
89 static enum deny_action parse_deny_action(const char *var, const char *value)
91 if (value) {
92 if (!strcasecmp(value, "ignore"))
93 return DENY_IGNORE;
94 if (!strcasecmp(value, "warn"))
95 return DENY_WARN;
96 if (!strcasecmp(value, "refuse"))
97 return DENY_REFUSE;
98 if (!strcasecmp(value, "updateinstead"))
99 return DENY_UPDATE_INSTEAD;
101 if (git_config_bool(var, value))
102 return DENY_REFUSE;
103 return DENY_IGNORE;
106 static int receive_pack_config(const char *var, const char *value, void *cb)
108 int status = parse_hide_refs_config(var, value, "receive");
110 if (status)
111 return status;
113 if (strcmp(var, "receive.denydeletes") == 0) {
114 deny_deletes = git_config_bool(var, value);
115 return 0;
118 if (strcmp(var, "receive.denynonfastforwards") == 0) {
119 deny_non_fast_forwards = git_config_bool(var, value);
120 return 0;
123 if (strcmp(var, "receive.unpacklimit") == 0) {
124 receive_unpack_limit = git_config_int(var, value);
125 return 0;
128 if (strcmp(var, "transfer.unpacklimit") == 0) {
129 transfer_unpack_limit = git_config_int(var, value);
130 return 0;
133 if (strcmp(var, "receive.fsck.skiplist") == 0) {
134 const char *path;
136 if (git_config_pathname(&path, var, value))
137 return 1;
138 strbuf_addf(&fsck_msg_types, "%cskiplist=%s",
139 fsck_msg_types.len ? ',' : '=', path);
140 free((char *)path);
141 return 0;
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);
148 else
149 warning("Skipping unknown msg id '%s'", var);
150 return 0;
153 if (strcmp(var, "receive.fsckobjects") == 0) {
154 receive_fsck_objects = git_config_bool(var, value);
155 return 0;
158 if (strcmp(var, "transfer.fsckobjects") == 0) {
159 transfer_fsck_objects = git_config_bool(var, value);
160 return 0;
163 if (!strcmp(var, "receive.denycurrentbranch")) {
164 deny_current_branch = parse_deny_action(var, value);
165 return 0;
168 if (strcmp(var, "receive.denydeletecurrent") == 0) {
169 deny_delete_current = parse_deny_action(var, value);
170 return 0;
173 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
174 prefer_ofs_delta = git_config_bool(var, value);
175 return 0;
178 if (strcmp(var, "receive.updateserverinfo") == 0) {
179 auto_update_server_info = git_config_bool(var, value);
180 return 0;
183 if (strcmp(var, "receive.autogc") == 0) {
184 auto_gc = git_config_bool(var, value);
185 return 0;
188 if (strcmp(var, "receive.shallowupdate") == 0) {
189 shallow_update = git_config_bool(var, value);
190 return 0;
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);
198 return 0;
201 if (strcmp(var, "receive.advertiseatomic") == 0) {
202 advertise_atomic_push = git_config_bool(var, value);
203 return 0;
206 if (strcmp(var, "receive.advertisepushoptions") == 0) {
207 advertise_push_options = git_config_bool(var, value);
208 return 0;
211 if (strcmp(var, "receive.keepalive") == 0) {
212 keepalive_in_sec = git_config_int(var, value);
213 return 0;
216 if (strcmp(var, "receive.maxinputsize") == 0) {
217 max_input_size = git_config_int64(var, value);
218 return 0;
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);
228 } else {
229 struct strbuf cap = STRBUF_INIT;
231 strbuf_addstr(&cap,
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");
237 if (push_cert_nonce)
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))
255 return 0;
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
263 * well.
265 if (!path)
266 path = ".have";
267 show_ref(path, oid->hash);
268 return 0;
271 static int show_one_alternate_sha1(const unsigned char sha1[20], void *unused)
273 show_ref(".have", sha1);
274 return 0;
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);
296 /* EOF */
297 packet_flush(1);
300 struct command {
301 struct command *next;
302 const char *error_string;
303 unsigned int skip_update:1,
304 did_not_exist:1;
305 int index;
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)
316 int sz;
317 char msg[4096];
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;
323 msg[sz++] = '\n';
325 if (use_sideband)
326 send_sideband(1, 2, msg, sz, use_sideband);
327 else
328 xwrite(2, msg, sz);
331 static void rp_warning(const char *err, ...)
333 va_list params;
334 va_start(params, err);
335 report_message("warning: ", err, params);
336 va_end(params);
339 static void rp_error(const char *err, ...)
341 va_list params;
342 va_start(params, err);
343 report_message("error: ", err, params);
344 va_end(params);
347 static int copy_to_sideband(int in, int out, void *arg)
349 char data[128];
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;
357 while (1) {
358 ssize_t sz;
360 if (keepalive_active) {
361 struct pollfd pfd;
362 int ret;
364 pfd.fd = in;
365 pfd.events = POLLIN;
366 ret = poll(&pfd, 1, 1000 * keepalive_in_sec);
368 if (ret < 0) {
369 if (errno == EINTR)
370 continue;
371 else
372 break;
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);
377 continue;
378 } /* else there is actual data to read */
381 sz = xread(in, data, sizeof(data));
382 if (sz <= 0)
383 break;
385 if (use_keepalive == KEEPALIVE_AFTER_NUL && !keepalive_active) {
386 const char *p = memchr(data, '\0', sz);
387 if (p) {
389 * The NUL tells us to start sending keepalives. Make
390 * sure we send any other data we read along
391 * with it.
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);
396 continue;
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);
406 close(in);
407 return 0;
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];
419 int i;
420 git_SHA_CTX ctx;
422 /* RFC 2104 2. (1) */
423 memset(key, '\0', HMAC_BLOCK_SIZE);
424 if (HMAC_BLOCK_SIZE < key_len) {
425 git_SHA1_Init(&ctx);
426 git_SHA1_Update(&ctx, key_in, key_len);
427 git_SHA1_Final(key, &ctx);
428 } else {
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) */
439 git_SHA1_Init(&ctx);
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) */
445 git_SHA1_Init(&ctx);
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
468 * of commit.c
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)
479 return NULL;
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;
487 return 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;
497 if (!nonce) {
498 retval = NONCE_MISSING;
499 goto leave;
500 } else if (!push_cert_nonce) {
501 retval = NONCE_UNSOLICITED;
502 goto leave;
503 } else if (!strcmp(push_cert_nonce, nonce)) {
504 retval = NONCE_OK;
505 goto leave;
508 if (!stateless_rpc) {
509 /* returned nonce MUST match what we gave out earlier */
510 retval = NONCE_BAD;
511 goto leave;
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) {
528 retval = NONCE_BAD;
529 goto leave;
531 stamp = strtoul(nonce, &bohmac, 10);
532 if (bohmac == nonce || bohmac[0] != '-') {
533 retval = NONCE_BAD;
534 goto leave;
537 expect = prepare_push_cert_nonce(service_dir, stamp);
538 if (strcmp(expect, nonce)) {
539 /* Not what we would have signed earlier */
540 retval = NONCE_BAD;
541 goto leave;
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)
557 * is what we issued.
559 free((void *)push_cert_nonce);
560 push_cert_nonce = xstrdup(nonce);
561 retval = NONCE_OK;
562 } else {
563 retval = NONCE_SLOP;
566 leave:
567 free(nonce);
568 free(expect);
569 return retval;
572 static void prepare_push_cert_sha1(struct child_process *proc)
574 static int already_done;
576 if (!push_cert.len)
577 return;
579 if (!already_done) {
580 struct strbuf gpg_output = STRBUF_INIT;
581 struct strbuf gpg_status = STRBUF_INIT;
582 int bogs /* beginning_of_gpg_sig */;
584 already_done = 1;
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 */
596 } else {
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",
615 sigcheck.result);
616 if (push_cert_nonce) {
617 argv_array_pushf(&proc->env_array,
618 "GIT_PUSH_CERT_NONCE=%s",
619 push_cert_nonce);
620 argv_array_pushf(&proc->env_array,
621 "GIT_PUSH_CERT_NONCE_STATUS=%s",
622 nonce_status);
623 if (nonce_status == NONCE_SLOP)
624 argv_array_pushf(&proc->env_array,
625 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
626 nonce_stamp_slop);
631 struct receive_hook_feed_state {
632 struct command *cmd;
633 int skip_broken;
634 struct strbuf buf;
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;
643 struct async muxer;
644 const char *argv[2];
645 int code;
647 argv[0] = find_hook(hook_name);
648 if (!argv[0])
649 return 0;
651 argv[1] = NULL;
653 proc.argv = argv;
654 proc.in = -1;
655 proc.stdout_to_stderr = 1;
656 if (feed_state->push_options) {
657 int i;
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);
664 } else
665 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT");
667 if (use_sideband) {
668 memset(&muxer, 0, sizeof(muxer));
669 muxer.proc = copy_to_sideband;
670 muxer.in = -1;
671 code = start_async(&muxer);
672 if (code)
673 return code;
674 proc.err = muxer.in;
677 prepare_push_cert_sha1(&proc);
679 code = start_command(&proc);
680 if (code) {
681 if (use_sideband)
682 finish_async(&muxer);
683 return code;
686 sigchain_push(SIGPIPE, SIG_IGN);
688 while (1) {
689 const char *buf;
690 size_t n;
691 if (feed(feed_state, &buf, &n))
692 break;
693 if (write_in_full(proc.in, buf, n) != n)
694 break;
696 close(proc.in);
697 if (use_sideband)
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;
710 while (cmd &&
711 state->skip_broken && (cmd->error_string || cmd->did_not_exist))
712 cmd = cmd->next;
713 if (!cmd)
714 return -1; /* EOF */
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),
718 cmd->ref_name);
719 state->cmd = cmd->next;
720 if (bufp) {
721 *bufp = state->buf.buf;
722 *sizep = state->buf.len;
724 return 0;
727 static int run_receive_hook(struct command *commands,
728 const char *hook_name,
729 int skip_broken,
730 const struct string_list *push_options)
732 struct receive_hook_feed_state state;
733 int status;
735 strbuf_init(&state.buf, 0);
736 state.cmd = commands;
737 state.skip_broken = skip_broken;
738 if (feed_receive_hook(&state, NULL, NULL))
739 return 0;
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);
744 return status;
747 static int run_update_hook(struct command *cmd)
749 const char *argv[5];
750 struct child_process proc = CHILD_PROCESS_INIT;
751 int code;
753 argv[0] = find_hook("update");
754 if (!argv[0])
755 return 0;
757 argv[1] = cmd->ref_name;
758 argv[2] = sha1_to_hex(cmd->old_sha1);
759 argv[3] = sha1_to_hex(cmd->new_sha1);
760 argv[4] = NULL;
762 proc.no_stdin = 1;
763 proc.stdout_to_stderr = 1;
764 proc.err = use_sideband ? -1 : 0;
765 proc.argv = argv;
767 code = start_command(&proc);
768 if (code)
769 return code;
770 if (use_sideband)
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())
778 return 0;
780 if (!head_name)
781 return 0;
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"
790 "\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"
795 "other way.\n"
796 "\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"
808 "\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"
812 "\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);
827 int i;
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);
841 return -1;
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);
855 return 0;
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
865 * now.
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",
886 NULL, "--", NULL
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;
896 child.no_stdin = 1;
897 child.stdout_to_stderr = 1;
898 child.git_cmd = 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;
907 child.no_stdin = 1;
908 child.stdout_to_stderr = 1;
909 child.git_cmd = 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;
919 child.no_stdin = 1;
920 child.no_stdout = 1;
921 child.stdout_to_stderr = 0;
922 child.git_cmd = 1;
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;
931 child.no_stdin = 1;
932 child.no_stdout = 1;
933 child.stdout_to_stderr = 0;
934 child.git_cmd = 1;
935 if (run_command(&child))
936 return "Could not update working tree to new HEAD";
938 return NULL;
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";
951 else
952 return NULL;
955 static const char *update_worktree(unsigned char *sha1)
957 const char *retval;
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);
968 else
969 retval = push_to_checkout(sha1, &env, work_tree);
971 argv_array_clear(&env);
972 return retval;
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) {
994 case DENY_IGNORE:
995 break;
996 case DENY_WARN:
997 rp_warning("updating the current branch");
998 break;
999 case DENY_REFUSE:
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);
1007 if (ret)
1008 return ret;
1009 break;
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));
1016 return "bad pack";
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) {
1027 case DENY_IGNORE:
1028 break;
1029 case DENY_WARN:
1030 rp_warning("deleting the current branch");
1031 break;
1032 case DENY_REFUSE:
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";
1039 default:
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);
1058 return "bad ref";
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)) {
1076 old_sha1 = NULL;
1077 if (ref_exists(name)) {
1078 rp_warning("Allowing deletion of corrupt ref.");
1079 } else {
1080 rp_warning("Deleting a non-existent ref.");
1081 cmd->did_not_exist = 1;
1084 if (ref_transaction_delete(transaction,
1085 namespaced_name,
1086 old_sha1,
1087 0, "push", &err)) {
1088 rp_error("%s", err.buf);
1089 strbuf_release(&err);
1090 return "failed to delete";
1092 strbuf_release(&err);
1093 return NULL; /* good */
1095 else {
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,
1102 namespaced_name,
1103 new_sha1, old_sha1,
1104 0, "push",
1105 &err)) {
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;
1120 int argc;
1121 struct child_process proc = CHILD_PROCESS_INIT;
1122 const char *hook;
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)
1127 continue;
1128 argc++;
1130 if (!argc || !hook)
1131 return;
1133 argv_array_push(&proc.args, hook);
1134 for (cmd = commands; cmd; cmd = cmd->next) {
1135 if (cmd->error_string || cmd->did_not_exist)
1136 continue;
1137 argv_array_push(&proc.args, cmd->ref_name);
1140 proc.no_stdin = 1;
1141 proc.stdout_to_stderr = 1;
1142 proc.err = use_sideband ? -1 : 0;
1144 if (!start_command(&proc)) {
1145 if (use_sideband)
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];
1162 int flag;
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))
1169 return;
1171 if (!dst_name) {
1172 rp_error("refusing update to broken symref '%s'", cmd->ref_name);
1173 cmd->skip_update = 1;
1174 cmd->error_string = "broken symref";
1175 return;
1177 dst_name = strip_namespace(dst_name);
1179 if ((item = string_list_lookup(list, dst_name)) == NULL)
1180 return;
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))
1188 return;
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);
1234 return 0;
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() */
1246 continue;
1247 if (!check_connected(command_singleton_iterator, &singleton,
1248 NULL))
1249 continue;
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() */
1268 continue;
1269 if (!is_null_sha1(cmd->new_sha1) && !cmd->skip_update) {
1270 hashcpy(sha1, cmd->new_sha1);
1271 *cmd_list = cmd->next;
1272 return 0;
1275 *cmd_list = NULL;
1276 return -1; /* end of list */
1279 static void reject_updates_to_hidden(struct command *commands)
1281 struct strbuf refname_full = STRBUF_INIT;
1282 size_t prefix_len;
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)
1290 continue;
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))
1296 continue;
1297 if (is_null_sha1(cmd->new_sha1))
1298 cmd->error_string = "deny deleting a hidden ref";
1299 else
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",
1320 cmd->ref_name);
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))
1336 continue;
1338 transaction = ref_transaction_begin(&err);
1339 if (!transaction) {
1340 rp_error("%s", err.buf);
1341 strbuf_reset(&err);
1342 cmd->error_string = "transaction failed to start";
1343 continue;
1346 cmd->error_string = update(cmd, si);
1348 if (!cmd->error_string
1349 && ref_transaction_commit(transaction, &err)) {
1350 rp_error("%s", err.buf);
1351 strbuf_reset(&err);
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);
1367 if (!transaction) {
1368 rp_error("%s", err.buf);
1369 strbuf_reset(&err);
1370 reported_error = "transaction failed to start";
1371 goto failure;
1374 for (cmd = commands; cmd; cmd = cmd->next) {
1375 if (!should_process_cmd(cmd))
1376 continue;
1378 cmd->error_string = update(cmd, si);
1380 if (cmd->error_string)
1381 goto failure;
1384 if (ref_transaction_commit(transaction, &err)) {
1385 rp_error("%s", err.buf);
1386 reported_error = "atomic transaction failed";
1387 goto failure;
1389 goto cleanup;
1391 failure:
1392 for (cmd = commands; cmd; cmd = cmd->next)
1393 if (!cmd->error_string)
1394 cmd->error_string = reported_error;
1396 cleanup:
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;
1410 struct async muxer;
1411 int err_fd = 0;
1413 if (unpacker_error) {
1414 for (cmd = commands; cmd; cmd = cmd->next)
1415 cmd->error_string = "unpacker error";
1416 return;
1419 if (use_sideband) {
1420 memset(&muxer, 0, sizeof(muxer));
1421 muxer.proc = copy_to_sideband;
1422 muxer.in = -1;
1423 if (!start_async(&muxer))
1424 err_fd = muxer.in;
1425 /* ...else, continue without relaying sideband */
1428 data.cmds = commands;
1429 data.si = si;
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);
1435 if (use_sideband)
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";
1445 return;
1448 check_aliased_updates(commands);
1450 free(head_name_to_free);
1451 head_name = head_name_to_free = resolve_refdup("HEAD", 0, sha1, NULL);
1453 if (use_atomic)
1454 execute_commands_atomic(commands, si);
1455 else
1456 execute_commands_non_atomic(commands, si);
1458 if (shallow_update)
1459 warn_if_skipped_connectivity_check(commands, si);
1462 static struct command **queue_command(struct command **tail,
1463 const char *line,
1464 int linelen)
1466 unsigned char old_sha1[20], new_sha1[20];
1467 struct command *cmd;
1468 const char *refname;
1469 int reflen;
1471 if (linelen < 83 ||
1472 line[40] != ' ' ||
1473 line[81] != ' ' ||
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);
1483 *tail = cmd;
1484 return &cmd->next;
1487 static void queue_commands_from_cert(struct command **tail,
1488 struct strbuf *push_cert)
1490 const char *boc, *eoc;
1492 if (*tail)
1493 die("protocol error: got both push certificate and unsigned commands");
1495 boc = strstr(push_cert->buf, "\n\n");
1496 if (!boc)
1497 die("malformed push certificate %.*s", 100, push_cert->buf);
1498 else
1499 boc += 2;
1500 eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
1502 while (boc < eoc) {
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;
1513 for (;;) {
1514 char *line;
1515 int len, linelen;
1517 line = packet_read_line(0, &len);
1518 if (!line)
1519 break;
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'",
1525 line + 8);
1526 sha1_array_append(shallow, sha1);
1527 continue;
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"))
1534 report_status = 1;
1535 if (parse_feature_request(feature_list, "side-band-64k"))
1536 use_sideband = LARGE_PACKET_MAX;
1537 if (parse_feature_request(feature_list, "quiet"))
1538 quiet = 1;
1539 if (advertise_atomic_push
1540 && parse_feature_request(feature_list, "atomic"))
1541 use_atomic = 1;
1542 if (advertise_push_options
1543 && parse_feature_request(feature_list, "push-options"))
1544 use_push_options = 1;
1547 if (!strcmp(line, "push-cert")) {
1548 int true_flush = 0;
1549 char certbuf[1024];
1551 for (;;) {
1552 len = packet_read(0, NULL, NULL,
1553 certbuf, sizeof(certbuf), 0);
1554 if (!len) {
1555 true_flush = 1;
1556 break;
1558 if (!strcmp(certbuf, "push-cert-end\n"))
1559 break; /* end of cert */
1560 strbuf_addstr(&push_cert, certbuf);
1563 if (true_flush)
1564 break;
1565 continue;
1568 p = queue_command(p, line, linelen);
1571 if (push_cert.len)
1572 queue_commands_from_cert(p, &push_cert);
1574 return commands;
1577 static void read_push_options(struct string_list *options)
1579 while (1) {
1580 char *line;
1581 int len;
1583 line = packet_read_line(0, &len);
1585 if (!line)
1586 break;
1588 string_list_append(options, line);
1592 static const char *parse_pack_header(struct pack_header *hdr)
1594 switch (read_pack_header(0, hdr)) {
1595 case PH_ERROR_EOF:
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)";
1604 default:
1605 return "unknown error in parse_pack_header";
1607 case 0:
1608 return NULL;
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;
1618 int status;
1619 char hdr_arg[38];
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
1625 : 0);
1627 hdr_err = parse_pack_header(&hdr);
1628 if (hdr_err) {
1629 if (err_fd > 0)
1630 close(err_fd);
1631 return hdr_err;
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);
1645 if (quiet)
1646 argv_array_push(&child.args, "-q");
1647 if (fsck_objects)
1648 argv_array_pushf(&child.args, "--strict%s",
1649 fsck_msg_types.buf);
1650 if (max_input_size)
1651 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1652 (uintmax_t)max_input_size);
1653 child.no_stdout = 1;
1654 child.err = err_fd;
1655 child.git_cmd = 1;
1656 status = run_command(&child);
1657 if (status)
1658 return "unpack-objects abnormal exit";
1659 } else {
1660 char hostname[256];
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(),
1670 hostname);
1672 if (!quiet && err_fd)
1673 argv_array_push(&child.args, "--show-resolving-progress");
1674 if (use_sideband)
1675 argv_array_push(&child.args, "--report-end-of-input");
1676 if (fsck_objects)
1677 argv_array_pushf(&child.args, "--strict%s",
1678 fsck_msg_types.buf);
1679 if (!reject_thin)
1680 argv_array_push(&child.args, "--fix-thin");
1681 if (max_input_size)
1682 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1683 (uintmax_t)max_input_size);
1684 child.out = -1;
1685 child.err = err_fd;
1686 child.git_cmd = 1;
1687 status = start_command(&child);
1688 if (status)
1689 return "index-pack fork failed";
1690 pack_lockfile = index_pack_lockfile(child.out);
1691 close(child.out);
1692 status = finish_command(&child);
1693 if (status)
1694 return "index-pack abnormal exit";
1695 reprepare_packed_git();
1697 return NULL;
1700 static const char *unpack_with_sideband(struct shallow_info *si)
1702 struct async muxer;
1703 const char *ret;
1705 if (!use_sideband)
1706 return unpack(0, si);
1708 use_keepalive = KEEPALIVE_AFTER_NUL;
1709 memset(&muxer, 0, sizeof(muxer));
1710 muxer.proc = copy_to_sideband;
1711 muxer.in = -1;
1712 if (start_async(&muxer))
1713 return NULL;
1715 ret = unpack(muxer.in, si);
1717 finish_async(&muxer);
1718 return ret;
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));
1731 si->reachable =
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])
1740 continue;
1741 for (j = 0; j < bitmap_size; j++) {
1742 if (!si->used_shallow[i][j])
1743 continue;
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;
1772 int *ref_status;
1773 remove_nonexistent_theirs_shallow(si);
1774 if (!si->nr_ours && !si->nr_theirs) {
1775 shallow_update = 0;
1776 return;
1779 for (cmd = commands; cmd; cmd = cmd->next) {
1780 if (is_null_sha1(cmd->new_sha1))
1781 continue;
1782 sha1_array_append(ref, cmd->new_sha1);
1783 cmd->index = ref->nr - 1;
1785 si->ref = ref;
1787 if (shallow_update) {
1788 prepare_shallow_update(commands, si);
1789 return;
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))
1796 continue;
1797 if (ref_status[cmd->index]) {
1798 cmd->error_string = "shallow update not allowed";
1799 cmd->skip_update = 1;
1802 free(ref_status);
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",
1815 cmd->ref_name);
1816 else
1817 packet_buf_write(&buf, "ng %s %s\n",
1818 cmd->ref_name, cmd->error_string);
1820 packet_buf_flush(&buf);
1822 if (use_sideband)
1823 send_sideband(1, 1, buf.buf, buf.len, use_sideband);
1824 else
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))
1834 return 0;
1836 return 1;
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),
1852 OPT_END()
1855 packet_trace_identity("receive-pack");
1857 argc = parse_options(argc, argv, prefix, options, receive_pack_usage, 0);
1859 if (argc > 1)
1860 usage_msg_opt(_("Too many arguments."), receive_pack_usage, options);
1861 if (argc == 0)
1862 usage_msg_opt(_("You must specify a directory."), receive_pack_usage, options);
1864 service_dir = argv[0];
1866 setup_path();
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) {
1881 write_head_info();
1883 if (advertise_refs)
1884 return 0;
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)
1895 shallow_update = 0;
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,
1902 &push_options);
1903 if (pack_lockfile)
1904 unlink_or_warn(pack_lockfile);
1905 if (report_status)
1906 report(commands, unpack_status);
1907 run_receive_hook(commands, "post-receive", 1,
1908 &push_options);
1909 run_update_post_hook(commands);
1910 if (push_options.nr)
1911 string_list_clear(&push_options, 0);
1912 if (auto_gc) {
1913 const char *argv_gc_auto[] = {
1914 "gc", "--auto", "--quiet", NULL,
1916 struct child_process proc = CHILD_PROCESS_INIT;
1918 proc.no_stdin = 1;
1919 proc.stdout_to_stderr = 1;
1920 proc.err = use_sideband ? -1 : 0;
1921 proc.git_cmd = 1;
1922 proc.argv = argv_gc_auto;
1924 close_all_packs();
1925 if (!start_command(&proc)) {
1926 if (use_sideband)
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);
1935 if (use_sideband)
1936 packet_flush(1);
1937 sha1_array_clear(&shallow);
1938 sha1_array_clear(&ref);
1939 free((void *)push_cert_nonce);
1940 return 0;