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