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