7 #include "run-command.h"
13 #include "transport.h"
14 #include "string-list.h"
15 #include "sha1-array.h"
16 #include "connected.h"
17 #include "argv-array.h"
20 #include "gpg-interface.h"
23 #include "tmp-objdir.h"
26 static const char * const receive_pack_usage[] = {
27 N_("git receive-pack <git-dir>"),
39 static int deny_deletes;
40 static int deny_non_fast_forwards;
41 static enum deny_action deny_current_branch = DENY_UNCONFIGURED;
42 static enum deny_action deny_delete_current = DENY_UNCONFIGURED;
43 static int receive_fsck_objects = -1;
44 static int transfer_fsck_objects = -1;
45 static struct strbuf fsck_msg_types = STRBUF_INIT;
46 static int receive_unpack_limit = -1;
47 static int transfer_unpack_limit = -1;
48 static int advertise_atomic_push = 1;
49 static int advertise_push_options;
50 static int unpack_limit = 100;
51 static off_t max_input_size;
52 static int report_status;
53 static int use_sideband;
54 static int use_atomic;
55 static int use_push_options;
57 static int prefer_ofs_delta = 1;
58 static int auto_update_server_info;
59 static int auto_gc = 1;
60 static int reject_thin;
61 static int stateless_rpc;
62 static const char *service_dir;
63 static const char *head_name;
64 static void *head_name_to_free;
65 static int sent_capabilities;
66 static int shallow_update;
67 static const char *alt_shallow_file;
68 static struct strbuf push_cert = STRBUF_INIT;
69 static unsigned char push_cert_sha1[20];
70 static struct signature_check sigcheck;
71 static const char *push_cert_nonce;
72 static const char *cert_nonce_seed;
74 static const char *NONCE_UNSOLICITED = "UNSOLICITED";
75 static const char *NONCE_BAD = "BAD";
76 static const char *NONCE_MISSING = "MISSING";
77 static const char *NONCE_OK = "OK";
78 static const char *NONCE_SLOP = "SLOP";
79 static const char *nonce_status;
80 static long nonce_stamp_slop;
81 static unsigned long nonce_stamp_slop_limit;
82 static struct ref_transaction *transaction;
89 static int keepalive_in_sec = 5;
91 static struct tmp_objdir *tmp_objdir;
93 static enum deny_action parse_deny_action(const char *var, const char *value)
96 if (!strcasecmp(value, "ignore"))
98 if (!strcasecmp(value, "warn"))
100 if (!strcasecmp(value, "refuse"))
102 if (!strcasecmp(value, "updateinstead"))
103 return DENY_UPDATE_INSTEAD;
105 if (git_config_bool(var, value))
110 static int receive_pack_config(const char *var, const char *value, void *cb)
112 int status = parse_hide_refs_config(var, value, "receive");
117 if (strcmp(var, "receive.denydeletes") == 0) {
118 deny_deletes = git_config_bool(var, value);
122 if (strcmp(var, "receive.denynonfastforwards") == 0) {
123 deny_non_fast_forwards = git_config_bool(var, value);
127 if (strcmp(var, "receive.unpacklimit") == 0) {
128 receive_unpack_limit = git_config_int(var, value);
132 if (strcmp(var, "transfer.unpacklimit") == 0) {
133 transfer_unpack_limit = git_config_int(var, value);
137 if (strcmp(var, "receive.fsck.skiplist") == 0) {
140 if (git_config_pathname(&path, var, value))
142 strbuf_addf(&fsck_msg_types, "%cskiplist=%s",
143 fsck_msg_types.len ? ',' : '=', path);
148 if (skip_prefix(var, "receive.fsck.", &var)) {
149 if (is_valid_msg_type(var, value))
150 strbuf_addf(&fsck_msg_types, "%c%s=%s",
151 fsck_msg_types.len ? ',' : '=', var, value);
153 warning("Skipping unknown msg id '%s'", var);
157 if (strcmp(var, "receive.fsckobjects") == 0) {
158 receive_fsck_objects = git_config_bool(var, value);
162 if (strcmp(var, "transfer.fsckobjects") == 0) {
163 transfer_fsck_objects = git_config_bool(var, value);
167 if (!strcmp(var, "receive.denycurrentbranch")) {
168 deny_current_branch = parse_deny_action(var, value);
172 if (strcmp(var, "receive.denydeletecurrent") == 0) {
173 deny_delete_current = parse_deny_action(var, value);
177 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
178 prefer_ofs_delta = git_config_bool(var, value);
182 if (strcmp(var, "receive.updateserverinfo") == 0) {
183 auto_update_server_info = git_config_bool(var, value);
187 if (strcmp(var, "receive.autogc") == 0) {
188 auto_gc = git_config_bool(var, value);
192 if (strcmp(var, "receive.shallowupdate") == 0) {
193 shallow_update = git_config_bool(var, value);
197 if (strcmp(var, "receive.certnonceseed") == 0)
198 return git_config_string(&cert_nonce_seed, var, value);
200 if (strcmp(var, "receive.certnonceslop") == 0) {
201 nonce_stamp_slop_limit = git_config_ulong(var, value);
205 if (strcmp(var, "receive.advertiseatomic") == 0) {
206 advertise_atomic_push = git_config_bool(var, value);
210 if (strcmp(var, "receive.advertisepushoptions") == 0) {
211 advertise_push_options = git_config_bool(var, value);
215 if (strcmp(var, "receive.keepalive") == 0) {
216 keepalive_in_sec = git_config_int(var, value);
220 if (strcmp(var, "receive.maxinputsize") == 0) {
221 max_input_size = git_config_int64(var, value);
225 return git_default_config(var, value, cb);
228 static void show_ref(const char *path, const unsigned char *sha1)
230 if (sent_capabilities) {
231 packet_write_fmt(1, "%s %s\n", sha1_to_hex(sha1), path);
233 struct strbuf cap = STRBUF_INIT;
236 "report-status delete-refs side-band-64k quiet");
237 if (advertise_atomic_push)
238 strbuf_addstr(&cap, " atomic");
239 if (prefer_ofs_delta)
240 strbuf_addstr(&cap, " ofs-delta");
242 strbuf_addf(&cap, " push-cert=%s", push_cert_nonce);
243 if (advertise_push_options)
244 strbuf_addstr(&cap, " push-options");
245 strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized());
246 packet_write_fmt(1, "%s %s%c%s\n",
247 sha1_to_hex(sha1), path, 0, cap.buf);
248 strbuf_release(&cap);
249 sent_capabilities = 1;
253 static int show_ref_cb(const char *path_full, const struct object_id *oid,
254 int flag, void *data)
256 struct oidset *seen = data;
257 const char *path = strip_namespace(path_full);
259 if (ref_is_hidden(path, path_full))
263 * Advertise refs outside our current namespace as ".have"
264 * refs, so that the client can use them to minimize data
265 * transfer but will otherwise ignore them.
268 if (oidset_insert(seen, oid))
272 oidset_insert(seen, oid);
274 show_ref(path, oid->hash);
278 static void show_one_alternate_ref(const char *refname,
279 const struct object_id *oid,
282 struct oidset *seen = data;
284 if (oidset_insert(seen, oid))
287 show_ref(".have", oid->hash);
290 static void write_head_info(void)
292 static struct oidset seen = OIDSET_INIT;
294 for_each_ref(show_ref_cb, &seen);
295 for_each_alternate_ref(show_one_alternate_ref, &seen);
297 if (!sent_capabilities)
298 show_ref("capabilities^{}", null_sha1);
300 advertise_shallow_grafts(1);
307 struct command *next;
308 const char *error_string;
309 unsigned int skip_update:1,
312 unsigned char old_sha1[20];
313 unsigned char new_sha1[20];
314 char ref_name[FLEX_ARRAY]; /* more */
317 static void rp_error(const char *err, ...) __attribute__((format (printf, 1, 2)));
318 static void rp_warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
320 static void report_message(const char *prefix, const char *err, va_list params)
325 sz = xsnprintf(msg, sizeof(msg), "%s", prefix);
326 sz += vsnprintf(msg + sz, sizeof(msg) - sz, err, params);
327 if (sz > (sizeof(msg) - 1))
328 sz = sizeof(msg) - 1;
332 send_sideband(1, 2, msg, sz, use_sideband);
337 static void rp_warning(const char *err, ...)
340 va_start(params, err);
341 report_message("warning: ", err, params);
345 static void rp_error(const char *err, ...)
348 va_start(params, err);
349 report_message("error: ", err, params);
353 static int copy_to_sideband(int in, int out, void *arg)
356 int keepalive_active = 0;
358 if (keepalive_in_sec <= 0)
359 use_keepalive = KEEPALIVE_NEVER;
360 if (use_keepalive == KEEPALIVE_ALWAYS)
361 keepalive_active = 1;
366 if (keepalive_active) {
372 ret = poll(&pfd, 1, 1000 * keepalive_in_sec);
379 } else if (ret == 0) {
380 /* no data; send a keepalive packet */
381 static const char buf[] = "0005\1";
382 write_or_die(1, buf, sizeof(buf) - 1);
384 } /* else there is actual data to read */
387 sz = xread(in, data, sizeof(data));
391 if (use_keepalive == KEEPALIVE_AFTER_NUL && !keepalive_active) {
392 const char *p = memchr(data, '\0', sz);
395 * The NUL tells us to start sending keepalives. Make
396 * sure we send any other data we read along
399 keepalive_active = 1;
400 send_sideband(1, 2, data, p - data, use_sideband);
401 send_sideband(1, 2, p + 1, sz - (p - data + 1), use_sideband);
407 * Either we're not looking for a NUL signal, or we didn't see
408 * it yet; just pass along the data.
410 send_sideband(1, 2, data, sz, use_sideband);
416 #define HMAC_BLOCK_SIZE 64
418 static void hmac_sha1(unsigned char *out,
419 const char *key_in, size_t key_len,
420 const char *text, size_t text_len)
422 unsigned char key[HMAC_BLOCK_SIZE];
423 unsigned char k_ipad[HMAC_BLOCK_SIZE];
424 unsigned char k_opad[HMAC_BLOCK_SIZE];
428 /* RFC 2104 2. (1) */
429 memset(key, '\0', HMAC_BLOCK_SIZE);
430 if (HMAC_BLOCK_SIZE < key_len) {
432 git_SHA1_Update(&ctx, key_in, key_len);
433 git_SHA1_Final(key, &ctx);
435 memcpy(key, key_in, key_len);
438 /* RFC 2104 2. (2) & (5) */
439 for (i = 0; i < sizeof(key); i++) {
440 k_ipad[i] = key[i] ^ 0x36;
441 k_opad[i] = key[i] ^ 0x5c;
444 /* RFC 2104 2. (3) & (4) */
446 git_SHA1_Update(&ctx, k_ipad, sizeof(k_ipad));
447 git_SHA1_Update(&ctx, text, text_len);
448 git_SHA1_Final(out, &ctx);
450 /* RFC 2104 2. (6) & (7) */
452 git_SHA1_Update(&ctx, k_opad, sizeof(k_opad));
453 git_SHA1_Update(&ctx, out, 20);
454 git_SHA1_Final(out, &ctx);
457 static char *prepare_push_cert_nonce(const char *path, unsigned long stamp)
459 struct strbuf buf = STRBUF_INIT;
460 unsigned char sha1[20];
462 strbuf_addf(&buf, "%s:%lu", path, stamp);
463 hmac_sha1(sha1, buf.buf, buf.len, cert_nonce_seed, strlen(cert_nonce_seed));;
464 strbuf_release(&buf);
466 /* RFC 2104 5. HMAC-SHA1-80 */
467 strbuf_addf(&buf, "%lu-%.*s", stamp, 20, sha1_to_hex(sha1));
468 return strbuf_detach(&buf, NULL);
472 * NEEDSWORK: reuse find_commit_header() from jk/commit-author-parsing
473 * after dropping "_commit" from its name and possibly moving it out
476 static char *find_header(const char *msg, size_t len, const char *key)
478 int key_len = strlen(key);
479 const char *line = msg;
481 while (line && line < msg + len) {
482 const char *eol = strchrnul(line, '\n');
484 if ((msg + len <= eol) || line == eol)
486 if (line + key_len < eol &&
487 !memcmp(line, key, key_len) && line[key_len] == ' ') {
488 int offset = key_len + 1;
489 return xmemdupz(line + offset, (eol - line) - offset);
491 line = *eol ? eol + 1 : NULL;
496 static const char *check_nonce(const char *buf, size_t len)
498 char *nonce = find_header(buf, len, "nonce");
499 unsigned long stamp, ostamp;
500 char *bohmac, *expect = NULL;
501 const char *retval = NONCE_BAD;
504 retval = NONCE_MISSING;
506 } else if (!push_cert_nonce) {
507 retval = NONCE_UNSOLICITED;
509 } else if (!strcmp(push_cert_nonce, nonce)) {
514 if (!stateless_rpc) {
515 /* returned nonce MUST match what we gave out earlier */
521 * In stateless mode, we may be receiving a nonce issued by
522 * another instance of the server that serving the same
523 * repository, and the timestamps may not match, but the
524 * nonce-seed and dir should match, so we can recompute and
525 * report the time slop.
527 * In addition, when a nonce issued by another instance has
528 * timestamp within receive.certnonceslop seconds, we pretend
529 * as if we issued that nonce when reporting to the hook.
532 /* nonce is concat(<seconds-since-epoch>, "-", <hmac>) */
533 if (*nonce <= '0' || '9' < *nonce) {
537 stamp = strtoul(nonce, &bohmac, 10);
538 if (bohmac == nonce || bohmac[0] != '-') {
543 expect = prepare_push_cert_nonce(service_dir, stamp);
544 if (strcmp(expect, nonce)) {
545 /* Not what we would have signed earlier */
551 * By how many seconds is this nonce stale? Negative value
552 * would mean it was issued by another server with its clock
553 * skewed in the future.
555 ostamp = strtoul(push_cert_nonce, NULL, 10);
556 nonce_stamp_slop = (long)ostamp - (long)stamp;
558 if (nonce_stamp_slop_limit &&
559 labs(nonce_stamp_slop) <= nonce_stamp_slop_limit) {
561 * Pretend as if the received nonce (which passes the
562 * HMAC check, so it is not a forged by third-party)
565 free((void *)push_cert_nonce);
566 push_cert_nonce = xstrdup(nonce);
578 static void prepare_push_cert_sha1(struct child_process *proc)
580 static int already_done;
586 struct strbuf gpg_output = STRBUF_INIT;
587 struct strbuf gpg_status = STRBUF_INIT;
588 int bogs /* beginning_of_gpg_sig */;
591 if (write_sha1_file(push_cert.buf, push_cert.len, "blob", push_cert_sha1))
592 hashclr(push_cert_sha1);
594 memset(&sigcheck, '\0', sizeof(sigcheck));
595 sigcheck.result = 'N';
597 bogs = parse_signature(push_cert.buf, push_cert.len);
598 if (verify_signed_buffer(push_cert.buf, bogs,
599 push_cert.buf + bogs, push_cert.len - bogs,
600 &gpg_output, &gpg_status) < 0) {
601 ; /* error running gpg */
603 sigcheck.payload = push_cert.buf;
604 sigcheck.gpg_output = gpg_output.buf;
605 sigcheck.gpg_status = gpg_status.buf;
606 parse_gpg_output(&sigcheck);
609 strbuf_release(&gpg_output);
610 strbuf_release(&gpg_status);
611 nonce_status = check_nonce(push_cert.buf, bogs);
613 if (!is_null_sha1(push_cert_sha1)) {
614 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT=%s",
615 sha1_to_hex(push_cert_sha1));
616 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_SIGNER=%s",
617 sigcheck.signer ? sigcheck.signer : "");
618 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_KEY=%s",
619 sigcheck.key ? sigcheck.key : "");
620 argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_STATUS=%c",
622 if (push_cert_nonce) {
623 argv_array_pushf(&proc->env_array,
624 "GIT_PUSH_CERT_NONCE=%s",
626 argv_array_pushf(&proc->env_array,
627 "GIT_PUSH_CERT_NONCE_STATUS=%s",
629 if (nonce_status == NONCE_SLOP)
630 argv_array_pushf(&proc->env_array,
631 "GIT_PUSH_CERT_NONCE_SLOP=%ld",
637 struct receive_hook_feed_state {
641 const struct string_list *push_options;
644 typedef int (*feed_fn)(void *, const char **, size_t *);
645 static int run_and_feed_hook(const char *hook_name, feed_fn feed,
646 struct receive_hook_feed_state *feed_state)
648 struct child_process proc = CHILD_PROCESS_INIT;
653 argv[0] = find_hook(hook_name);
661 proc.stdout_to_stderr = 1;
662 if (feed_state->push_options) {
664 for (i = 0; i < feed_state->push_options->nr; i++)
665 argv_array_pushf(&proc.env_array,
666 "GIT_PUSH_OPTION_%d=%s", i,
667 feed_state->push_options->items[i].string);
668 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT=%d",
669 feed_state->push_options->nr);
671 argv_array_pushf(&proc.env_array, "GIT_PUSH_OPTION_COUNT");
674 argv_array_pushv(&proc.env_array, tmp_objdir_env(tmp_objdir));
677 memset(&muxer, 0, sizeof(muxer));
678 muxer.proc = copy_to_sideband;
680 code = start_async(&muxer);
686 prepare_push_cert_sha1(&proc);
688 code = start_command(&proc);
691 finish_async(&muxer);
695 sigchain_push(SIGPIPE, SIG_IGN);
700 if (feed(feed_state, &buf, &n))
702 if (write_in_full(proc.in, buf, n) != n)
707 finish_async(&muxer);
709 sigchain_pop(SIGPIPE);
711 return finish_command(&proc);
714 static int feed_receive_hook(void *state_, const char **bufp, size_t *sizep)
716 struct receive_hook_feed_state *state = state_;
717 struct command *cmd = state->cmd;
720 state->skip_broken && (cmd->error_string || cmd->did_not_exist))
724 strbuf_reset(&state->buf);
725 strbuf_addf(&state->buf, "%s %s %s\n",
726 sha1_to_hex(cmd->old_sha1), sha1_to_hex(cmd->new_sha1),
728 state->cmd = cmd->next;
730 *bufp = state->buf.buf;
731 *sizep = state->buf.len;
736 static int run_receive_hook(struct command *commands,
737 const char *hook_name,
739 const struct string_list *push_options)
741 struct receive_hook_feed_state state;
744 strbuf_init(&state.buf, 0);
745 state.cmd = commands;
746 state.skip_broken = skip_broken;
747 if (feed_receive_hook(&state, NULL, NULL))
749 state.cmd = commands;
750 state.push_options = push_options;
751 status = run_and_feed_hook(hook_name, feed_receive_hook, &state);
752 strbuf_release(&state.buf);
756 static int run_update_hook(struct command *cmd)
759 struct child_process proc = CHILD_PROCESS_INIT;
762 argv[0] = find_hook("update");
766 argv[1] = cmd->ref_name;
767 argv[2] = sha1_to_hex(cmd->old_sha1);
768 argv[3] = sha1_to_hex(cmd->new_sha1);
772 proc.stdout_to_stderr = 1;
773 proc.err = use_sideband ? -1 : 0;
775 proc.env = tmp_objdir_env(tmp_objdir);
777 code = start_command(&proc);
781 copy_to_sideband(proc.err, -1, NULL);
782 return finish_command(&proc);
785 static int is_ref_checked_out(const char *ref)
787 if (is_bare_repository())
792 return !strcmp(head_name, ref);
795 static char *refuse_unconfigured_deny_msg =
796 N_("By default, updating the current branch in a non-bare repository\n"
797 "is denied, because it will make the index and work tree inconsistent\n"
798 "with what you pushed, and will require 'git reset --hard' to match\n"
799 "the work tree to HEAD.\n"
801 "You can set the 'receive.denyCurrentBranch' configuration variable\n"
802 "to 'ignore' or 'warn' in the remote repository to allow pushing into\n"
803 "its current branch; however, this is not recommended unless you\n"
804 "arranged to update its work tree to match what you pushed in some\n"
807 "To squelch this message and still keep the default behaviour, set\n"
808 "'receive.denyCurrentBranch' configuration variable to 'refuse'.");
810 static void refuse_unconfigured_deny(void)
812 rp_error("%s", _(refuse_unconfigured_deny_msg));
815 static char *refuse_unconfigured_deny_delete_current_msg =
816 N_("By default, deleting the current branch is denied, because the next\n"
817 "'git clone' won't result in any file checked out, causing confusion.\n"
819 "You can set 'receive.denyDeleteCurrent' configuration variable to\n"
820 "'warn' or 'ignore' in the remote repository to allow deleting the\n"
821 "current branch, with or without a warning message.\n"
823 "To squelch this message, you can set it to 'refuse'.");
825 static void refuse_unconfigured_deny_delete_current(void)
827 rp_error("%s", _(refuse_unconfigured_deny_delete_current_msg));
830 static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]);
831 static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
833 static struct lock_file shallow_lock;
834 struct sha1_array extra = SHA1_ARRAY_INIT;
835 struct check_connected_options opt = CHECK_CONNECTED_INIT;
836 uint32_t mask = 1 << (cmd->index % 32);
839 trace_printf_key(&trace_shallow,
840 "shallow: update_shallow_ref %s\n", cmd->ref_name);
841 for (i = 0; i < si->shallow->nr; i++)
842 if (si->used_shallow[i] &&
843 (si->used_shallow[i][cmd->index / 32] & mask) &&
844 !delayed_reachability_test(si, i))
845 sha1_array_append(&extra, si->shallow->sha1[i]);
847 opt.env = tmp_objdir_env(tmp_objdir);
848 setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra);
849 if (check_connected(command_singleton_iterator, cmd, &opt)) {
850 rollback_lock_file(&shallow_lock);
851 sha1_array_clear(&extra);
855 commit_lock_file(&shallow_lock);
858 * Make sure setup_alternate_shallow() for the next ref does
859 * not lose these new roots..
861 for (i = 0; i < extra.nr; i++)
862 register_shallow(extra.sha1[i]);
864 si->shallow_ref[cmd->index] = 0;
865 sha1_array_clear(&extra);
870 * NEEDSWORK: we should consolidate various implementions of "are we
871 * on an unborn branch?" test into one, and make the unified one more
872 * robust. !get_sha1() based check used here and elsewhere would not
873 * allow us to tell an unborn branch from corrupt ref, for example.
874 * For the purpose of fixing "deploy-to-update does not work when
875 * pushing into an empty repository" issue, this should suffice for
878 static int head_has_history(void)
880 unsigned char sha1[20];
882 return !get_sha1("HEAD", sha1);
885 static const char *push_to_deploy(unsigned char *sha1,
886 struct argv_array *env,
887 const char *work_tree)
889 const char *update_refresh[] = {
890 "update-index", "-q", "--ignore-submodules", "--refresh", NULL
892 const char *diff_files[] = {
893 "diff-files", "--quiet", "--ignore-submodules", "--", NULL
895 const char *diff_index[] = {
896 "diff-index", "--quiet", "--cached", "--ignore-submodules",
899 const char *read_tree[] = {
900 "read-tree", "-u", "-m", NULL, NULL
902 struct child_process child = CHILD_PROCESS_INIT;
904 child.argv = update_refresh;
905 child.env = env->argv;
906 child.dir = work_tree;
908 child.stdout_to_stderr = 1;
910 if (run_command(&child))
911 return "Up-to-date check failed";
913 /* run_command() does not clean up completely; reinitialize */
914 child_process_init(&child);
915 child.argv = diff_files;
916 child.env = env->argv;
917 child.dir = work_tree;
919 child.stdout_to_stderr = 1;
921 if (run_command(&child))
922 return "Working directory has unstaged changes";
924 /* diff-index with either HEAD or an empty tree */
925 diff_index[4] = head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX;
927 child_process_init(&child);
928 child.argv = diff_index;
929 child.env = env->argv;
932 child.stdout_to_stderr = 0;
934 if (run_command(&child))
935 return "Working directory has staged changes";
937 read_tree[3] = sha1_to_hex(sha1);
938 child_process_init(&child);
939 child.argv = read_tree;
940 child.env = env->argv;
941 child.dir = work_tree;
944 child.stdout_to_stderr = 0;
946 if (run_command(&child))
947 return "Could not update working tree to new HEAD";
952 static const char *push_to_checkout_hook = "push-to-checkout";
954 static const char *push_to_checkout(unsigned char *sha1,
955 struct argv_array *env,
956 const char *work_tree)
958 argv_array_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
959 if (run_hook_le(env->argv, push_to_checkout_hook,
960 sha1_to_hex(sha1), NULL))
961 return "push-to-checkout hook declined";
966 static const char *update_worktree(unsigned char *sha1)
969 const char *work_tree = git_work_tree_cfg ? git_work_tree_cfg : "..";
970 struct argv_array env = ARGV_ARRAY_INIT;
972 if (is_bare_repository())
973 return "denyCurrentBranch = updateInstead needs a worktree";
975 argv_array_pushf(&env, "GIT_DIR=%s", absolute_path(get_git_dir()));
977 if (!find_hook(push_to_checkout_hook))
978 retval = push_to_deploy(sha1, &env, work_tree);
980 retval = push_to_checkout(sha1, &env, work_tree);
982 argv_array_clear(&env);
986 static const char *update(struct command *cmd, struct shallow_info *si)
988 const char *name = cmd->ref_name;
989 struct strbuf namespaced_name_buf = STRBUF_INIT;
990 const char *namespaced_name, *ret;
991 unsigned char *old_sha1 = cmd->old_sha1;
992 unsigned char *new_sha1 = cmd->new_sha1;
994 /* only refs/... are allowed */
995 if (!starts_with(name, "refs/") || check_refname_format(name + 5, 0)) {
996 rp_error("refusing to create funny ref '%s' remotely", name);
997 return "funny refname";
1000 strbuf_addf(&namespaced_name_buf, "%s%s", get_git_namespace(), name);
1001 namespaced_name = strbuf_detach(&namespaced_name_buf, NULL);
1003 if (is_ref_checked_out(namespaced_name)) {
1004 switch (deny_current_branch) {
1008 rp_warning("updating the current branch");
1011 case DENY_UNCONFIGURED:
1012 rp_error("refusing to update checked out branch: %s", name);
1013 if (deny_current_branch == DENY_UNCONFIGURED)
1014 refuse_unconfigured_deny();
1015 return "branch is currently checked out";
1016 case DENY_UPDATE_INSTEAD:
1017 ret = update_worktree(new_sha1);
1024 if (!is_null_sha1(new_sha1) && !has_sha1_file(new_sha1)) {
1025 error("unpack should have generated %s, "
1026 "but I can't find it!", sha1_to_hex(new_sha1));
1030 if (!is_null_sha1(old_sha1) && is_null_sha1(new_sha1)) {
1031 if (deny_deletes && starts_with(name, "refs/heads/")) {
1032 rp_error("denying ref deletion for %s", name);
1033 return "deletion prohibited";
1036 if (head_name && !strcmp(namespaced_name, head_name)) {
1037 switch (deny_delete_current) {
1041 rp_warning("deleting the current branch");
1044 case DENY_UNCONFIGURED:
1045 case DENY_UPDATE_INSTEAD:
1046 if (deny_delete_current == DENY_UNCONFIGURED)
1047 refuse_unconfigured_deny_delete_current();
1048 rp_error("refusing to delete the current branch: %s", name);
1049 return "deletion of the current branch prohibited";
1051 return "Invalid denyDeleteCurrent setting";
1056 if (deny_non_fast_forwards && !is_null_sha1(new_sha1) &&
1057 !is_null_sha1(old_sha1) &&
1058 starts_with(name, "refs/heads/")) {
1059 struct object *old_object, *new_object;
1060 struct commit *old_commit, *new_commit;
1062 old_object = parse_object(old_sha1);
1063 new_object = parse_object(new_sha1);
1065 if (!old_object || !new_object ||
1066 old_object->type != OBJ_COMMIT ||
1067 new_object->type != OBJ_COMMIT) {
1068 error("bad sha1 objects for %s", name);
1071 old_commit = (struct commit *)old_object;
1072 new_commit = (struct commit *)new_object;
1073 if (!in_merge_bases(old_commit, new_commit)) {
1074 rp_error("denying non-fast-forward %s"
1075 " (you should pull first)", name);
1076 return "non-fast-forward";
1079 if (run_update_hook(cmd)) {
1080 rp_error("hook declined to update %s", name);
1081 return "hook declined";
1084 if (is_null_sha1(new_sha1)) {
1085 struct strbuf err = STRBUF_INIT;
1086 if (!parse_object(old_sha1)) {
1088 if (ref_exists(name)) {
1089 rp_warning("Allowing deletion of corrupt ref.");
1091 rp_warning("Deleting a non-existent ref.");
1092 cmd->did_not_exist = 1;
1095 if (ref_transaction_delete(transaction,
1099 rp_error("%s", err.buf);
1100 strbuf_release(&err);
1101 return "failed to delete";
1103 strbuf_release(&err);
1104 return NULL; /* good */
1107 struct strbuf err = STRBUF_INIT;
1108 if (shallow_update && si->shallow_ref[cmd->index] &&
1109 update_shallow_ref(cmd, si))
1110 return "shallow error";
1112 if (ref_transaction_update(transaction,
1117 rp_error("%s", err.buf);
1118 strbuf_release(&err);
1120 return "failed to update ref";
1122 strbuf_release(&err);
1124 return NULL; /* good */
1128 static void run_update_post_hook(struct command *commands)
1130 struct command *cmd;
1132 struct child_process proc = CHILD_PROCESS_INIT;
1135 hook = find_hook("post-update");
1136 for (argc = 0, cmd = commands; cmd; cmd = cmd->next) {
1137 if (cmd->error_string || cmd->did_not_exist)
1144 argv_array_push(&proc.args, hook);
1145 for (cmd = commands; cmd; cmd = cmd->next) {
1146 if (cmd->error_string || cmd->did_not_exist)
1148 argv_array_push(&proc.args, cmd->ref_name);
1152 proc.stdout_to_stderr = 1;
1153 proc.err = use_sideband ? -1 : 0;
1155 if (!start_command(&proc)) {
1157 copy_to_sideband(proc.err, -1, NULL);
1158 finish_command(&proc);
1162 static void check_aliased_update(struct command *cmd, struct string_list *list)
1164 struct strbuf buf = STRBUF_INIT;
1165 const char *dst_name;
1166 struct string_list_item *item;
1167 struct command *dst_cmd;
1168 unsigned char sha1[GIT_SHA1_RAWSZ];
1171 strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
1172 dst_name = resolve_ref_unsafe(buf.buf, 0, sha1, &flag);
1173 strbuf_release(&buf);
1175 if (!(flag & REF_ISSYMREF))
1179 rp_error("refusing update to broken symref '%s'", cmd->ref_name);
1180 cmd->skip_update = 1;
1181 cmd->error_string = "broken symref";
1184 dst_name = strip_namespace(dst_name);
1186 if ((item = string_list_lookup(list, dst_name)) == NULL)
1189 cmd->skip_update = 1;
1191 dst_cmd = (struct command *) item->util;
1193 if (!hashcmp(cmd->old_sha1, dst_cmd->old_sha1) &&
1194 !hashcmp(cmd->new_sha1, dst_cmd->new_sha1))
1197 dst_cmd->skip_update = 1;
1199 rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
1200 " its target '%s' (%s..%s)",
1202 find_unique_abbrev(cmd->old_sha1, DEFAULT_ABBREV),
1203 find_unique_abbrev(cmd->new_sha1, DEFAULT_ABBREV),
1205 find_unique_abbrev(dst_cmd->old_sha1, DEFAULT_ABBREV),
1206 find_unique_abbrev(dst_cmd->new_sha1, DEFAULT_ABBREV));
1208 cmd->error_string = dst_cmd->error_string =
1209 "inconsistent aliased update";
1212 static void check_aliased_updates(struct command *commands)
1214 struct command *cmd;
1215 struct string_list ref_list = STRING_LIST_INIT_NODUP;
1217 for (cmd = commands; cmd; cmd = cmd->next) {
1218 struct string_list_item *item =
1219 string_list_append(&ref_list, cmd->ref_name);
1220 item->util = (void *)cmd;
1222 string_list_sort(&ref_list);
1224 for (cmd = commands; cmd; cmd = cmd->next) {
1225 if (!cmd->error_string)
1226 check_aliased_update(cmd, &ref_list);
1229 string_list_clear(&ref_list, 0);
1232 static int command_singleton_iterator(void *cb_data, unsigned char sha1[20])
1234 struct command **cmd_list = cb_data;
1235 struct command *cmd = *cmd_list;
1237 if (!cmd || is_null_sha1(cmd->new_sha1))
1238 return -1; /* end of list */
1239 *cmd_list = NULL; /* this returns only one */
1240 hashcpy(sha1, cmd->new_sha1);
1244 static void set_connectivity_errors(struct command *commands,
1245 struct shallow_info *si)
1247 struct command *cmd;
1249 for (cmd = commands; cmd; cmd = cmd->next) {
1250 struct command *singleton = cmd;
1251 struct check_connected_options opt = CHECK_CONNECTED_INIT;
1253 if (shallow_update && si->shallow_ref[cmd->index])
1254 /* to be checked in update_shallow_ref() */
1257 opt.env = tmp_objdir_env(tmp_objdir);
1258 if (!check_connected(command_singleton_iterator, &singleton,
1262 cmd->error_string = "missing necessary objects";
1266 struct iterate_data {
1267 struct command *cmds;
1268 struct shallow_info *si;
1271 static int iterate_receive_command_list(void *cb_data, unsigned char sha1[20])
1273 struct iterate_data *data = cb_data;
1274 struct command **cmd_list = &data->cmds;
1275 struct command *cmd = *cmd_list;
1277 for (; cmd; cmd = cmd->next) {
1278 if (shallow_update && data->si->shallow_ref[cmd->index])
1279 /* to be checked in update_shallow_ref() */
1281 if (!is_null_sha1(cmd->new_sha1) && !cmd->skip_update) {
1282 hashcpy(sha1, cmd->new_sha1);
1283 *cmd_list = cmd->next;
1288 return -1; /* end of list */
1291 static void reject_updates_to_hidden(struct command *commands)
1293 struct strbuf refname_full = STRBUF_INIT;
1295 struct command *cmd;
1297 strbuf_addstr(&refname_full, get_git_namespace());
1298 prefix_len = refname_full.len;
1300 for (cmd = commands; cmd; cmd = cmd->next) {
1301 if (cmd->error_string)
1304 strbuf_setlen(&refname_full, prefix_len);
1305 strbuf_addstr(&refname_full, cmd->ref_name);
1307 if (!ref_is_hidden(cmd->ref_name, refname_full.buf))
1309 if (is_null_sha1(cmd->new_sha1))
1310 cmd->error_string = "deny deleting a hidden ref";
1312 cmd->error_string = "deny updating a hidden ref";
1315 strbuf_release(&refname_full);
1318 static int should_process_cmd(struct command *cmd)
1320 return !cmd->error_string && !cmd->skip_update;
1323 static void warn_if_skipped_connectivity_check(struct command *commands,
1324 struct shallow_info *si)
1326 struct command *cmd;
1327 int checked_connectivity = 1;
1329 for (cmd = commands; cmd; cmd = cmd->next) {
1330 if (should_process_cmd(cmd) && si->shallow_ref[cmd->index]) {
1331 error("BUG: connectivity check has not been run on ref %s",
1333 checked_connectivity = 0;
1336 if (!checked_connectivity)
1337 die("BUG: connectivity check skipped???");
1340 static void execute_commands_non_atomic(struct command *commands,
1341 struct shallow_info *si)
1343 struct command *cmd;
1344 struct strbuf err = STRBUF_INIT;
1346 for (cmd = commands; cmd; cmd = cmd->next) {
1347 if (!should_process_cmd(cmd))
1350 transaction = ref_transaction_begin(&err);
1352 rp_error("%s", err.buf);
1354 cmd->error_string = "transaction failed to start";
1358 cmd->error_string = update(cmd, si);
1360 if (!cmd->error_string
1361 && ref_transaction_commit(transaction, &err)) {
1362 rp_error("%s", err.buf);
1364 cmd->error_string = "failed to update ref";
1366 ref_transaction_free(transaction);
1368 strbuf_release(&err);
1371 static void execute_commands_atomic(struct command *commands,
1372 struct shallow_info *si)
1374 struct command *cmd;
1375 struct strbuf err = STRBUF_INIT;
1376 const char *reported_error = "atomic push failure";
1378 transaction = ref_transaction_begin(&err);
1380 rp_error("%s", err.buf);
1382 reported_error = "transaction failed to start";
1386 for (cmd = commands; cmd; cmd = cmd->next) {
1387 if (!should_process_cmd(cmd))
1390 cmd->error_string = update(cmd, si);
1392 if (cmd->error_string)
1396 if (ref_transaction_commit(transaction, &err)) {
1397 rp_error("%s", err.buf);
1398 reported_error = "atomic transaction failed";
1404 for (cmd = commands; cmd; cmd = cmd->next)
1405 if (!cmd->error_string)
1406 cmd->error_string = reported_error;
1409 ref_transaction_free(transaction);
1410 strbuf_release(&err);
1413 static void execute_commands(struct command *commands,
1414 const char *unpacker_error,
1415 struct shallow_info *si,
1416 const struct string_list *push_options)
1418 struct check_connected_options opt = CHECK_CONNECTED_INIT;
1419 struct command *cmd;
1420 struct object_id oid;
1421 struct iterate_data data;
1425 if (unpacker_error) {
1426 for (cmd = commands; cmd; cmd = cmd->next)
1427 cmd->error_string = "unpacker error";
1432 memset(&muxer, 0, sizeof(muxer));
1433 muxer.proc = copy_to_sideband;
1435 if (!start_async(&muxer))
1437 /* ...else, continue without relaying sideband */
1440 data.cmds = commands;
1442 opt.err_fd = err_fd;
1443 opt.progress = err_fd && !quiet;
1444 opt.env = tmp_objdir_env(tmp_objdir);
1445 if (check_connected(iterate_receive_command_list, &data, &opt))
1446 set_connectivity_errors(commands, si);
1449 finish_async(&muxer);
1451 reject_updates_to_hidden(commands);
1453 if (run_receive_hook(commands, "pre-receive", 0, push_options)) {
1454 for (cmd = commands; cmd; cmd = cmd->next) {
1455 if (!cmd->error_string)
1456 cmd->error_string = "pre-receive hook declined";
1462 * Now we'll start writing out refs, which means the objects need
1463 * to be in their final positions so that other processes can see them.
1465 if (tmp_objdir_migrate(tmp_objdir) < 0) {
1466 for (cmd = commands; cmd; cmd = cmd->next) {
1467 if (!cmd->error_string)
1468 cmd->error_string = "unable to migrate objects to permanent storage";
1474 check_aliased_updates(commands);
1476 free(head_name_to_free);
1477 head_name = head_name_to_free = resolve_refdup("HEAD", 0, oid.hash, NULL);
1480 execute_commands_atomic(commands, si);
1482 execute_commands_non_atomic(commands, si);
1485 warn_if_skipped_connectivity_check(commands, si);
1488 static struct command **queue_command(struct command **tail,
1492 unsigned char old_sha1[20], new_sha1[20];
1493 struct command *cmd;
1494 const char *refname;
1500 get_sha1_hex(line, old_sha1) ||
1501 get_sha1_hex(line + 41, new_sha1))
1502 die("protocol error: expected old/new/ref, got '%s'", line);
1504 refname = line + 82;
1505 reflen = linelen - 82;
1506 FLEX_ALLOC_MEM(cmd, ref_name, refname, reflen);
1507 hashcpy(cmd->old_sha1, old_sha1);
1508 hashcpy(cmd->new_sha1, new_sha1);
1513 static void queue_commands_from_cert(struct command **tail,
1514 struct strbuf *push_cert)
1516 const char *boc, *eoc;
1519 die("protocol error: got both push certificate and unsigned commands");
1521 boc = strstr(push_cert->buf, "\n\n");
1523 die("malformed push certificate %.*s", 100, push_cert->buf);
1526 eoc = push_cert->buf + parse_signature(push_cert->buf, push_cert->len);
1529 const char *eol = memchr(boc, '\n', eoc - boc);
1530 tail = queue_command(tail, boc, eol ? eol - boc : eoc - eol);
1531 boc = eol ? eol + 1 : eoc;
1535 static struct command *read_head_info(struct sha1_array *shallow)
1537 struct command *commands = NULL;
1538 struct command **p = &commands;
1543 line = packet_read_line(0, &len);
1547 if (len == 48 && starts_with(line, "shallow ")) {
1548 unsigned char sha1[20];
1549 if (get_sha1_hex(line + 8, sha1))
1550 die("protocol error: expected shallow sha, got '%s'",
1552 sha1_array_append(shallow, sha1);
1556 linelen = strlen(line);
1557 if (linelen < len) {
1558 const char *feature_list = line + linelen + 1;
1559 if (parse_feature_request(feature_list, "report-status"))
1561 if (parse_feature_request(feature_list, "side-band-64k"))
1562 use_sideband = LARGE_PACKET_MAX;
1563 if (parse_feature_request(feature_list, "quiet"))
1565 if (advertise_atomic_push
1566 && parse_feature_request(feature_list, "atomic"))
1568 if (advertise_push_options
1569 && parse_feature_request(feature_list, "push-options"))
1570 use_push_options = 1;
1573 if (!strcmp(line, "push-cert")) {
1578 len = packet_read(0, NULL, NULL,
1579 certbuf, sizeof(certbuf), 0);
1584 if (!strcmp(certbuf, "push-cert-end\n"))
1585 break; /* end of cert */
1586 strbuf_addstr(&push_cert, certbuf);
1594 p = queue_command(p, line, linelen);
1598 queue_commands_from_cert(p, &push_cert);
1603 static void read_push_options(struct string_list *options)
1609 line = packet_read_line(0, &len);
1614 string_list_append(options, line);
1618 static const char *parse_pack_header(struct pack_header *hdr)
1620 switch (read_pack_header(0, hdr)) {
1622 return "eof before pack header was fully read";
1624 case PH_ERROR_PACK_SIGNATURE:
1625 return "protocol error (pack signature mismatch detected)";
1627 case PH_ERROR_PROTOCOL:
1628 return "protocol error (pack version unsupported)";
1631 return "unknown error in parse_pack_header";
1638 static const char *pack_lockfile;
1640 static const char *unpack(int err_fd, struct shallow_info *si)
1642 struct pack_header hdr;
1643 const char *hdr_err;
1646 struct child_process child = CHILD_PROCESS_INIT;
1647 int fsck_objects = (receive_fsck_objects >= 0
1648 ? receive_fsck_objects
1649 : transfer_fsck_objects >= 0
1650 ? transfer_fsck_objects
1653 hdr_err = parse_pack_header(&hdr);
1659 snprintf(hdr_arg, sizeof(hdr_arg),
1660 "--pack_header=%"PRIu32",%"PRIu32,
1661 ntohl(hdr.hdr_version), ntohl(hdr.hdr_entries));
1663 if (si->nr_ours || si->nr_theirs) {
1664 alt_shallow_file = setup_temporary_shallow(si->shallow);
1665 argv_array_push(&child.args, "--shallow-file");
1666 argv_array_push(&child.args, alt_shallow_file);
1669 tmp_objdir = tmp_objdir_create();
1673 return "unable to create temporary object directory";
1675 child.env = tmp_objdir_env(tmp_objdir);
1678 * Normally we just pass the tmp_objdir environment to the child
1679 * processes that do the heavy lifting, but we may need to see these
1680 * objects ourselves to set up shallow information.
1682 tmp_objdir_add_as_alternate(tmp_objdir);
1684 if (ntohl(hdr.hdr_entries) < unpack_limit) {
1685 argv_array_pushl(&child.args, "unpack-objects", hdr_arg, NULL);
1687 argv_array_push(&child.args, "-q");
1689 argv_array_pushf(&child.args, "--strict%s",
1690 fsck_msg_types.buf);
1692 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1693 (uintmax_t)max_input_size);
1694 child.no_stdout = 1;
1697 status = run_command(&child);
1699 return "unpack-objects abnormal exit";
1703 argv_array_pushl(&child.args, "index-pack",
1704 "--stdin", hdr_arg, NULL);
1706 if (gethostname(hostname, sizeof(hostname)))
1707 xsnprintf(hostname, sizeof(hostname), "localhost");
1708 argv_array_pushf(&child.args,
1709 "--keep=receive-pack %"PRIuMAX" on %s",
1710 (uintmax_t)getpid(),
1713 if (!quiet && err_fd)
1714 argv_array_push(&child.args, "--show-resolving-progress");
1716 argv_array_push(&child.args, "--report-end-of-input");
1718 argv_array_pushf(&child.args, "--strict%s",
1719 fsck_msg_types.buf);
1721 argv_array_push(&child.args, "--fix-thin");
1723 argv_array_pushf(&child.args, "--max-input-size=%"PRIuMAX,
1724 (uintmax_t)max_input_size);
1728 status = start_command(&child);
1730 return "index-pack fork failed";
1731 pack_lockfile = index_pack_lockfile(child.out);
1733 status = finish_command(&child);
1735 return "index-pack abnormal exit";
1736 reprepare_packed_git();
1741 static const char *unpack_with_sideband(struct shallow_info *si)
1747 return unpack(0, si);
1749 use_keepalive = KEEPALIVE_AFTER_NUL;
1750 memset(&muxer, 0, sizeof(muxer));
1751 muxer.proc = copy_to_sideband;
1753 if (start_async(&muxer))
1756 ret = unpack(muxer.in, si);
1758 finish_async(&muxer);
1762 static void prepare_shallow_update(struct command *commands,
1763 struct shallow_info *si)
1765 int i, j, k, bitmap_size = (si->ref->nr + 31) / 32;
1767 ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
1768 assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
1770 si->need_reachability_test =
1771 xcalloc(si->shallow->nr, sizeof(*si->need_reachability_test));
1773 xcalloc(si->shallow->nr, sizeof(*si->reachable));
1774 si->shallow_ref = xcalloc(si->ref->nr, sizeof(*si->shallow_ref));
1776 for (i = 0; i < si->nr_ours; i++)
1777 si->need_reachability_test[si->ours[i]] = 1;
1779 for (i = 0; i < si->shallow->nr; i++) {
1780 if (!si->used_shallow[i])
1782 for (j = 0; j < bitmap_size; j++) {
1783 if (!si->used_shallow[i][j])
1785 si->need_reachability_test[i]++;
1786 for (k = 0; k < 32; k++)
1787 if (si->used_shallow[i][j] & (1U << k))
1788 si->shallow_ref[j * 32 + k]++;
1792 * true for those associated with some refs and belong
1793 * in "ours" list aka "step 7 not done yet"
1795 si->need_reachability_test[i] =
1796 si->need_reachability_test[i] > 1;
1800 * keep hooks happy by forcing a temporary shallow file via
1801 * env variable because we can't add --shallow-file to every
1802 * command. check_everything_connected() will be done with
1803 * true .git/shallow though.
1805 setenv(GIT_SHALLOW_FILE_ENVIRONMENT, alt_shallow_file, 1);
1808 static void update_shallow_info(struct command *commands,
1809 struct shallow_info *si,
1810 struct sha1_array *ref)
1812 struct command *cmd;
1814 remove_nonexistent_theirs_shallow(si);
1815 if (!si->nr_ours && !si->nr_theirs) {
1820 for (cmd = commands; cmd; cmd = cmd->next) {
1821 if (is_null_sha1(cmd->new_sha1))
1823 sha1_array_append(ref, cmd->new_sha1);
1824 cmd->index = ref->nr - 1;
1828 if (shallow_update) {
1829 prepare_shallow_update(commands, si);
1833 ALLOC_ARRAY(ref_status, ref->nr);
1834 assign_shallow_commits_to_refs(si, NULL, ref_status);
1835 for (cmd = commands; cmd; cmd = cmd->next) {
1836 if (is_null_sha1(cmd->new_sha1))
1838 if (ref_status[cmd->index]) {
1839 cmd->error_string = "shallow update not allowed";
1840 cmd->skip_update = 1;
1846 static void report(struct command *commands, const char *unpack_status)
1848 struct command *cmd;
1849 struct strbuf buf = STRBUF_INIT;
1851 packet_buf_write(&buf, "unpack %s\n",
1852 unpack_status ? unpack_status : "ok");
1853 for (cmd = commands; cmd; cmd = cmd->next) {
1854 if (!cmd->error_string)
1855 packet_buf_write(&buf, "ok %s\n",
1858 packet_buf_write(&buf, "ng %s %s\n",
1859 cmd->ref_name, cmd->error_string);
1861 packet_buf_flush(&buf);
1864 send_sideband(1, 1, buf.buf, buf.len, use_sideband);
1866 write_or_die(1, buf.buf, buf.len);
1867 strbuf_release(&buf);
1870 static int delete_only(struct command *commands)
1872 struct command *cmd;
1873 for (cmd = commands; cmd; cmd = cmd->next) {
1874 if (!is_null_sha1(cmd->new_sha1))
1880 int cmd_receive_pack(int argc, const char **argv, const char *prefix)
1882 int advertise_refs = 0;
1883 struct command *commands;
1884 struct sha1_array shallow = SHA1_ARRAY_INIT;
1885 struct sha1_array ref = SHA1_ARRAY_INIT;
1886 struct shallow_info si;
1888 struct option options[] = {
1889 OPT__QUIET(&quiet, N_("quiet")),
1890 OPT_HIDDEN_BOOL(0, "stateless-rpc", &stateless_rpc, NULL),
1891 OPT_HIDDEN_BOOL(0, "advertise-refs", &advertise_refs, NULL),
1892 OPT_HIDDEN_BOOL(0, "reject-thin-pack-for-testing", &reject_thin, NULL),
1896 packet_trace_identity("receive-pack");
1898 argc = parse_options(argc, argv, prefix, options, receive_pack_usage, 0);
1901 usage_msg_opt(_("Too many arguments."), receive_pack_usage, options);
1903 usage_msg_opt(_("You must specify a directory."), receive_pack_usage, options);
1905 service_dir = argv[0];
1909 if (!enter_repo(service_dir, 0))
1910 die("'%s' does not appear to be a git repository", service_dir);
1912 git_config(receive_pack_config, NULL);
1913 if (cert_nonce_seed)
1914 push_cert_nonce = prepare_push_cert_nonce(service_dir, time(NULL));
1916 if (0 <= transfer_unpack_limit)
1917 unpack_limit = transfer_unpack_limit;
1918 else if (0 <= receive_unpack_limit)
1919 unpack_limit = receive_unpack_limit;
1921 if (advertise_refs || !stateless_rpc) {
1927 if ((commands = read_head_info(&shallow)) != NULL) {
1928 const char *unpack_status = NULL;
1929 struct string_list push_options = STRING_LIST_INIT_DUP;
1931 if (use_push_options)
1932 read_push_options(&push_options);
1934 prepare_shallow_info(&si, &shallow);
1935 if (!si.nr_ours && !si.nr_theirs)
1937 if (!delete_only(commands)) {
1938 unpack_status = unpack_with_sideband(&si);
1939 update_shallow_info(commands, &si, &ref);
1941 use_keepalive = KEEPALIVE_ALWAYS;
1942 execute_commands(commands, unpack_status, &si,
1945 unlink_or_warn(pack_lockfile);
1947 report(commands, unpack_status);
1948 run_receive_hook(commands, "post-receive", 1,
1950 run_update_post_hook(commands);
1951 string_list_clear(&push_options, 0);
1953 const char *argv_gc_auto[] = {
1954 "gc", "--auto", "--quiet", NULL,
1956 struct child_process proc = CHILD_PROCESS_INIT;
1959 proc.stdout_to_stderr = 1;
1960 proc.err = use_sideband ? -1 : 0;
1962 proc.argv = argv_gc_auto;
1965 if (!start_command(&proc)) {
1967 copy_to_sideband(proc.err, -1, NULL);
1968 finish_command(&proc);
1971 if (auto_update_server_info)
1972 update_server_info(0);
1973 clear_shallow_info(&si);
1977 sha1_array_clear(&shallow);
1978 sha1_array_clear(&ref);
1979 free((void *)push_cert_nonce);