builtin / fetch-pack.con commit Git 1.7.11.5 (cd7c0be)
   1#include "builtin.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 "transport.h"
  13
  14static int transfer_unpack_limit = -1;
  15static int fetch_unpack_limit = -1;
  16static int unpack_limit = 100;
  17static int prefer_ofs_delta = 1;
  18static int no_done;
  19static int fetch_fsck_objects = -1;
  20static int transfer_fsck_objects = -1;
  21static struct fetch_pack_args args = {
  22        /* .uploadpack = */ "git-upload-pack",
  23};
  24
  25static const char fetch_pack_usage[] =
  26"git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
  27"[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
  28"[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
  29
  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 commit_list *rev_list;
  45static int non_common_revs, multi_ack, use_sideband;
  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 (!(commit->object.parsed))
  53                        if (parse_commit(commit))
  54                                return;
  55
  56                commit_list_insert_by_date(commit, &rev_list);
  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 == NULL || non_common_revs == 0)
 130                        return NULL;
 131
 132                commit = rev_list->item;
 133                if (!commit->object.parsed)
 134                        parse_commit(commit);
 135                parents = commit->parents;
 136
 137                commit->object.flags |= POPPED;
 138                if (!(commit->object.flags & COMMON))
 139                        non_common_revs--;
 140
 141                if (commit->object.flags & COMMON) {
 142                        /* do not send "have", and ignore ancestors */
 143                        commit = NULL;
 144                        mark = COMMON | SEEN;
 145                } else if (commit->object.flags & COMMON_REF)
 146                        /* send "have", and ignore ancestors */
 147                        mark = COMMON | SEEN;
 148                else
 149                        /* send "have", also for its ancestors */
 150                        mark = SEEN;
 151
 152                while (parents) {
 153                        if (!(parents->item->object.flags & SEEN))
 154                                rev_list_push(parents->item, mark);
 155                        if (mark & COMMON)
 156                                mark_common(parents->item, 1, 0);
 157                        parents = parents->next;
 158                }
 159
 160                rev_list = rev_list->next;
 161        }
 162
 163        return commit->object.sha1;
 164}
 165
 166enum ack_type {
 167        NAK = 0,
 168        ACK,
 169        ACK_continue,
 170        ACK_common,
 171        ACK_ready
 172};
 173
 174static void consume_shallow_list(int fd)
 175{
 176        if (args.stateless_rpc && args.depth > 0) {
 177                /* If we sent a depth we will get back "duplicate"
 178                 * shallow and unshallow commands every time there
 179                 * is a block of have lines exchanged.
 180                 */
 181                char line[1000];
 182                while (packet_read_line(fd, line, sizeof(line))) {
 183                        if (!prefixcmp(line, "shallow "))
 184                                continue;
 185                        if (!prefixcmp(line, "unshallow "))
 186                                continue;
 187                        die("git fetch-pack: expected shallow list");
 188                }
 189        }
 190}
 191
 192struct write_shallow_data {
 193        struct strbuf *out;
 194        int use_pack_protocol;
 195        int count;
 196};
 197
 198static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
 199{
 200        struct write_shallow_data *data = cb_data;
 201        const char *hex = sha1_to_hex(graft->sha1);
 202        data->count++;
 203        if (data->use_pack_protocol)
 204                packet_buf_write(data->out, "shallow %s", hex);
 205        else {
 206                strbuf_addstr(data->out, hex);
 207                strbuf_addch(data->out, '\n');
 208        }
 209        return 0;
 210}
 211
 212static int write_shallow_commits(struct strbuf *out, int use_pack_protocol)
 213{
 214        struct write_shallow_data data;
 215        data.out = out;
 216        data.use_pack_protocol = use_pack_protocol;
 217        data.count = 0;
 218        for_each_commit_graft(write_one_shallow, &data);
 219        return data.count;
 220}
 221
 222static enum ack_type get_ack(int fd, unsigned char *result_sha1)
 223{
 224        static char line[1000];
 225        int len = packet_read_line(fd, line, sizeof(line));
 226
 227        if (!len)
 228                die("git fetch-pack: expected ACK/NAK, got EOF");
 229        if (line[len-1] == '\n')
 230                line[--len] = 0;
 231        if (!strcmp(line, "NAK"))
 232                return NAK;
 233        if (!prefixcmp(line, "ACK ")) {
 234                if (!get_sha1_hex(line+4, result_sha1)) {
 235                        if (strstr(line+45, "continue"))
 236                                return ACK_continue;
 237                        if (strstr(line+45, "common"))
 238                                return ACK_common;
 239                        if (strstr(line+45, "ready"))
 240                                return ACK_ready;
 241                        return ACK;
 242                }
 243        }
 244        die("git fetch_pack: expected ACK/NAK, got '%s'", line);
 245}
 246
 247static void send_request(int fd, struct strbuf *buf)
 248{
 249        if (args.stateless_rpc) {
 250                send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
 251                packet_flush(fd);
 252        } else
 253                safe_write(fd, buf->buf, buf->len);
 254}
 255
 256static void insert_one_alternate_ref(const struct ref *ref, void *unused)
 257{
 258        rev_list_insert_ref(NULL, ref->old_sha1, 0, NULL);
 259}
 260
 261#define INITIAL_FLUSH 16
 262#define PIPESAFE_FLUSH 32
 263#define LARGE_FLUSH 1024
 264
 265static int next_flush(int count)
 266{
 267        int flush_limit = args.stateless_rpc ? LARGE_FLUSH : PIPESAFE_FLUSH;
 268
 269        if (count < flush_limit)
 270                count <<= 1;
 271        else
 272                count += flush_limit;
 273        return count;
 274}
 275
 276static int find_common(int fd[2], unsigned char *result_sha1,
 277                       struct ref *refs)
 278{
 279        int fetching;
 280        int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
 281        const unsigned char *sha1;
 282        unsigned in_vain = 0;
 283        int got_continue = 0;
 284        int got_ready = 0;
 285        struct strbuf req_buf = STRBUF_INIT;
 286        size_t state_len = 0;
 287
 288        if (args.stateless_rpc && multi_ack == 1)
 289                die("--stateless-rpc requires multi_ack_detailed");
 290        if (marked)
 291                for_each_ref(clear_marks, NULL);
 292        marked = 1;
 293
 294        for_each_ref(rev_list_insert_ref, NULL);
 295        for_each_alternate_ref(insert_one_alternate_ref, NULL);
 296
 297        fetching = 0;
 298        for ( ; refs ; refs = refs->next) {
 299                unsigned char *remote = refs->old_sha1;
 300                const char *remote_hex;
 301                struct object *o;
 302
 303                /*
 304                 * If that object is complete (i.e. it is an ancestor of a
 305                 * local ref), we tell them we have it but do not have to
 306                 * tell them about its ancestors, which they already know
 307                 * about.
 308                 *
 309                 * We use lookup_object here because we are only
 310                 * interested in the case we *know* the object is
 311                 * reachable and we have already scanned it.
 312                 */
 313                if (((o = lookup_object(remote)) != NULL) &&
 314                                (o->flags & COMPLETE)) {
 315                        continue;
 316                }
 317
 318                remote_hex = sha1_to_hex(remote);
 319                if (!fetching) {
 320                        struct strbuf c = STRBUF_INIT;
 321                        if (multi_ack == 2)     strbuf_addstr(&c, " multi_ack_detailed");
 322                        if (multi_ack == 1)     strbuf_addstr(&c, " multi_ack");
 323                        if (no_done)            strbuf_addstr(&c, " no-done");
 324                        if (use_sideband == 2)  strbuf_addstr(&c, " side-band-64k");
 325                        if (use_sideband == 1)  strbuf_addstr(&c, " side-band");
 326                        if (args.use_thin_pack) strbuf_addstr(&c, " thin-pack");
 327                        if (args.no_progress)   strbuf_addstr(&c, " no-progress");
 328                        if (args.include_tag)   strbuf_addstr(&c, " include-tag");
 329                        if (prefer_ofs_delta)   strbuf_addstr(&c, " ofs-delta");
 330                        packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
 331                        strbuf_release(&c);
 332                } else
 333                        packet_buf_write(&req_buf, "want %s\n", remote_hex);
 334                fetching++;
 335        }
 336
 337        if (!fetching) {
 338                strbuf_release(&req_buf);
 339                packet_flush(fd[1]);
 340                return 1;
 341        }
 342
 343        if (is_repository_shallow())
 344                write_shallow_commits(&req_buf, 1);
 345        if (args.depth > 0)
 346                packet_buf_write(&req_buf, "deepen %d", args.depth);
 347        packet_buf_flush(&req_buf);
 348        state_len = req_buf.len;
 349
 350        if (args.depth > 0) {
 351                char line[1024];
 352                unsigned char sha1[20];
 353
 354                send_request(fd[1], &req_buf);
 355                while (packet_read_line(fd[0], line, sizeof(line))) {
 356                        if (!prefixcmp(line, "shallow ")) {
 357                                if (get_sha1_hex(line + 8, sha1))
 358                                        die("invalid shallow line: %s", line);
 359                                register_shallow(sha1);
 360                                continue;
 361                        }
 362                        if (!prefixcmp(line, "unshallow ")) {
 363                                if (get_sha1_hex(line + 10, sha1))
 364                                        die("invalid unshallow line: %s", line);
 365                                if (!lookup_object(sha1))
 366                                        die("object not found: %s", line);
 367                                /* make sure that it is parsed as shallow */
 368                                if (!parse_object(sha1))
 369                                        die("error in object: %s", line);
 370                                if (unregister_shallow(sha1))
 371                                        die("no shallow found: %s", line);
 372                                continue;
 373                        }
 374                        die("expected shallow/unshallow, got %s", line);
 375                }
 376        } else if (!args.stateless_rpc)
 377                send_request(fd[1], &req_buf);
 378
 379        if (!args.stateless_rpc) {
 380                /* If we aren't using the stateless-rpc interface
 381                 * we don't need to retain the headers.
 382                 */
 383                strbuf_setlen(&req_buf, 0);
 384                state_len = 0;
 385        }
 386
 387        flushes = 0;
 388        retval = -1;
 389        while ((sha1 = get_rev())) {
 390                packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
 391                if (args.verbose)
 392                        fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
 393                in_vain++;
 394                if (flush_at <= ++count) {
 395                        int ack;
 396
 397                        packet_buf_flush(&req_buf);
 398                        send_request(fd[1], &req_buf);
 399                        strbuf_setlen(&req_buf, state_len);
 400                        flushes++;
 401                        flush_at = next_flush(count);
 402
 403                        /*
 404                         * We keep one window "ahead" of the other side, and
 405                         * will wait for an ACK only on the next one
 406                         */
 407                        if (!args.stateless_rpc && count == INITIAL_FLUSH)
 408                                continue;
 409
 410                        consume_shallow_list(fd[0]);
 411                        do {
 412                                ack = get_ack(fd[0], result_sha1);
 413                                if (args.verbose && ack)
 414                                        fprintf(stderr, "got ack %d %s\n", ack,
 415                                                        sha1_to_hex(result_sha1));
 416                                switch (ack) {
 417                                case ACK:
 418                                        flushes = 0;
 419                                        multi_ack = 0;
 420                                        retval = 0;
 421                                        goto done;
 422                                case ACK_common:
 423                                case ACK_ready:
 424                                case ACK_continue: {
 425                                        struct commit *commit =
 426                                                lookup_commit(result_sha1);
 427                                        if (!commit)
 428                                                die("invalid commit %s", sha1_to_hex(result_sha1));
 429                                        if (args.stateless_rpc
 430                                         && ack == ACK_common
 431                                         && !(commit->object.flags & COMMON)) {
 432                                                /* We need to replay the have for this object
 433                                                 * on the next RPC request so the peer knows
 434                                                 * it is in common with us.
 435                                                 */
 436                                                const char *hex = sha1_to_hex(result_sha1);
 437                                                packet_buf_write(&req_buf, "have %s\n", hex);
 438                                                state_len = req_buf.len;
 439                                        }
 440                                        mark_common(commit, 0, 1);
 441                                        retval = 0;
 442                                        in_vain = 0;
 443                                        got_continue = 1;
 444                                        if (ack == ACK_ready) {
 445                                                rev_list = NULL;
 446                                                got_ready = 1;
 447                                        }
 448                                        break;
 449                                        }
 450                                }
 451                        } while (ack);
 452                        flushes--;
 453                        if (got_continue && MAX_IN_VAIN < in_vain) {
 454                                if (args.verbose)
 455                                        fprintf(stderr, "giving up\n");
 456                                break; /* give up */
 457                        }
 458                }
 459        }
 460done:
 461        if (!got_ready || !no_done) {
 462                packet_buf_write(&req_buf, "done\n");
 463                send_request(fd[1], &req_buf);
 464        }
 465        if (args.verbose)
 466                fprintf(stderr, "done\n");
 467        if (retval != 0) {
 468                multi_ack = 0;
 469                flushes++;
 470        }
 471        strbuf_release(&req_buf);
 472
 473        consume_shallow_list(fd[0]);
 474        while (flushes || multi_ack) {
 475                int ack = get_ack(fd[0], result_sha1);
 476                if (ack) {
 477                        if (args.verbose)
 478                                fprintf(stderr, "got ack (%d) %s\n", ack,
 479                                        sha1_to_hex(result_sha1));
 480                        if (ack == ACK)
 481                                return 0;
 482                        multi_ack = 1;
 483                        continue;
 484                }
 485                flushes--;
 486        }
 487        /* it is no error to fetch into a completely empty repo */
 488        return count ? retval : 0;
 489}
 490
 491static struct commit_list *complete;
 492
 493static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
 494{
 495        struct object *o = parse_object(sha1);
 496
 497        while (o && o->type == OBJ_TAG) {
 498                struct tag *t = (struct tag *) o;
 499                if (!t->tagged)
 500                        break; /* broken repository */
 501                o->flags |= COMPLETE;
 502                o = parse_object(t->tagged->sha1);
 503        }
 504        if (o && o->type == OBJ_COMMIT) {
 505                struct commit *commit = (struct commit *)o;
 506                if (!(commit->object.flags & COMPLETE)) {
 507                        commit->object.flags |= COMPLETE;
 508                        commit_list_insert_by_date(commit, &complete);
 509                }
 510        }
 511        return 0;
 512}
 513
 514static void mark_recent_complete_commits(unsigned long cutoff)
 515{
 516        while (complete && cutoff <= complete->item->date) {
 517                if (args.verbose)
 518                        fprintf(stderr, "Marking %s as complete\n",
 519                                sha1_to_hex(complete->item->object.sha1));
 520                pop_most_recent_commit(&complete, COMPLETE);
 521        }
 522}
 523
 524static void filter_refs(struct ref **refs, int nr_match, char **match)
 525{
 526        struct ref **return_refs;
 527        struct ref *newlist = NULL;
 528        struct ref **newtail = &newlist;
 529        struct ref *ref, *next;
 530        struct ref *fastarray[32];
 531        int match_pos;
 532
 533        if (nr_match && !args.fetch_all) {
 534                if (ARRAY_SIZE(fastarray) < nr_match)
 535                        return_refs = xcalloc(nr_match, sizeof(struct ref *));
 536                else {
 537                        return_refs = fastarray;
 538                        memset(return_refs, 0, sizeof(struct ref *) * nr_match);
 539                }
 540        }
 541        else
 542                return_refs = NULL;
 543
 544        match_pos = 0;
 545        for (ref = *refs; ref; ref = next) {
 546                next = ref->next;
 547                if (!memcmp(ref->name, "refs/", 5) &&
 548                    check_refname_format(ref->name + 5, 0))
 549                        ; /* trash */
 550                else if (args.fetch_all &&
 551                         (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
 552                        *newtail = ref;
 553                        ref->next = NULL;
 554                        newtail = &ref->next;
 555                        continue;
 556                }
 557                else {
 558                        int cmp = -1;
 559                        while (match_pos < nr_match) {
 560                                cmp = strcmp(ref->name, match[match_pos]);
 561                                if (cmp < 0) /* definitely do not have it */
 562                                        break;
 563                                else if (cmp == 0) { /* definitely have it */
 564                                        match[match_pos][0] = '\0';
 565                                        return_refs[match_pos] = ref;
 566                                        break;
 567                                }
 568                                else /* might have it; keep looking */
 569                                        match_pos++;
 570                        }
 571                        if (!cmp)
 572                                continue; /* we will link it later */
 573                }
 574                free(ref);
 575        }
 576
 577        if (!args.fetch_all) {
 578                int i;
 579                for (i = 0; i < nr_match; i++) {
 580                        ref = return_refs[i];
 581                        if (ref) {
 582                                *newtail = ref;
 583                                ref->next = NULL;
 584                                newtail = &ref->next;
 585                        }
 586                }
 587                if (return_refs != fastarray)
 588                        free(return_refs);
 589        }
 590        *refs = newlist;
 591}
 592
 593static void mark_alternate_complete(const struct ref *ref, void *unused)
 594{
 595        mark_complete(NULL, ref->old_sha1, 0, NULL);
 596}
 597
 598static int everything_local(struct ref **refs, int nr_match, char **match)
 599{
 600        struct ref *ref;
 601        int retval;
 602        unsigned long cutoff = 0;
 603
 604        save_commit_buffer = 0;
 605
 606        for (ref = *refs; ref; ref = ref->next) {
 607                struct object *o;
 608
 609                o = parse_object(ref->old_sha1);
 610                if (!o)
 611                        continue;
 612
 613                /* We already have it -- which may mean that we were
 614                 * in sync with the other side at some time after
 615                 * that (it is OK if we guess wrong here).
 616                 */
 617                if (o->type == OBJ_COMMIT) {
 618                        struct commit *commit = (struct commit *)o;
 619                        if (!cutoff || cutoff < commit->date)
 620                                cutoff = commit->date;
 621                }
 622        }
 623
 624        if (!args.depth) {
 625                for_each_ref(mark_complete, NULL);
 626                for_each_alternate_ref(mark_alternate_complete, NULL);
 627                if (cutoff)
 628                        mark_recent_complete_commits(cutoff);
 629        }
 630
 631        /*
 632         * Mark all complete remote refs as common refs.
 633         * Don't mark them common yet; the server has to be told so first.
 634         */
 635        for (ref = *refs; ref; ref = ref->next) {
 636                struct object *o = deref_tag(lookup_object(ref->old_sha1),
 637                                             NULL, 0);
 638
 639                if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
 640                        continue;
 641
 642                if (!(o->flags & SEEN)) {
 643                        rev_list_push((struct commit *)o, COMMON_REF | SEEN);
 644
 645                        mark_common((struct commit *)o, 1, 1);
 646                }
 647        }
 648
 649        filter_refs(refs, nr_match, match);
 650
 651        for (retval = 1, ref = *refs; ref ; ref = ref->next) {
 652                const unsigned char *remote = ref->old_sha1;
 653                unsigned char local[20];
 654                struct object *o;
 655
 656                o = lookup_object(remote);
 657                if (!o || !(o->flags & COMPLETE)) {
 658                        retval = 0;
 659                        if (!args.verbose)
 660                                continue;
 661                        fprintf(stderr,
 662                                "want %s (%s)\n", sha1_to_hex(remote),
 663                                ref->name);
 664                        continue;
 665                }
 666
 667                hashcpy(ref->new_sha1, local);
 668                if (!args.verbose)
 669                        continue;
 670                fprintf(stderr,
 671                        "already have %s (%s)\n", sha1_to_hex(remote),
 672                        ref->name);
 673        }
 674        return retval;
 675}
 676
 677static int sideband_demux(int in, int out, void *data)
 678{
 679        int *xd = data;
 680
 681        int ret = recv_sideband("fetch-pack", xd[0], out);
 682        close(out);
 683        return ret;
 684}
 685
 686static int get_pack(int xd[2], char **pack_lockfile)
 687{
 688        struct async demux;
 689        const char *argv[20];
 690        char keep_arg[256];
 691        char hdr_arg[256];
 692        const char **av;
 693        int do_keep = args.keep_pack;
 694        struct child_process cmd;
 695
 696        memset(&demux, 0, sizeof(demux));
 697        if (use_sideband) {
 698                /* xd[] is talking with upload-pack; subprocess reads from
 699                 * xd[0], spits out band#2 to stderr, and feeds us band#1
 700                 * through demux->out.
 701                 */
 702                demux.proc = sideband_demux;
 703                demux.data = xd;
 704                demux.out = -1;
 705                if (start_async(&demux))
 706                        die("fetch-pack: unable to fork off sideband"
 707                            " demultiplexer");
 708        }
 709        else
 710                demux.out = xd[0];
 711
 712        memset(&cmd, 0, sizeof(cmd));
 713        cmd.argv = argv;
 714        av = argv;
 715        *hdr_arg = 0;
 716        if (!args.keep_pack && unpack_limit) {
 717                struct pack_header header;
 718
 719                if (read_pack_header(demux.out, &header))
 720                        die("protocol error: bad pack header");
 721                snprintf(hdr_arg, sizeof(hdr_arg),
 722                         "--pack_header=%"PRIu32",%"PRIu32,
 723                         ntohl(header.hdr_version), ntohl(header.hdr_entries));
 724                if (ntohl(header.hdr_entries) < unpack_limit)
 725                        do_keep = 0;
 726                else
 727                        do_keep = 1;
 728        }
 729
 730        if (do_keep) {
 731                if (pack_lockfile)
 732                        cmd.out = -1;
 733                *av++ = "index-pack";
 734                *av++ = "--stdin";
 735                if (!args.quiet && !args.no_progress)
 736                        *av++ = "-v";
 737                if (args.use_thin_pack)
 738                        *av++ = "--fix-thin";
 739                if (args.lock_pack || unpack_limit) {
 740                        int s = sprintf(keep_arg,
 741                                        "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
 742                        if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
 743                                strcpy(keep_arg + s, "localhost");
 744                        *av++ = keep_arg;
 745                }
 746        }
 747        else {
 748                *av++ = "unpack-objects";
 749                if (args.quiet || args.no_progress)
 750                        *av++ = "-q";
 751        }
 752        if (*hdr_arg)
 753                *av++ = hdr_arg;
 754        if (fetch_fsck_objects >= 0
 755            ? fetch_fsck_objects
 756            : transfer_fsck_objects >= 0
 757            ? transfer_fsck_objects
 758            : 0)
 759                *av++ = "--strict";
 760        *av++ = NULL;
 761
 762        cmd.in = demux.out;
 763        cmd.git_cmd = 1;
 764        if (start_command(&cmd))
 765                die("fetch-pack: unable to fork off %s", argv[0]);
 766        if (do_keep && pack_lockfile) {
 767                *pack_lockfile = index_pack_lockfile(cmd.out);
 768                close(cmd.out);
 769        }
 770
 771        if (finish_command(&cmd))
 772                die("%s failed", argv[0]);
 773        if (use_sideband && finish_async(&demux))
 774                die("error in sideband demultiplexer");
 775        return 0;
 776}
 777
 778static struct ref *do_fetch_pack(int fd[2],
 779                const struct ref *orig_ref,
 780                int nr_match,
 781                char **match,
 782                char **pack_lockfile)
 783{
 784        struct ref *ref = copy_ref_list(orig_ref);
 785        unsigned char sha1[20];
 786
 787        sort_ref_list(&ref, ref_compare_name);
 788
 789        if (is_repository_shallow() && !server_supports("shallow"))
 790                die("Server does not support shallow clients");
 791        if (server_supports("multi_ack_detailed")) {
 792                if (args.verbose)
 793                        fprintf(stderr, "Server supports multi_ack_detailed\n");
 794                multi_ack = 2;
 795                if (server_supports("no-done")) {
 796                        if (args.verbose)
 797                                fprintf(stderr, "Server supports no-done\n");
 798                        if (args.stateless_rpc)
 799                                no_done = 1;
 800                }
 801        }
 802        else if (server_supports("multi_ack")) {
 803                if (args.verbose)
 804                        fprintf(stderr, "Server supports multi_ack\n");
 805                multi_ack = 1;
 806        }
 807        if (server_supports("side-band-64k")) {
 808                if (args.verbose)
 809                        fprintf(stderr, "Server supports side-band-64k\n");
 810                use_sideband = 2;
 811        }
 812        else if (server_supports("side-band")) {
 813                if (args.verbose)
 814                        fprintf(stderr, "Server supports side-band\n");
 815                use_sideband = 1;
 816        }
 817        if (server_supports("ofs-delta")) {
 818                if (args.verbose)
 819                        fprintf(stderr, "Server supports ofs-delta\n");
 820        } else
 821                prefer_ofs_delta = 0;
 822        if (everything_local(&ref, nr_match, match)) {
 823                packet_flush(fd[1]);
 824                goto all_done;
 825        }
 826        if (find_common(fd, sha1, ref) < 0)
 827                if (!args.keep_pack)
 828                        /* When cloning, it is not unusual to have
 829                         * no common commit.
 830                         */
 831                        warning("no common commits");
 832
 833        if (args.stateless_rpc)
 834                packet_flush(fd[1]);
 835        if (get_pack(fd, pack_lockfile))
 836                die("git fetch-pack: fetch failed.");
 837
 838 all_done:
 839        return ref;
 840}
 841
 842static int remove_duplicates(int nr_heads, char **heads)
 843{
 844        int src, dst;
 845
 846        if (!nr_heads)
 847                return 0;
 848
 849        for (src = dst = 1; src < nr_heads; src++)
 850                if (strcmp(heads[src], heads[dst-1]))
 851                        heads[dst++] = heads[src];
 852        return dst;
 853}
 854
 855static int fetch_pack_config(const char *var, const char *value, void *cb)
 856{
 857        if (strcmp(var, "fetch.unpacklimit") == 0) {
 858                fetch_unpack_limit = git_config_int(var, value);
 859                return 0;
 860        }
 861
 862        if (strcmp(var, "transfer.unpacklimit") == 0) {
 863                transfer_unpack_limit = git_config_int(var, value);
 864                return 0;
 865        }
 866
 867        if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
 868                prefer_ofs_delta = git_config_bool(var, value);
 869                return 0;
 870        }
 871
 872        if (!strcmp(var, "fetch.fsckobjects")) {
 873                fetch_fsck_objects = git_config_bool(var, value);
 874                return 0;
 875        }
 876
 877        if (!strcmp(var, "transfer.fsckobjects")) {
 878                transfer_fsck_objects = git_config_bool(var, value);
 879                return 0;
 880        }
 881
 882        return git_default_config(var, value, cb);
 883}
 884
 885static struct lock_file lock;
 886
 887static void fetch_pack_setup(void)
 888{
 889        static int did_setup;
 890        if (did_setup)
 891                return;
 892        git_config(fetch_pack_config, NULL);
 893        if (0 <= transfer_unpack_limit)
 894                unpack_limit = transfer_unpack_limit;
 895        else if (0 <= fetch_unpack_limit)
 896                unpack_limit = fetch_unpack_limit;
 897        did_setup = 1;
 898}
 899
 900int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
 901{
 902        int i, ret;
 903        struct ref *ref = NULL;
 904        const char *dest = NULL;
 905        int alloc_heads = 0, nr_heads = 0;
 906        char **heads = NULL;
 907        int fd[2];
 908        char *pack_lockfile = NULL;
 909        char **pack_lockfile_ptr = NULL;
 910        struct child_process *conn;
 911
 912        packet_trace_identity("fetch-pack");
 913
 914        for (i = 1; i < argc && *argv[i] == '-'; i++) {
 915                const char *arg = argv[i];
 916
 917                if (!prefixcmp(arg, "--upload-pack=")) {
 918                        args.uploadpack = arg + 14;
 919                        continue;
 920                }
 921                if (!prefixcmp(arg, "--exec=")) {
 922                        args.uploadpack = arg + 7;
 923                        continue;
 924                }
 925                if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
 926                        args.quiet = 1;
 927                        continue;
 928                }
 929                if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
 930                        args.lock_pack = args.keep_pack;
 931                        args.keep_pack = 1;
 932                        continue;
 933                }
 934                if (!strcmp("--thin", arg)) {
 935                        args.use_thin_pack = 1;
 936                        continue;
 937                }
 938                if (!strcmp("--include-tag", arg)) {
 939                        args.include_tag = 1;
 940                        continue;
 941                }
 942                if (!strcmp("--all", arg)) {
 943                        args.fetch_all = 1;
 944                        continue;
 945                }
 946                if (!strcmp("--stdin", arg)) {
 947                        args.stdin_refs = 1;
 948                        continue;
 949                }
 950                if (!strcmp("-v", arg)) {
 951                        args.verbose = 1;
 952                        continue;
 953                }
 954                if (!prefixcmp(arg, "--depth=")) {
 955                        args.depth = strtol(arg + 8, NULL, 0);
 956                        continue;
 957                }
 958                if (!strcmp("--no-progress", arg)) {
 959                        args.no_progress = 1;
 960                        continue;
 961                }
 962                if (!strcmp("--stateless-rpc", arg)) {
 963                        args.stateless_rpc = 1;
 964                        continue;
 965                }
 966                if (!strcmp("--lock-pack", arg)) {
 967                        args.lock_pack = 1;
 968                        pack_lockfile_ptr = &pack_lockfile;
 969                        continue;
 970                }
 971                usage(fetch_pack_usage);
 972        }
 973
 974        if (i < argc)
 975                dest = argv[i++];
 976        else
 977                usage(fetch_pack_usage);
 978
 979        /*
 980         * Copy refs from cmdline to growable list, then append any
 981         * refs from the standard input:
 982         */
 983        ALLOC_GROW(heads, argc - i, alloc_heads);
 984        for (; i < argc; i++)
 985                heads[nr_heads++] = xstrdup(argv[i]);
 986        if (args.stdin_refs) {
 987                if (args.stateless_rpc) {
 988                        /* in stateless RPC mode we use pkt-line to read
 989                         * from stdin, until we get a flush packet
 990                         */
 991                        static char line[1000];
 992                        for (;;) {
 993                                int n = packet_read_line(0, line, sizeof(line));
 994                                if (!n)
 995                                        break;
 996                                if (line[n-1] == '\n')
 997                                        n--;
 998                                ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
 999                                heads[nr_heads++] = xmemdupz(line, n);
1000                        }
1001                }
1002                else {
1003                        /* read from stdin one ref per line, until EOF */
1004                        struct strbuf line = STRBUF_INIT;
1005                        while (strbuf_getline(&line, stdin, '\n') != EOF) {
1006                                ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1007                                heads[nr_heads++] = strbuf_detach(&line, NULL);
1008                        }
1009                        strbuf_release(&line);
1010                }
1011        }
1012
1013        if (args.stateless_rpc) {
1014                conn = NULL;
1015                fd[0] = 0;
1016                fd[1] = 1;
1017        } else {
1018                conn = git_connect(fd, dest, args.uploadpack,
1019                                   args.verbose ? CONNECT_VERBOSE : 0);
1020        }
1021
1022        get_remote_heads(fd[0], &ref, 0, NULL);
1023
1024        ref = fetch_pack(&args, fd, conn, ref, dest,
1025                nr_heads, heads, pack_lockfile_ptr);
1026        if (pack_lockfile) {
1027                printf("lock %s\n", pack_lockfile);
1028                fflush(stdout);
1029        }
1030        close(fd[0]);
1031        close(fd[1]);
1032        if (finish_connect(conn))
1033                ref = NULL;
1034        ret = !ref;
1035
1036        if (!ret && nr_heads) {
1037                /* If the heads to pull were given, we should have
1038                 * consumed all of them by matching the remote.
1039                 * Otherwise, 'git fetch remote no-such-ref' would
1040                 * silently succeed without issuing an error.
1041                 */
1042                for (i = 0; i < nr_heads; i++)
1043                        if (heads[i] && heads[i][0]) {
1044                                error("no such remote ref %s", heads[i]);
1045                                ret = 1;
1046                        }
1047        }
1048        while (ref) {
1049                printf("%s %s\n",
1050                       sha1_to_hex(ref->old_sha1), ref->name);
1051                ref = ref->next;
1052        }
1053
1054        return ret;
1055}
1056
1057static int compare_heads(const void *a, const void *b)
1058{
1059        return strcmp(*(const char **)a, *(const char **)b);
1060}
1061
1062struct ref *fetch_pack(struct fetch_pack_args *my_args,
1063                       int fd[], struct child_process *conn,
1064                       const struct ref *ref,
1065                const char *dest,
1066                int nr_heads,
1067                char **heads,
1068                char **pack_lockfile)
1069{
1070        struct stat st;
1071        struct ref *ref_cpy;
1072
1073        fetch_pack_setup();
1074        if (&args != my_args)
1075                memcpy(&args, my_args, sizeof(args));
1076        if (args.depth > 0) {
1077                if (stat(git_path("shallow"), &st))
1078                        st.st_mtime = 0;
1079        }
1080
1081        if (heads && nr_heads) {
1082                qsort(heads, nr_heads, sizeof(*heads), compare_heads);
1083                nr_heads = remove_duplicates(nr_heads, heads);
1084        }
1085
1086        if (!ref) {
1087                packet_flush(fd[1]);
1088                die("no matching remote head");
1089        }
1090        ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile);
1091
1092        if (args.depth > 0) {
1093                struct cache_time mtime;
1094                struct strbuf sb = STRBUF_INIT;
1095                char *shallow = git_path("shallow");
1096                int fd;
1097
1098                mtime.sec = st.st_mtime;
1099                mtime.nsec = ST_MTIME_NSEC(st);
1100                if (stat(shallow, &st)) {
1101                        if (mtime.sec)
1102                                die("shallow file was removed during fetch");
1103                } else if (st.st_mtime != mtime.sec
1104#ifdef USE_NSEC
1105                                || ST_MTIME_NSEC(st) != mtime.nsec
1106#endif
1107                          )
1108                        die("shallow file was changed during fetch");
1109
1110                fd = hold_lock_file_for_update(&lock, shallow,
1111                                               LOCK_DIE_ON_ERROR);
1112                if (!write_shallow_commits(&sb, 0)
1113                 || write_in_full(fd, sb.buf, sb.len) != sb.len) {
1114                        unlink_or_warn(shallow);
1115                        rollback_lock_file(&lock);
1116                } else {
1117                        commit_lock_file(&lock);
1118                }
1119                strbuf_release(&sb);
1120        }
1121
1122        reprepare_packed_git();
1123        return ref_cpy;
1124}