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