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