fetch-pack.con commit test/send-email: --[no-]xmailer tests (2cf770f)
   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;
 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        memset(&cmd, 0, sizeof(cmd));
 689        cmd.argv = argv;
 690        av = argv;
 691        *hdr_arg = 0;
 692        if (!args->keep_pack && unpack_limit) {
 693                struct pack_header header;
 694
 695                if (read_pack_header(demux.out, &header))
 696                        die("protocol error: bad pack header");
 697                snprintf(hdr_arg, sizeof(hdr_arg),
 698                         "--pack_header=%"PRIu32",%"PRIu32,
 699                         ntohl(header.hdr_version), ntohl(header.hdr_entries));
 700                if (ntohl(header.hdr_entries) < unpack_limit)
 701                        do_keep = 0;
 702                else
 703                        do_keep = 1;
 704        }
 705
 706        if (alternate_shallow_file) {
 707                *av++ = "--shallow-file";
 708                *av++ = alternate_shallow_file;
 709        }
 710
 711        if (do_keep) {
 712                if (pack_lockfile)
 713                        cmd.out = -1;
 714                *av++ = cmd_name = "index-pack";
 715                *av++ = "--stdin";
 716                if (!args->quiet && !args->no_progress)
 717                        *av++ = "-v";
 718                if (args->use_thin_pack)
 719                        *av++ = "--fix-thin";
 720                if (args->lock_pack || unpack_limit) {
 721                        int s = sprintf(keep_arg,
 722                                        "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
 723                        if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
 724                                strcpy(keep_arg + s, "localhost");
 725                        *av++ = keep_arg;
 726                }
 727                if (args->check_self_contained_and_connected)
 728                        *av++ = "--check-self-contained-and-connected";
 729        }
 730        else {
 731                *av++ = cmd_name = "unpack-objects";
 732                if (args->quiet || args->no_progress)
 733                        *av++ = "-q";
 734                args->check_self_contained_and_connected = 0;
 735        }
 736        if (*hdr_arg)
 737                *av++ = hdr_arg;
 738        if (fetch_fsck_objects >= 0
 739            ? fetch_fsck_objects
 740            : transfer_fsck_objects >= 0
 741            ? transfer_fsck_objects
 742            : 0)
 743                *av++ = "--strict";
 744        *av++ = NULL;
 745
 746        cmd.in = demux.out;
 747        cmd.git_cmd = 1;
 748        if (start_command(&cmd))
 749                die("fetch-pack: unable to fork off %s", cmd_name);
 750        if (do_keep && pack_lockfile) {
 751                *pack_lockfile = index_pack_lockfile(cmd.out);
 752                close(cmd.out);
 753        }
 754
 755        if (!use_sideband)
 756                /* Closed by start_command() */
 757                xd[0] = -1;
 758
 759        ret = finish_command(&cmd);
 760        if (!ret || (args->check_self_contained_and_connected && ret == 1))
 761                args->self_contained_and_connected =
 762                        args->check_self_contained_and_connected &&
 763                        ret == 0;
 764        else
 765                die("%s failed", cmd_name);
 766        if (use_sideband && finish_async(&demux))
 767                die("error in sideband demultiplexer");
 768        return 0;
 769}
 770
 771static int cmp_ref_by_name(const void *a_, const void *b_)
 772{
 773        const struct ref *a = *((const struct ref **)a_);
 774        const struct ref *b = *((const struct ref **)b_);
 775        return strcmp(a->name, b->name);
 776}
 777
 778static struct ref *do_fetch_pack(struct fetch_pack_args *args,
 779                                 int fd[2],
 780                                 const struct ref *orig_ref,
 781                                 struct ref **sought, int nr_sought,
 782                                 struct shallow_info *si,
 783                                 char **pack_lockfile)
 784{
 785        struct ref *ref = copy_ref_list(orig_ref);
 786        unsigned char sha1[20];
 787        const char *agent_feature;
 788        int agent_len;
 789
 790        sort_ref_list(&ref, ref_compare_name);
 791        qsort(sought, nr_sought, sizeof(*sought), cmp_ref_by_name);
 792
 793        if (is_repository_shallow() && !server_supports("shallow"))
 794                die("Server does not support shallow clients");
 795        if (server_supports("multi_ack_detailed")) {
 796                if (args->verbose)
 797                        fprintf(stderr, "Server supports multi_ack_detailed\n");
 798                multi_ack = 2;
 799                if (server_supports("no-done")) {
 800                        if (args->verbose)
 801                                fprintf(stderr, "Server supports no-done\n");
 802                        if (args->stateless_rpc)
 803                                no_done = 1;
 804                }
 805        }
 806        else if (server_supports("multi_ack")) {
 807                if (args->verbose)
 808                        fprintf(stderr, "Server supports multi_ack\n");
 809                multi_ack = 1;
 810        }
 811        if (server_supports("side-band-64k")) {
 812                if (args->verbose)
 813                        fprintf(stderr, "Server supports side-band-64k\n");
 814                use_sideband = 2;
 815        }
 816        else if (server_supports("side-band")) {
 817                if (args->verbose)
 818                        fprintf(stderr, "Server supports side-band\n");
 819                use_sideband = 1;
 820        }
 821        if (server_supports("allow-tip-sha1-in-want")) {
 822                if (args->verbose)
 823                        fprintf(stderr, "Server supports allow-tip-sha1-in-want\n");
 824                allow_tip_sha1_in_want = 1;
 825        }
 826        if (!server_supports("thin-pack"))
 827                args->use_thin_pack = 0;
 828        if (!server_supports("no-progress"))
 829                args->no_progress = 0;
 830        if (!server_supports("include-tag"))
 831                args->include_tag = 0;
 832        if (server_supports("ofs-delta")) {
 833                if (args->verbose)
 834                        fprintf(stderr, "Server supports ofs-delta\n");
 835        } else
 836                prefer_ofs_delta = 0;
 837
 838        if ((agent_feature = server_feature_value("agent", &agent_len))) {
 839                agent_supported = 1;
 840                if (args->verbose && agent_len)
 841                        fprintf(stderr, "Server version is %.*s\n",
 842                                agent_len, agent_feature);
 843        }
 844
 845        if (everything_local(args, &ref, sought, nr_sought)) {
 846                packet_flush(fd[1]);
 847                goto all_done;
 848        }
 849        if (find_common(args, fd, sha1, ref) < 0)
 850                if (!args->keep_pack)
 851                        /* When cloning, it is not unusual to have
 852                         * no common commit.
 853                         */
 854                        warning("no common commits");
 855
 856        if (args->stateless_rpc)
 857                packet_flush(fd[1]);
 858        if (args->depth > 0)
 859                setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
 860                                        NULL);
 861        else if (si->nr_ours || si->nr_theirs)
 862                alternate_shallow_file = setup_temporary_shallow(si->shallow);
 863        else
 864                alternate_shallow_file = NULL;
 865        if (get_pack(args, fd, pack_lockfile))
 866                die("git fetch-pack: fetch failed.");
 867
 868 all_done:
 869        return ref;
 870}
 871
 872static int fetch_pack_config(const char *var, const char *value, void *cb)
 873{
 874        if (strcmp(var, "fetch.unpacklimit") == 0) {
 875                fetch_unpack_limit = git_config_int(var, value);
 876                return 0;
 877        }
 878
 879        if (strcmp(var, "transfer.unpacklimit") == 0) {
 880                transfer_unpack_limit = git_config_int(var, value);
 881                return 0;
 882        }
 883
 884        if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
 885                prefer_ofs_delta = git_config_bool(var, value);
 886                return 0;
 887        }
 888
 889        if (!strcmp(var, "fetch.fsckobjects")) {
 890                fetch_fsck_objects = git_config_bool(var, value);
 891                return 0;
 892        }
 893
 894        if (!strcmp(var, "transfer.fsckobjects")) {
 895                transfer_fsck_objects = git_config_bool(var, value);
 896                return 0;
 897        }
 898
 899        return git_default_config(var, value, cb);
 900}
 901
 902static void fetch_pack_setup(void)
 903{
 904        static int did_setup;
 905        if (did_setup)
 906                return;
 907        git_config(fetch_pack_config, NULL);
 908        if (0 <= transfer_unpack_limit)
 909                unpack_limit = transfer_unpack_limit;
 910        else if (0 <= fetch_unpack_limit)
 911                unpack_limit = fetch_unpack_limit;
 912        did_setup = 1;
 913}
 914
 915static int remove_duplicates_in_refs(struct ref **ref, int nr)
 916{
 917        struct string_list names = STRING_LIST_INIT_NODUP;
 918        int src, dst;
 919
 920        for (src = dst = 0; src < nr; src++) {
 921                struct string_list_item *item;
 922                item = string_list_insert(&names, ref[src]->name);
 923                if (item->util)
 924                        continue; /* already have it */
 925                item->util = ref[src];
 926                if (src != dst)
 927                        ref[dst] = ref[src];
 928                dst++;
 929        }
 930        for (src = dst; src < nr; src++)
 931                ref[src] = NULL;
 932        string_list_clear(&names, 0);
 933        return dst;
 934}
 935
 936static void update_shallow(struct fetch_pack_args *args,
 937                           struct ref **sought, int nr_sought,
 938                           struct shallow_info *si)
 939{
 940        struct sha1_array ref = SHA1_ARRAY_INIT;
 941        int *status;
 942        int i;
 943
 944        if (args->depth > 0 && alternate_shallow_file) {
 945                if (*alternate_shallow_file == '\0') { /* --unshallow */
 946                        unlink_or_warn(git_path("shallow"));
 947                        rollback_lock_file(&shallow_lock);
 948                } else
 949                        commit_lock_file(&shallow_lock);
 950                return;
 951        }
 952
 953        if (!si->shallow || !si->shallow->nr)
 954                return;
 955
 956        if (args->cloning) {
 957                /*
 958                 * remote is shallow, but this is a clone, there are
 959                 * no objects in repo to worry about. Accept any
 960                 * shallow points that exist in the pack (iow in repo
 961                 * after get_pack() and reprepare_packed_git())
 962                 */
 963                struct sha1_array extra = SHA1_ARRAY_INIT;
 964                unsigned char (*sha1)[20] = si->shallow->sha1;
 965                for (i = 0; i < si->shallow->nr; i++)
 966                        if (has_sha1_file(sha1[i]))
 967                                sha1_array_append(&extra, sha1[i]);
 968                if (extra.nr) {
 969                        setup_alternate_shallow(&shallow_lock,
 970                                                &alternate_shallow_file,
 971                                                &extra);
 972                        commit_lock_file(&shallow_lock);
 973                }
 974                sha1_array_clear(&extra);
 975                return;
 976        }
 977
 978        if (!si->nr_ours && !si->nr_theirs)
 979                return;
 980
 981        remove_nonexistent_theirs_shallow(si);
 982        if (!si->nr_ours && !si->nr_theirs)
 983                return;
 984        for (i = 0; i < nr_sought; i++)
 985                sha1_array_append(&ref, sought[i]->old_sha1);
 986        si->ref = &ref;
 987
 988        if (args->update_shallow) {
 989                /*
 990                 * remote is also shallow, .git/shallow may be updated
 991                 * so all refs can be accepted. Make sure we only add
 992                 * shallow roots that are actually reachable from new
 993                 * refs.
 994                 */
 995                struct sha1_array extra = SHA1_ARRAY_INIT;
 996                unsigned char (*sha1)[20] = si->shallow->sha1;
 997                assign_shallow_commits_to_refs(si, NULL, NULL);
 998                if (!si->nr_ours && !si->nr_theirs) {
 999                        sha1_array_clear(&ref);
1000                        return;
1001                }
1002                for (i = 0; i < si->nr_ours; i++)
1003                        sha1_array_append(&extra, sha1[si->ours[i]]);
1004                for (i = 0; i < si->nr_theirs; i++)
1005                        sha1_array_append(&extra, sha1[si->theirs[i]]);
1006                setup_alternate_shallow(&shallow_lock,
1007                                        &alternate_shallow_file,
1008                                        &extra);
1009                commit_lock_file(&shallow_lock);
1010                sha1_array_clear(&extra);
1011                sha1_array_clear(&ref);
1012                return;
1013        }
1014
1015        /*
1016         * remote is also shallow, check what ref is safe to update
1017         * without updating .git/shallow
1018         */
1019        status = xcalloc(nr_sought, sizeof(*status));
1020        assign_shallow_commits_to_refs(si, NULL, status);
1021        if (si->nr_ours || si->nr_theirs) {
1022                for (i = 0; i < nr_sought; i++)
1023                        if (status[i])
1024                                sought[i]->status = REF_STATUS_REJECT_SHALLOW;
1025        }
1026        free(status);
1027        sha1_array_clear(&ref);
1028}
1029
1030struct ref *fetch_pack(struct fetch_pack_args *args,
1031                       int fd[], struct child_process *conn,
1032                       const struct ref *ref,
1033                       const char *dest,
1034                       struct ref **sought, int nr_sought,
1035                       struct sha1_array *shallow,
1036                       char **pack_lockfile)
1037{
1038        struct ref *ref_cpy;
1039        struct shallow_info si;
1040
1041        fetch_pack_setup();
1042        if (nr_sought)
1043                nr_sought = remove_duplicates_in_refs(sought, nr_sought);
1044
1045        if (!ref) {
1046                packet_flush(fd[1]);
1047                die("no matching remote head");
1048        }
1049        prepare_shallow_info(&si, shallow);
1050        ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
1051                                &si, pack_lockfile);
1052        reprepare_packed_git();
1053        update_shallow(args, sought, nr_sought, &si);
1054        clear_shallow_info(&si);
1055        return ref_cpy;
1056}