builtin / fetch-pack.con commit fetch-pack: sort incoming heads list earlier (3d2a33e)
   1#include "builtin.h"
   2#include "refs.h"
   3#include "pkt-line.h"
   4#include "commit.h"
   5#include "tag.h"
   6#include "exec_cmd.h"
   7#include "pack.h"
   8#include "sideband.h"
   9#include "fetch-pack.h"
  10#include "remote.h"
  11#include "run-command.h"
  12#include "transport.h"
  13
  14static int transfer_unpack_limit = -1;
  15static int fetch_unpack_limit = -1;
  16static int unpack_limit = 100;
  17static int prefer_ofs_delta = 1;
  18static int no_done;
  19static int fetch_fsck_objects = -1;
  20static int transfer_fsck_objects = -1;
  21static struct fetch_pack_args args = {
  22        /* .uploadpack = */ "git-upload-pack",
  23};
  24
  25static const char fetch_pack_usage[] =
  26"git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
  27"[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
  28"[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
  29
  30#define COMPLETE        (1U << 0)
  31#define COMMON          (1U << 1)
  32#define COMMON_REF      (1U << 2)
  33#define SEEN            (1U << 3)
  34#define POPPED          (1U << 4)
  35
  36static int marked;
  37
  38/*
  39 * After sending this many "have"s if we do not get any new ACK , we
  40 * give up traversing our history.
  41 */
  42#define MAX_IN_VAIN 256
  43
  44static struct commit_list *rev_list;
  45static int non_common_revs, multi_ack, use_sideband;
  46
  47static void rev_list_push(struct commit *commit, int mark)
  48{
  49        if (!(commit->object.flags & mark)) {
  50                commit->object.flags |= mark;
  51
  52                if (!(commit->object.parsed))
  53                        if (parse_commit(commit))
  54                                return;
  55
  56                commit_list_insert_by_date(commit, &rev_list);
  57
  58                if (!(commit->object.flags & COMMON))
  59                        non_common_revs++;
  60        }
  61}
  62
  63static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
  64{
  65        struct object *o = deref_tag(parse_object(sha1), refname, 0);
  66
  67        if (o && o->type == OBJ_COMMIT)
  68                rev_list_push((struct commit *)o, SEEN);
  69
  70        return 0;
  71}
  72
  73static int clear_marks(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
  74{
  75        struct object *o = deref_tag(parse_object(sha1), refname, 0);
  76
  77        if (o && o->type == OBJ_COMMIT)
  78                clear_commit_marks((struct commit *)o,
  79                                   COMMON | COMMON_REF | SEEN | POPPED);
  80        return 0;
  81}
  82
  83/*
  84   This function marks a rev and its ancestors as common.
  85   In some cases, it is desirable to mark only the ancestors (for example
  86   when only the server does not yet know that they are common).
  87*/
  88
  89static void mark_common(struct commit *commit,
  90                int ancestors_only, int dont_parse)
  91{
  92        if (commit != NULL && !(commit->object.flags & COMMON)) {
  93                struct object *o = (struct object *)commit;
  94
  95                if (!ancestors_only)
  96                        o->flags |= COMMON;
  97
  98                if (!(o->flags & SEEN))
  99                        rev_list_push(commit, SEEN);
 100                else {
 101                        struct commit_list *parents;
 102
 103                        if (!ancestors_only && !(o->flags & POPPED))
 104                                non_common_revs--;
 105                        if (!o->parsed && !dont_parse)
 106                                if (parse_commit(commit))
 107                                        return;
 108
 109                        for (parents = commit->parents;
 110                                        parents;
 111                                        parents = parents->next)
 112                                mark_common(parents->item, 0, dont_parse);
 113                }
 114        }
 115}
 116
 117/*
 118  Get the next rev to send, ignoring the common.
 119*/
 120
 121static const unsigned char *get_rev(void)
 122{
 123        struct commit *commit = NULL;
 124
 125        while (commit == NULL) {
 126                unsigned int mark;
 127                struct commit_list *parents;
 128
 129                if (rev_list == NULL || non_common_revs == 0)
 130                        return NULL;
 131
 132                commit = rev_list->item;
 133                if (!commit->object.parsed)
 134                        parse_commit(commit);
 135                parents = commit->parents;
 136
 137                commit->object.flags |= POPPED;
 138                if (!(commit->object.flags & COMMON))
 139                        non_common_revs--;
 140
 141                if (commit->object.flags & COMMON) {
 142                        /* do not send "have", and ignore ancestors */
 143                        commit = NULL;
 144                        mark = COMMON | SEEN;
 145                } else if (commit->object.flags & COMMON_REF)
 146                        /* send "have", and ignore ancestors */
 147                        mark = COMMON | SEEN;
 148                else
 149                        /* send "have", also for its ancestors */
 150                        mark = SEEN;
 151
 152                while (parents) {
 153                        if (!(parents->item->object.flags & SEEN))
 154                                rev_list_push(parents->item, mark);
 155                        if (mark & COMMON)
 156                                mark_common(parents->item, 1, 0);
 157                        parents = parents->next;
 158                }
 159
 160                rev_list = rev_list->next;
 161        }
 162
 163        return commit->object.sha1;
 164}
 165
 166enum ack_type {
 167        NAK = 0,
 168        ACK,
 169        ACK_continue,
 170        ACK_common,
 171        ACK_ready
 172};
 173
 174static void consume_shallow_list(int fd)
 175{
 176        if (args.stateless_rpc && args.depth > 0) {
 177                /* If we sent a depth we will get back "duplicate"
 178                 * shallow and unshallow commands every time there
 179                 * is a block of have lines exchanged.
 180                 */
 181                char line[1000];
 182                while (packet_read_line(fd, line, sizeof(line))) {
 183                        if (!prefixcmp(line, "shallow "))
 184                                continue;
 185                        if (!prefixcmp(line, "unshallow "))
 186                                continue;
 187                        die("git fetch-pack: expected shallow list");
 188                }
 189        }
 190}
 191
 192struct write_shallow_data {
 193        struct strbuf *out;
 194        int use_pack_protocol;
 195        int count;
 196};
 197
 198static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
 199{
 200        struct write_shallow_data *data = cb_data;
 201        const char *hex = sha1_to_hex(graft->sha1);
 202        data->count++;
 203        if (data->use_pack_protocol)
 204                packet_buf_write(data->out, "shallow %s", hex);
 205        else {
 206                strbuf_addstr(data->out, hex);
 207                strbuf_addch(data->out, '\n');
 208        }
 209        return 0;
 210}
 211
 212static int write_shallow_commits(struct strbuf *out, int use_pack_protocol)
 213{
 214        struct write_shallow_data data;
 215        data.out = out;
 216        data.use_pack_protocol = use_pack_protocol;
 217        data.count = 0;
 218        for_each_commit_graft(write_one_shallow, &data);
 219        return data.count;
 220}
 221
 222static enum ack_type get_ack(int fd, unsigned char *result_sha1)
 223{
 224        static char line[1000];
 225        int len = packet_read_line(fd, line, sizeof(line));
 226
 227        if (!len)
 228                die("git fetch-pack: expected ACK/NAK, got EOF");
 229        if (line[len-1] == '\n')
 230                line[--len] = 0;
 231        if (!strcmp(line, "NAK"))
 232                return NAK;
 233        if (!prefixcmp(line, "ACK ")) {
 234                if (!get_sha1_hex(line+4, result_sha1)) {
 235                        if (strstr(line+45, "continue"))
 236                                return ACK_continue;
 237                        if (strstr(line+45, "common"))
 238                                return ACK_common;
 239                        if (strstr(line+45, "ready"))
 240                                return ACK_ready;
 241                        return ACK;
 242                }
 243        }
 244        die("git fetch_pack: expected ACK/NAK, got '%s'", line);
 245}
 246
 247static void send_request(int fd, struct strbuf *buf)
 248{
 249        if (args.stateless_rpc) {
 250                send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
 251                packet_flush(fd);
 252        } else
 253                safe_write(fd, buf->buf, buf->len);
 254}
 255
 256static void insert_one_alternate_ref(const struct ref *ref, void *unused)
 257{
 258        rev_list_insert_ref(NULL, ref->old_sha1, 0, NULL);
 259}
 260
 261#define INITIAL_FLUSH 16
 262#define PIPESAFE_FLUSH 32
 263#define LARGE_FLUSH 1024
 264
 265static int next_flush(int count)
 266{
 267        int flush_limit = args.stateless_rpc ? LARGE_FLUSH : PIPESAFE_FLUSH;
 268
 269        if (count < flush_limit)
 270                count <<= 1;
 271        else
 272                count += flush_limit;
 273        return count;
 274}
 275
 276static int find_common(int fd[2], unsigned char *result_sha1,
 277                       struct ref *refs)
 278{
 279        int fetching;
 280        int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
 281        const unsigned char *sha1;
 282        unsigned in_vain = 0;
 283        int got_continue = 0;
 284        int got_ready = 0;
 285        struct strbuf req_buf = STRBUF_INIT;
 286        size_t state_len = 0;
 287
 288        if (args.stateless_rpc && multi_ack == 1)
 289                die("--stateless-rpc requires multi_ack_detailed");
 290        if (marked)
 291                for_each_ref(clear_marks, NULL);
 292        marked = 1;
 293
 294        for_each_ref(rev_list_insert_ref, NULL);
 295        for_each_alternate_ref(insert_one_alternate_ref, NULL);
 296
 297        fetching = 0;
 298        for ( ; refs ; refs = refs->next) {
 299                unsigned char *remote = refs->old_sha1;
 300                const char *remote_hex;
 301                struct object *o;
 302
 303                /*
 304                 * If that object is complete (i.e. it is an ancestor of a
 305                 * local ref), we tell them we have it but do not have to
 306                 * tell them about its ancestors, which they already know
 307                 * about.
 308                 *
 309                 * We use lookup_object here because we are only
 310                 * interested in the case we *know* the object is
 311                 * reachable and we have already scanned it.
 312                 */
 313                if (((o = lookup_object(remote)) != NULL) &&
 314                                (o->flags & COMPLETE)) {
 315                        continue;
 316                }
 317
 318                remote_hex = sha1_to_hex(remote);
 319                if (!fetching) {
 320                        struct strbuf c = STRBUF_INIT;
 321                        if (multi_ack == 2)     strbuf_addstr(&c, " multi_ack_detailed");
 322                        if (multi_ack == 1)     strbuf_addstr(&c, " multi_ack");
 323                        if (no_done)            strbuf_addstr(&c, " no-done");
 324                        if (use_sideband == 2)  strbuf_addstr(&c, " side-band-64k");
 325                        if (use_sideband == 1)  strbuf_addstr(&c, " side-band");
 326                        if (args.use_thin_pack) strbuf_addstr(&c, " thin-pack");
 327                        if (args.no_progress)   strbuf_addstr(&c, " no-progress");
 328                        if (args.include_tag)   strbuf_addstr(&c, " include-tag");
 329                        if (prefer_ofs_delta)   strbuf_addstr(&c, " ofs-delta");
 330                        packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
 331                        strbuf_release(&c);
 332                } else
 333                        packet_buf_write(&req_buf, "want %s\n", remote_hex);
 334                fetching++;
 335        }
 336
 337        if (!fetching) {
 338                strbuf_release(&req_buf);
 339                packet_flush(fd[1]);
 340                return 1;
 341        }
 342
 343        if (is_repository_shallow())
 344                write_shallow_commits(&req_buf, 1);
 345        if (args.depth > 0)
 346                packet_buf_write(&req_buf, "deepen %d", args.depth);
 347        packet_buf_flush(&req_buf);
 348        state_len = req_buf.len;
 349
 350        if (args.depth > 0) {
 351                char line[1024];
 352                unsigned char sha1[20];
 353
 354                send_request(fd[1], &req_buf);
 355                while (packet_read_line(fd[0], line, sizeof(line))) {
 356                        if (!prefixcmp(line, "shallow ")) {
 357                                if (get_sha1_hex(line + 8, sha1))
 358                                        die("invalid shallow line: %s", line);
 359                                register_shallow(sha1);
 360                                continue;
 361                        }
 362                        if (!prefixcmp(line, "unshallow ")) {
 363                                if (get_sha1_hex(line + 10, sha1))
 364                                        die("invalid unshallow line: %s", line);
 365                                if (!lookup_object(sha1))
 366                                        die("object not found: %s", line);
 367                                /* make sure that it is parsed as shallow */
 368                                if (!parse_object(sha1))
 369                                        die("error in object: %s", line);
 370                                if (unregister_shallow(sha1))
 371                                        die("no shallow found: %s", line);
 372                                continue;
 373                        }
 374                        die("expected shallow/unshallow, got %s", line);
 375                }
 376        } else if (!args.stateless_rpc)
 377                send_request(fd[1], &req_buf);
 378
 379        if (!args.stateless_rpc) {
 380                /* If we aren't using the stateless-rpc interface
 381                 * we don't need to retain the headers.
 382                 */
 383                strbuf_setlen(&req_buf, 0);
 384                state_len = 0;
 385        }
 386
 387        flushes = 0;
 388        retval = -1;
 389        while ((sha1 = get_rev())) {
 390                packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
 391                if (args.verbose)
 392                        fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
 393                in_vain++;
 394                if (flush_at <= ++count) {
 395                        int ack;
 396
 397                        packet_buf_flush(&req_buf);
 398                        send_request(fd[1], &req_buf);
 399                        strbuf_setlen(&req_buf, state_len);
 400                        flushes++;
 401                        flush_at = next_flush(count);
 402
 403                        /*
 404                         * We keep one window "ahead" of the other side, and
 405                         * will wait for an ACK only on the next one
 406                         */
 407                        if (!args.stateless_rpc && count == INITIAL_FLUSH)
 408                                continue;
 409
 410                        consume_shallow_list(fd[0]);
 411                        do {
 412                                ack = get_ack(fd[0], result_sha1);
 413                                if (args.verbose && ack)
 414                                        fprintf(stderr, "got ack %d %s\n", ack,
 415                                                        sha1_to_hex(result_sha1));
 416                                switch (ack) {
 417                                case ACK:
 418                                        flushes = 0;
 419                                        multi_ack = 0;
 420                                        retval = 0;
 421                                        goto done;
 422                                case ACK_common:
 423                                case ACK_ready:
 424                                case ACK_continue: {
 425                                        struct commit *commit =
 426                                                lookup_commit(result_sha1);
 427                                        if (!commit)
 428                                                die("invalid commit %s", sha1_to_hex(result_sha1));
 429                                        if (args.stateless_rpc
 430                                         && ack == ACK_common
 431                                         && !(commit->object.flags & COMMON)) {
 432                                                /* We need to replay the have for this object
 433                                                 * on the next RPC request so the peer knows
 434                                                 * it is in common with us.
 435                                                 */
 436                                                const char *hex = sha1_to_hex(result_sha1);
 437                                                packet_buf_write(&req_buf, "have %s\n", hex);
 438                                                state_len = req_buf.len;
 439                                        }
 440                                        mark_common(commit, 0, 1);
 441                                        retval = 0;
 442                                        in_vain = 0;
 443                                        got_continue = 1;
 444                                        if (ack == ACK_ready) {
 445                                                rev_list = NULL;
 446                                                got_ready = 1;
 447                                        }
 448                                        break;
 449                                        }
 450                                }
 451                        } while (ack);
 452                        flushes--;
 453                        if (got_continue && MAX_IN_VAIN < in_vain) {
 454                                if (args.verbose)
 455                                        fprintf(stderr, "giving up\n");
 456                                break; /* give up */
 457                        }
 458                }
 459        }
 460done:
 461        if (!got_ready || !no_done) {
 462                packet_buf_write(&req_buf, "done\n");
 463                send_request(fd[1], &req_buf);
 464        }
 465        if (args.verbose)
 466                fprintf(stderr, "done\n");
 467        if (retval != 0) {
 468                multi_ack = 0;
 469                flushes++;
 470        }
 471        strbuf_release(&req_buf);
 472
 473        consume_shallow_list(fd[0]);
 474        while (flushes || multi_ack) {
 475                int ack = get_ack(fd[0], result_sha1);
 476                if (ack) {
 477                        if (args.verbose)
 478                                fprintf(stderr, "got ack (%d) %s\n", ack,
 479                                        sha1_to_hex(result_sha1));
 480                        if (ack == ACK)
 481                                return 0;
 482                        multi_ack = 1;
 483                        continue;
 484                }
 485                flushes--;
 486        }
 487        /* it is no error to fetch into a completely empty repo */
 488        return count ? retval : 0;
 489}
 490
 491static struct commit_list *complete;
 492
 493static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
 494{
 495        struct object *o = parse_object(sha1);
 496
 497        while (o && o->type == OBJ_TAG) {
 498                struct tag *t = (struct tag *) o;
 499                if (!t->tagged)
 500                        break; /* broken repository */
 501                o->flags |= COMPLETE;
 502                o = parse_object(t->tagged->sha1);
 503        }
 504        if (o && o->type == OBJ_COMMIT) {
 505                struct commit *commit = (struct commit *)o;
 506                if (!(commit->object.flags & COMPLETE)) {
 507                        commit->object.flags |= COMPLETE;
 508                        commit_list_insert_by_date(commit, &complete);
 509                }
 510        }
 511        return 0;
 512}
 513
 514static void mark_recent_complete_commits(unsigned long cutoff)
 515{
 516        while (complete && cutoff <= complete->item->date) {
 517                if (args.verbose)
 518                        fprintf(stderr, "Marking %s as complete\n",
 519                                sha1_to_hex(complete->item->object.sha1));
 520                pop_most_recent_commit(&complete, COMPLETE);
 521        }
 522}
 523
 524static void filter_refs(struct ref **refs, int nr_match, char **match)
 525{
 526        struct ref **return_refs;
 527        struct ref *newlist = NULL;
 528        struct ref **newtail = &newlist;
 529        struct ref *ref, *next;
 530        struct ref *fastarray[32];
 531        int match_pos;
 532
 533        if (nr_match && !args.fetch_all) {
 534                if (ARRAY_SIZE(fastarray) < nr_match)
 535                        return_refs = xcalloc(nr_match, sizeof(struct ref *));
 536                else {
 537                        return_refs = fastarray;
 538                        memset(return_refs, 0, sizeof(struct ref *) * nr_match);
 539                }
 540        }
 541        else
 542                return_refs = NULL;
 543
 544        match_pos = 0;
 545        for (ref = *refs; ref; ref = next) {
 546                next = ref->next;
 547                if (!memcmp(ref->name, "refs/", 5) &&
 548                    check_refname_format(ref->name + 5, 0))
 549                        ; /* trash */
 550                else if (args.fetch_all &&
 551                         (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
 552                        *newtail = ref;
 553                        ref->next = NULL;
 554                        newtail = &ref->next;
 555                        continue;
 556                }
 557                else {
 558                        int cmp = -1;
 559                        while (match_pos < nr_match) {
 560                                cmp = strcmp(ref->name, match[match_pos]);
 561                                if (cmp < 0) /* definitely do not have it */
 562                                        break;
 563                                else if (cmp == 0) { /* definitely have it */
 564                                        match[match_pos][0] = '\0';
 565                                        return_refs[match_pos] = ref;
 566                                        break;
 567                                }
 568                                else /* might have it; keep looking */
 569                                        match_pos++;
 570                        }
 571                        if (!cmp)
 572                                continue; /* we will link it later */
 573                }
 574                free(ref);
 575        }
 576
 577        if (!args.fetch_all) {
 578                int i;
 579                for (i = 0; i < nr_match; i++) {
 580                        ref = return_refs[i];
 581                        if (ref) {
 582                                *newtail = ref;
 583                                ref->next = NULL;
 584                                newtail = &ref->next;
 585                        }
 586                }
 587                if (return_refs != fastarray)
 588                        free(return_refs);
 589        }
 590        *refs = newlist;
 591}
 592
 593static void mark_alternate_complete(const struct ref *ref, void *unused)
 594{
 595        mark_complete(NULL, ref->old_sha1, 0, NULL);
 596}
 597
 598static int everything_local(struct ref **refs, int nr_match, char **match)
 599{
 600        struct ref *ref;
 601        int retval;
 602        unsigned long cutoff = 0;
 603
 604        save_commit_buffer = 0;
 605
 606        for (ref = *refs; ref; ref = ref->next) {
 607                struct object *o;
 608
 609                o = parse_object(ref->old_sha1);
 610                if (!o)
 611                        continue;
 612
 613                /* We already have it -- which may mean that we were
 614                 * in sync with the other side at some time after
 615                 * that (it is OK if we guess wrong here).
 616                 */
 617                if (o->type == OBJ_COMMIT) {
 618                        struct commit *commit = (struct commit *)o;
 619                        if (!cutoff || cutoff < commit->date)
 620                                cutoff = commit->date;
 621                }
 622        }
 623
 624        if (!args.depth) {
 625                for_each_ref(mark_complete, NULL);
 626                for_each_alternate_ref(mark_alternate_complete, NULL);
 627                if (cutoff)
 628                        mark_recent_complete_commits(cutoff);
 629        }
 630
 631        /*
 632         * Mark all complete remote refs as common refs.
 633         * Don't mark them common yet; the server has to be told so first.
 634         */
 635        for (ref = *refs; ref; ref = ref->next) {
 636                struct object *o = deref_tag(lookup_object(ref->old_sha1),
 637                                             NULL, 0);
 638
 639                if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
 640                        continue;
 641
 642                if (!(o->flags & SEEN)) {
 643                        rev_list_push((struct commit *)o, COMMON_REF | SEEN);
 644
 645                        mark_common((struct commit *)o, 1, 1);
 646                }
 647        }
 648
 649        filter_refs(refs, nr_match, match);
 650
 651        for (retval = 1, ref = *refs; ref ; ref = ref->next) {
 652                const unsigned char *remote = ref->old_sha1;
 653                unsigned char local[20];
 654                struct object *o;
 655
 656                o = lookup_object(remote);
 657                if (!o || !(o->flags & COMPLETE)) {
 658                        retval = 0;
 659                        if (!args.verbose)
 660                                continue;
 661                        fprintf(stderr,
 662                                "want %s (%s)\n", sha1_to_hex(remote),
 663                                ref->name);
 664                        continue;
 665                }
 666
 667                hashcpy(ref->new_sha1, local);
 668                if (!args.verbose)
 669                        continue;
 670                fprintf(stderr,
 671                        "already have %s (%s)\n", sha1_to_hex(remote),
 672                        ref->name);
 673        }
 674        return retval;
 675}
 676
 677static int sideband_demux(int in, int out, void *data)
 678{
 679        int *xd = data;
 680
 681        int ret = recv_sideband("fetch-pack", xd[0], out);
 682        close(out);
 683        return ret;
 684}
 685
 686static int get_pack(int xd[2], char **pack_lockfile)
 687{
 688        struct async demux;
 689        const char *argv[20];
 690        char keep_arg[256];
 691        char hdr_arg[256];
 692        const char **av;
 693        int do_keep = args.keep_pack;
 694        struct child_process cmd;
 695
 696        memset(&demux, 0, sizeof(demux));
 697        if (use_sideband) {
 698                /* xd[] is talking with upload-pack; subprocess reads from
 699                 * xd[0], spits out band#2 to stderr, and feeds us band#1
 700                 * through demux->out.
 701                 */
 702                demux.proc = sideband_demux;
 703                demux.data = xd;
 704                demux.out = -1;
 705                if (start_async(&demux))
 706                        die("fetch-pack: unable to fork off sideband"
 707                            " demultiplexer");
 708        }
 709        else
 710                demux.out = xd[0];
 711
 712        memset(&cmd, 0, sizeof(cmd));
 713        cmd.argv = argv;
 714        av = argv;
 715        *hdr_arg = 0;
 716        if (!args.keep_pack && unpack_limit) {
 717                struct pack_header header;
 718
 719                if (read_pack_header(demux.out, &header))
 720                        die("protocol error: bad pack header");
 721                snprintf(hdr_arg, sizeof(hdr_arg),
 722                         "--pack_header=%"PRIu32",%"PRIu32,
 723                         ntohl(header.hdr_version), ntohl(header.hdr_entries));
 724                if (ntohl(header.hdr_entries) < unpack_limit)
 725                        do_keep = 0;
 726                else
 727                        do_keep = 1;
 728        }
 729
 730        if (do_keep) {
 731                if (pack_lockfile)
 732                        cmd.out = -1;
 733                *av++ = "index-pack";
 734                *av++ = "--stdin";
 735                if (!args.quiet && !args.no_progress)
 736                        *av++ = "-v";
 737                if (args.use_thin_pack)
 738                        *av++ = "--fix-thin";
 739                if (args.lock_pack || unpack_limit) {
 740                        int s = sprintf(keep_arg,
 741                                        "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
 742                        if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
 743                                strcpy(keep_arg + s, "localhost");
 744                        *av++ = keep_arg;
 745                }
 746        }
 747        else {
 748                *av++ = "unpack-objects";
 749                if (args.quiet || args.no_progress)
 750                        *av++ = "-q";
 751        }
 752        if (*hdr_arg)
 753                *av++ = hdr_arg;
 754        if (fetch_fsck_objects >= 0
 755            ? fetch_fsck_objects
 756            : transfer_fsck_objects >= 0
 757            ? transfer_fsck_objects
 758            : 0)
 759                *av++ = "--strict";
 760        *av++ = NULL;
 761
 762        cmd.in = demux.out;
 763        cmd.git_cmd = 1;
 764        if (start_command(&cmd))
 765                die("fetch-pack: unable to fork off %s", argv[0]);
 766        if (do_keep && pack_lockfile) {
 767                *pack_lockfile = index_pack_lockfile(cmd.out);
 768                close(cmd.out);
 769        }
 770
 771        if (finish_command(&cmd))
 772                die("%s failed", argv[0]);
 773        if (use_sideband && finish_async(&demux))
 774                die("error in sideband demultiplexer");
 775        return 0;
 776}
 777
 778static struct ref *do_fetch_pack(int fd[2],
 779                const struct ref *orig_ref,
 780                int nr_match,
 781                char **match,
 782                char **pack_lockfile)
 783{
 784        struct ref *ref = copy_ref_list(orig_ref);
 785        unsigned char sha1[20];
 786
 787        sort_ref_list(&ref, ref_compare_name);
 788
 789        if (is_repository_shallow() && !server_supports("shallow"))
 790                die("Server does not support shallow clients");
 791        if (server_supports("multi_ack_detailed")) {
 792                if (args.verbose)
 793                        fprintf(stderr, "Server supports multi_ack_detailed\n");
 794                multi_ack = 2;
 795                if (server_supports("no-done")) {
 796                        if (args.verbose)
 797                                fprintf(stderr, "Server supports no-done\n");
 798                        if (args.stateless_rpc)
 799                                no_done = 1;
 800                }
 801        }
 802        else if (server_supports("multi_ack")) {
 803                if (args.verbose)
 804                        fprintf(stderr, "Server supports multi_ack\n");
 805                multi_ack = 1;
 806        }
 807        if (server_supports("side-band-64k")) {
 808                if (args.verbose)
 809                        fprintf(stderr, "Server supports side-band-64k\n");
 810                use_sideband = 2;
 811        }
 812        else if (server_supports("side-band")) {
 813                if (args.verbose)
 814                        fprintf(stderr, "Server supports side-band\n");
 815                use_sideband = 1;
 816        }
 817        if (server_supports("ofs-delta")) {
 818                if (args.verbose)
 819                        fprintf(stderr, "Server supports ofs-delta\n");
 820        } else
 821                prefer_ofs_delta = 0;
 822        if (everything_local(&ref, nr_match, match)) {
 823                packet_flush(fd[1]);
 824                goto all_done;
 825        }
 826        if (find_common(fd, sha1, ref) < 0)
 827                if (!args.keep_pack)
 828                        /* When cloning, it is not unusual to have
 829                         * no common commit.
 830                         */
 831                        warning("no common commits");
 832
 833        if (args.stateless_rpc)
 834                packet_flush(fd[1]);
 835        if (get_pack(fd, pack_lockfile))
 836                die("git fetch-pack: fetch failed.");
 837
 838 all_done:
 839        return ref;
 840}
 841
 842static int remove_duplicates(int nr_heads, char **heads)
 843{
 844        int src, dst;
 845
 846        if (!nr_heads)
 847                return 0;
 848
 849        for (src = dst = 1; src < nr_heads; src++)
 850                if (strcmp(heads[src], heads[dst-1]))
 851                        heads[dst++] = heads[src];
 852        return dst;
 853}
 854
 855static int fetch_pack_config(const char *var, const char *value, void *cb)
 856{
 857        if (strcmp(var, "fetch.unpacklimit") == 0) {
 858                fetch_unpack_limit = git_config_int(var, value);
 859                return 0;
 860        }
 861
 862        if (strcmp(var, "transfer.unpacklimit") == 0) {
 863                transfer_unpack_limit = git_config_int(var, value);
 864                return 0;
 865        }
 866
 867        if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
 868                prefer_ofs_delta = git_config_bool(var, value);
 869                return 0;
 870        }
 871
 872        if (!strcmp(var, "fetch.fsckobjects")) {
 873                fetch_fsck_objects = git_config_bool(var, value);
 874                return 0;
 875        }
 876
 877        if (!strcmp(var, "transfer.fsckobjects")) {
 878                transfer_fsck_objects = git_config_bool(var, value);
 879                return 0;
 880        }
 881
 882        return git_default_config(var, value, cb);
 883}
 884
 885static struct lock_file lock;
 886
 887static void fetch_pack_setup(void)
 888{
 889        static int did_setup;
 890        if (did_setup)
 891                return;
 892        git_config(fetch_pack_config, NULL);
 893        if (0 <= transfer_unpack_limit)
 894                unpack_limit = transfer_unpack_limit;
 895        else if (0 <= fetch_unpack_limit)
 896                unpack_limit = fetch_unpack_limit;
 897        did_setup = 1;
 898}
 899
 900int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
 901{
 902        int i, ret, nr_heads;
 903        struct ref *ref = NULL;
 904        char *dest = NULL, **heads;
 905        int fd[2];
 906        char *pack_lockfile = NULL;
 907        char **pack_lockfile_ptr = NULL;
 908        struct child_process *conn;
 909
 910        packet_trace_identity("fetch-pack");
 911
 912        nr_heads = 0;
 913        heads = NULL;
 914        for (i = 1; i < argc; i++) {
 915                const char *arg = argv[i];
 916
 917                if (*arg == '-') {
 918                        if (!prefixcmp(arg, "--upload-pack=")) {
 919                                args.uploadpack = arg + 14;
 920                                continue;
 921                        }
 922                        if (!prefixcmp(arg, "--exec=")) {
 923                                args.uploadpack = arg + 7;
 924                                continue;
 925                        }
 926                        if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
 927                                args.quiet = 1;
 928                                continue;
 929                        }
 930                        if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
 931                                args.lock_pack = args.keep_pack;
 932                                args.keep_pack = 1;
 933                                continue;
 934                        }
 935                        if (!strcmp("--thin", arg)) {
 936                                args.use_thin_pack = 1;
 937                                continue;
 938                        }
 939                        if (!strcmp("--include-tag", arg)) {
 940                                args.include_tag = 1;
 941                                continue;
 942                        }
 943                        if (!strcmp("--all", arg)) {
 944                                args.fetch_all = 1;
 945                                continue;
 946                        }
 947                        if (!strcmp("--stdin", arg)) {
 948                                args.stdin_refs = 1;
 949                                continue;
 950                        }
 951                        if (!strcmp("-v", arg)) {
 952                                args.verbose = 1;
 953                                continue;
 954                        }
 955                        if (!prefixcmp(arg, "--depth=")) {
 956                                args.depth = strtol(arg + 8, NULL, 0);
 957                                continue;
 958                        }
 959                        if (!strcmp("--no-progress", arg)) {
 960                                args.no_progress = 1;
 961                                continue;
 962                        }
 963                        if (!strcmp("--stateless-rpc", arg)) {
 964                                args.stateless_rpc = 1;
 965                                continue;
 966                        }
 967                        if (!strcmp("--lock-pack", arg)) {
 968                                args.lock_pack = 1;
 969                                pack_lockfile_ptr = &pack_lockfile;
 970                                continue;
 971                        }
 972                        usage(fetch_pack_usage);
 973                }
 974                dest = (char *)arg;
 975                heads = (char **)(argv + i + 1);
 976                nr_heads = argc - i - 1;
 977                break;
 978        }
 979        if (!dest)
 980                usage(fetch_pack_usage);
 981
 982        if (args.stdin_refs) {
 983                /*
 984                 * Copy refs from cmdline to new growable list, then
 985                 * append the refs from the standard input.
 986                 */
 987                int alloc_heads = nr_heads;
 988                int size = nr_heads * sizeof(*heads);
 989                heads = memcpy(xmalloc(size), heads, size);
 990                if (args.stateless_rpc) {
 991                        /* in stateless RPC mode we use pkt-line to read
 992                         * from stdin, until we get a flush packet
 993                         */
 994                        static char line[1000];
 995                        for (;;) {
 996                                int n = packet_read_line(0, line, sizeof(line));
 997                                if (!n)
 998                                        break;
 999                                if (line[n-1] == '\n')
1000                                        n--;
1001                                ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1002                                heads[nr_heads++] = xmemdupz(line, n);
1003                        }
1004                }
1005                else {
1006                        /* read from stdin one ref per line, until EOF */
1007                        struct strbuf line = STRBUF_INIT;
1008                        while (strbuf_getline(&line, stdin, '\n') != EOF) {
1009                                ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1010                                heads[nr_heads++] = strbuf_detach(&line, NULL);
1011                        }
1012                        strbuf_release(&line);
1013                }
1014        }
1015
1016        if (args.stateless_rpc) {
1017                conn = NULL;
1018                fd[0] = 0;
1019                fd[1] = 1;
1020        } else {
1021                conn = git_connect(fd, (char *)dest, args.uploadpack,
1022                                   args.verbose ? CONNECT_VERBOSE : 0);
1023        }
1024
1025        get_remote_heads(fd[0], &ref, 0, NULL);
1026
1027        ref = fetch_pack(&args, fd, conn, ref, dest,
1028                nr_heads, heads, pack_lockfile_ptr);
1029        if (pack_lockfile) {
1030                printf("lock %s\n", pack_lockfile);
1031                fflush(stdout);
1032        }
1033        close(fd[0]);
1034        close(fd[1]);
1035        if (finish_connect(conn))
1036                ref = NULL;
1037        ret = !ref;
1038
1039        if (!ret && nr_heads) {
1040                /* If the heads to pull were given, we should have
1041                 * consumed all of them by matching the remote.
1042                 * Otherwise, 'git fetch remote no-such-ref' would
1043                 * silently succeed without issuing an error.
1044                 */
1045                for (i = 0; i < nr_heads; i++)
1046                        if (heads[i] && heads[i][0]) {
1047                                error("no such remote ref %s", heads[i]);
1048                                ret = 1;
1049                        }
1050        }
1051        while (ref) {
1052                printf("%s %s\n",
1053                       sha1_to_hex(ref->old_sha1), ref->name);
1054                ref = ref->next;
1055        }
1056
1057        return ret;
1058}
1059
1060static int compare_heads(const void *a, const void *b)
1061{
1062        return strcmp(*(const char **)a, *(const char **)b);
1063}
1064
1065struct ref *fetch_pack(struct fetch_pack_args *my_args,
1066                       int fd[], struct child_process *conn,
1067                       const struct ref *ref,
1068                const char *dest,
1069                int nr_heads,
1070                char **heads,
1071                char **pack_lockfile)
1072{
1073        struct stat st;
1074        struct ref *ref_cpy;
1075
1076        fetch_pack_setup();
1077        if (&args != my_args)
1078                memcpy(&args, my_args, sizeof(args));
1079        if (args.depth > 0) {
1080                if (stat(git_path("shallow"), &st))
1081                        st.st_mtime = 0;
1082        }
1083
1084        if (heads && nr_heads) {
1085                qsort(heads, nr_heads, sizeof(*heads), compare_heads);
1086                nr_heads = remove_duplicates(nr_heads, heads);
1087        }
1088
1089        if (!ref) {
1090                packet_flush(fd[1]);
1091                die("no matching remote head");
1092        }
1093        ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile);
1094
1095        if (args.depth > 0) {
1096                struct cache_time mtime;
1097                struct strbuf sb = STRBUF_INIT;
1098                char *shallow = git_path("shallow");
1099                int fd;
1100
1101                mtime.sec = st.st_mtime;
1102                mtime.nsec = ST_MTIME_NSEC(st);
1103                if (stat(shallow, &st)) {
1104                        if (mtime.sec)
1105                                die("shallow file was removed during fetch");
1106                } else if (st.st_mtime != mtime.sec
1107#ifdef USE_NSEC
1108                                || ST_MTIME_NSEC(st) != mtime.nsec
1109#endif
1110                          )
1111                        die("shallow file was changed during fetch");
1112
1113                fd = hold_lock_file_for_update(&lock, shallow,
1114                                               LOCK_DIE_ON_ERROR);
1115                if (!write_shallow_commits(&sb, 0)
1116                 || write_in_full(fd, sb.buf, sb.len) != sb.len) {
1117                        unlink_or_warn(shallow);
1118                        rollback_lock_file(&lock);
1119                } else {
1120                        commit_lock_file(&lock);
1121                }
1122                strbuf_release(&sb);
1123        }
1124
1125        reprepare_packed_git();
1126        return ref_cpy;
1127}