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