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"
23#include "tmp-objdir.h"
24#include "oidset.h"
25
26static const char * const receive_pack_usage[] = {
27 N_("git receive-pack <git-dir>"),
28 NULL
29};
30
31enum deny_action {
32 DENY_UNCONFIGURED,
33 DENY_IGNORE,
34 DENY_WARN,
35 DENY_REFUSE,
36 DENY_UPDATE_INSTEAD
37};
38
39static int deny_deletes;
40static int deny_non_fast_forwards;
41static enum deny_action deny_current_branch = DENY_UNCONFIGURED;
42static enum deny_action deny_delete_current = DENY_UNCONFIGURED;
43static int receive_fsck_objects = -1;
44static int transfer_fsck_objects = -1;
45static struct strbuf fsck_msg_types = STRBUF_INIT;
46static int receive_unpack_limit = -1;
47static int transfer_unpack_limit = -1;
48static int advertise_atomic_push = 1;
49static int advertise_push_options;
50static int unpack_limit = 100;
51static off_t max_input_size;
52static int report_status;
53static int use_sideband;
54static int use_atomic;
55static int use_push_options;
56static int quiet;
57static int prefer_ofs_delta = 1;
58static int auto_update_server_info;
59static int auto_gc = 1;
60static int reject_thin;
61static int stateless_rpc;
62static const char *service_dir;
63static const char *head_name;
64static void *head_name_to_free;
65static int sent_capabilities;
66static int shallow_update;
67static const char *alt_shallow_file;
68static struct strbuf push_cert = STRBUF_INIT;
69static unsigned char push_cert_sha1[20];
70static struct signature_check sigcheck;
71static const char *push_cert_nonce;
72static const char *cert_nonce_seed;
73
74static const char *NONCE_UNSOLICITED = "UNSOLICITED";
75static const char *NONCE_BAD = "BAD";
76static const char *NONCE_MISSING = "MISSING";
77static const char *NONCE_OK = "OK";
78static const char *NONCE_SLOP = "SLOP";
79static const char *nonce_status;
80static long nonce_stamp_slop;
81static timestamp_t nonce_stamp_slop_limit;
82static struct ref_transaction *transaction;
83
84static enum {
85 KEEPALIVE_NEVER = 0,
86 KEEPALIVE_AFTER_NUL,
87 KEEPALIVE_ALWAYS
88} use_keepalive;
89static int keepalive_in_sec = 5;
90
91static struct tmp_objdir *tmp_objdir;
92
93static enum deny_action parse_deny_action(const char *var, const char *value)
94{
95 if (value) {
96 if (!strcasecmp(value, "ignore"))
97 return DENY_IGNORE;
98 if (!strcasecmp(value, "warn"))
99 return DENY_WARN;
100 if (!strcasecmp(value, "refuse"))
101 return DENY_REFUSE;
102 if (!strcasecmp(value, "updateinstead"))
103 return DENY_UPDATE_INSTEAD;
104 }
105 if (git_config_bool(var, value))
106 return DENY_REFUSE;
107 return DENY_IGNORE;
108}
109
110static int receive_pack_config(const char *var, const char *value, void *cb)
111{
112 int status = parse_hide_refs_config(var, value, "receive");
113
114 if (status)
115 return status;
116
117 if (strcmp(var, "receive.denydeletes") == 0) {
118 deny_deletes = git_config_bool(var, value);
119 return 0;
120 }
121
122 if (strcmp(var, "receive.denynonfastforwards") == 0) {
123 deny_non_fast_forwards = git_config_bool(var, value);
124 return 0;
125 }
126
127 if (strcmp(var, "receive.unpacklimit") == 0) {
128 receive_unpack_limit = git_config_int(var, value);
129 return 0;
130 }
131
132 if (strcmp(var, "transfer.unpacklimit") == 0) {
133 transfer_unpack_limit = git_config_int(var, value);
134 return 0;
135 }
136
137 if (strcmp(var, "receive.fsck.skiplist") == 0) {
138 const char *path;
139
140 if (git_config_pathname(&path, var, value))
141 return 1;
142 strbuf_addf(&fsck_msg_types, "%cskiplist=%s",
143 fsck_msg_types.len ? ',' : '=', path);
144 free((char *)path);
145 return 0;
146 }
147
148 if (skip_prefix(var, "receive.fsck.", &var)) {
149 if (is_valid_msg_type(var, value))
150 strbuf_addf(&fsck_msg_types, "%c%s=%s",
151 fsck_msg_types.len ? ',' : '=', var, value);
152 else
153 warning("Skipping unknown msg id '%s'", var);
154 return 0;
155 }
156
157 if (strcmp(var, "receive.fsckobjects") == 0) {
158 receive_fsck_objects = git_config_bool(var, value);
159 return 0;
160 }
161
162 if (strcmp(var, "transfer.fsckobjects") == 0) {
163 transfer_fsck_objects = git_config_bool(var, value);
164 return 0;
165 }
166
167 if (!strcmp(var, "receive.denycurrentbranch")) {
168 deny_current_branch = parse_deny_action(var, value);
169 return 0;
170 }
171
172 if (strcmp(var, "receive.denydeletecurrent") == 0) {
173 deny_delete_current = parse_deny_action(var, value);
174 return 0;
175 }
176
177 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
178 prefer_ofs_delta = git_config_bool(var, value);
179 return 0;
180 }
181
182 if (strcmp(var, "receive.updateserverinfo") == 0) {
183 auto_update_server_info = git_config_bool(var, value);
184 return 0;
185 }
186
187 if (strcmp(var, "receive.autogc") == 0) {
188 auto_gc = git_config_bool(var, value);
189 return 0;
190 }
191
192 if (strcmp(var, "receive.shallowupdate") == 0) {
193 shallow_update = git_config_bool(var, value);
194 return 0;
195 }
196
197 if (strcmp(var, "receive.certnonceseed") == 0)
198 return git_config_string(&cert_nonce_seed, var, value);
199
200 if (strcmp(var, "receive.certnonceslop") == 0) {
201 nonce_stamp_slop_limit = git_config_ulong(var, value);
202 return 0;
203 }
204
205 if (strcmp(var, "receive.advertiseatomic") == 0) {
206 advertise_atomic_push = git_config_bool(var, value);
207 return 0;
208 }
209
210 if (strcmp(var, "receive.advertisepushoptions") == 0) {
211 advertise_push_options = git_config_bool(var, value);
212 return 0;
213 }
214
215 if (strcmp(var, "receive.keepalive") == 0) {
216 keepalive_in_sec = git_config_int(var, value);
217 return 0;
218 }
219
220 if (strcmp(var, "receive.maxinputsize") == 0) {
221 max_input_size = git_config_int64(var, value);
222 return 0;
223 }
224
225 return git_default_config(var, value, cb);
226}
227
228static void show_ref(const char *path, const struct object_id *oid)
229{
230 if (sent_capabilities) {
231 packet_write_fmt(1, "%s %s\n", oid_to_hex(oid), path);
232 } else {
233 struct strbuf cap = STRBUF_INIT;
234
235 strbuf_addstr(&cap,
236 "report-status delete-refs side-band-64k quiet");
237 if (advertise_atomic_push)
238 strbuf_addstr(&cap, " atomic");
239 if (prefer_ofs_delta)
240 strbuf_addstr(&cap, " ofs-delta");
241 if (push_cert_nonce)
242 strbuf_addf(&cap, " push-cert=%s", push_cert_nonce);
243 if (advertise_push_options)
244 strbuf_addstr(&cap, " push-options");
245 strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized());
246 packet_write_fmt(1, "%s %s%c%s\n",
247 oid_to_hex(oid), path, 0, cap.buf);
248 strbuf_release(&cap);
249 sent_capabilities = 1;
250 }
251}
252
253static int show_ref_cb(const char *path_full, const struct object_id *oid,
254 int flag, void *data)
255{
256 struct oidset *seen = data;
257 const char *path = strip_namespace(path_full);
258
259 if (ref_is_hidden(path, path_full))
260 return 0;
261
262 /*
263 * Advertise refs outside our current namespace as ".have"
264 * refs, so that the client can use them to minimize data
265 * transfer but will otherwise ignore them.
266 */
267 if (!path) {
268 if (oidset_insert(seen, oid))
269 return 0;
270 path = ".have";
271 } else {
272 oidset_insert(seen, oid);
273 }
274 show_ref(path, oid);
275 return 0;
276}
277
278static void show_one_alternate_ref(const char *refname,
279 const struct object_id *oid,
280 void *data)
281{
282 struct oidset *seen = data;
283
284 if (oidset_insert(seen, oid))
285 return;
286
287 show_ref(".have", oid);
288}
289
290static void write_head_info(void)
291{
292 static struct oidset seen = OIDSET_INIT;
293
294 for_each_ref(show_ref_cb, &seen);
295 for_each_alternate_ref(show_one_alternate_ref, &seen);
296 oidset_clear(&seen);
297 if (!sent_capabilities)
298 show_ref("capabilities^{}", &null_oid);
299
300 advertise_shallow_grafts(1);
301
302 /* EOF */
303 packet_flush(1);
304}
305
306struct command {
307 struct command *next;
308 const char *error_string;
309 unsigned int skip_update:1,
310 did_not_exist:1;
311 int index;
312 struct object_id old_oid;
313 struct object_id new_oid;
314 char ref_name[FLEX_ARRAY]; /* more */
315};
316
317static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
318static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
319
320static void report_message(const char *prefix, const char *err, va_list params)
321{
322 int sz;
323 char msg[4096];
324
325 sz = xsnprintf(msg, sizeof(msg), "%s", prefix);
326 sz += vsnprintf(msg + sz, sizeof(msg) - sz, err, params);
327 if (sz > (sizeof(msg) - 1))
328 sz = sizeof(msg) - 1;
329 msg[sz++] = '\n';
330
331 if (use_sideband)
332 send_sideband(1, 2, msg, sz, use_sideband);
333 else
334 xwrite(2, msg, sz);
335}
336
337static void rp_warning(const char *err, ...)
338{
339 va_list params;
340 va_start(params, err);
341 report_message("warning: ", err, params);
342 va_end(params);
343}
344
345static void rp_error(const char *err, ...)
346{
347 va_list params;
348 va_start(params, err);
349 report_message("error: ", err, params);
350 va_end(params);
351}
352
353static int copy_to_sideband(int in, int out, void *arg)
354{
355 char data[128];
356 int keepalive_active = 0;
357
358 if (keepalive_in_sec <= 0)
359 use_keepalive = KEEPALIVE_NEVER;
360 if (use_keepalive == KEEPALIVE_ALWAYS)
361 keepalive_active = 1;
362
363 while (1) {
364 ssize_t sz;
365
366 if (keepalive_active) {
367 struct pollfd pfd;
368 int ret;
369
370 pfd.fd = in;
371 pfd.events = POLLIN;
372 ret = poll(&pfd, 1, 1000 * keepalive_in_sec);
373
374 if (ret < 0) {
375 if (errno == EINTR)
376 continue;
377 else
378 break;
379 } else if (ret == 0) {
380 /* no data; send a keepalive packet */
381 static const char buf[] = "0005\1";
382 write_or_die(1, buf, sizeof(buf) - 1);
383 continue;
384 } /* else there is actual data to read */
385 }
386
387 sz = xread(in, data, sizeof(data));
388 if (sz <= 0)
389 break;
390
391 if (use_keepalive == KEEPALIVE_AFTER_NUL && !keepalive_active) {
392 const char *p = memchr(data, '\0', sz);
393 if (p) {
394 /*
395 * The NUL tells us to start sending keepalives. Make
396 * sure we send any other data we read along
397 * with it.
398 */
399 keepalive_active = 1;
400 send_sideband(1, 2, data, p - data, use_sideband);
401 send_sideband(1, 2, p + 1, sz - (p - data + 1), use_sideband);
402 continue;
403 }
404 }
405
406 /*
407 * Either we're not looking for a NUL signal, or we didn't see
408 * it yet; just pass along the data.
409 */
410 send_sideband(1, 2, data, sz, use_sideband);
411 }
412 close(in);
413 return 0;
414}
415
416#define HMAC_BLOCK_SIZE 64
417
418static void hmac_sha1(unsigned char *out,
419 const char *key_in, size_t key_len,
420 const char *text, size_t text_len)
421{
422 unsigned char key[HMAC_BLOCK_SIZE];
423 unsigned char k_ipad[HMAC_BLOCK_SIZE];
424 unsigned char k_opad[HMAC_BLOCK_SIZE];
425 int i;
426 git_SHA_CTX ctx;
427
428 /* RFC 2104 2. (1) */
429 memset(key, '\0', HMAC_BLOCK_SIZE);
430 if (HMAC_BLOCK_SIZE < key_len) {
431 git_SHA1_Init(&ctx);
432 git_SHA1_Update(&ctx, key_in, key_len);
433 git_SHA1_Final(key, &ctx);
434 } else {
435 memcpy(key, key_in, key_len);
436 }
437
438 /* RFC 2104 2. (2) & (5) */
439 for (i = 0; i < sizeof(key); i++) {
440 k_ipad[i] = key[i] ^ 0x36;
441 k_opad[i] = key[i] ^ 0x5c;
442 }
443
444 /* RFC 2104 2. (3) & (4) */
445 git_SHA1_Init(&ctx);
446 git_SHA1_Update(&ctx, k_ipad, sizeof(k_ipad));
447 git_SHA1_Update(&ctx, text, text_len);
448 git_SHA1_Final(out, &ctx);
449
450 /* RFC 2104 2. (6) & (7) */
451 git_SHA1_Init(&ctx);
452 git_SHA1_Update(&ctx, k_opad, sizeof(k_opad));
453 git_SHA1_Update(&ctx, out, 20);
454 git_SHA1_Final(out, &ctx);
455}
456
457static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
458{
459 struct strbuf buf = STRBUF_INIT;
460 unsigned char sha1[20];
461
462 strbuf_addf(&buf, "%s:%"PRItime, path, stamp);
463 hmac_sha1(sha1, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));;
464 strbuf_release(&buf);
465
466 /* RFC 2104 5. HMAC-SHA1-80 */
467 strbuf_addf(&buf, "%"PRItime"-%.*s", stamp, 20, sha1_to_hex(sha1));
468 return strbuf_detach(&buf, NULL);
469}
470
471/*
472 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
473 * after dropping "_commit" from its name and possibly moving it out
474 * of commit.c
475 */
476static char *find_header(const char *msg, size_t len, const char *key,
477 const char **next_line)
478{
479 int key_len = strlen(key);
480 const char *line = msg;
481
482 while (line && line < msg + len) {
483 const char *eol = strchrnul(line, '\n');
484
485 if ((msg + len <= eol) || line == eol)
486 return NULL;
487 if (line + key_len < eol &&
488 !memcmp(line, key, key_len) && line[key_len] == ' ') {
489 int offset = key_len + 1;
490 if (next_line)
491 *next_line = *eol ? eol + 1 : eol;
492 return xmemdupz(line + offset, (eol - line) - offset);
493 }
494 line = *eol ? eol + 1 : NULL;
495 }
496 return NULL;
497}
498
499static const char *check_nonce(const char *buf, size_t len)
500{
501 char *nonce = find_header(buf, len, "nonce", NULL);
502 timestamp_t stamp, ostamp;
503 char *bohmac, *expect = NULL;
504 const char *retval = NONCE_BAD;
505
506 if (!nonce) {
507 retval = NONCE_MISSING;
508 goto leave;
509 } else if (!push_cert_nonce) {
510 retval = NONCE_UNSOLICITED;
511 goto leave;
512 } else if (!strcmp(push_cert_nonce, nonce)) {
513 retval = NONCE_OK;
514 goto leave;
515 }
516
517 if (!stateless_rpc) {
518 /* returned nonce MUST match what we gave out earlier */
519 retval = NONCE_BAD;
520 goto leave;
521 }
522
523 /*
524 * In stateless mode, we may be receiving a nonce issued by
525 * another instance of the server that serving the same
526 * repository, and the timestamps may not match, but the
527 * nonce-seed and dir should match, so we can recompute and
528 * report the time slop.
529 *
530 * In addition, when a nonce issued by another instance has
531 * timestamp within receive.certnonceslop seconds, we pretend
532 * as if we issued that nonce when reporting to the hook.
533 */
534
535 /* nonce is concat(<seconds-since-epoch>, "-", <hmac>) */
536 if (*nonce <= '0' || '9' < *nonce) {
537 retval = NONCE_BAD;
538 goto leave;
539 }
540 stamp = parse_timestamp(nonce, &bohmac, 10);
541 if (bohmac == nonce || bohmac[0] != '-') {
542 retval = NONCE_BAD;
543 goto leave;
544 }
545
546 expect = prepare_push_cert_nonce(service_dir, stamp);
547 if (strcmp(expect, nonce)) {
548 /* Not what we would have signed earlier */
549 retval = NONCE_BAD;
550 goto leave;
551 }
552
553 /*
554 * By how many seconds is this nonce stale? Negative value
555 * would mean it was issued by another server with its clock
556 * skewed in the future.
557 */
558 ostamp = parse_timestamp(push_cert_nonce, NULL, 10);
559 nonce_stamp_slop = (long)ostamp - (long)stamp;
560
561 if (nonce_stamp_slop_limit &&
562 labs(nonce_stamp_slop) <= nonce_stamp_slop_limit) {
563 /*
564 * Pretend as if the received nonce (which passes the
565 * HMAC check, so it is not a forged by third-party)
566 * is what we issued.
567 */
568 free((void *)push_cert_nonce);
569 push_cert_nonce = xstrdup(nonce);
570 retval = NONCE_OK;
571 } else {
572 retval = NONCE_SLOP;
573 }
574
575leave:
576 free(nonce);
577 free(expect);
578 return retval;
579}
580
581/*
582 * Return 1 if there is no push_cert or if the push options in push_cert are
583 * the same as those in the argument; 0 otherwise.
584 */
585static int check_cert_push_options(const struct string_list *push_options)
586{
587 const char *buf = push_cert.buf;
588 int len = push_cert.len;
589
590 char *option;
591 const char *next_line;
592 int options_seen = 0;
593
594 int retval = 1;
595
596 if (!len)
597 return 1;
598
599 while ((option = find_header(buf, len, "push-option", &next_line))) {
600 len -= (next_line - buf);
601 buf = next_line;
602 options_seen++;
603 if (options_seen > push_options->nr
604 || strcmp(option,
605 push_options->items[options_seen - 1].string)) {
606 retval = 0;
607 goto leave;
608 }
609 free(option);
610 }
611
612 if (options_seen != push_options->nr)
613 retval = 0;
614
615leave:
616 free(option);
617 return retval;
618}
619
620static void prepare_push_cert_sha1(struct child_process *proc)
621{
622 static int already_done;
623
624 if (!push_cert.len)
625 return;
626
627 if (!already_done) {
628 struct strbuf gpg_output = STRBUF_INIT;
629 struct strbuf gpg_status = STRBUF_INIT;
630 int bogs /* beginning_of_gpg_sig */;
631
632 already_done = 1;
633 if (write_sha1_file(push_cert.buf, push_cert.len, "blob", push_cert_sha1))
634 hashclr(push_cert_sha1);
635
636 memset(&sigcheck, '\0', sizeof(sigcheck));
637 sigcheck.result = 'N';
638
639 bogs = parse_signature(push_cert.buf, push_cert.len);
640 if (verify_signed_buffer(push_cert.buf, bogs,
641 push_cert.buf + bogs, push_cert.len - bogs,
642 &gpg_output, &gpg_status) < 0) {
643 ; /* error running gpg */
644 } else {
645 sigcheck.payload = push_cert.buf;
646 sigcheck.gpg_output = gpg_output.buf;
647 sigcheck.gpg_status = gpg_status.buf;
648 parse_gpg_output(&sigcheck);
649 }
650
651 strbuf_release(&gpg_output);
652 strbuf_release(&gpg_status);
653 nonce_status = check_nonce(push_cert.buf, bogs);
654 }
655 if (!is_null_sha1(push_cert_sha1)) {
656 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT=%s",
657 sha1_to_hex(push_cert_sha1));
658 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_SIGNER=%s",
659 sigcheck.signer ? sigcheck.signer : "");
660 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_KEY=%s",
661 sigcheck.key ? sigcheck.key : "");
662 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_STATUS=%c",
663 sigcheck.result);
664 if (push_cert_nonce) {
665 argv_array_pushf(&proc->env_array,
666 "GIT_PUSH_CERT_NONCE=%s",
667 push_cert_nonce);
668 argv_array_pushf(&proc->env_array,
669 "GIT_PUSH_CERT_NONCE_STATUS=%s",
670 nonce_status);
671 if (nonce_status == NONCE_SLOP)
672 argv_array_pushf(&proc->env_array,
673 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
674 nonce_stamp_slop);
675 }
676 }
677}
678
679struct receive_hook_feed_state {
680 struct command *cmd;
681 int skip_broken;
682 struct strbuf buf;
683 const struct string_list *push_options;
684};
685
686typedef int (*feed_fn)(void *, const char **, size_t *);
687static int run_and_feed_hook(const char *hook_name, feed_fn feed,
688 struct receive_hook_feed_state *feed_state)
689{
690 struct child_process proc = CHILD_PROCESS_INIT;
691 struct async muxer;
692 const char *argv[2];
693 int code;
694
695 argv[0] = find_hook(hook_name);
696 if (!argv[0])
697 return 0;
698
699 argv[1] = NULL;
700
701 proc.argv = argv;
702 proc.in = -1;
703 proc.stdout_to_stderr = 1;
704 if (feed_state->push_options) {
705 int i;
706 for (i = 0; i < feed_state->push_options->nr; i++)
707 argv_array_pushf(&proc.env_array,
708 "GIT_PUSH_OPTION_%d=%s", i,
709 feed_state->push_options->items[i].string);
710 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT=%d",
711 feed_state->push_options->nr);
712 } else
713 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT");
714
715 if (tmp_objdir)
716 argv_array_pushv(&proc.env_array, tmp_objdir_env(tmp_objdir));
717
718 if (use_sideband) {
719 memset(&muxer, 0, sizeof(muxer));
720 muxer.proc = copy_to_sideband;
721 muxer.in = -1;
722 code = start_async(&muxer);
723 if (code)
724 return code;
725 proc.err = muxer.in;
726 }
727
728 prepare_push_cert_sha1(&proc);
729
730 code = start_command(&proc);
731 if (code) {
732 if (use_sideband)
733 finish_async(&muxer);
734 return code;
735 }
736
737 sigchain_push(SIGPIPE, SIG_IGN);
738
739 while (1) {
740 const char *buf;
741 size_t n;
742 if (feed(feed_state, &buf, &n))
743 break;
744 if (write_in_full(proc.in, buf, n) != n)
745 break;
746 }
747 close(proc.in);
748 if (use_sideband)
749 finish_async(&muxer);
750
751 sigchain_pop(SIGPIPE);
752
753 return finish_command(&proc);
754}
755
756static int feed_receive_hook(void *state_, const char **bufp, size_t *sizep)
757{
758 struct receive_hook_feed_state *state = state_;
759 struct command *cmd = state->cmd;
760
761 while (cmd &&
762 state->skip_broken && (cmd->error_string || cmd->did_not_exist))
763 cmd = cmd->next;
764 if (!cmd)
765 return -1; /* EOF */
766 strbuf_reset(&state->buf);
767 strbuf_addf(&state->buf, "%s %s %s\n",
768 oid_to_hex(&cmd->old_oid), oid_to_hex(&cmd->new_oid),
769 cmd->ref_name);
770 state->cmd = cmd->next;
771 if (bufp) {
772 *bufp = state->buf.buf;
773 *sizep = state->buf.len;
774 }
775 return 0;
776}
777
778static int run_receive_hook(struct command *commands,
779 const char *hook_name,
780 int skip_broken,
781 const struct string_list *push_options)
782{
783 struct receive_hook_feed_state state;
784 int status;
785
786 strbuf_init(&state.buf, 0);
787 state.cmd = commands;
788 state.skip_broken = skip_broken;
789 if (feed_receive_hook(&state, NULL, NULL))
790 return 0;
791 state.cmd = commands;
792 state.push_options = push_options;
793 status = run_and_feed_hook(hook_name, feed_receive_hook, &state);
794 strbuf_release(&state.buf);
795 return status;
796}
797
798static int run_update_hook(struct command *cmd)
799{
800 const char *argv[5];
801 struct child_process proc = CHILD_PROCESS_INIT;
802 int code;
803
804 argv[0] = find_hook("update");
805 if (!argv[0])
806 return 0;
807
808 argv[1] = cmd->ref_name;
809 argv[2] = oid_to_hex(&cmd->old_oid);
810 argv[3] = oid_to_hex(&cmd->new_oid);
811 argv[4] = NULL;
812
813 proc.no_stdin = 1;
814 proc.stdout_to_stderr = 1;
815 proc.err = use_sideband ? -1 : 0;
816 proc.argv = argv;
817
818 code = start_command(&proc);
819 if (code)
820 return code;
821 if (use_sideband)
822 copy_to_sideband(proc.err, -1, NULL);
823 return finish_command(&proc);
824}
825
826static int is_ref_checked_out(const char *ref)
827{
828 if (is_bare_repository())
829 return 0;
830
831 if (!head_name)
832 return 0;
833 return !strcmp(head_name, ref);
834}
835
836static char *refuse_unconfigured_deny_msg =
837 N_("By default, updating the current branch in a non-bare repository\n"
838 "is denied, because it will make the index and work tree inconsistent\n"
839 "with what you pushed, and will require 'git reset --hard' to match\n"
840 "the work tree to HEAD.\n"
841 "\n"
842 "You can set the 'receive.denyCurrentBranch' configuration variable\n"
843 "to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
844 "its current branch; however, this is not recommended unless you\n"
845 "arranged to update its work tree to match what you pushed in some\n"
846 "other way.\n"
847 "\n"
848 "To squelch this message and still keep the default behaviour, set\n"
849 "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
850
851static void refuse_unconfigured_deny(void)
852{
853 rp_error("%s", _(refuse_unconfigured_deny_msg));
854}
855
856static char *refuse_unconfigured_deny_delete_current_msg =
857 N_("By default, deleting the current branch is denied, because the next\n"
858 "'git clone' won't result in any file checked out, causing confusion.\n"
859 "\n"
860 "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
861 "'warn' or 'ignore' in the remote repository to allow deleting the\n"
862 "current branch, with or without a warning message.\n"
863 "\n"
864 "To squelch this message, you can set it to 'refuse'.");
865
866static void refuse_unconfigured_deny_delete_current(void)
867{
868 rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
869}
870
871static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]);
872static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
873{
874 static struct lock_file shallow_lock;
875 struct oid_array extra = OID_ARRAY_INIT;
876 struct check_connected_options opt = CHECK_CONNECTED_INIT;
877 uint32_t mask = 1 << (cmd->index % 32);
878 int i;
879
880 trace_printf_key(&trace_shallow,
881 "shallow: update_shallow_ref %s\n", cmd->ref_name);
882 for (i = 0; i < si->shallow->nr; i++)
883 if (si->used_shallow[i] &&
884 (si->used_shallow[i][cmd->index / 32] & mask) &&
885 !delayed_reachability_test(si, i))
886 oid_array_append(&extra, &si->shallow->oid[i]);
887
888 opt.env = tmp_objdir_env(tmp_objdir);
889 setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra);
890 if (check_connected(command_singleton_iterator, cmd, &opt)) {
891 rollback_lock_file(&shallow_lock);
892 oid_array_clear(&extra);
893 return -1;
894 }
895
896 commit_lock_file(&shallow_lock);
897
898 /*
899 * Make sure setup_alternate_shallow() for the next ref does
900 * not lose these new roots..
901 */
902 for (i = 0; i < extra.nr; i++)
903 register_shallow(&extra.oid[i]);
904
905 si->shallow_ref[cmd->index] = 0;
906 oid_array_clear(&extra);
907 return 0;
908}
909
910/*
911 * NEEDSWORK: we should consolidate various implementions of "are we
912 * on an unborn branch?" test into one, and make the unified one more
913 * robust. !get_sha1() based check used here and elsewhere would not
914 * allow us to tell an unborn branch from corrupt ref, for example.
915 * For the purpose of fixing "deploy-to-update does not work when
916 * pushing into an empty repository" issue, this should suffice for
917 * now.
918 */
919static int head_has_history(void)
920{
921 unsigned char sha1[20];
922
923 return !get_sha1("HEAD", sha1);
924}
925
926static const char *push_to_deploy(unsigned char *sha1,
927 struct argv_array *env,
928 const char *work_tree)
929{
930 const char *update_refresh[] = {
931 "update-index", "-q", "--ignore-submodules", "--refresh", NULL
932 };
933 const char *diff_files[] = {
934 "diff-files", "--quiet", "--ignore-submodules", "--", NULL
935 };
936 const char *diff_index[] = {
937 "diff-index", "--quiet", "--cached", "--ignore-submodules",
938 NULL, "--", NULL
939 };
940 const char *read_tree[] = {
941 "read-tree", "-u", "-m", NULL, NULL
942 };
943 struct child_process child = CHILD_PROCESS_INIT;
944
945 child.argv = update_refresh;
946 child.env = env->argv;
947 child.dir = work_tree;
948 child.no_stdin = 1;
949 child.stdout_to_stderr = 1;
950 child.git_cmd = 1;
951 if (run_command(&child))
952 return "Up-to-date check failed";
953
954 /* run_command() does not clean up completely; reinitialize */
955 child_process_init(&child);
956 child.argv = diff_files;
957 child.env = env->argv;
958 child.dir = work_tree;
959 child.no_stdin = 1;
960 child.stdout_to_stderr = 1;
961 child.git_cmd = 1;
962 if (run_command(&child))
963 return "Working directory has unstaged changes";
964
965 /* diff-index with either HEAD or an empty tree */
966 diff_index[4] = head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX;
967
968 child_process_init(&child);
969 child.argv = diff_index;
970 child.env = env->argv;
971 child.no_stdin = 1;
972 child.no_stdout = 1;
973 child.stdout_to_stderr = 0;
974 child.git_cmd = 1;
975 if (run_command(&child))
976 return "Working directory has staged changes";
977
978 read_tree[3] = sha1_to_hex(sha1);
979 child_process_init(&child);
980 child.argv = read_tree;
981 child.env = env->argv;
982 child.dir = work_tree;
983 child.no_stdin = 1;
984 child.no_stdout = 1;
985 child.stdout_to_stderr = 0;
986 child.git_cmd = 1;
987 if (run_command(&child))
988 return "Could not update working tree to new HEAD";
989
990 return NULL;
991}
992
993static const char *push_to_checkout_hook = "push-to-checkout";
994
995static const char *push_to_checkout(unsigned char *sha1,
996 struct argv_array *env,
997 const char *work_tree)
998{
999 argv_array_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
1000 if (run_hook_le(env->argv, push_to_checkout_hook,
1001 sha1_to_hex(sha1), NULL))
1002 return "push-to-checkout hook declined";
1003 else
1004 return NULL;
1005}
1006
1007static const char *update_worktree(unsigned char *sha1)
1008{
1009 const char *retval;
1010 const char *work_tree = git_work_tree_cfg ? git_work_tree_cfg : "..";
1011 struct argv_array env = ARGV_ARRAY_INIT;
1012
1013 if (is_bare_repository())
1014 return "denyCurrentBranch = updateInstead needs a worktree";
1015
1016 argv_array_pushf(&env, "GIT_DIR=%s", absolute_path(get_git_dir()));
1017
1018 if (!find_hook(push_to_checkout_hook))
1019 retval = push_to_deploy(sha1, &env, work_tree);
1020 else
1021 retval = push_to_checkout(sha1, &env, work_tree);
1022
1023 argv_array_clear(&env);
1024 return retval;
1025}
1026
1027static const char *update(struct command *cmd, struct shallow_info *si)
1028{
1029 const char *name = cmd->ref_name;
1030 struct strbuf namespaced_name_buf = STRBUF_INIT;
1031 static char *namespaced_name;
1032 const char *ret;
1033 struct object_id *old_oid = &cmd->old_oid;
1034 struct object_id *new_oid = &cmd->new_oid;
1035
1036 /* only refs/... are allowed */
1037 if (!starts_with(name, "refs/") || check_refname_format(name + 5, 0)) {
1038 rp_error("refusing to create funny ref '%s' remotely", name);
1039 return "funny refname";
1040 }
1041
1042 strbuf_addf(&namespaced_name_buf, "%s%s", get_git_namespace(), name);
1043 free(namespaced_name);
1044 namespaced_name = strbuf_detach(&namespaced_name_buf, NULL);
1045
1046 if (is_ref_checked_out(namespaced_name)) {
1047 switch (deny_current_branch) {
1048 case DENY_IGNORE:
1049 break;
1050 case DENY_WARN:
1051 rp_warning("updating the current branch");
1052 break;
1053 case DENY_REFUSE:
1054 case DENY_UNCONFIGURED:
1055 rp_error("refusing to update checked out branch: %s", name);
1056 if (deny_current_branch == DENY_UNCONFIGURED)
1057 refuse_unconfigured_deny();
1058 return "branch is currently checked out";
1059 case DENY_UPDATE_INSTEAD:
1060 ret = update_worktree(new_oid->hash);
1061 if (ret)
1062 return ret;
1063 break;
1064 }
1065 }
1066
1067 if (!is_null_oid(new_oid) && !has_object_file(new_oid)) {
1068 error("unpack should have generated %s, "
1069 "but I can't find it!", oid_to_hex(new_oid));
1070 return "bad pack";
1071 }
1072
1073 if (!is_null_oid(old_oid) && is_null_oid(new_oid)) {
1074 if (deny_deletes && starts_with(name, "refs/heads/")) {
1075 rp_error("denying ref deletion for %s", name);
1076 return "deletion prohibited";
1077 }
1078
1079 if (head_name && !strcmp(namespaced_name, head_name)) {
1080 switch (deny_delete_current) {
1081 case DENY_IGNORE:
1082 break;
1083 case DENY_WARN:
1084 rp_warning("deleting the current branch");
1085 break;
1086 case DENY_REFUSE:
1087 case DENY_UNCONFIGURED:
1088 case DENY_UPDATE_INSTEAD:
1089 if (deny_delete_current == DENY_UNCONFIGURED)
1090 refuse_unconfigured_deny_delete_current();
1091 rp_error("refusing to delete the current branch: %s", name);
1092 return "deletion of the current branch prohibited";
1093 default:
1094 return "Invalid denyDeleteCurrent setting";
1095 }
1096 }
1097 }
1098
1099 if (deny_non_fast_forwards && !is_null_oid(new_oid) &&
1100 !is_null_oid(old_oid) &&
1101 starts_with(name, "refs/heads/")) {
1102 struct object *old_object, *new_object;
1103 struct commit *old_commit, *new_commit;
1104
1105 old_object = parse_object(old_oid);
1106 new_object = parse_object(new_oid);
1107
1108 if (!old_object || !new_object ||
1109 old_object->type != OBJ_COMMIT ||
1110 new_object->type != OBJ_COMMIT) {
1111 error("bad sha1 objects for %s", name);
1112 return "bad ref";
1113 }
1114 old_commit = (struct commit *)old_object;
1115 new_commit = (struct commit *)new_object;
1116 if (!in_merge_bases(old_commit, new_commit)) {
1117 rp_error("denying non-fast-forward %s"
1118 " (you should pull first)", name);
1119 return "non-fast-forward";
1120 }
1121 }
1122 if (run_update_hook(cmd)) {
1123 rp_error("hook declined to update %s", name);
1124 return "hook declined";
1125 }
1126
1127 if (is_null_oid(new_oid)) {
1128 struct strbuf err = STRBUF_INIT;
1129 if (!parse_object(old_oid)) {
1130 old_oid = NULL;
1131 if (ref_exists(name)) {
1132 rp_warning("Allowing deletion of corrupt ref.");
1133 } else {
1134 rp_warning("Deleting a non-existent ref.");
1135 cmd->did_not_exist = 1;
1136 }
1137 }
1138 if (ref_transaction_delete(transaction,
1139 namespaced_name,
1140 old_oid->hash,
1141 0, "push", &err)) {
1142 rp_error("%s", err.buf);
1143 strbuf_release(&err);
1144 return "failed to delete";
1145 }
1146 strbuf_release(&err);
1147 return NULL; /* good */
1148 }
1149 else {
1150 struct strbuf err = STRBUF_INIT;
1151 if (shallow_update && si->shallow_ref[cmd->index] &&
1152 update_shallow_ref(cmd, si))
1153 return "shallow error";
1154
1155 if (ref_transaction_update(transaction,
1156 namespaced_name,
1157 new_oid->hash, old_oid->hash,
1158 0, "push",
1159 &err)) {
1160 rp_error("%s", err.buf);
1161 strbuf_release(&err);
1162
1163 return "failed to update ref";
1164 }
1165 strbuf_release(&err);
1166
1167 return NULL; /* good */
1168 }
1169}
1170
1171static void run_update_post_hook(struct command *commands)
1172{
1173 struct command *cmd;
1174 struct child_process proc = CHILD_PROCESS_INIT;
1175 const char *hook;
1176
1177 hook = find_hook("post-update");
1178 if (!hook)
1179 return;
1180
1181 for (cmd = commands; cmd; cmd = cmd->next) {
1182 if (cmd->error_string || cmd->did_not_exist)
1183 continue;
1184 if (!proc.args.argc)
1185 argv_array_push(&proc.args, hook);
1186 argv_array_push(&proc.args, cmd->ref_name);
1187 }
1188 if (!proc.args.argc)
1189 return;
1190
1191 proc.no_stdin = 1;
1192 proc.stdout_to_stderr = 1;
1193 proc.err = use_sideband ? -1 : 0;
1194
1195 if (!start_command(&proc)) {
1196 if (use_sideband)
1197 copy_to_sideband(proc.err, -1, NULL);
1198 finish_command(&proc);
1199 }
1200}
1201
1202static void check_aliased_update(struct command *cmd, struct string_list *list)
1203{
1204 struct strbuf buf = STRBUF_INIT;
1205 const char *dst_name;
1206 struct string_list_item *item;
1207 struct command *dst_cmd;
1208 unsigned char sha1[GIT_MAX_RAWSZ];
1209 int flag;
1210
1211 strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
1212 dst_name = resolve_ref_unsafe(buf.buf, 0, sha1, &flag);
1213 strbuf_release(&buf);
1214
1215 if (!(flag & REF_ISSYMREF))
1216 return;
1217
1218 if (!dst_name) {
1219 rp_error("refusing update to broken symref '%s'", cmd->ref_name);
1220 cmd->skip_update = 1;
1221 cmd->error_string = "broken symref";
1222 return;
1223 }
1224 dst_name = strip_namespace(dst_name);
1225
1226 if ((item = string_list_lookup(list, dst_name)) == NULL)
1227 return;
1228
1229 cmd->skip_update = 1;
1230
1231 dst_cmd = (struct command *) item->util;
1232
1233 if (!oidcmp(&cmd->old_oid, &dst_cmd->old_oid) &&
1234 !oidcmp(&cmd->new_oid, &dst_cmd->new_oid))
1235 return;
1236
1237 dst_cmd->skip_update = 1;
1238
1239 rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
1240 " its target '%s' (%s..%s)",
1241 cmd->ref_name,
1242 find_unique_abbrev(cmd->old_oid.hash, DEFAULT_ABBREV),
1243 find_unique_abbrev(cmd->new_oid.hash, DEFAULT_ABBREV),
1244 dst_cmd->ref_name,
1245 find_unique_abbrev(dst_cmd->old_oid.hash, DEFAULT_ABBREV),
1246 find_unique_abbrev(dst_cmd->new_oid.hash, DEFAULT_ABBREV));
1247
1248 cmd->error_string = dst_cmd->error_string =
1249 "inconsistent aliased update";
1250}
1251
1252static void check_aliased_updates(struct command *commands)
1253{
1254 struct command *cmd;
1255 struct string_list ref_list = STRING_LIST_INIT_NODUP;
1256
1257 for (cmd = commands; cmd; cmd = cmd->next) {
1258 struct string_list_item *item =
1259 string_list_append(&ref_list, cmd->ref_name);
1260 item->util = (void *)cmd;
1261 }
1262 string_list_sort(&ref_list);
1263
1264 for (cmd = commands; cmd; cmd = cmd->next) {
1265 if (!cmd->error_string)
1266 check_aliased_update(cmd, &ref_list);
1267 }
1268
1269 string_list_clear(&ref_list, 0);
1270}
1271
1272static int command_singleton_iterator(void *cb_data, unsigned char sha1[20])
1273{
1274 struct command **cmd_list = cb_data;
1275 struct command *cmd = *cmd_list;
1276
1277 if (!cmd || is_null_oid(&cmd->new_oid))
1278 return -1; /* end of list */
1279 *cmd_list = NULL; /* this returns only one */
1280 hashcpy(sha1, cmd->new_oid.hash);
1281 return 0;
1282}
1283
1284static void set_connectivity_errors(struct command *commands,
1285 struct shallow_info *si)
1286{
1287 struct command *cmd;
1288
1289 for (cmd = commands; cmd; cmd = cmd->next) {
1290 struct command *singleton = cmd;
1291 struct check_connected_options opt = CHECK_CONNECTED_INIT;
1292
1293 if (shallow_update && si->shallow_ref[cmd->index])
1294 /* to be checked in update_shallow_ref() */
1295 continue;
1296
1297 opt.env = tmp_objdir_env(tmp_objdir);
1298 if (!check_connected(command_singleton_iterator, &singleton,
1299 &opt))
1300 continue;
1301
1302 cmd->error_string = "missing necessary objects";
1303 }
1304}
1305
1306struct iterate_data {
1307 struct command *cmds;
1308 struct shallow_info *si;
1309};
1310
1311static int iterate_receive_command_list(void *cb_data, unsigned char sha1[20])
1312{
1313 struct iterate_data *data = cb_data;
1314 struct command **cmd_list = &data->cmds;
1315 struct command *cmd = *cmd_list;
1316
1317 for (; cmd; cmd = cmd->next) {
1318 if (shallow_update && data->si->shallow_ref[cmd->index])
1319 /* to be checked in update_shallow_ref() */
1320 continue;
1321 if (!is_null_oid(&cmd->new_oid) && !cmd->skip_update) {
1322 hashcpy(sha1, cmd->new_oid.hash);
1323 *cmd_list = cmd->next;
1324 return 0;
1325 }
1326 }
1327 *cmd_list = NULL;
1328 return -1; /* end of list */
1329}
1330
1331static void reject_updates_to_hidden(struct command *commands)
1332{
1333 struct strbuf refname_full = STRBUF_INIT;
1334 size_t prefix_len;
1335 struct command *cmd;
1336
1337 strbuf_addstr(&refname_full, get_git_namespace());
1338 prefix_len = refname_full.len;
1339
1340 for (cmd = commands; cmd; cmd = cmd->next) {
1341 if (cmd->error_string)
1342 continue;
1343
1344 strbuf_setlen(&refname_full, prefix_len);
1345 strbuf_addstr(&refname_full, cmd->ref_name);
1346
1347 if (!ref_is_hidden(cmd->ref_name, refname_full.buf))
1348 continue;
1349 if (is_null_oid(&cmd->new_oid))
1350 cmd->error_string = "deny deleting a hidden ref";
1351 else
1352 cmd->error_string = "deny updating a hidden ref";
1353 }
1354
1355 strbuf_release(&refname_full);
1356}
1357
1358static int should_process_cmd(struct command *cmd)
1359{
1360 return !cmd->error_string && !cmd->skip_update;
1361}
1362
1363static void warn_if_skipped_connectivity_check(struct command *commands,
1364 struct shallow_info *si)
1365{
1366 struct command *cmd;
1367 int checked_connectivity = 1;
1368
1369 for (cmd = commands; cmd; cmd = cmd->next) {
1370 if (should_process_cmd(cmd) && si->shallow_ref[cmd->index]) {
1371 error("BUG: connectivity check has not been run on ref %s",
1372 cmd->ref_name);
1373 checked_connectivity = 0;
1374 }
1375 }
1376 if (!checked_connectivity)
1377 die("BUG: connectivity check skipped???");
1378}
1379
1380static void execute_commands_non_atomic(struct command *commands,
1381 struct shallow_info *si)
1382{
1383 struct command *cmd;
1384 struct strbuf err = STRBUF_INIT;
1385
1386 for (cmd = commands; cmd; cmd = cmd->next) {
1387 if (!should_process_cmd(cmd))
1388 continue;
1389
1390 transaction = ref_transaction_begin(&err);
1391 if (!transaction) {
1392 rp_error("%s", err.buf);
1393 strbuf_reset(&err);
1394 cmd->error_string = "transaction failed to start";
1395 continue;
1396 }
1397
1398 cmd->error_string = update(cmd, si);
1399
1400 if (!cmd->error_string
1401 && ref_transaction_commit(transaction, &err)) {
1402 rp_error("%s", err.buf);
1403 strbuf_reset(&err);
1404 cmd->error_string = "failed to update ref";
1405 }
1406 ref_transaction_free(transaction);
1407 }
1408 strbuf_release(&err);
1409}
1410
1411static void execute_commands_atomic(struct command *commands,
1412 struct shallow_info *si)
1413{
1414 struct command *cmd;
1415 struct strbuf err = STRBUF_INIT;
1416 const char *reported_error = "atomic push failure";
1417
1418 transaction = ref_transaction_begin(&err);
1419 if (!transaction) {
1420 rp_error("%s", err.buf);
1421 strbuf_reset(&err);
1422 reported_error = "transaction failed to start";
1423 goto failure;
1424 }
1425
1426 for (cmd = commands; cmd; cmd = cmd->next) {
1427 if (!should_process_cmd(cmd))
1428 continue;
1429
1430 cmd->error_string = update(cmd, si);
1431
1432 if (cmd->error_string)
1433 goto failure;
1434 }
1435
1436 if (ref_transaction_commit(transaction, &err)) {
1437 rp_error("%s", err.buf);
1438 reported_error = "atomic transaction failed";
1439 goto failure;
1440 }
1441 goto cleanup;
1442
1443failure:
1444 for (cmd = commands; cmd; cmd = cmd->next)
1445 if (!cmd->error_string)
1446 cmd->error_string = reported_error;
1447
1448cleanup:
1449 ref_transaction_free(transaction);
1450 strbuf_release(&err);
1451}
1452
1453static void execute_commands(struct command *commands,
1454 const char *unpacker_error,
1455 struct shallow_info *si,
1456 const struct string_list *push_options)
1457{
1458 struct check_connected_options opt = CHECK_CONNECTED_INIT;
1459 struct command *cmd;
1460 struct object_id oid;
1461 struct iterate_data data;
1462 struct async muxer;
1463 int err_fd = 0;
1464
1465 if (unpacker_error) {
1466 for (cmd = commands; cmd; cmd = cmd->next)
1467 cmd->error_string = "unpacker error";
1468 return;
1469 }
1470
1471 if (use_sideband) {
1472 memset(&muxer, 0, sizeof(muxer));
1473 muxer.proc = copy_to_sideband;
1474 muxer.in = -1;
1475 if (!start_async(&muxer))
1476 err_fd = muxer.in;
1477 /* ...else, continue without relaying sideband */
1478 }
1479
1480 data.cmds = commands;
1481 data.si = si;
1482 opt.err_fd = err_fd;
1483 opt.progress = err_fd && !quiet;
1484 opt.env = tmp_objdir_env(tmp_objdir);
1485 if (check_connected(iterate_receive_command_list, &data, &opt))
1486 set_connectivity_errors(commands, si);
1487
1488 if (use_sideband)
1489 finish_async(&muxer);
1490
1491 reject_updates_to_hidden(commands);
1492
1493 if (run_receive_hook(commands, "pre-receive", 0, push_options)) {
1494 for (cmd = commands; cmd; cmd = cmd->next) {
1495 if (!cmd->error_string)
1496 cmd->error_string = "pre-receive hook declined";
1497 }
1498 return;
1499 }
1500
1501 /*
1502 * Now we'll start writing out refs, which means the objects need
1503 * to be in their final positions so that other processes can see them.
1504 */
1505 if (tmp_objdir_migrate(tmp_objdir) < 0) {
1506 for (cmd = commands; cmd; cmd = cmd->next) {
1507 if (!cmd->error_string)
1508 cmd->error_string = "unable to migrate objects to permanent storage";
1509 }
1510 return;
1511 }
1512 tmp_objdir = NULL;
1513
1514 check_aliased_updates(commands);
1515
1516 free(head_name_to_free);
1517 head_name = head_name_to_free = resolve_refdup("HEAD", 0, oid.hash, NULL);
1518
1519 if (use_atomic)
1520 execute_commands_atomic(commands, si);
1521 else
1522 execute_commands_non_atomic(commands, si);
1523
1524 if (shallow_update)
1525 warn_if_skipped_connectivity_check(commands, si);
1526}
1527
1528static struct command **queue_command(struct command **tail,
1529 const char *line,
1530 int linelen)
1531{
1532 struct object_id old_oid, new_oid;
1533 struct command *cmd;
1534 const char *refname;
1535 int reflen;
1536 const char *p;
1537
1538 if (parse_oid_hex(line, &old_oid, &p) ||
1539 *p++ != ' ' ||
1540 parse_oid_hex(p, &new_oid, &p) ||
1541 *p++ != ' ')
1542 die("protocol error: expected old/new/ref, got '%s'", line);
1543
1544 refname = p;
1545 reflen = linelen - (p - line);
1546 FLEX_ALLOC_MEM(cmd, ref_name, refname, reflen);
1547 oidcpy(&cmd->old_oid, &old_oid);
1548 oidcpy(&cmd->new_oid, &new_oid);
1549 *tail = cmd;
1550 return &cmd->next;
1551}
1552
1553static void queue_commands_from_cert(struct command **tail,
1554 struct strbuf *push_cert)
1555{
1556 const char *boc, *eoc;
1557
1558 if (*tail)
1559 die("protocol error: got both push certificate and unsigned commands");
1560
1561 boc = strstr(push_cert->buf, "\n\n");
1562 if (!boc)
1563 die("malformed push certificate %.*s", 100, push_cert->buf);
1564 else
1565 boc += 2;
1566 eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
1567
1568 while (boc < eoc) {
1569 const char *eol = memchr(boc, '\n', eoc - boc);
1570 tail = queue_command(tail, boc, eol ? eol - boc : eoc - boc);
1571 boc = eol ? eol + 1 : eoc;
1572 }
1573}
1574
1575static struct command *read_head_info(struct oid_array *shallow)
1576{
1577 struct command *commands = NULL;
1578 struct command **p = &commands;
1579 for (;;) {
1580 char *line;
1581 int len, linelen;
1582
1583 line = packet_read_line(0, &len);
1584 if (!line)
1585 break;
1586
1587 if (len > 8 && starts_with(line, "shallow ")) {
1588 struct object_id oid;
1589 if (get_oid_hex(line + 8, &oid))
1590 die("protocol error: expected shallow sha, got '%s'",
1591 line + 8);
1592 oid_array_append(shallow, &oid);
1593 continue;
1594 }
1595
1596 linelen = strlen(line);
1597 if (linelen < len) {
1598 const char *feature_list = line + linelen + 1;
1599 if (parse_feature_request(feature_list, "report-status"))
1600 report_status = 1;
1601 if (parse_feature_request(feature_list, "side-band-64k"))
1602 use_sideband = LARGE_PACKET_MAX;
1603 if (parse_feature_request(feature_list, "quiet"))
1604 quiet = 1;
1605 if (advertise_atomic_push
1606 && parse_feature_request(feature_list, "atomic"))
1607 use_atomic = 1;
1608 if (advertise_push_options
1609 && parse_feature_request(feature_list, "push-options"))
1610 use_push_options = 1;
1611 }
1612
1613 if (!strcmp(line, "push-cert")) {
1614 int true_flush = 0;
1615 char certbuf[1024];
1616
1617 for (;;) {
1618 len = packet_read(0, NULL, NULL,
1619 certbuf, sizeof(certbuf), 0);
1620 if (!len) {
1621 true_flush = 1;
1622 break;
1623 }
1624 if (!strcmp(certbuf, "push-cert-end\n"))
1625 break; /* end of cert */
1626 strbuf_addstr(&push_cert, certbuf);
1627 }
1628
1629 if (true_flush)
1630 break;
1631 continue;
1632 }
1633
1634 p = queue_command(p, line, linelen);
1635 }
1636
1637 if (push_cert.len)
1638 queue_commands_from_cert(p, &push_cert);
1639
1640 return commands;
1641}
1642
1643static void read_push_options(struct string_list *options)
1644{
1645 while (1) {
1646 char *line;
1647 int len;
1648
1649 line = packet_read_line(0, &len);
1650
1651 if (!line)
1652 break;
1653
1654 string_list_append(options, line);
1655 }
1656}
1657
1658static const char *parse_pack_header(struct pack_header *hdr)
1659{
1660 switch (read_pack_header(0, hdr)) {
1661 case PH_ERROR_EOF:
1662 return "eof before pack header was fully read";
1663
1664 case PH_ERROR_PACK_SIGNATURE:
1665 return "protocol error (pack signature mismatch detected)";
1666
1667 case PH_ERROR_PROTOCOL:
1668 return "protocol error (pack version unsupported)";
1669
1670 default:
1671 return "unknown error in parse_pack_header";
1672
1673 case 0:
1674 return NULL;
1675 }
1676}
1677
1678static const char *pack_lockfile;
1679
1680static void push_header_arg(struct argv_array *args, struct pack_header *hdr)
1681{
1682 argv_array_pushf(args, "--pack_header=%"PRIu32",%"PRIu32,
1683 ntohl(hdr->hdr_version), ntohl(hdr->hdr_entries));
1684}
1685
1686static const char *unpack(int err_fd, struct shallow_info *si)
1687{
1688 struct pack_header hdr;
1689 const char *hdr_err;
1690 int status;
1691 struct child_process child = CHILD_PROCESS_INIT;
1692 int fsck_objects = (receive_fsck_objects >= 0
1693 ? receive_fsck_objects
1694 : transfer_fsck_objects >= 0
1695 ? transfer_fsck_objects
1696 : 0);
1697
1698 hdr_err = parse_pack_header(&hdr);
1699 if (hdr_err) {
1700 if (err_fd > 0)
1701 close(err_fd);
1702 return hdr_err;
1703 }
1704
1705 if (si->nr_ours || si->nr_theirs) {
1706 alt_shallow_file = setup_temporary_shallow(si->shallow);
1707 argv_array_push(&child.args, "--shallow-file");
1708 argv_array_push(&child.args, alt_shallow_file);
1709 }
1710
1711 tmp_objdir = tmp_objdir_create();
1712 if (!tmp_objdir) {
1713 if (err_fd > 0)
1714 close(err_fd);
1715 return "unable to create temporary object directory";
1716 }
1717 child.env = tmp_objdir_env(tmp_objdir);
1718
1719 /*
1720 * Normally we just pass the tmp_objdir environment to the child
1721 * processes that do the heavy lifting, but we may need to see these
1722 * objects ourselves to set up shallow information.
1723 */
1724 tmp_objdir_add_as_alternate(tmp_objdir);
1725
1726 if (ntohl(hdr.hdr_entries) < unpack_limit) {
1727 argv_array_push(&child.args, "unpack-objects");
1728 push_header_arg(&child.args, &hdr);
1729 if (quiet)
1730 argv_array_push(&child.args, "-q");
1731 if (fsck_objects)
1732 argv_array_pushf(&child.args, "--strict%s",
1733 fsck_msg_types.buf);
1734 if (max_input_size)
1735 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1736 (uintmax_t)max_input_size);
1737 child.no_stdout = 1;
1738 child.err = err_fd;
1739 child.git_cmd = 1;
1740 status = run_command(&child);
1741 if (status)
1742 return "unpack-objects abnormal exit";
1743 } else {
1744 char hostname[HOST_NAME_MAX + 1];
1745
1746 argv_array_pushl(&child.args, "index-pack", "--stdin", NULL);
1747 push_header_arg(&child.args, &hdr);
1748
1749 if (xgethostname(hostname, sizeof(hostname)))
1750 xsnprintf(hostname, sizeof(hostname), "localhost");
1751 argv_array_pushf(&child.args,
1752 "--keep=receive-pack %"PRIuMAX" on %s",
1753 (uintmax_t)getpid(),
1754 hostname);
1755
1756 if (!quiet && err_fd)
1757 argv_array_push(&child.args, "--show-resolving-progress");
1758 if (use_sideband)
1759 argv_array_push(&child.args, "--report-end-of-input");
1760 if (fsck_objects)
1761 argv_array_pushf(&child.args, "--strict%s",
1762 fsck_msg_types.buf);
1763 if (!reject_thin)
1764 argv_array_push(&child.args, "--fix-thin");
1765 if (max_input_size)
1766 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1767 (uintmax_t)max_input_size);
1768 child.out = -1;
1769 child.err = err_fd;
1770 child.git_cmd = 1;
1771 status = start_command(&child);
1772 if (status)
1773 return "index-pack fork failed";
1774 pack_lockfile = index_pack_lockfile(child.out);
1775 close(child.out);
1776 status = finish_command(&child);
1777 if (status)
1778 return "index-pack abnormal exit";
1779 reprepare_packed_git();
1780 }
1781 return NULL;
1782}
1783
1784static const char *unpack_with_sideband(struct shallow_info *si)
1785{
1786 struct async muxer;
1787 const char *ret;
1788
1789 if (!use_sideband)
1790 return unpack(0, si);
1791
1792 use_keepalive = KEEPALIVE_AFTER_NUL;
1793 memset(&muxer, 0, sizeof(muxer));
1794 muxer.proc = copy_to_sideband;
1795 muxer.in = -1;
1796 if (start_async(&muxer))
1797 return NULL;
1798
1799 ret = unpack(muxer.in, si);
1800
1801 finish_async(&muxer);
1802 return ret;
1803}
1804
1805static void prepare_shallow_update(struct command *commands,
1806 struct shallow_info *si)
1807{
1808 int i, j, k, bitmap_size = (si->ref->nr + 31) / 32;
1809
1810 ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
1811 assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
1812
1813 si->need_reachability_test =
1814 xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
1815 si->reachable =
1816 xcalloc(si->shallow->nr, sizeof(*si->reachable));
1817 si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
1818
1819 for (i = 0; i < si->nr_ours; i++)
1820 si->need_reachability_test[si->ours[i]] = 1;
1821
1822 for (i = 0; i < si->shallow->nr; i++) {
1823 if (!si->used_shallow[i])
1824 continue;
1825 for (j = 0; j < bitmap_size; j++) {
1826 if (!si->used_shallow[i][j])
1827 continue;
1828 si->need_reachability_test[i]++;
1829 for (k = 0; k < 32; k++)
1830 if (si->used_shallow[i][j] & (1U << k))
1831 si->shallow_ref[j * 32 + k]++;
1832 }
1833
1834 /*
1835 * true for those associated with some refs and belong
1836 * in "ours" list aka "step 7 not done yet"
1837 */
1838 si->need_reachability_test[i] =
1839 si->need_reachability_test[i] > 1;
1840 }
1841
1842 /*
1843 * keep hooks happy by forcing a temporary shallow file via
1844 * env variable because we can't add --shallow-file to every
1845 * command. check_everything_connected() will be done with
1846 * true .git/shallow though.
1847 */
1848 setenv(GIT_SHALLOW_FILE_ENVIRONMENT, alt_shallow_file, 1);
1849}
1850
1851static void update_shallow_info(struct command *commands,
1852 struct shallow_info *si,
1853 struct oid_array *ref)
1854{
1855 struct command *cmd;
1856 int *ref_status;
1857 remove_nonexistent_theirs_shallow(si);
1858 if (!si->nr_ours && !si->nr_theirs) {
1859 shallow_update = 0;
1860 return;
1861 }
1862
1863 for (cmd = commands; cmd; cmd = cmd->next) {
1864 if (is_null_oid(&cmd->new_oid))
1865 continue;
1866 oid_array_append(ref, &cmd->new_oid);
1867 cmd->index = ref->nr - 1;
1868 }
1869 si->ref = ref;
1870
1871 if (shallow_update) {
1872 prepare_shallow_update(commands, si);
1873 return;
1874 }
1875
1876 ALLOC_ARRAY(ref_status, ref->nr);
1877 assign_shallow_commits_to_refs(si, NULL, ref_status);
1878 for (cmd = commands; cmd; cmd = cmd->next) {
1879 if (is_null_oid(&cmd->new_oid))
1880 continue;
1881 if (ref_status[cmd->index]) {
1882 cmd->error_string = "shallow update not allowed";
1883 cmd->skip_update = 1;
1884 }
1885 }
1886 free(ref_status);
1887}
1888
1889static void report(struct command *commands, const char *unpack_status)
1890{
1891 struct command *cmd;
1892 struct strbuf buf = STRBUF_INIT;
1893
1894 packet_buf_write(&buf, "unpack %s\n",
1895 unpack_status ? unpack_status : "ok");
1896 for (cmd = commands; cmd; cmd = cmd->next) {
1897 if (!cmd->error_string)
1898 packet_buf_write(&buf, "ok %s\n",
1899 cmd->ref_name);
1900 else
1901 packet_buf_write(&buf, "ng %s %s\n",
1902 cmd->ref_name, cmd->error_string);
1903 }
1904 packet_buf_flush(&buf);
1905
1906 if (use_sideband)
1907 send_sideband(1, 1, buf.buf, buf.len, use_sideband);
1908 else
1909 write_or_die(1, buf.buf, buf.len);
1910 strbuf_release(&buf);
1911}
1912
1913static int delete_only(struct command *commands)
1914{
1915 struct command *cmd;
1916 for (cmd = commands; cmd; cmd = cmd->next) {
1917 if (!is_null_oid(&cmd->new_oid))
1918 return 0;
1919 }
1920 return 1;
1921}
1922
1923int cmd_receive_pack(int argc, const char **argv, const char *prefix)
1924{
1925 int advertise_refs = 0;
1926 struct command *commands;
1927 struct oid_array shallow = OID_ARRAY_INIT;
1928 struct oid_array ref = OID_ARRAY_INIT;
1929 struct shallow_info si;
1930
1931 struct option options[] = {
1932 OPT__QUIET(&quiet, N_("quiet")),
1933 OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
1934 OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
1935 OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),
1936 OPT_END()
1937 };
1938
1939 packet_trace_identity("receive-pack");
1940
1941 argc = parse_options(argc, argv, prefix, options, receive_pack_usage, 0);
1942
1943 if (argc > 1)
1944 usage_msg_opt(_("Too many arguments."), receive_pack_usage, options);
1945 if (argc == 0)
1946 usage_msg_opt(_("You must specify a directory."), receive_pack_usage, options);
1947
1948 service_dir = argv[0];
1949
1950 setup_path();
1951
1952 if (!enter_repo(service_dir, 0))
1953 die("'%s' does not appear to be a git repository", service_dir);
1954
1955 git_config(receive_pack_config, NULL);
1956 if (cert_nonce_seed)
1957 push_cert_nonce = prepare_push_cert_nonce(service_dir, time(NULL));
1958
1959 if (0 <= transfer_unpack_limit)
1960 unpack_limit = transfer_unpack_limit;
1961 else if (0 <= receive_unpack_limit)
1962 unpack_limit = receive_unpack_limit;
1963
1964 if (advertise_refs || !stateless_rpc) {
1965 write_head_info();
1966 }
1967 if (advertise_refs)
1968 return 0;
1969
1970 if ((commands = read_head_info(&shallow)) != NULL) {
1971 const char *unpack_status = NULL;
1972 struct string_list push_options = STRING_LIST_INIT_DUP;
1973
1974 if (use_push_options)
1975 read_push_options(&push_options);
1976 if (!check_cert_push_options(&push_options)) {
1977 struct command *cmd;
1978 for (cmd = commands; cmd; cmd = cmd->next)
1979 cmd->error_string = "inconsistent push options";
1980 }
1981
1982 prepare_shallow_info(&si, &shallow);
1983 if (!si.nr_ours && !si.nr_theirs)
1984 shallow_update = 0;
1985 if (!delete_only(commands)) {
1986 unpack_status = unpack_with_sideband(&si);
1987 update_shallow_info(commands, &si, &ref);
1988 }
1989 use_keepalive = KEEPALIVE_ALWAYS;
1990 execute_commands(commands, unpack_status, &si,
1991 &push_options);
1992 if (pack_lockfile)
1993 unlink_or_warn(pack_lockfile);
1994 if (report_status)
1995 report(commands, unpack_status);
1996 run_receive_hook(commands, "post-receive", 1,
1997 &push_options);
1998 run_update_post_hook(commands);
1999 string_list_clear(&push_options, 0);
2000 if (auto_gc) {
2001 const char *argv_gc_auto[] = {
2002 "gc", "--auto", "--quiet", NULL,
2003 };
2004 struct child_process proc = CHILD_PROCESS_INIT;
2005
2006 proc.no_stdin = 1;
2007 proc.stdout_to_stderr = 1;
2008 proc.err = use_sideband ? -1 : 0;
2009 proc.git_cmd = 1;
2010 proc.argv = argv_gc_auto;
2011
2012 close_all_packs();
2013 if (!start_command(&proc)) {
2014 if (use_sideband)
2015 copy_to_sideband(proc.err, -1, NULL);
2016 finish_command(&proc);
2017 }
2018 }
2019 if (auto_update_server_info)
2020 update_server_info(0);
2021 clear_shallow_info(&si);
2022 }
2023 if (use_sideband)
2024 packet_flush(1);
2025 oid_array_clear(&shallow);
2026 oid_array_clear(&ref);
2027 free((void *)push_cert_nonce);
2028 return 0;
2029}