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