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