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