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