fetch-pack.con commit fetch-pack: write shallow, then check connectivity (cf1e7c0)
   1#include "cache.h"
   2#include "repository.h"
   3#include "config.h"
   4#include "lockfile.h"
   5#include "refs.h"
   6#include "pkt-line.h"
   7#include "commit.h"
   8#include "tag.h"
   9#include "exec-cmd.h"
  10#include "pack.h"
  11#include "sideband.h"
  12#include "fetch-pack.h"
  13#include "remote.h"
  14#include "run-command.h"
  15#include "connect.h"
  16#include "transport.h"
  17#include "version.h"
  18#include "prio-queue.h"
  19#include "sha1-array.h"
  20#include "oidset.h"
  21#include "packfile.h"
  22#include "connected.h"
  23
  24static int transfer_unpack_limit = -1;
  25static int fetch_unpack_limit = -1;
  26static int unpack_limit = 100;
  27static int prefer_ofs_delta = 1;
  28static int no_done;
  29static int deepen_since_ok;
  30static int deepen_not_ok;
  31static int fetch_fsck_objects = -1;
  32static int transfer_fsck_objects = -1;
  33static int agent_supported;
  34static int server_supports_filtering;
  35static struct lock_file shallow_lock;
  36static const char *alternate_shallow_file;
  37
  38/* Remember to update object flag allocation in object.h */
  39#define COMPLETE        (1U << 0)
  40#define COMMON          (1U << 1)
  41#define COMMON_REF      (1U << 2)
  42#define SEEN            (1U << 3)
  43#define POPPED          (1U << 4)
  44#define ALTERNATE       (1U << 5)
  45
  46static int marked;
  47
  48/*
  49 * After sending this many "have"s if we do not get any new ACK , we
  50 * give up traversing our history.
  51 */
  52#define MAX_IN_VAIN 256
  53
  54static struct prio_queue rev_list = { compare_commits_by_commit_date };
  55static int non_common_revs, multi_ack, use_sideband;
  56/* Allow specifying sha1 if it is a ref tip. */
  57#define ALLOW_TIP_SHA1  01
  58/* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
  59#define ALLOW_REACHABLE_SHA1    02
  60static unsigned int allow_unadvertised_object_request;
  61
  62__attribute__((format (printf, 2, 3)))
  63static inline void print_verbose(const struct fetch_pack_args *args,
  64                                 const char *fmt, ...)
  65{
  66        va_list params;
  67
  68        if (!args->verbose)
  69                return;
  70
  71        va_start(params, fmt);
  72        vfprintf(stderr, fmt, params);
  73        va_end(params);
  74        fputc('\n', stderr);
  75}
  76
  77struct alternate_object_cache {
  78        struct object **items;
  79        size_t nr, alloc;
  80};
  81
  82static void cache_one_alternate(const char *refname,
  83                                const struct object_id *oid,
  84                                void *vcache)
  85{
  86        struct alternate_object_cache *cache = vcache;
  87        struct object *obj = parse_object(oid);
  88
  89        if (!obj || (obj->flags & ALTERNATE))
  90                return;
  91
  92        obj->flags |= ALTERNATE;
  93        ALLOC_GROW(cache->items, cache->nr + 1, cache->alloc);
  94        cache->items[cache->nr++] = obj;
  95}
  96
  97static void for_each_cached_alternate(void (*cb)(struct object *))
  98{
  99        static int initialized;
 100        static struct alternate_object_cache cache;
 101        size_t i;
 102
 103        if (!initialized) {
 104                for_each_alternate_ref(cache_one_alternate, &cache);
 105                initialized = 1;
 106        }
 107
 108        for (i = 0; i < cache.nr; i++)
 109                cb(cache.items[i]);
 110}
 111
 112static void rev_list_push(struct commit *commit, int mark)
 113{
 114        if (!(commit->object.flags & mark)) {
 115                commit->object.flags |= mark;
 116
 117                if (parse_commit(commit))
 118                        return;
 119
 120                prio_queue_put(&rev_list, commit);
 121
 122                if (!(commit->object.flags & COMMON))
 123                        non_common_revs++;
 124        }
 125}
 126
 127static int rev_list_insert_ref(const char *refname, const struct object_id *oid)
 128{
 129        struct object *o = deref_tag(parse_object(oid), refname, 0);
 130
 131        if (o && o->type == OBJ_COMMIT)
 132                rev_list_push((struct commit *)o, SEEN);
 133
 134        return 0;
 135}
 136
 137static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,
 138                                   int flag, void *cb_data)
 139{
 140        return rev_list_insert_ref(refname, oid);
 141}
 142
 143static int clear_marks(const char *refname, const struct object_id *oid,
 144                       int flag, void *cb_data)
 145{
 146        struct object *o = deref_tag(parse_object(oid), refname, 0);
 147
 148        if (o && o->type == OBJ_COMMIT)
 149                clear_commit_marks((struct commit *)o,
 150                                   COMMON | COMMON_REF | SEEN | POPPED);
 151        return 0;
 152}
 153
 154/*
 155   This function marks a rev and its ancestors as common.
 156   In some cases, it is desirable to mark only the ancestors (for example
 157   when only the server does not yet know that they are common).
 158*/
 159
 160static void mark_common(struct commit *commit,
 161                int ancestors_only, int dont_parse)
 162{
 163        if (commit != NULL && !(commit->object.flags & COMMON)) {
 164                struct object *o = (struct object *)commit;
 165
 166                if (!ancestors_only)
 167                        o->flags |= COMMON;
 168
 169                if (!(o->flags & SEEN))
 170                        rev_list_push(commit, SEEN);
 171                else {
 172                        struct commit_list *parents;
 173
 174                        if (!ancestors_only && !(o->flags & POPPED))
 175                                non_common_revs--;
 176                        if (!o->parsed && !dont_parse)
 177                                if (parse_commit(commit))
 178                                        return;
 179
 180                        for (parents = commit->parents;
 181                                        parents;
 182                                        parents = parents->next)
 183                                mark_common(parents->item, 0, dont_parse);
 184                }
 185        }
 186}
 187
 188/*
 189  Get the next rev to send, ignoring the common.
 190*/
 191
 192static const struct object_id *get_rev(void)
 193{
 194        struct commit *commit = NULL;
 195
 196        while (commit == NULL) {
 197                unsigned int mark;
 198                struct commit_list *parents;
 199
 200                if (rev_list.nr == 0 || non_common_revs == 0)
 201                        return NULL;
 202
 203                commit = prio_queue_get(&rev_list);
 204                parse_commit(commit);
 205                parents = commit->parents;
 206
 207                commit->object.flags |= POPPED;
 208                if (!(commit->object.flags & COMMON))
 209                        non_common_revs--;
 210
 211                if (commit->object.flags & COMMON) {
 212                        /* do not send "have", and ignore ancestors */
 213                        commit = NULL;
 214                        mark = COMMON | SEEN;
 215                } else if (commit->object.flags & COMMON_REF)
 216                        /* send "have", and ignore ancestors */
 217                        mark = COMMON | SEEN;
 218                else
 219                        /* send "have", also for its ancestors */
 220                        mark = SEEN;
 221
 222                while (parents) {
 223                        if (!(parents->item->object.flags & SEEN))
 224                                rev_list_push(parents->item, mark);
 225                        if (mark & COMMON)
 226                                mark_common(parents->item, 1, 0);
 227                        parents = parents->next;
 228                }
 229        }
 230
 231        return &commit->object.oid;
 232}
 233
 234enum ack_type {
 235        NAK = 0,
 236        ACK,
 237        ACK_continue,
 238        ACK_common,
 239        ACK_ready
 240};
 241
 242static void consume_shallow_list(struct fetch_pack_args *args, int fd)
 243{
 244        if (args->stateless_rpc && args->deepen) {
 245                /* If we sent a depth we will get back "duplicate"
 246                 * shallow and unshallow commands every time there
 247                 * is a block of have lines exchanged.
 248                 */
 249                char *line;
 250                while ((line = packet_read_line(fd, NULL))) {
 251                        if (starts_with(line, "shallow "))
 252                                continue;
 253                        if (starts_with(line, "unshallow "))
 254                                continue;
 255                        die(_("git fetch-pack: expected shallow list"));
 256                }
 257        }
 258}
 259
 260static enum ack_type get_ack(int fd, struct object_id *result_oid)
 261{
 262        int len;
 263        char *line = packet_read_line(fd, &len);
 264        const char *arg;
 265
 266        if (!line)
 267                die(_("git fetch-pack: expected ACK/NAK, got a flush packet"));
 268        if (!strcmp(line, "NAK"))
 269                return NAK;
 270        if (skip_prefix(line, "ACK ", &arg)) {
 271                if (!get_oid_hex(arg, result_oid)) {
 272                        arg += 40;
 273                        len -= arg - line;
 274                        if (len < 1)
 275                                return ACK;
 276                        if (strstr(arg, "continue"))
 277                                return ACK_continue;
 278                        if (strstr(arg, "common"))
 279                                return ACK_common;
 280                        if (strstr(arg, "ready"))
 281                                return ACK_ready;
 282                        return ACK;
 283                }
 284        }
 285        if (skip_prefix(line, "ERR ", &arg))
 286                die(_("remote error: %s"), arg);
 287        die(_("git fetch-pack: expected ACK/NAK, got '%s'"), line);
 288}
 289
 290static void send_request(struct fetch_pack_args *args,
 291                         int fd, struct strbuf *buf)
 292{
 293        if (args->stateless_rpc) {
 294                send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
 295                packet_flush(fd);
 296        } else
 297                write_or_die(fd, buf->buf, buf->len);
 298}
 299
 300static void insert_one_alternate_object(struct object *obj)
 301{
 302        rev_list_insert_ref(NULL, &obj->oid);
 303}
 304
 305#define INITIAL_FLUSH 16
 306#define PIPESAFE_FLUSH 32
 307#define LARGE_FLUSH 16384
 308
 309static int next_flush(int stateless_rpc, int count)
 310{
 311        if (stateless_rpc) {
 312                if (count < LARGE_FLUSH)
 313                        count <<= 1;
 314                else
 315                        count = count * 11 / 10;
 316        } else {
 317                if (count < PIPESAFE_FLUSH)
 318                        count <<= 1;
 319                else
 320                        count += PIPESAFE_FLUSH;
 321        }
 322        return count;
 323}
 324
 325static int find_common(struct fetch_pack_args *args,
 326                       int fd[2], struct object_id *result_oid,
 327                       struct ref *refs)
 328{
 329        int fetching;
 330        int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
 331        const struct object_id *oid;
 332        unsigned in_vain = 0;
 333        int got_continue = 0;
 334        int got_ready = 0;
 335        struct strbuf req_buf = STRBUF_INIT;
 336        size_t state_len = 0;
 337
 338        if (args->stateless_rpc && multi_ack == 1)
 339                die(_("--stateless-rpc requires multi_ack_detailed"));
 340        if (marked)
 341                for_each_ref(clear_marks, NULL);
 342        marked = 1;
 343
 344        for_each_ref(rev_list_insert_ref_oid, NULL);
 345        for_each_cached_alternate(insert_one_alternate_object);
 346
 347        fetching = 0;
 348        for ( ; refs ; refs = refs->next) {
 349                struct object_id *remote = &refs->old_oid;
 350                const char *remote_hex;
 351                struct object *o;
 352
 353                /*
 354                 * If that object is complete (i.e. it is an ancestor of a
 355                 * local ref), we tell them we have it but do not have to
 356                 * tell them about its ancestors, which they already know
 357                 * about.
 358                 *
 359                 * We use lookup_object here because we are only
 360                 * interested in the case we *know* the object is
 361                 * reachable and we have already scanned it.
 362                 */
 363                if (((o = lookup_object(remote->hash)) != NULL) &&
 364                                (o->flags & COMPLETE)) {
 365                        continue;
 366                }
 367
 368                remote_hex = oid_to_hex(remote);
 369                if (!fetching) {
 370                        struct strbuf c = STRBUF_INIT;
 371                        if (multi_ack == 2)     strbuf_addstr(&c, " multi_ack_detailed");
 372                        if (multi_ack == 1)     strbuf_addstr(&c, " multi_ack");
 373                        if (no_done)            strbuf_addstr(&c, " no-done");
 374                        if (use_sideband == 2)  strbuf_addstr(&c, " side-band-64k");
 375                        if (use_sideband == 1)  strbuf_addstr(&c, " side-band");
 376                        if (args->deepen_relative) strbuf_addstr(&c, " deepen-relative");
 377                        if (args->use_thin_pack) strbuf_addstr(&c, " thin-pack");
 378                        if (args->no_progress)   strbuf_addstr(&c, " no-progress");
 379                        if (args->include_tag)   strbuf_addstr(&c, " include-tag");
 380                        if (prefer_ofs_delta)   strbuf_addstr(&c, " ofs-delta");
 381                        if (deepen_since_ok)    strbuf_addstr(&c, " deepen-since");
 382                        if (deepen_not_ok)      strbuf_addstr(&c, " deepen-not");
 383                        if (agent_supported)    strbuf_addf(&c, " agent=%s",
 384                                                            git_user_agent_sanitized());
 385                        if (args->filter_options.choice)
 386                                strbuf_addstr(&c, " filter");
 387                        packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
 388                        strbuf_release(&c);
 389                } else
 390                        packet_buf_write(&req_buf, "want %s\n", remote_hex);
 391                fetching++;
 392        }
 393
 394        if (!fetching) {
 395                strbuf_release(&req_buf);
 396                packet_flush(fd[1]);
 397                return 1;
 398        }
 399
 400        if (is_repository_shallow())
 401                write_shallow_commits(&req_buf, 1, NULL);
 402        if (args->depth > 0)
 403                packet_buf_write(&req_buf, "deepen %d", args->depth);
 404        if (args->deepen_since) {
 405                timestamp_t max_age = approxidate(args->deepen_since);
 406                packet_buf_write(&req_buf, "deepen-since %"PRItime, max_age);
 407        }
 408        if (args->deepen_not) {
 409                int i;
 410                for (i = 0; i < args->deepen_not->nr; i++) {
 411                        struct string_list_item *s = args->deepen_not->items + i;
 412                        packet_buf_write(&req_buf, "deepen-not %s", s->string);
 413                }
 414        }
 415        if (server_supports_filtering && args->filter_options.choice)
 416                packet_buf_write(&req_buf, "filter %s",
 417                                 args->filter_options.filter_spec);
 418        packet_buf_flush(&req_buf);
 419        state_len = req_buf.len;
 420
 421        if (args->deepen) {
 422                char *line;
 423                const char *arg;
 424                struct object_id oid;
 425
 426                send_request(args, fd[1], &req_buf);
 427                while ((line = packet_read_line(fd[0], NULL))) {
 428                        if (skip_prefix(line, "shallow ", &arg)) {
 429                                if (get_oid_hex(arg, &oid))
 430                                        die(_("invalid shallow line: %s"), line);
 431                                register_shallow(&oid);
 432                                continue;
 433                        }
 434                        if (skip_prefix(line, "unshallow ", &arg)) {
 435                                if (get_oid_hex(arg, &oid))
 436                                        die(_("invalid unshallow line: %s"), line);
 437                                if (!lookup_object(oid.hash))
 438                                        die(_("object not found: %s"), line);
 439                                /* make sure that it is parsed as shallow */
 440                                if (!parse_object(&oid))
 441                                        die(_("error in object: %s"), line);
 442                                if (unregister_shallow(&oid))
 443                                        die(_("no shallow found: %s"), line);
 444                                continue;
 445                        }
 446                        die(_("expected shallow/unshallow, got %s"), line);
 447                }
 448        } else if (!args->stateless_rpc)
 449                send_request(args, fd[1], &req_buf);
 450
 451        if (!args->stateless_rpc) {
 452                /* If we aren't using the stateless-rpc interface
 453                 * we don't need to retain the headers.
 454                 */
 455                strbuf_setlen(&req_buf, 0);
 456                state_len = 0;
 457        }
 458
 459        flushes = 0;
 460        retval = -1;
 461        if (args->no_dependents)
 462                goto done;
 463        while ((oid = get_rev())) {
 464                packet_buf_write(&req_buf, "have %s\n", oid_to_hex(oid));
 465                print_verbose(args, "have %s", oid_to_hex(oid));
 466                in_vain++;
 467                if (flush_at <= ++count) {
 468                        int ack;
 469
 470                        packet_buf_flush(&req_buf);
 471                        send_request(args, fd[1], &req_buf);
 472                        strbuf_setlen(&req_buf, state_len);
 473                        flushes++;
 474                        flush_at = next_flush(args->stateless_rpc, count);
 475
 476                        /*
 477                         * We keep one window "ahead" of the other side, and
 478                         * will wait for an ACK only on the next one
 479                         */
 480                        if (!args->stateless_rpc && count == INITIAL_FLUSH)
 481                                continue;
 482
 483                        consume_shallow_list(args, fd[0]);
 484                        do {
 485                                ack = get_ack(fd[0], result_oid);
 486                                if (ack)
 487                                        print_verbose(args, _("got %s %d %s"), "ack",
 488                                                      ack, oid_to_hex(result_oid));
 489                                switch (ack) {
 490                                case ACK:
 491                                        flushes = 0;
 492                                        multi_ack = 0;
 493                                        retval = 0;
 494                                        goto done;
 495                                case ACK_common:
 496                                case ACK_ready:
 497                                case ACK_continue: {
 498                                        struct commit *commit =
 499                                                lookup_commit(result_oid);
 500                                        if (!commit)
 501                                                die(_("invalid commit %s"), oid_to_hex(result_oid));
 502                                        if (args->stateless_rpc
 503                                         && ack == ACK_common
 504                                         && !(commit->object.flags & COMMON)) {
 505                                                /* We need to replay the have for this object
 506                                                 * on the next RPC request so the peer knows
 507                                                 * it is in common with us.
 508                                                 */
 509                                                const char *hex = oid_to_hex(result_oid);
 510                                                packet_buf_write(&req_buf, "have %s\n", hex);
 511                                                state_len = req_buf.len;
 512                                                /*
 513                                                 * Reset in_vain because an ack
 514                                                 * for this commit has not been
 515                                                 * seen.
 516                                                 */
 517                                                in_vain = 0;
 518                                        } else if (!args->stateless_rpc
 519                                                   || ack != ACK_common)
 520                                                in_vain = 0;
 521                                        mark_common(commit, 0, 1);
 522                                        retval = 0;
 523                                        got_continue = 1;
 524                                        if (ack == ACK_ready) {
 525                                                clear_prio_queue(&rev_list);
 526                                                got_ready = 1;
 527                                        }
 528                                        break;
 529                                        }
 530                                }
 531                        } while (ack);
 532                        flushes--;
 533                        if (got_continue && MAX_IN_VAIN < in_vain) {
 534                                print_verbose(args, _("giving up"));
 535                                break; /* give up */
 536                        }
 537                }
 538        }
 539done:
 540        if (!got_ready || !no_done) {
 541                packet_buf_write(&req_buf, "done\n");
 542                send_request(args, fd[1], &req_buf);
 543        }
 544        print_verbose(args, _("done"));
 545        if (retval != 0) {
 546                multi_ack = 0;
 547                flushes++;
 548        }
 549        strbuf_release(&req_buf);
 550
 551        if (!got_ready || !no_done)
 552                consume_shallow_list(args, fd[0]);
 553        while (flushes || multi_ack) {
 554                int ack = get_ack(fd[0], result_oid);
 555                if (ack) {
 556                        print_verbose(args, _("got %s (%d) %s"), "ack",
 557                                      ack, oid_to_hex(result_oid));
 558                        if (ack == ACK)
 559                                return 0;
 560                        multi_ack = 1;
 561                        continue;
 562                }
 563                flushes--;
 564        }
 565        /* it is no error to fetch into a completely empty repo */
 566        return count ? retval : 0;
 567}
 568
 569static struct commit_list *complete;
 570
 571static int mark_complete(const struct object_id *oid)
 572{
 573        struct object *o = parse_object(oid);
 574
 575        while (o && o->type == OBJ_TAG) {
 576                struct tag *t = (struct tag *) o;
 577                if (!t->tagged)
 578                        break; /* broken repository */
 579                o->flags |= COMPLETE;
 580                o = parse_object(&t->tagged->oid);
 581        }
 582        if (o && o->type == OBJ_COMMIT) {
 583                struct commit *commit = (struct commit *)o;
 584                if (!(commit->object.flags & COMPLETE)) {
 585                        commit->object.flags |= COMPLETE;
 586                        commit_list_insert(commit, &complete);
 587                }
 588        }
 589        return 0;
 590}
 591
 592static int mark_complete_oid(const char *refname, const struct object_id *oid,
 593                             int flag, void *cb_data)
 594{
 595        return mark_complete(oid);
 596}
 597
 598static void mark_recent_complete_commits(struct fetch_pack_args *args,
 599                                         timestamp_t cutoff)
 600{
 601        while (complete && cutoff <= complete->item->date) {
 602                print_verbose(args, _("Marking %s as complete"),
 603                              oid_to_hex(&complete->item->object.oid));
 604                pop_most_recent_commit(&complete, COMPLETE);
 605        }
 606}
 607
 608static void add_refs_to_oidset(struct oidset *oids, struct ref *refs)
 609{
 610        for (; refs; refs = refs->next)
 611                oidset_insert(oids, &refs->old_oid);
 612}
 613
 614static int tip_oids_contain(struct oidset *tip_oids,
 615                            struct ref *unmatched, struct ref *newlist,
 616                            const struct object_id *id)
 617{
 618        /*
 619         * Note that this only looks at the ref lists the first time it's
 620         * called. This works out in filter_refs() because even though it may
 621         * add to "newlist" between calls, the additions will always be for
 622         * oids that are already in the set.
 623         */
 624        if (!tip_oids->map.map.tablesize) {
 625                add_refs_to_oidset(tip_oids, unmatched);
 626                add_refs_to_oidset(tip_oids, newlist);
 627        }
 628        return oidset_contains(tip_oids, id);
 629}
 630
 631static void filter_refs(struct fetch_pack_args *args,
 632                        struct ref **refs,
 633                        struct ref **sought, int nr_sought)
 634{
 635        struct ref *newlist = NULL;
 636        struct ref **newtail = &newlist;
 637        struct ref *unmatched = NULL;
 638        struct ref *ref, *next;
 639        struct oidset tip_oids = OIDSET_INIT;
 640        int i;
 641
 642        i = 0;
 643        for (ref = *refs; ref; ref = next) {
 644                int keep = 0;
 645                next = ref->next;
 646
 647                if (starts_with(ref->name, "refs/") &&
 648                    check_refname_format(ref->name, 0))
 649                        ; /* trash */
 650                else {
 651                        while (i < nr_sought) {
 652                                int cmp = strcmp(ref->name, sought[i]->name);
 653                                if (cmp < 0)
 654                                        break; /* definitely do not have it */
 655                                else if (cmp == 0) {
 656                                        keep = 1; /* definitely have it */
 657                                        sought[i]->match_status = REF_MATCHED;
 658                                }
 659                                i++;
 660                        }
 661                }
 662
 663                if (!keep && args->fetch_all &&
 664                    (!args->deepen || !starts_with(ref->name, "refs/tags/")))
 665                        keep = 1;
 666
 667                if (keep) {
 668                        *newtail = ref;
 669                        ref->next = NULL;
 670                        newtail = &ref->next;
 671                } else {
 672                        ref->next = unmatched;
 673                        unmatched = ref;
 674                }
 675        }
 676
 677        /* Append unmatched requests to the list */
 678        for (i = 0; i < nr_sought; i++) {
 679                struct object_id oid;
 680                const char *p;
 681
 682                ref = sought[i];
 683                if (ref->match_status != REF_NOT_MATCHED)
 684                        continue;
 685                if (parse_oid_hex(ref->name, &oid, &p) ||
 686                    *p != '\0' ||
 687                    oidcmp(&oid, &ref->old_oid))
 688                        continue;
 689
 690                if ((allow_unadvertised_object_request &
 691                     (ALLOW_TIP_SHA1 | ALLOW_REACHABLE_SHA1)) ||
 692                    tip_oids_contain(&tip_oids, unmatched, newlist,
 693                                     &ref->old_oid)) {
 694                        ref->match_status = REF_MATCHED;
 695                        *newtail = copy_ref(ref);
 696                        newtail = &(*newtail)->next;
 697                } else {
 698                        ref->match_status = REF_UNADVERTISED_NOT_ALLOWED;
 699                }
 700        }
 701
 702        oidset_clear(&tip_oids);
 703        for (ref = unmatched; ref; ref = next) {
 704                next = ref->next;
 705                free(ref);
 706        }
 707
 708        *refs = newlist;
 709}
 710
 711static void mark_alternate_complete(struct object *obj)
 712{
 713        mark_complete(&obj->oid);
 714}
 715
 716struct loose_object_iter {
 717        struct oidset *loose_object_set;
 718        struct ref *refs;
 719};
 720
 721/*
 722 *  If the number of refs is not larger than the number of loose objects,
 723 *  this function stops inserting.
 724 */
 725static int add_loose_objects_to_set(const struct object_id *oid,
 726                                    const char *path,
 727                                    void *data)
 728{
 729        struct loose_object_iter *iter = data;
 730        oidset_insert(iter->loose_object_set, oid);
 731        if (iter->refs == NULL)
 732                return 1;
 733
 734        iter->refs = iter->refs->next;
 735        return 0;
 736}
 737
 738static int everything_local(struct fetch_pack_args *args,
 739                            struct ref **refs,
 740                            struct ref **sought, int nr_sought)
 741{
 742        struct ref *ref;
 743        int retval;
 744        int old_save_commit_buffer = save_commit_buffer;
 745        timestamp_t cutoff = 0;
 746        struct oidset loose_oid_set = OIDSET_INIT;
 747        int use_oidset = 0;
 748        struct loose_object_iter iter = {&loose_oid_set, *refs};
 749
 750        /* Enumerate all loose objects or know refs are not so many. */
 751        use_oidset = !for_each_loose_object(add_loose_objects_to_set,
 752                                            &iter, 0);
 753
 754        save_commit_buffer = 0;
 755
 756        for (ref = *refs; ref; ref = ref->next) {
 757                struct object *o;
 758                unsigned int flags = OBJECT_INFO_QUICK;
 759
 760                if (use_oidset &&
 761                    !oidset_contains(&loose_oid_set, &ref->old_oid)) {
 762                        /*
 763                         * I know this does not exist in the loose form,
 764                         * so check if it exists in a non-loose form.
 765                         */
 766                        flags |= OBJECT_INFO_IGNORE_LOOSE;
 767                }
 768
 769                if (!has_object_file_with_flags(&ref->old_oid, flags))
 770                        continue;
 771                o = parse_object(&ref->old_oid);
 772                if (!o)
 773                        continue;
 774
 775                /* We already have it -- which may mean that we were
 776                 * in sync with the other side at some time after
 777                 * that (it is OK if we guess wrong here).
 778                 */
 779                if (o->type == OBJ_COMMIT) {
 780                        struct commit *commit = (struct commit *)o;
 781                        if (!cutoff || cutoff < commit->date)
 782                                cutoff = commit->date;
 783                }
 784        }
 785
 786        oidset_clear(&loose_oid_set);
 787
 788        if (!args->no_dependents) {
 789                if (!args->deepen) {
 790                        for_each_ref(mark_complete_oid, NULL);
 791                        for_each_cached_alternate(mark_alternate_complete);
 792                        commit_list_sort_by_date(&complete);
 793                        if (cutoff)
 794                                mark_recent_complete_commits(args, cutoff);
 795                }
 796
 797                /*
 798                 * Mark all complete remote refs as common refs.
 799                 * Don't mark them common yet; the server has to be told so first.
 800                 */
 801                for (ref = *refs; ref; ref = ref->next) {
 802                        struct object *o = deref_tag(lookup_object(ref->old_oid.hash),
 803                                                     NULL, 0);
 804
 805                        if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
 806                                continue;
 807
 808                        if (!(o->flags & SEEN)) {
 809                                rev_list_push((struct commit *)o, COMMON_REF | SEEN);
 810
 811                                mark_common((struct commit *)o, 1, 1);
 812                        }
 813                }
 814        }
 815
 816        filter_refs(args, refs, sought, nr_sought);
 817
 818        for (retval = 1, ref = *refs; ref ; ref = ref->next) {
 819                const struct object_id *remote = &ref->old_oid;
 820                struct object *o;
 821
 822                o = lookup_object(remote->hash);
 823                if (!o || !(o->flags & COMPLETE)) {
 824                        retval = 0;
 825                        print_verbose(args, "want %s (%s)", oid_to_hex(remote),
 826                                      ref->name);
 827                        continue;
 828                }
 829                print_verbose(args, _("already have %s (%s)"), oid_to_hex(remote),
 830                              ref->name);
 831        }
 832
 833        save_commit_buffer = old_save_commit_buffer;
 834
 835        return retval;
 836}
 837
 838static int sideband_demux(int in, int out, void *data)
 839{
 840        int *xd = data;
 841        int ret;
 842
 843        ret = recv_sideband("fetch-pack", xd[0], out);
 844        close(out);
 845        return ret;
 846}
 847
 848static int get_pack(struct fetch_pack_args *args,
 849                    int xd[2], char **pack_lockfile)
 850{
 851        struct async demux;
 852        int do_keep = args->keep_pack;
 853        const char *cmd_name;
 854        struct pack_header header;
 855        int pass_header = 0;
 856        struct child_process cmd = CHILD_PROCESS_INIT;
 857        int ret;
 858
 859        memset(&demux, 0, sizeof(demux));
 860        if (use_sideband) {
 861                /* xd[] is talking with upload-pack; subprocess reads from
 862                 * xd[0], spits out band#2 to stderr, and feeds us band#1
 863                 * through demux->out.
 864                 */
 865                demux.proc = sideband_demux;
 866                demux.data = xd;
 867                demux.out = -1;
 868                demux.isolate_sigpipe = 1;
 869                if (start_async(&demux))
 870                        die(_("fetch-pack: unable to fork off sideband demultiplexer"));
 871        }
 872        else
 873                demux.out = xd[0];
 874
 875        if (!args->keep_pack && unpack_limit) {
 876
 877                if (read_pack_header(demux.out, &header))
 878                        die(_("protocol error: bad pack header"));
 879                pass_header = 1;
 880                if (ntohl(header.hdr_entries) < unpack_limit)
 881                        do_keep = 0;
 882                else
 883                        do_keep = 1;
 884        }
 885
 886        if (alternate_shallow_file) {
 887                argv_array_push(&cmd.args, "--shallow-file");
 888                argv_array_push(&cmd.args, alternate_shallow_file);
 889        }
 890
 891        if (do_keep || args->from_promisor) {
 892                if (pack_lockfile)
 893                        cmd.out = -1;
 894                cmd_name = "index-pack";
 895                argv_array_push(&cmd.args, cmd_name);
 896                argv_array_push(&cmd.args, "--stdin");
 897                if (!args->quiet && !args->no_progress)
 898                        argv_array_push(&cmd.args, "-v");
 899                if (args->use_thin_pack)
 900                        argv_array_push(&cmd.args, "--fix-thin");
 901                if (do_keep && (args->lock_pack || unpack_limit)) {
 902                        char hostname[HOST_NAME_MAX + 1];
 903                        if (xgethostname(hostname, sizeof(hostname)))
 904                                xsnprintf(hostname, sizeof(hostname), "localhost");
 905                        argv_array_pushf(&cmd.args,
 906                                        "--keep=fetch-pack %"PRIuMAX " on %s",
 907                                        (uintmax_t)getpid(), hostname);
 908                }
 909                if (args->check_self_contained_and_connected)
 910                        argv_array_push(&cmd.args, "--check-self-contained-and-connected");
 911                if (args->from_promisor)
 912                        argv_array_push(&cmd.args, "--promisor");
 913        }
 914        else {
 915                cmd_name = "unpack-objects";
 916                argv_array_push(&cmd.args, cmd_name);
 917                if (args->quiet || args->no_progress)
 918                        argv_array_push(&cmd.args, "-q");
 919                args->check_self_contained_and_connected = 0;
 920        }
 921
 922        if (pass_header)
 923                argv_array_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
 924                                 ntohl(header.hdr_version),
 925                                 ntohl(header.hdr_entries));
 926        if (fetch_fsck_objects >= 0
 927            ? fetch_fsck_objects
 928            : transfer_fsck_objects >= 0
 929            ? transfer_fsck_objects
 930            : 0) {
 931                if (args->from_promisor)
 932                        /*
 933                         * We cannot use --strict in index-pack because it
 934                         * checks both broken objects and links, but we only
 935                         * want to check for broken objects.
 936                         */
 937                        argv_array_push(&cmd.args, "--fsck-objects");
 938                else
 939                        argv_array_push(&cmd.args, "--strict");
 940        }
 941
 942        cmd.in = demux.out;
 943        cmd.git_cmd = 1;
 944        if (start_command(&cmd))
 945                die(_("fetch-pack: unable to fork off %s"), cmd_name);
 946        if (do_keep && pack_lockfile) {
 947                *pack_lockfile = index_pack_lockfile(cmd.out);
 948                close(cmd.out);
 949        }
 950
 951        if (!use_sideband)
 952                /* Closed by start_command() */
 953                xd[0] = -1;
 954
 955        ret = finish_command(&cmd);
 956        if (!ret || (args->check_self_contained_and_connected && ret == 1))
 957                args->self_contained_and_connected =
 958                        args->check_self_contained_and_connected &&
 959                        ret == 0;
 960        else
 961                die(_("%s failed"), cmd_name);
 962        if (use_sideband && finish_async(&demux))
 963                die(_("error in sideband demultiplexer"));
 964        return 0;
 965}
 966
 967static int cmp_ref_by_name(const void *a_, const void *b_)
 968{
 969        const struct ref *a = *((const struct ref **)a_);
 970        const struct ref *b = *((const struct ref **)b_);
 971        return strcmp(a->name, b->name);
 972}
 973
 974static struct ref *do_fetch_pack(struct fetch_pack_args *args,
 975                                 int fd[2],
 976                                 const struct ref *orig_ref,
 977                                 struct ref **sought, int nr_sought,
 978                                 struct shallow_info *si,
 979                                 char **pack_lockfile)
 980{
 981        struct ref *ref = copy_ref_list(orig_ref);
 982        struct object_id oid;
 983        const char *agent_feature;
 984        int agent_len;
 985
 986        sort_ref_list(&ref, ref_compare_name);
 987        QSORT(sought, nr_sought, cmp_ref_by_name);
 988
 989        if ((args->depth > 0 || is_repository_shallow()) && !server_supports("shallow"))
 990                die(_("Server does not support shallow clients"));
 991        if (args->depth > 0 || args->deepen_since || args->deepen_not)
 992                args->deepen = 1;
 993        if (server_supports("multi_ack_detailed")) {
 994                print_verbose(args, _("Server supports multi_ack_detailed"));
 995                multi_ack = 2;
 996                if (server_supports("no-done")) {
 997                        print_verbose(args, _("Server supports no-done"));
 998                        if (args->stateless_rpc)
 999                                no_done = 1;
1000                }
1001        }
1002        else if (server_supports("multi_ack")) {
1003                print_verbose(args, _("Server supports multi_ack"));
1004                multi_ack = 1;
1005        }
1006        if (server_supports("side-band-64k")) {
1007                print_verbose(args, _("Server supports side-band-64k"));
1008                use_sideband = 2;
1009        }
1010        else if (server_supports("side-band")) {
1011                print_verbose(args, _("Server supports side-band"));
1012                use_sideband = 1;
1013        }
1014        if (server_supports("allow-tip-sha1-in-want")) {
1015                print_verbose(args, _("Server supports allow-tip-sha1-in-want"));
1016                allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
1017        }
1018        if (server_supports("allow-reachable-sha1-in-want")) {
1019                print_verbose(args, _("Server supports allow-reachable-sha1-in-want"));
1020                allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
1021        }
1022        if (!server_supports("thin-pack"))
1023                args->use_thin_pack = 0;
1024        if (!server_supports("no-progress"))
1025                args->no_progress = 0;
1026        if (!server_supports("include-tag"))
1027                args->include_tag = 0;
1028        if (server_supports("ofs-delta"))
1029                print_verbose(args, _("Server supports ofs-delta"));
1030        else
1031                prefer_ofs_delta = 0;
1032
1033        if (server_supports("filter")) {
1034                server_supports_filtering = 1;
1035                print_verbose(args, _("Server supports filter"));
1036        } else if (args->filter_options.choice) {
1037                warning("filtering not recognized by server, ignoring");
1038        }
1039
1040        if ((agent_feature = server_feature_value("agent", &agent_len))) {
1041                agent_supported = 1;
1042                if (agent_len)
1043                        print_verbose(args, _("Server version is %.*s"),
1044                                      agent_len, agent_feature);
1045        }
1046        if (server_supports("deepen-since"))
1047                deepen_since_ok = 1;
1048        else if (args->deepen_since)
1049                die(_("Server does not support --shallow-since"));
1050        if (server_supports("deepen-not"))
1051                deepen_not_ok = 1;
1052        else if (args->deepen_not)
1053                die(_("Server does not support --shallow-exclude"));
1054        if (!server_supports("deepen-relative") && args->deepen_relative)
1055                die(_("Server does not support --deepen"));
1056
1057        if (everything_local(args, &ref, sought, nr_sought)) {
1058                packet_flush(fd[1]);
1059                goto all_done;
1060        }
1061        if (find_common(args, fd, &oid, ref) < 0)
1062                if (!args->keep_pack)
1063                        /* When cloning, it is not unusual to have
1064                         * no common commit.
1065                         */
1066                        warning(_("no common commits"));
1067
1068        if (args->stateless_rpc)
1069                packet_flush(fd[1]);
1070        if (args->deepen)
1071                setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
1072                                        NULL);
1073        else if (si->nr_ours || si->nr_theirs)
1074                alternate_shallow_file = setup_temporary_shallow(si->shallow);
1075        else
1076                alternate_shallow_file = NULL;
1077        if (get_pack(args, fd, pack_lockfile))
1078                die(_("git fetch-pack: fetch failed."));
1079
1080 all_done:
1081        return ref;
1082}
1083
1084static void add_shallow_requests(struct strbuf *req_buf,
1085                                 const struct fetch_pack_args *args)
1086{
1087        if (is_repository_shallow())
1088                write_shallow_commits(req_buf, 1, NULL);
1089        if (args->depth > 0)
1090                packet_buf_write(req_buf, "deepen %d", args->depth);
1091        if (args->deepen_since) {
1092                timestamp_t max_age = approxidate(args->deepen_since);
1093                packet_buf_write(req_buf, "deepen-since %"PRItime, max_age);
1094        }
1095        if (args->deepen_not) {
1096                int i;
1097                for (i = 0; i < args->deepen_not->nr; i++) {
1098                        struct string_list_item *s = args->deepen_not->items + i;
1099                        packet_buf_write(req_buf, "deepen-not %s", s->string);
1100                }
1101        }
1102}
1103
1104static void add_wants(const struct ref *wants, struct strbuf *req_buf)
1105{
1106        int use_ref_in_want = server_supports_feature("fetch", "ref-in-want", 0);
1107
1108        for ( ; wants ; wants = wants->next) {
1109                const struct object_id *remote = &wants->old_oid;
1110                struct object *o;
1111
1112                /*
1113                 * If that object is complete (i.e. it is an ancestor of a
1114                 * local ref), we tell them we have it but do not have to
1115                 * tell them about its ancestors, which they already know
1116                 * about.
1117                 *
1118                 * We use lookup_object here because we are only
1119                 * interested in the case we *know* the object is
1120                 * reachable and we have already scanned it.
1121                 */
1122                if (((o = lookup_object(remote->hash)) != NULL) &&
1123                    (o->flags & COMPLETE)) {
1124                        continue;
1125                }
1126
1127                if (!use_ref_in_want || wants->exact_oid)
1128                        packet_buf_write(req_buf, "want %s\n", oid_to_hex(remote));
1129                else
1130                        packet_buf_write(req_buf, "want-ref %s\n", wants->name);
1131        }
1132}
1133
1134static void add_common(struct strbuf *req_buf, struct oidset *common)
1135{
1136        struct oidset_iter iter;
1137        const struct object_id *oid;
1138        oidset_iter_init(common, &iter);
1139
1140        while ((oid = oidset_iter_next(&iter))) {
1141                packet_buf_write(req_buf, "have %s\n", oid_to_hex(oid));
1142        }
1143}
1144
1145static int add_haves(struct strbuf *req_buf, int *haves_to_send, int *in_vain)
1146{
1147        int ret = 0;
1148        int haves_added = 0;
1149        const struct object_id *oid;
1150
1151        while ((oid = get_rev())) {
1152                packet_buf_write(req_buf, "have %s\n", oid_to_hex(oid));
1153                if (++haves_added >= *haves_to_send)
1154                        break;
1155        }
1156
1157        *in_vain += haves_added;
1158        if (!haves_added || *in_vain >= MAX_IN_VAIN) {
1159                /* Send Done */
1160                packet_buf_write(req_buf, "done\n");
1161                ret = 1;
1162        }
1163
1164        /* Increase haves to send on next round */
1165        *haves_to_send = next_flush(1, *haves_to_send);
1166
1167        return ret;
1168}
1169
1170static int send_fetch_request(int fd_out, const struct fetch_pack_args *args,
1171                              const struct ref *wants, struct oidset *common,
1172                              int *haves_to_send, int *in_vain)
1173{
1174        int ret = 0;
1175        struct strbuf req_buf = STRBUF_INIT;
1176
1177        if (server_supports_v2("fetch", 1))
1178                packet_buf_write(&req_buf, "command=fetch");
1179        if (server_supports_v2("agent", 0))
1180                packet_buf_write(&req_buf, "agent=%s", git_user_agent_sanitized());
1181        if (args->server_options && args->server_options->nr &&
1182            server_supports_v2("server-option", 1)) {
1183                int i;
1184                for (i = 0; i < args->server_options->nr; i++)
1185                        packet_write_fmt(fd_out, "server-option=%s",
1186                                         args->server_options->items[i].string);
1187        }
1188
1189        packet_buf_delim(&req_buf);
1190        if (args->use_thin_pack)
1191                packet_buf_write(&req_buf, "thin-pack");
1192        if (args->no_progress)
1193                packet_buf_write(&req_buf, "no-progress");
1194        if (args->include_tag)
1195                packet_buf_write(&req_buf, "include-tag");
1196        if (prefer_ofs_delta)
1197                packet_buf_write(&req_buf, "ofs-delta");
1198
1199        /* Add shallow-info and deepen request */
1200        if (server_supports_feature("fetch", "shallow", 0))
1201                add_shallow_requests(&req_buf, args);
1202        else if (is_repository_shallow() || args->deepen)
1203                die(_("Server does not support shallow requests"));
1204
1205        /* Add filter */
1206        if (server_supports_feature("fetch", "filter", 0) &&
1207            args->filter_options.choice) {
1208                print_verbose(args, _("Server supports filter"));
1209                packet_buf_write(&req_buf, "filter %s",
1210                                 args->filter_options.filter_spec);
1211        } else if (args->filter_options.choice) {
1212                warning("filtering not recognized by server, ignoring");
1213        }
1214
1215        /* add wants */
1216        add_wants(wants, &req_buf);
1217
1218        if (args->no_dependents) {
1219                packet_buf_write(&req_buf, "done");
1220                ret = 1;
1221        } else {
1222                /* Add all of the common commits we've found in previous rounds */
1223                add_common(&req_buf, common);
1224
1225                /* Add initial haves */
1226                ret = add_haves(&req_buf, haves_to_send, in_vain);
1227        }
1228
1229        /* Send request */
1230        packet_buf_flush(&req_buf);
1231        write_or_die(fd_out, req_buf.buf, req_buf.len);
1232
1233        strbuf_release(&req_buf);
1234        return ret;
1235}
1236
1237/*
1238 * Processes a section header in a server's response and checks if it matches
1239 * `section`.  If the value of `peek` is 1, the header line will be peeked (and
1240 * not consumed); if 0, the line will be consumed and the function will die if
1241 * the section header doesn't match what was expected.
1242 */
1243static int process_section_header(struct packet_reader *reader,
1244                                  const char *section, int peek)
1245{
1246        int ret;
1247
1248        if (packet_reader_peek(reader) != PACKET_READ_NORMAL)
1249                die("error reading section header '%s'", section);
1250
1251        ret = !strcmp(reader->line, section);
1252
1253        if (!peek) {
1254                if (!ret)
1255                        die("expected '%s', received '%s'",
1256                            section, reader->line);
1257                packet_reader_read(reader);
1258        }
1259
1260        return ret;
1261}
1262
1263static int process_acks(struct packet_reader *reader, struct oidset *common)
1264{
1265        /* received */
1266        int received_ready = 0;
1267        int received_ack = 0;
1268
1269        process_section_header(reader, "acknowledgments", 0);
1270        while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1271                const char *arg;
1272
1273                if (!strcmp(reader->line, "NAK"))
1274                        continue;
1275
1276                if (skip_prefix(reader->line, "ACK ", &arg)) {
1277                        struct object_id oid;
1278                        if (!get_oid_hex(arg, &oid)) {
1279                                struct commit *commit;
1280                                oidset_insert(common, &oid);
1281                                commit = lookup_commit(&oid);
1282                                mark_common(commit, 0, 1);
1283                        }
1284                        continue;
1285                }
1286
1287                if (!strcmp(reader->line, "ready")) {
1288                        clear_prio_queue(&rev_list);
1289                        received_ready = 1;
1290                        continue;
1291                }
1292
1293                die("unexpected acknowledgment line: '%s'", reader->line);
1294        }
1295
1296        if (reader->status != PACKET_READ_FLUSH &&
1297            reader->status != PACKET_READ_DELIM)
1298                die("error processing acks: %d", reader->status);
1299
1300        /* return 0 if no common, 1 if there are common, or 2 if ready */
1301        return received_ready ? 2 : (received_ack ? 1 : 0);
1302}
1303
1304static void receive_shallow_info(struct fetch_pack_args *args,
1305                                 struct packet_reader *reader)
1306{
1307        process_section_header(reader, "shallow-info", 0);
1308        while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1309                const char *arg;
1310                struct object_id oid;
1311
1312                if (skip_prefix(reader->line, "shallow ", &arg)) {
1313                        if (get_oid_hex(arg, &oid))
1314                                die(_("invalid shallow line: %s"), reader->line);
1315                        register_shallow(&oid);
1316                        continue;
1317                }
1318                if (skip_prefix(reader->line, "unshallow ", &arg)) {
1319                        if (get_oid_hex(arg, &oid))
1320                                die(_("invalid unshallow line: %s"), reader->line);
1321                        if (!lookup_object(oid.hash))
1322                                die(_("object not found: %s"), reader->line);
1323                        /* make sure that it is parsed as shallow */
1324                        if (!parse_object(&oid))
1325                                die(_("error in object: %s"), reader->line);
1326                        if (unregister_shallow(&oid))
1327                                die(_("no shallow found: %s"), reader->line);
1328                        continue;
1329                }
1330                die(_("expected shallow/unshallow, got %s"), reader->line);
1331        }
1332
1333        if (reader->status != PACKET_READ_FLUSH &&
1334            reader->status != PACKET_READ_DELIM)
1335                die("error processing shallow info: %d", reader->status);
1336
1337        setup_alternate_shallow(&shallow_lock, &alternate_shallow_file, NULL);
1338        args->deepen = 1;
1339}
1340
1341static void receive_wanted_refs(struct packet_reader *reader, struct ref *refs)
1342{
1343        process_section_header(reader, "wanted-refs", 0);
1344        while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1345                struct object_id oid;
1346                const char *end;
1347                struct ref *r = NULL;
1348
1349                if (parse_oid_hex(reader->line, &oid, &end) || *end++ != ' ')
1350                        die("expected wanted-ref, got '%s'", reader->line);
1351
1352                for (r = refs; r; r = r->next) {
1353                        if (!strcmp(end, r->name)) {
1354                                oidcpy(&r->old_oid, &oid);
1355                                break;
1356                        }
1357                }
1358
1359                if (!r)
1360                        die("unexpected wanted-ref: '%s'", reader->line);
1361        }
1362
1363        if (reader->status != PACKET_READ_DELIM)
1364                die("error processing wanted refs: %d", reader->status);
1365}
1366
1367enum fetch_state {
1368        FETCH_CHECK_LOCAL = 0,
1369        FETCH_SEND_REQUEST,
1370        FETCH_PROCESS_ACKS,
1371        FETCH_GET_PACK,
1372        FETCH_DONE,
1373};
1374
1375static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
1376                                    int fd[2],
1377                                    const struct ref *orig_ref,
1378                                    struct ref **sought, int nr_sought,
1379                                    char **pack_lockfile)
1380{
1381        struct ref *ref = copy_ref_list(orig_ref);
1382        enum fetch_state state = FETCH_CHECK_LOCAL;
1383        struct oidset common = OIDSET_INIT;
1384        struct packet_reader reader;
1385        int in_vain = 0;
1386        int haves_to_send = INITIAL_FLUSH;
1387        packet_reader_init(&reader, fd[0], NULL, 0,
1388                           PACKET_READ_CHOMP_NEWLINE);
1389
1390        while (state != FETCH_DONE) {
1391                switch (state) {
1392                case FETCH_CHECK_LOCAL:
1393                        sort_ref_list(&ref, ref_compare_name);
1394                        QSORT(sought, nr_sought, cmp_ref_by_name);
1395
1396                        /* v2 supports these by default */
1397                        allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
1398                        use_sideband = 2;
1399                        if (args->depth > 0 || args->deepen_since || args->deepen_not)
1400                                args->deepen = 1;
1401
1402                        if (marked)
1403                                for_each_ref(clear_marks, NULL);
1404                        marked = 1;
1405
1406                        for_each_ref(rev_list_insert_ref_oid, NULL);
1407                        for_each_cached_alternate(insert_one_alternate_object);
1408
1409                        /* Filter 'ref' by 'sought' and those that aren't local */
1410                        if (everything_local(args, &ref, sought, nr_sought))
1411                                state = FETCH_DONE;
1412                        else
1413                                state = FETCH_SEND_REQUEST;
1414                        break;
1415                case FETCH_SEND_REQUEST:
1416                        if (send_fetch_request(fd[1], args, ref, &common,
1417                                               &haves_to_send, &in_vain))
1418                                state = FETCH_GET_PACK;
1419                        else
1420                                state = FETCH_PROCESS_ACKS;
1421                        break;
1422                case FETCH_PROCESS_ACKS:
1423                        /* Process ACKs/NAKs */
1424                        switch (process_acks(&reader, &common)) {
1425                        case 2:
1426                                state = FETCH_GET_PACK;
1427                                break;
1428                        case 1:
1429                                in_vain = 0;
1430                                /* fallthrough */
1431                        default:
1432                                state = FETCH_SEND_REQUEST;
1433                                break;
1434                        }
1435                        break;
1436                case FETCH_GET_PACK:
1437                        /* Check for shallow-info section */
1438                        if (process_section_header(&reader, "shallow-info", 1))
1439                                receive_shallow_info(args, &reader);
1440
1441                        if (process_section_header(&reader, "wanted-refs", 1))
1442                                receive_wanted_refs(&reader, ref);
1443
1444                        /* get the pack */
1445                        process_section_header(&reader, "packfile", 0);
1446                        if (get_pack(args, fd, pack_lockfile))
1447                                die(_("git fetch-pack: fetch failed."));
1448
1449                        state = FETCH_DONE;
1450                        break;
1451                case FETCH_DONE:
1452                        continue;
1453                }
1454        }
1455
1456        oidset_clear(&common);
1457        return ref;
1458}
1459
1460static void fetch_pack_config(void)
1461{
1462        git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit);
1463        git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit);
1464        git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
1465        git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
1466        git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
1467
1468        git_config(git_default_config, NULL);
1469}
1470
1471static void fetch_pack_setup(void)
1472{
1473        static int did_setup;
1474        if (did_setup)
1475                return;
1476        fetch_pack_config();
1477        if (0 <= transfer_unpack_limit)
1478                unpack_limit = transfer_unpack_limit;
1479        else if (0 <= fetch_unpack_limit)
1480                unpack_limit = fetch_unpack_limit;
1481        did_setup = 1;
1482}
1483
1484static int remove_duplicates_in_refs(struct ref **ref, int nr)
1485{
1486        struct string_list names = STRING_LIST_INIT_NODUP;
1487        int src, dst;
1488
1489        for (src = dst = 0; src < nr; src++) {
1490                struct string_list_item *item;
1491                item = string_list_insert(&names, ref[src]->name);
1492                if (item->util)
1493                        continue; /* already have it */
1494                item->util = ref[src];
1495                if (src != dst)
1496                        ref[dst] = ref[src];
1497                dst++;
1498        }
1499        for (src = dst; src < nr; src++)
1500                ref[src] = NULL;
1501        string_list_clear(&names, 0);
1502        return dst;
1503}
1504
1505static void update_shallow(struct fetch_pack_args *args,
1506                           struct ref *refs,
1507                           struct shallow_info *si)
1508{
1509        struct oid_array ref = OID_ARRAY_INIT;
1510        int *status;
1511        int i;
1512        struct ref *r;
1513
1514        if (args->deepen && alternate_shallow_file) {
1515                if (*alternate_shallow_file == '\0') { /* --unshallow */
1516                        unlink_or_warn(git_path_shallow());
1517                        rollback_lock_file(&shallow_lock);
1518                } else
1519                        commit_lock_file(&shallow_lock);
1520                return;
1521        }
1522
1523        if (!si->shallow || !si->shallow->nr)
1524                return;
1525
1526        if (args->cloning) {
1527                /*
1528                 * remote is shallow, but this is a clone, there are
1529                 * no objects in repo to worry about. Accept any
1530                 * shallow points that exist in the pack (iow in repo
1531                 * after get_pack() and reprepare_packed_git())
1532                 */
1533                struct oid_array extra = OID_ARRAY_INIT;
1534                struct object_id *oid = si->shallow->oid;
1535                for (i = 0; i < si->shallow->nr; i++)
1536                        if (has_object_file(&oid[i]))
1537                                oid_array_append(&extra, &oid[i]);
1538                if (extra.nr) {
1539                        setup_alternate_shallow(&shallow_lock,
1540                                                &alternate_shallow_file,
1541                                                &extra);
1542                        commit_lock_file(&shallow_lock);
1543                }
1544                oid_array_clear(&extra);
1545                return;
1546        }
1547
1548        if (!si->nr_ours && !si->nr_theirs)
1549                return;
1550
1551        remove_nonexistent_theirs_shallow(si);
1552        if (!si->nr_ours && !si->nr_theirs)
1553                return;
1554        for (r = refs; r; r = r->next)
1555                oid_array_append(&ref, &r->old_oid);
1556        si->ref = &ref;
1557
1558        if (args->update_shallow) {
1559                /*
1560                 * remote is also shallow, .git/shallow may be updated
1561                 * so all refs can be accepted. Make sure we only add
1562                 * shallow roots that are actually reachable from new
1563                 * refs.
1564                 */
1565                struct oid_array extra = OID_ARRAY_INIT;
1566                struct object_id *oid = si->shallow->oid;
1567                assign_shallow_commits_to_refs(si, NULL, NULL);
1568                if (!si->nr_ours && !si->nr_theirs) {
1569                        oid_array_clear(&ref);
1570                        return;
1571                }
1572                for (i = 0; i < si->nr_ours; i++)
1573                        oid_array_append(&extra, &oid[si->ours[i]]);
1574                for (i = 0; i < si->nr_theirs; i++)
1575                        oid_array_append(&extra, &oid[si->theirs[i]]);
1576                setup_alternate_shallow(&shallow_lock,
1577                                        &alternate_shallow_file,
1578                                        &extra);
1579                commit_lock_file(&shallow_lock);
1580                oid_array_clear(&extra);
1581                oid_array_clear(&ref);
1582                return;
1583        }
1584
1585        /*
1586         * remote is also shallow, check what ref is safe to update
1587         * without updating .git/shallow
1588         */
1589        status = xcalloc(ref.nr, sizeof(*status));
1590        assign_shallow_commits_to_refs(si, NULL, status);
1591        if (si->nr_ours || si->nr_theirs) {
1592                for (r = refs, i = 0; r; r = r->next, i++)
1593                        if (status[i])
1594                                r->status = REF_STATUS_REJECT_SHALLOW;
1595        }
1596        free(status);
1597        oid_array_clear(&ref);
1598}
1599
1600static int iterate_ref_map(void *cb_data, struct object_id *oid)
1601{
1602        struct ref **rm = cb_data;
1603        struct ref *ref = *rm;
1604
1605        if (!ref)
1606                return -1; /* end of the list */
1607        *rm = ref->next;
1608        oidcpy(oid, &ref->old_oid);
1609        return 0;
1610}
1611
1612struct ref *fetch_pack(struct fetch_pack_args *args,
1613                       int fd[], struct child_process *conn,
1614                       const struct ref *ref,
1615                       const char *dest,
1616                       struct ref **sought, int nr_sought,
1617                       struct oid_array *shallow,
1618                       char **pack_lockfile,
1619                       enum protocol_version version)
1620{
1621        struct ref *ref_cpy;
1622        struct shallow_info si;
1623
1624        fetch_pack_setup();
1625        if (nr_sought)
1626                nr_sought = remove_duplicates_in_refs(sought, nr_sought);
1627
1628        if (!ref) {
1629                packet_flush(fd[1]);
1630                die(_("no matching remote head"));
1631        }
1632        prepare_shallow_info(&si, shallow);
1633        if (version == protocol_v2)
1634                ref_cpy = do_fetch_pack_v2(args, fd, ref, sought, nr_sought,
1635                                           pack_lockfile);
1636        else
1637                ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
1638                                        &si, pack_lockfile);
1639        reprepare_packed_git(the_repository);
1640
1641        if (!args->cloning && args->deepen) {
1642                struct check_connected_options opt = CHECK_CONNECTED_INIT;
1643                struct ref *iterator = ref_cpy;
1644                opt.shallow_file = alternate_shallow_file;
1645                if (args->deepen)
1646                        opt.is_deepening_fetch = 1;
1647                if (check_connected(iterate_ref_map, &iterator, &opt)) {
1648                        error(_("remote did not send all necessary objects"));
1649                        free_refs(ref_cpy);
1650                        ref_cpy = NULL;
1651                        rollback_lock_file(&shallow_lock);
1652                        goto cleanup;
1653                }
1654                args->connectivity_checked = 1;
1655        }
1656
1657        update_shallow(args, ref_cpy, &si);
1658cleanup:
1659        clear_shallow_info(&si);
1660        return ref_cpy;
1661}
1662
1663int report_unmatched_refs(struct ref **sought, int nr_sought)
1664{
1665        int i, ret = 0;
1666
1667        for (i = 0; i < nr_sought; i++) {
1668                if (!sought[i])
1669                        continue;
1670                switch (sought[i]->match_status) {
1671                case REF_MATCHED:
1672                        continue;
1673                case REF_NOT_MATCHED:
1674                        error(_("no such remote ref %s"), sought[i]->name);
1675                        break;
1676                case REF_UNADVERTISED_NOT_ALLOWED:
1677                        error(_("Server does not allow request for unadvertised object %s"),
1678                              sought[i]->name);
1679                        break;
1680                }
1681                ret = 1;
1682        }
1683        return ret;
1684}