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