builtin / fetch-pack.con commit t3703, t4208: add test cases for magic pathspec (6fd09f5)
   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                                        break;
 383                                        }
 384                                }
 385                        } while (ack);
 386                        flushes--;
 387                        if (got_continue && MAX_IN_VAIN < in_vain) {
 388                                if (args.verbose)
 389                                        fprintf(stderr, "giving up\n");
 390                                break; /* give up */
 391                        }
 392                }
 393        }
 394done:
 395        packet_buf_write(&req_buf, "done\n");
 396        send_request(fd[1], &req_buf);
 397        if (args.verbose)
 398                fprintf(stderr, "done\n");
 399        if (retval != 0) {
 400                multi_ack = 0;
 401                flushes++;
 402        }
 403        strbuf_release(&req_buf);
 404
 405        consume_shallow_list(fd[0]);
 406        while (flushes || multi_ack) {
 407                int ack = get_ack(fd[0], result_sha1);
 408                if (ack) {
 409                        if (args.verbose)
 410                                fprintf(stderr, "got ack (%d) %s\n", ack,
 411                                        sha1_to_hex(result_sha1));
 412                        if (ack == ACK)
 413                                return 0;
 414                        multi_ack = 1;
 415                        continue;
 416                }
 417                flushes--;
 418        }
 419        /* it is no error to fetch into a completely empty repo */
 420        return count ? retval : 0;
 421}
 422
 423static struct commit_list *complete;
 424
 425static int mark_complete(const char *path, const unsigned char *sha1, int flag, void *cb_data)
 426{
 427        struct object *o = parse_object(sha1);
 428
 429        while (o && o->type == OBJ_TAG) {
 430                struct tag *t = (struct tag *) o;
 431                if (!t->tagged)
 432                        break; /* broken repository */
 433                o->flags |= COMPLETE;
 434                o = parse_object(t->tagged->sha1);
 435        }
 436        if (o && o->type == OBJ_COMMIT) {
 437                struct commit *commit = (struct commit *)o;
 438                commit->object.flags |= COMPLETE;
 439                commit_list_insert_by_date(commit, &complete);
 440        }
 441        return 0;
 442}
 443
 444static void mark_recent_complete_commits(unsigned long cutoff)
 445{
 446        while (complete && cutoff <= complete->item->date) {
 447                if (args.verbose)
 448                        fprintf(stderr, "Marking %s as complete\n",
 449                                sha1_to_hex(complete->item->object.sha1));
 450                pop_most_recent_commit(&complete, COMPLETE);
 451        }
 452}
 453
 454static void filter_refs(struct ref **refs, int nr_match, char **match)
 455{
 456        struct ref **return_refs;
 457        struct ref *newlist = NULL;
 458        struct ref **newtail = &newlist;
 459        struct ref *ref, *next;
 460        struct ref *fastarray[32];
 461
 462        if (nr_match && !args.fetch_all) {
 463                if (ARRAY_SIZE(fastarray) < nr_match)
 464                        return_refs = xcalloc(nr_match, sizeof(struct ref *));
 465                else {
 466                        return_refs = fastarray;
 467                        memset(return_refs, 0, sizeof(struct ref *) * nr_match);
 468                }
 469        }
 470        else
 471                return_refs = NULL;
 472
 473        for (ref = *refs; ref; ref = next) {
 474                next = ref->next;
 475                if (!memcmp(ref->name, "refs/", 5) &&
 476                    check_ref_format(ref->name + 5))
 477                        ; /* trash */
 478                else if (args.fetch_all &&
 479                         (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
 480                        *newtail = ref;
 481                        ref->next = NULL;
 482                        newtail = &ref->next;
 483                        continue;
 484                }
 485                else {
 486                        int order = path_match(ref->name, nr_match, match);
 487                        if (order) {
 488                                return_refs[order-1] = ref;
 489                                continue; /* we will link it later */
 490                        }
 491                }
 492                free(ref);
 493        }
 494
 495        if (!args.fetch_all) {
 496                int i;
 497                for (i = 0; i < nr_match; i++) {
 498                        ref = return_refs[i];
 499                        if (ref) {
 500                                *newtail = ref;
 501                                ref->next = NULL;
 502                                newtail = &ref->next;
 503                        }
 504                }
 505                if (return_refs != fastarray)
 506                        free(return_refs);
 507        }
 508        *refs = newlist;
 509}
 510
 511static int everything_local(struct ref **refs, int nr_match, char **match)
 512{
 513        struct ref *ref;
 514        int retval;
 515        unsigned long cutoff = 0;
 516
 517        save_commit_buffer = 0;
 518
 519        for (ref = *refs; ref; ref = ref->next) {
 520                struct object *o;
 521
 522                o = parse_object(ref->old_sha1);
 523                if (!o)
 524                        continue;
 525
 526                /* We already have it -- which may mean that we were
 527                 * in sync with the other side at some time after
 528                 * that (it is OK if we guess wrong here).
 529                 */
 530                if (o->type == OBJ_COMMIT) {
 531                        struct commit *commit = (struct commit *)o;
 532                        if (!cutoff || cutoff < commit->date)
 533                                cutoff = commit->date;
 534                }
 535        }
 536
 537        if (!args.depth) {
 538                for_each_ref(mark_complete, NULL);
 539                if (cutoff)
 540                        mark_recent_complete_commits(cutoff);
 541        }
 542
 543        /*
 544         * Mark all complete remote refs as common refs.
 545         * Don't mark them common yet; the server has to be told so first.
 546         */
 547        for (ref = *refs; ref; ref = ref->next) {
 548                struct object *o = deref_tag(lookup_object(ref->old_sha1),
 549                                             NULL, 0);
 550
 551                if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
 552                        continue;
 553
 554                if (!(o->flags & SEEN)) {
 555                        rev_list_push((struct commit *)o, COMMON_REF | SEEN);
 556
 557                        mark_common((struct commit *)o, 1, 1);
 558                }
 559        }
 560
 561        filter_refs(refs, nr_match, match);
 562
 563        for (retval = 1, ref = *refs; ref ; ref = ref->next) {
 564                const unsigned char *remote = ref->old_sha1;
 565                unsigned char local[20];
 566                struct object *o;
 567
 568                o = lookup_object(remote);
 569                if (!o || !(o->flags & COMPLETE)) {
 570                        retval = 0;
 571                        if (!args.verbose)
 572                                continue;
 573                        fprintf(stderr,
 574                                "want %s (%s)\n", sha1_to_hex(remote),
 575                                ref->name);
 576                        continue;
 577                }
 578
 579                hashcpy(ref->new_sha1, local);
 580                if (!args.verbose)
 581                        continue;
 582                fprintf(stderr,
 583                        "already have %s (%s)\n", sha1_to_hex(remote),
 584                        ref->name);
 585        }
 586        return retval;
 587}
 588
 589static int sideband_demux(int in, int out, void *data)
 590{
 591        int *xd = data;
 592
 593        int ret = recv_sideband("fetch-pack", xd[0], out);
 594        close(out);
 595        return ret;
 596}
 597
 598static int get_pack(int xd[2], char **pack_lockfile)
 599{
 600        struct async demux;
 601        const char *argv[20];
 602        char keep_arg[256];
 603        char hdr_arg[256];
 604        const char **av;
 605        int do_keep = args.keep_pack;
 606        struct child_process cmd;
 607
 608        memset(&demux, 0, sizeof(demux));
 609        if (use_sideband) {
 610                /* xd[] is talking with upload-pack; subprocess reads from
 611                 * xd[0], spits out band#2 to stderr, and feeds us band#1
 612                 * through demux->out.
 613                 */
 614                demux.proc = sideband_demux;
 615                demux.data = xd;
 616                demux.out = -1;
 617                if (start_async(&demux))
 618                        die("fetch-pack: unable to fork off sideband"
 619                            " demultiplexer");
 620        }
 621        else
 622                demux.out = xd[0];
 623
 624        memset(&cmd, 0, sizeof(cmd));
 625        cmd.argv = argv;
 626        av = argv;
 627        *hdr_arg = 0;
 628        if (!args.keep_pack && unpack_limit) {
 629                struct pack_header header;
 630
 631                if (read_pack_header(demux.out, &header))
 632                        die("protocol error: bad pack header");
 633                snprintf(hdr_arg, sizeof(hdr_arg),
 634                         "--pack_header=%"PRIu32",%"PRIu32,
 635                         ntohl(header.hdr_version), ntohl(header.hdr_entries));
 636                if (ntohl(header.hdr_entries) < unpack_limit)
 637                        do_keep = 0;
 638                else
 639                        do_keep = 1;
 640        }
 641
 642        if (do_keep) {
 643                if (pack_lockfile)
 644                        cmd.out = -1;
 645                *av++ = "index-pack";
 646                *av++ = "--stdin";
 647                if (!args.quiet && !args.no_progress)
 648                        *av++ = "-v";
 649                if (args.use_thin_pack)
 650                        *av++ = "--fix-thin";
 651                if (args.lock_pack || unpack_limit) {
 652                        int s = sprintf(keep_arg,
 653                                        "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
 654                        if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
 655                                strcpy(keep_arg + s, "localhost");
 656                        *av++ = keep_arg;
 657                }
 658        }
 659        else {
 660                *av++ = "unpack-objects";
 661                if (args.quiet)
 662                        *av++ = "-q";
 663        }
 664        if (*hdr_arg)
 665                *av++ = hdr_arg;
 666        *av++ = NULL;
 667
 668        cmd.in = demux.out;
 669        cmd.git_cmd = 1;
 670        if (start_command(&cmd))
 671                die("fetch-pack: unable to fork off %s", argv[0]);
 672        if (do_keep && pack_lockfile) {
 673                *pack_lockfile = index_pack_lockfile(cmd.out);
 674                close(cmd.out);
 675        }
 676
 677        if (finish_command(&cmd))
 678                die("%s failed", argv[0]);
 679        if (use_sideband && finish_async(&demux))
 680                die("error in sideband demultiplexer");
 681        return 0;
 682}
 683
 684static struct ref *do_fetch_pack(int fd[2],
 685                const struct ref *orig_ref,
 686                int nr_match,
 687                char **match,
 688                char **pack_lockfile)
 689{
 690        struct ref *ref = copy_ref_list(orig_ref);
 691        unsigned char sha1[20];
 692
 693        if (is_repository_shallow() && !server_supports("shallow"))
 694                die("Server does not support shallow clients");
 695        if (server_supports("multi_ack_detailed")) {
 696                if (args.verbose)
 697                        fprintf(stderr, "Server supports multi_ack_detailed\n");
 698                multi_ack = 2;
 699        }
 700        else if (server_supports("multi_ack")) {
 701                if (args.verbose)
 702                        fprintf(stderr, "Server supports multi_ack\n");
 703                multi_ack = 1;
 704        }
 705        if (server_supports("side-band-64k")) {
 706                if (args.verbose)
 707                        fprintf(stderr, "Server supports side-band-64k\n");
 708                use_sideband = 2;
 709        }
 710        else if (server_supports("side-band")) {
 711                if (args.verbose)
 712                        fprintf(stderr, "Server supports side-band\n");
 713                use_sideband = 1;
 714        }
 715        if (server_supports("ofs-delta")) {
 716                if (args.verbose)
 717                        fprintf(stderr, "Server supports ofs-delta\n");
 718        } else
 719                prefer_ofs_delta = 0;
 720        if (everything_local(&ref, nr_match, match)) {
 721                packet_flush(fd[1]);
 722                goto all_done;
 723        }
 724        if (find_common(fd, sha1, ref) < 0)
 725                if (!args.keep_pack)
 726                        /* When cloning, it is not unusual to have
 727                         * no common commit.
 728                         */
 729                        warning("no common commits");
 730
 731        if (args.stateless_rpc)
 732                packet_flush(fd[1]);
 733        if (get_pack(fd, pack_lockfile))
 734                die("git fetch-pack: fetch failed.");
 735
 736 all_done:
 737        return ref;
 738}
 739
 740static int remove_duplicates(int nr_heads, char **heads)
 741{
 742        int src, dst;
 743
 744        for (src = dst = 0; src < nr_heads; src++) {
 745                /* If heads[src] is different from any of
 746                 * heads[0..dst], push it in.
 747                 */
 748                int i;
 749                for (i = 0; i < dst; i++) {
 750                        if (!strcmp(heads[i], heads[src]))
 751                                break;
 752                }
 753                if (i < dst)
 754                        continue;
 755                if (src != dst)
 756                        heads[dst] = heads[src];
 757                dst++;
 758        }
 759        return dst;
 760}
 761
 762static int fetch_pack_config(const char *var, const char *value, void *cb)
 763{
 764        if (strcmp(var, "fetch.unpacklimit") == 0) {
 765                fetch_unpack_limit = git_config_int(var, value);
 766                return 0;
 767        }
 768
 769        if (strcmp(var, "transfer.unpacklimit") == 0) {
 770                transfer_unpack_limit = git_config_int(var, value);
 771                return 0;
 772        }
 773
 774        if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
 775                prefer_ofs_delta = git_config_bool(var, value);
 776                return 0;
 777        }
 778
 779        return git_default_config(var, value, cb);
 780}
 781
 782static struct lock_file lock;
 783
 784static void fetch_pack_setup(void)
 785{
 786        static int did_setup;
 787        if (did_setup)
 788                return;
 789        git_config(fetch_pack_config, NULL);
 790        if (0 <= transfer_unpack_limit)
 791                unpack_limit = transfer_unpack_limit;
 792        else if (0 <= fetch_unpack_limit)
 793                unpack_limit = fetch_unpack_limit;
 794        did_setup = 1;
 795}
 796
 797int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
 798{
 799        int i, ret, nr_heads;
 800        struct ref *ref = NULL;
 801        char *dest = NULL, **heads;
 802        int fd[2];
 803        char *pack_lockfile = NULL;
 804        char **pack_lockfile_ptr = NULL;
 805        struct child_process *conn;
 806
 807        packet_trace_identity("fetch-pack");
 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}