remote.con commit git-p4: add Git LFS backend for large file system (b47d807)
   1#include "cache.h"
   2#include "remote.h"
   3#include "refs.h"
   4#include "commit.h"
   5#include "diff.h"
   6#include "revision.h"
   7#include "dir.h"
   8#include "tag.h"
   9#include "string-list.h"
  10#include "mergesort.h"
  11
  12enum map_direction { FROM_SRC, FROM_DST };
  13
  14static struct refspec s_tag_refspec = {
  15        0,
  16        1,
  17        0,
  18        0,
  19        "refs/tags/*",
  20        "refs/tags/*"
  21};
  22
  23const struct refspec *tag_refspec = &s_tag_refspec;
  24
  25struct counted_string {
  26        size_t len;
  27        const char *s;
  28};
  29struct rewrite {
  30        const char *base;
  31        size_t baselen;
  32        struct counted_string *instead_of;
  33        int instead_of_nr;
  34        int instead_of_alloc;
  35};
  36struct rewrites {
  37        struct rewrite **rewrite;
  38        int rewrite_alloc;
  39        int rewrite_nr;
  40};
  41
  42static struct remote **remotes;
  43static int remotes_alloc;
  44static int remotes_nr;
  45static struct hashmap remotes_hash;
  46
  47static struct branch **branches;
  48static int branches_alloc;
  49static int branches_nr;
  50
  51static struct branch *current_branch;
  52static const char *pushremote_name;
  53
  54static struct rewrites rewrites;
  55static struct rewrites rewrites_push;
  56
  57#define BUF_SIZE (2048)
  58static char buffer[BUF_SIZE];
  59
  60static int valid_remote(const struct remote *remote)
  61{
  62        return (!!remote->url) || (!!remote->foreign_vcs);
  63}
  64
  65static const char *alias_url(const char *url, struct rewrites *r)
  66{
  67        int i, j;
  68        char *ret;
  69        struct counted_string *longest;
  70        int longest_i;
  71
  72        longest = NULL;
  73        longest_i = -1;
  74        for (i = 0; i < r->rewrite_nr; i++) {
  75                if (!r->rewrite[i])
  76                        continue;
  77                for (j = 0; j < r->rewrite[i]->instead_of_nr; j++) {
  78                        if (starts_with(url, r->rewrite[i]->instead_of[j].s) &&
  79                            (!longest ||
  80                             longest->len < r->rewrite[i]->instead_of[j].len)) {
  81                                longest = &(r->rewrite[i]->instead_of[j]);
  82                                longest_i = i;
  83                        }
  84                }
  85        }
  86        if (!longest)
  87                return url;
  88
  89        ret = xmalloc(r->rewrite[longest_i]->baselen +
  90                     (strlen(url) - longest->len) + 1);
  91        strcpy(ret, r->rewrite[longest_i]->base);
  92        strcpy(ret + r->rewrite[longest_i]->baselen, url + longest->len);
  93        return ret;
  94}
  95
  96static void add_push_refspec(struct remote *remote, const char *ref)
  97{
  98        ALLOC_GROW(remote->push_refspec,
  99                   remote->push_refspec_nr + 1,
 100                   remote->push_refspec_alloc);
 101        remote->push_refspec[remote->push_refspec_nr++] = ref;
 102}
 103
 104static void add_fetch_refspec(struct remote *remote, const char *ref)
 105{
 106        ALLOC_GROW(remote->fetch_refspec,
 107                   remote->fetch_refspec_nr + 1,
 108                   remote->fetch_refspec_alloc);
 109        remote->fetch_refspec[remote->fetch_refspec_nr++] = ref;
 110}
 111
 112static void add_url(struct remote *remote, const char *url)
 113{
 114        ALLOC_GROW(remote->url, remote->url_nr + 1, remote->url_alloc);
 115        remote->url[remote->url_nr++] = url;
 116}
 117
 118static void add_pushurl(struct remote *remote, const char *pushurl)
 119{
 120        ALLOC_GROW(remote->pushurl, remote->pushurl_nr + 1, remote->pushurl_alloc);
 121        remote->pushurl[remote->pushurl_nr++] = pushurl;
 122}
 123
 124static void add_pushurl_alias(struct remote *remote, const char *url)
 125{
 126        const char *pushurl = alias_url(url, &rewrites_push);
 127        if (pushurl != url)
 128                add_pushurl(remote, pushurl);
 129}
 130
 131static void add_url_alias(struct remote *remote, const char *url)
 132{
 133        add_url(remote, alias_url(url, &rewrites));
 134        add_pushurl_alias(remote, url);
 135}
 136
 137struct remotes_hash_key {
 138        const char *str;
 139        int len;
 140};
 141
 142static int remotes_hash_cmp(const struct remote *a, const struct remote *b, const struct remotes_hash_key *key)
 143{
 144        if (key)
 145                return strncmp(a->name, key->str, key->len) || a->name[key->len];
 146        else
 147                return strcmp(a->name, b->name);
 148}
 149
 150static inline void init_remotes_hash(void)
 151{
 152        if (!remotes_hash.cmpfn)
 153                hashmap_init(&remotes_hash, (hashmap_cmp_fn)remotes_hash_cmp, 0);
 154}
 155
 156static struct remote *make_remote(const char *name, int len)
 157{
 158        struct remote *ret, *replaced;
 159        struct remotes_hash_key lookup;
 160        struct hashmap_entry lookup_entry;
 161
 162        if (!len)
 163                len = strlen(name);
 164
 165        init_remotes_hash();
 166        lookup.str = name;
 167        lookup.len = len;
 168        hashmap_entry_init(&lookup_entry, memhash(name, len));
 169
 170        if ((ret = hashmap_get(&remotes_hash, &lookup_entry, &lookup)) != NULL)
 171                return ret;
 172
 173        ret = xcalloc(1, sizeof(struct remote));
 174        ret->prune = -1;  /* unspecified */
 175        ALLOC_GROW(remotes, remotes_nr + 1, remotes_alloc);
 176        remotes[remotes_nr++] = ret;
 177        ret->name = xstrndup(name, len);
 178
 179        hashmap_entry_init(ret, lookup_entry.hash);
 180        replaced = hashmap_put(&remotes_hash, ret);
 181        assert(replaced == NULL);  /* no previous entry overwritten */
 182        return ret;
 183}
 184
 185static void add_merge(struct branch *branch, const char *name)
 186{
 187        ALLOC_GROW(branch->merge_name, branch->merge_nr + 1,
 188                   branch->merge_alloc);
 189        branch->merge_name[branch->merge_nr++] = name;
 190}
 191
 192static struct branch *make_branch(const char *name, int len)
 193{
 194        struct branch *ret;
 195        int i;
 196
 197        for (i = 0; i < branches_nr; i++) {
 198                if (len ? (!strncmp(name, branches[i]->name, len) &&
 199                           !branches[i]->name[len]) :
 200                    !strcmp(name, branches[i]->name))
 201                        return branches[i];
 202        }
 203
 204        ALLOC_GROW(branches, branches_nr + 1, branches_alloc);
 205        ret = xcalloc(1, sizeof(struct branch));
 206        branches[branches_nr++] = ret;
 207        if (len)
 208                ret->name = xstrndup(name, len);
 209        else
 210                ret->name = xstrdup(name);
 211        ret->refname = xstrfmt("refs/heads/%s", ret->name);
 212
 213        return ret;
 214}
 215
 216static struct rewrite *make_rewrite(struct rewrites *r, const char *base, int len)
 217{
 218        struct rewrite *ret;
 219        int i;
 220
 221        for (i = 0; i < r->rewrite_nr; i++) {
 222                if (len
 223                    ? (len == r->rewrite[i]->baselen &&
 224                       !strncmp(base, r->rewrite[i]->base, len))
 225                    : !strcmp(base, r->rewrite[i]->base))
 226                        return r->rewrite[i];
 227        }
 228
 229        ALLOC_GROW(r->rewrite, r->rewrite_nr + 1, r->rewrite_alloc);
 230        ret = xcalloc(1, sizeof(struct rewrite));
 231        r->rewrite[r->rewrite_nr++] = ret;
 232        if (len) {
 233                ret->base = xstrndup(base, len);
 234                ret->baselen = len;
 235        }
 236        else {
 237                ret->base = xstrdup(base);
 238                ret->baselen = strlen(base);
 239        }
 240        return ret;
 241}
 242
 243static void add_instead_of(struct rewrite *rewrite, const char *instead_of)
 244{
 245        ALLOC_GROW(rewrite->instead_of, rewrite->instead_of_nr + 1, rewrite->instead_of_alloc);
 246        rewrite->instead_of[rewrite->instead_of_nr].s = instead_of;
 247        rewrite->instead_of[rewrite->instead_of_nr].len = strlen(instead_of);
 248        rewrite->instead_of_nr++;
 249}
 250
 251static void read_remotes_file(struct remote *remote)
 252{
 253        FILE *f = fopen(git_path("remotes/%s", remote->name), "r");
 254
 255        if (!f)
 256                return;
 257        remote->origin = REMOTE_REMOTES;
 258        while (fgets(buffer, BUF_SIZE, f)) {
 259                int value_list;
 260                char *s, *p;
 261
 262                if (starts_with(buffer, "URL:")) {
 263                        value_list = 0;
 264                        s = buffer + 4;
 265                } else if (starts_with(buffer, "Push:")) {
 266                        value_list = 1;
 267                        s = buffer + 5;
 268                } else if (starts_with(buffer, "Pull:")) {
 269                        value_list = 2;
 270                        s = buffer + 5;
 271                } else
 272                        continue;
 273
 274                while (isspace(*s))
 275                        s++;
 276                if (!*s)
 277                        continue;
 278
 279                p = s + strlen(s);
 280                while (isspace(p[-1]))
 281                        *--p = 0;
 282
 283                switch (value_list) {
 284                case 0:
 285                        add_url_alias(remote, xstrdup(s));
 286                        break;
 287                case 1:
 288                        add_push_refspec(remote, xstrdup(s));
 289                        break;
 290                case 2:
 291                        add_fetch_refspec(remote, xstrdup(s));
 292                        break;
 293                }
 294        }
 295        fclose(f);
 296}
 297
 298static void read_branches_file(struct remote *remote)
 299{
 300        char *frag;
 301        struct strbuf branch = STRBUF_INIT;
 302        int n = 1000;
 303        FILE *f = fopen(git_path("branches/%.*s", n, remote->name), "r");
 304        char *s, *p;
 305        int len;
 306
 307        if (!f)
 308                return;
 309        s = fgets(buffer, BUF_SIZE, f);
 310        fclose(f);
 311        if (!s)
 312                return;
 313        while (isspace(*s))
 314                s++;
 315        if (!*s)
 316                return;
 317        remote->origin = REMOTE_BRANCHES;
 318        p = s + strlen(s);
 319        while (isspace(p[-1]))
 320                *--p = 0;
 321        len = p - s;
 322        p = xmalloc(len + 1);
 323        strcpy(p, s);
 324
 325        /*
 326         * The branches file would have URL and optionally
 327         * #branch specified.  The "master" (or specified) branch is
 328         * fetched and stored in the local branch of the same name.
 329         */
 330        frag = strchr(p, '#');
 331        if (frag) {
 332                *(frag++) = '\0';
 333                strbuf_addf(&branch, "refs/heads/%s", frag);
 334        } else
 335                strbuf_addstr(&branch, "refs/heads/master");
 336
 337        strbuf_addf(&branch, ":refs/heads/%s", remote->name);
 338        add_url_alias(remote, p);
 339        add_fetch_refspec(remote, strbuf_detach(&branch, NULL));
 340        /*
 341         * Cogito compatible push: push current HEAD to remote #branch
 342         * (master if missing)
 343         */
 344        strbuf_init(&branch, 0);
 345        strbuf_addstr(&branch, "HEAD");
 346        if (frag)
 347                strbuf_addf(&branch, ":refs/heads/%s", frag);
 348        else
 349                strbuf_addstr(&branch, ":refs/heads/master");
 350        add_push_refspec(remote, strbuf_detach(&branch, NULL));
 351        remote->fetch_tags = 1; /* always auto-follow */
 352}
 353
 354static int handle_config(const char *key, const char *value, void *cb)
 355{
 356        const char *name;
 357        const char *subkey;
 358        struct remote *remote;
 359        struct branch *branch;
 360        if (starts_with(key, "branch.")) {
 361                name = key + 7;
 362                subkey = strrchr(name, '.');
 363                if (!subkey)
 364                        return 0;
 365                branch = make_branch(name, subkey - name);
 366                if (!strcmp(subkey, ".remote")) {
 367                        return git_config_string(&branch->remote_name, key, value);
 368                } else if (!strcmp(subkey, ".pushremote")) {
 369                        return git_config_string(&branch->pushremote_name, key, value);
 370                } else if (!strcmp(subkey, ".merge")) {
 371                        if (!value)
 372                                return config_error_nonbool(key);
 373                        add_merge(branch, xstrdup(value));
 374                }
 375                return 0;
 376        }
 377        if (starts_with(key, "url.")) {
 378                struct rewrite *rewrite;
 379                name = key + 4;
 380                subkey = strrchr(name, '.');
 381                if (!subkey)
 382                        return 0;
 383                if (!strcmp(subkey, ".insteadof")) {
 384                        rewrite = make_rewrite(&rewrites, name, subkey - name);
 385                        if (!value)
 386                                return config_error_nonbool(key);
 387                        add_instead_of(rewrite, xstrdup(value));
 388                } else if (!strcmp(subkey, ".pushinsteadof")) {
 389                        rewrite = make_rewrite(&rewrites_push, name, subkey - name);
 390                        if (!value)
 391                                return config_error_nonbool(key);
 392                        add_instead_of(rewrite, xstrdup(value));
 393                }
 394        }
 395
 396        if (!starts_with(key,  "remote."))
 397                return 0;
 398        name = key + 7;
 399
 400        /* Handle remote.* variables */
 401        if (!strcmp(name, "pushdefault"))
 402                return git_config_string(&pushremote_name, key, value);
 403
 404        /* Handle remote.<name>.* variables */
 405        if (*name == '/') {
 406                warning("Config remote shorthand cannot begin with '/': %s",
 407                        name);
 408                return 0;
 409        }
 410        subkey = strrchr(name, '.');
 411        if (!subkey)
 412                return 0;
 413        remote = make_remote(name, subkey - name);
 414        remote->origin = REMOTE_CONFIG;
 415        if (!strcmp(subkey, ".mirror"))
 416                remote->mirror = git_config_bool(key, value);
 417        else if (!strcmp(subkey, ".skipdefaultupdate"))
 418                remote->skip_default_update = git_config_bool(key, value);
 419        else if (!strcmp(subkey, ".skipfetchall"))
 420                remote->skip_default_update = git_config_bool(key, value);
 421        else if (!strcmp(subkey, ".prune"))
 422                remote->prune = git_config_bool(key, value);
 423        else if (!strcmp(subkey, ".url")) {
 424                const char *v;
 425                if (git_config_string(&v, key, value))
 426                        return -1;
 427                add_url(remote, v);
 428        } else if (!strcmp(subkey, ".pushurl")) {
 429                const char *v;
 430                if (git_config_string(&v, key, value))
 431                        return -1;
 432                add_pushurl(remote, v);
 433        } else if (!strcmp(subkey, ".push")) {
 434                const char *v;
 435                if (git_config_string(&v, key, value))
 436                        return -1;
 437                add_push_refspec(remote, v);
 438        } else if (!strcmp(subkey, ".fetch")) {
 439                const char *v;
 440                if (git_config_string(&v, key, value))
 441                        return -1;
 442                add_fetch_refspec(remote, v);
 443        } else if (!strcmp(subkey, ".receivepack")) {
 444                const char *v;
 445                if (git_config_string(&v, key, value))
 446                        return -1;
 447                if (!remote->receivepack)
 448                        remote->receivepack = v;
 449                else
 450                        error("more than one receivepack given, using the first");
 451        } else if (!strcmp(subkey, ".uploadpack")) {
 452                const char *v;
 453                if (git_config_string(&v, key, value))
 454                        return -1;
 455                if (!remote->uploadpack)
 456                        remote->uploadpack = v;
 457                else
 458                        error("more than one uploadpack given, using the first");
 459        } else if (!strcmp(subkey, ".tagopt")) {
 460                if (!strcmp(value, "--no-tags"))
 461                        remote->fetch_tags = -1;
 462                else if (!strcmp(value, "--tags"))
 463                        remote->fetch_tags = 2;
 464        } else if (!strcmp(subkey, ".proxy")) {
 465                return git_config_string((const char **)&remote->http_proxy,
 466                                         key, value);
 467        } else if (!strcmp(subkey, ".vcs")) {
 468                return git_config_string(&remote->foreign_vcs, key, value);
 469        }
 470        return 0;
 471}
 472
 473static void alias_all_urls(void)
 474{
 475        int i, j;
 476        for (i = 0; i < remotes_nr; i++) {
 477                int add_pushurl_aliases;
 478                if (!remotes[i])
 479                        continue;
 480                for (j = 0; j < remotes[i]->pushurl_nr; j++) {
 481                        remotes[i]->pushurl[j] = alias_url(remotes[i]->pushurl[j], &rewrites);
 482                }
 483                add_pushurl_aliases = remotes[i]->pushurl_nr == 0;
 484                for (j = 0; j < remotes[i]->url_nr; j++) {
 485                        if (add_pushurl_aliases)
 486                                add_pushurl_alias(remotes[i], remotes[i]->url[j]);
 487                        remotes[i]->url[j] = alias_url(remotes[i]->url[j], &rewrites);
 488                }
 489        }
 490}
 491
 492static void read_config(void)
 493{
 494        static int loaded;
 495        unsigned char sha1[20];
 496        const char *head_ref;
 497        int flag;
 498
 499        if (loaded)
 500                return;
 501        loaded = 1;
 502
 503        current_branch = NULL;
 504        head_ref = resolve_ref_unsafe("HEAD", 0, sha1, &flag);
 505        if (head_ref && (flag & REF_ISSYMREF) &&
 506            skip_prefix(head_ref, "refs/heads/", &head_ref)) {
 507                current_branch = make_branch(head_ref, 0);
 508        }
 509        git_config(handle_config, NULL);
 510        alias_all_urls();
 511}
 512
 513/*
 514 * This function frees a refspec array.
 515 * Warning: code paths should be checked to ensure that the src
 516 *          and dst pointers are always freeable pointers as well
 517 *          as the refspec pointer itself.
 518 */
 519static void free_refspecs(struct refspec *refspec, int nr_refspec)
 520{
 521        int i;
 522
 523        if (!refspec)
 524                return;
 525
 526        for (i = 0; i < nr_refspec; i++) {
 527                free(refspec[i].src);
 528                free(refspec[i].dst);
 529        }
 530        free(refspec);
 531}
 532
 533static struct refspec *parse_refspec_internal(int nr_refspec, const char **refspec, int fetch, int verify)
 534{
 535        int i;
 536        struct refspec *rs = xcalloc(nr_refspec, sizeof(*rs));
 537
 538        for (i = 0; i < nr_refspec; i++) {
 539                size_t llen;
 540                int is_glob;
 541                const char *lhs, *rhs;
 542                int flags;
 543
 544                is_glob = 0;
 545
 546                lhs = refspec[i];
 547                if (*lhs == '+') {
 548                        rs[i].force = 1;
 549                        lhs++;
 550                }
 551
 552                rhs = strrchr(lhs, ':');
 553
 554                /*
 555                 * Before going on, special case ":" (or "+:") as a refspec
 556                 * for pushing matching refs.
 557                 */
 558                if (!fetch && rhs == lhs && rhs[1] == '\0') {
 559                        rs[i].matching = 1;
 560                        continue;
 561                }
 562
 563                if (rhs) {
 564                        size_t rlen = strlen(++rhs);
 565                        is_glob = (1 <= rlen && strchr(rhs, '*'));
 566                        rs[i].dst = xstrndup(rhs, rlen);
 567                }
 568
 569                llen = (rhs ? (rhs - lhs - 1) : strlen(lhs));
 570                if (1 <= llen && memchr(lhs, '*', llen)) {
 571                        if ((rhs && !is_glob) || (!rhs && fetch))
 572                                goto invalid;
 573                        is_glob = 1;
 574                } else if (rhs && is_glob) {
 575                        goto invalid;
 576                }
 577
 578                rs[i].pattern = is_glob;
 579                rs[i].src = xstrndup(lhs, llen);
 580                flags = REFNAME_ALLOW_ONELEVEL | (is_glob ? REFNAME_REFSPEC_PATTERN : 0);
 581
 582                if (fetch) {
 583                        unsigned char unused[40];
 584
 585                        /* LHS */
 586                        if (!*rs[i].src)
 587                                ; /* empty is ok; it means "HEAD" */
 588                        else if (llen == 40 && !get_sha1_hex(rs[i].src, unused))
 589                                rs[i].exact_sha1 = 1; /* ok */
 590                        else if (!check_refname_format(rs[i].src, flags))
 591                                ; /* valid looking ref is ok */
 592                        else
 593                                goto invalid;
 594                        /* RHS */
 595                        if (!rs[i].dst)
 596                                ; /* missing is ok; it is the same as empty */
 597                        else if (!*rs[i].dst)
 598                                ; /* empty is ok; it means "do not store" */
 599                        else if (!check_refname_format(rs[i].dst, flags))
 600                                ; /* valid looking ref is ok */
 601                        else
 602                                goto invalid;
 603                } else {
 604                        /*
 605                         * LHS
 606                         * - empty is allowed; it means delete.
 607                         * - when wildcarded, it must be a valid looking ref.
 608                         * - otherwise, it must be an extended SHA-1, but
 609                         *   there is no existing way to validate this.
 610                         */
 611                        if (!*rs[i].src)
 612                                ; /* empty is ok */
 613                        else if (is_glob) {
 614                                if (check_refname_format(rs[i].src, flags))
 615                                        goto invalid;
 616                        }
 617                        else
 618                                ; /* anything goes, for now */
 619                        /*
 620                         * RHS
 621                         * - missing is allowed, but LHS then must be a
 622                         *   valid looking ref.
 623                         * - empty is not allowed.
 624                         * - otherwise it must be a valid looking ref.
 625                         */
 626                        if (!rs[i].dst) {
 627                                if (check_refname_format(rs[i].src, flags))
 628                                        goto invalid;
 629                        } else if (!*rs[i].dst) {
 630                                goto invalid;
 631                        } else {
 632                                if (check_refname_format(rs[i].dst, flags))
 633                                        goto invalid;
 634                        }
 635                }
 636        }
 637        return rs;
 638
 639 invalid:
 640        if (verify) {
 641                /*
 642                 * nr_refspec must be greater than zero and i must be valid
 643                 * since it is only possible to reach this point from within
 644                 * the for loop above.
 645                 */
 646                free_refspecs(rs, i+1);
 647                return NULL;
 648        }
 649        die("Invalid refspec '%s'", refspec[i]);
 650}
 651
 652int valid_fetch_refspec(const char *fetch_refspec_str)
 653{
 654        struct refspec *refspec;
 655
 656        refspec = parse_refspec_internal(1, &fetch_refspec_str, 1, 1);
 657        free_refspecs(refspec, 1);
 658        return !!refspec;
 659}
 660
 661struct refspec *parse_fetch_refspec(int nr_refspec, const char **refspec)
 662{
 663        return parse_refspec_internal(nr_refspec, refspec, 1, 0);
 664}
 665
 666static struct refspec *parse_push_refspec(int nr_refspec, const char **refspec)
 667{
 668        return parse_refspec_internal(nr_refspec, refspec, 0, 0);
 669}
 670
 671void free_refspec(int nr_refspec, struct refspec *refspec)
 672{
 673        int i;
 674        for (i = 0; i < nr_refspec; i++) {
 675                free(refspec[i].src);
 676                free(refspec[i].dst);
 677        }
 678        free(refspec);
 679}
 680
 681static int valid_remote_nick(const char *name)
 682{
 683        if (!name[0] || is_dot_or_dotdot(name))
 684                return 0;
 685        return !strchr(name, '/'); /* no slash */
 686}
 687
 688const char *remote_for_branch(struct branch *branch, int *explicit)
 689{
 690        if (branch && branch->remote_name) {
 691                if (explicit)
 692                        *explicit = 1;
 693                return branch->remote_name;
 694        }
 695        if (explicit)
 696                *explicit = 0;
 697        return "origin";
 698}
 699
 700const char *pushremote_for_branch(struct branch *branch, int *explicit)
 701{
 702        if (branch && branch->pushremote_name) {
 703                if (explicit)
 704                        *explicit = 1;
 705                return branch->pushremote_name;
 706        }
 707        if (pushremote_name) {
 708                if (explicit)
 709                        *explicit = 1;
 710                return pushremote_name;
 711        }
 712        return remote_for_branch(branch, explicit);
 713}
 714
 715static struct remote *remote_get_1(const char *name,
 716                                   const char *(*get_default)(struct branch *, int *))
 717{
 718        struct remote *ret;
 719        int name_given = 0;
 720
 721        read_config();
 722
 723        if (name)
 724                name_given = 1;
 725        else
 726                name = get_default(current_branch, &name_given);
 727
 728        ret = make_remote(name, 0);
 729        if (valid_remote_nick(name)) {
 730                if (!valid_remote(ret))
 731                        read_remotes_file(ret);
 732                if (!valid_remote(ret))
 733                        read_branches_file(ret);
 734        }
 735        if (name_given && !valid_remote(ret))
 736                add_url_alias(ret, name);
 737        if (!valid_remote(ret))
 738                return NULL;
 739        ret->fetch = parse_fetch_refspec(ret->fetch_refspec_nr, ret->fetch_refspec);
 740        ret->push = parse_push_refspec(ret->push_refspec_nr, ret->push_refspec);
 741        return ret;
 742}
 743
 744struct remote *remote_get(const char *name)
 745{
 746        return remote_get_1(name, remote_for_branch);
 747}
 748
 749struct remote *pushremote_get(const char *name)
 750{
 751        return remote_get_1(name, pushremote_for_branch);
 752}
 753
 754int remote_is_configured(const char *name)
 755{
 756        struct remotes_hash_key lookup;
 757        struct hashmap_entry lookup_entry;
 758        read_config();
 759
 760        init_remotes_hash();
 761        lookup.str = name;
 762        lookup.len = strlen(name);
 763        hashmap_entry_init(&lookup_entry, memhash(name, lookup.len));
 764
 765        return hashmap_get(&remotes_hash, &lookup_entry, &lookup) != NULL;
 766}
 767
 768int for_each_remote(each_remote_fn fn, void *priv)
 769{
 770        int i, result = 0;
 771        read_config();
 772        for (i = 0; i < remotes_nr && !result; i++) {
 773                struct remote *r = remotes[i];
 774                if (!r)
 775                        continue;
 776                if (!r->fetch)
 777                        r->fetch = parse_fetch_refspec(r->fetch_refspec_nr,
 778                                                       r->fetch_refspec);
 779                if (!r->push)
 780                        r->push = parse_push_refspec(r->push_refspec_nr,
 781                                                     r->push_refspec);
 782                result = fn(r, priv);
 783        }
 784        return result;
 785}
 786
 787static void handle_duplicate(struct ref *ref1, struct ref *ref2)
 788{
 789        if (strcmp(ref1->name, ref2->name)) {
 790                if (ref1->fetch_head_status != FETCH_HEAD_IGNORE &&
 791                    ref2->fetch_head_status != FETCH_HEAD_IGNORE) {
 792                        die(_("Cannot fetch both %s and %s to %s"),
 793                            ref1->name, ref2->name, ref2->peer_ref->name);
 794                } else if (ref1->fetch_head_status != FETCH_HEAD_IGNORE &&
 795                           ref2->fetch_head_status == FETCH_HEAD_IGNORE) {
 796                        warning(_("%s usually tracks %s, not %s"),
 797                                ref2->peer_ref->name, ref2->name, ref1->name);
 798                } else if (ref1->fetch_head_status == FETCH_HEAD_IGNORE &&
 799                           ref2->fetch_head_status == FETCH_HEAD_IGNORE) {
 800                        die(_("%s tracks both %s and %s"),
 801                            ref2->peer_ref->name, ref1->name, ref2->name);
 802                } else {
 803                        /*
 804                         * This last possibility doesn't occur because
 805                         * FETCH_HEAD_IGNORE entries always appear at
 806                         * the end of the list.
 807                         */
 808                        die(_("Internal error"));
 809                }
 810        }
 811        free(ref2->peer_ref);
 812        free(ref2);
 813}
 814
 815struct ref *ref_remove_duplicates(struct ref *ref_map)
 816{
 817        struct string_list refs = STRING_LIST_INIT_NODUP;
 818        struct ref *retval = NULL;
 819        struct ref **p = &retval;
 820
 821        while (ref_map) {
 822                struct ref *ref = ref_map;
 823
 824                ref_map = ref_map->next;
 825                ref->next = NULL;
 826
 827                if (!ref->peer_ref) {
 828                        *p = ref;
 829                        p = &ref->next;
 830                } else {
 831                        struct string_list_item *item =
 832                                string_list_insert(&refs, ref->peer_ref->name);
 833
 834                        if (item->util) {
 835                                /* Entry already existed */
 836                                handle_duplicate((struct ref *)item->util, ref);
 837                        } else {
 838                                *p = ref;
 839                                p = &ref->next;
 840                                item->util = ref;
 841                        }
 842                }
 843        }
 844
 845        string_list_clear(&refs, 0);
 846        return retval;
 847}
 848
 849int remote_has_url(struct remote *remote, const char *url)
 850{
 851        int i;
 852        for (i = 0; i < remote->url_nr; i++) {
 853                if (!strcmp(remote->url[i], url))
 854                        return 1;
 855        }
 856        return 0;
 857}
 858
 859static int match_name_with_pattern(const char *key, const char *name,
 860                                   const char *value, char **result)
 861{
 862        const char *kstar = strchr(key, '*');
 863        size_t klen;
 864        size_t ksuffixlen;
 865        size_t namelen;
 866        int ret;
 867        if (!kstar)
 868                die("Key '%s' of pattern had no '*'", key);
 869        klen = kstar - key;
 870        ksuffixlen = strlen(kstar + 1);
 871        namelen = strlen(name);
 872        ret = !strncmp(name, key, klen) && namelen >= klen + ksuffixlen &&
 873                !memcmp(name + namelen - ksuffixlen, kstar + 1, ksuffixlen);
 874        if (ret && value) {
 875                struct strbuf sb = STRBUF_INIT;
 876                const char *vstar = strchr(value, '*');
 877                if (!vstar)
 878                        die("Value '%s' of pattern has no '*'", value);
 879                strbuf_add(&sb, value, vstar - value);
 880                strbuf_add(&sb, name + klen, namelen - klen - ksuffixlen);
 881                strbuf_addstr(&sb, vstar + 1);
 882                *result = strbuf_detach(&sb, NULL);
 883        }
 884        return ret;
 885}
 886
 887static void query_refspecs_multiple(struct refspec *refs, int ref_count, struct refspec *query, struct string_list *results)
 888{
 889        int i;
 890        int find_src = !query->src;
 891
 892        if (find_src && !query->dst)
 893                error("query_refspecs_multiple: need either src or dst");
 894
 895        for (i = 0; i < ref_count; i++) {
 896                struct refspec *refspec = &refs[i];
 897                const char *key = find_src ? refspec->dst : refspec->src;
 898                const char *value = find_src ? refspec->src : refspec->dst;
 899                const char *needle = find_src ? query->dst : query->src;
 900                char **result = find_src ? &query->src : &query->dst;
 901
 902                if (!refspec->dst)
 903                        continue;
 904                if (refspec->pattern) {
 905                        if (match_name_with_pattern(key, needle, value, result))
 906                                string_list_append_nodup(results, *result);
 907                } else if (!strcmp(needle, key)) {
 908                        string_list_append(results, value);
 909                }
 910        }
 911}
 912
 913int query_refspecs(struct refspec *refs, int ref_count, struct refspec *query)
 914{
 915        int i;
 916        int find_src = !query->src;
 917        const char *needle = find_src ? query->dst : query->src;
 918        char **result = find_src ? &query->src : &query->dst;
 919
 920        if (find_src && !query->dst)
 921                return error("query_refspecs: need either src or dst");
 922
 923        for (i = 0; i < ref_count; i++) {
 924                struct refspec *refspec = &refs[i];
 925                const char *key = find_src ? refspec->dst : refspec->src;
 926                const char *value = find_src ? refspec->src : refspec->dst;
 927
 928                if (!refspec->dst)
 929                        continue;
 930                if (refspec->pattern) {
 931                        if (match_name_with_pattern(key, needle, value, result)) {
 932                                query->force = refspec->force;
 933                                return 0;
 934                        }
 935                } else if (!strcmp(needle, key)) {
 936                        *result = xstrdup(value);
 937                        query->force = refspec->force;
 938                        return 0;
 939                }
 940        }
 941        return -1;
 942}
 943
 944char *apply_refspecs(struct refspec *refspecs, int nr_refspec,
 945                     const char *name)
 946{
 947        struct refspec query;
 948
 949        memset(&query, 0, sizeof(struct refspec));
 950        query.src = (char *)name;
 951
 952        if (query_refspecs(refspecs, nr_refspec, &query))
 953                return NULL;
 954
 955        return query.dst;
 956}
 957
 958int remote_find_tracking(struct remote *remote, struct refspec *refspec)
 959{
 960        return query_refspecs(remote->fetch, remote->fetch_refspec_nr, refspec);
 961}
 962
 963static struct ref *alloc_ref_with_prefix(const char *prefix, size_t prefixlen,
 964                const char *name)
 965{
 966        size_t len = strlen(name);
 967        struct ref *ref = xcalloc(1, sizeof(struct ref) + prefixlen + len + 1);
 968        memcpy(ref->name, prefix, prefixlen);
 969        memcpy(ref->name + prefixlen, name, len);
 970        return ref;
 971}
 972
 973struct ref *alloc_ref(const char *name)
 974{
 975        return alloc_ref_with_prefix("", 0, name);
 976}
 977
 978struct ref *copy_ref(const struct ref *ref)
 979{
 980        struct ref *cpy;
 981        size_t len;
 982        if (!ref)
 983                return NULL;
 984        len = strlen(ref->name);
 985        cpy = xmalloc(sizeof(struct ref) + len + 1);
 986        memcpy(cpy, ref, sizeof(struct ref) + len + 1);
 987        cpy->next = NULL;
 988        cpy->symref = xstrdup_or_null(ref->symref);
 989        cpy->remote_status = xstrdup_or_null(ref->remote_status);
 990        cpy->peer_ref = copy_ref(ref->peer_ref);
 991        return cpy;
 992}
 993
 994struct ref *copy_ref_list(const struct ref *ref)
 995{
 996        struct ref *ret = NULL;
 997        struct ref **tail = &ret;
 998        while (ref) {
 999                *tail = copy_ref(ref);
1000                ref = ref->next;
1001                tail = &((*tail)->next);
1002        }
1003        return ret;
1004}
1005
1006static void free_ref(struct ref *ref)
1007{
1008        if (!ref)
1009                return;
1010        free_ref(ref->peer_ref);
1011        free(ref->remote_status);
1012        free(ref->symref);
1013        free(ref);
1014}
1015
1016void free_refs(struct ref *ref)
1017{
1018        struct ref *next;
1019        while (ref) {
1020                next = ref->next;
1021                free_ref(ref);
1022                ref = next;
1023        }
1024}
1025
1026int ref_compare_name(const void *va, const void *vb)
1027{
1028        const struct ref *a = va, *b = vb;
1029        return strcmp(a->name, b->name);
1030}
1031
1032static void *ref_list_get_next(const void *a)
1033{
1034        return ((const struct ref *)a)->next;
1035}
1036
1037static void ref_list_set_next(void *a, void *next)
1038{
1039        ((struct ref *)a)->next = next;
1040}
1041
1042void sort_ref_list(struct ref **l, int (*cmp)(const void *, const void *))
1043{
1044        *l = llist_mergesort(*l, ref_list_get_next, ref_list_set_next, cmp);
1045}
1046
1047int count_refspec_match(const char *pattern,
1048                        struct ref *refs,
1049                        struct ref **matched_ref)
1050{
1051        int patlen = strlen(pattern);
1052        struct ref *matched_weak = NULL;
1053        struct ref *matched = NULL;
1054        int weak_match = 0;
1055        int match = 0;
1056
1057        for (weak_match = match = 0; refs; refs = refs->next) {
1058                char *name = refs->name;
1059                int namelen = strlen(name);
1060
1061                if (!refname_match(pattern, name))
1062                        continue;
1063
1064                /* A match is "weak" if it is with refs outside
1065                 * heads or tags, and did not specify the pattern
1066                 * in full (e.g. "refs/remotes/origin/master") or at
1067                 * least from the toplevel (e.g. "remotes/origin/master");
1068                 * otherwise "git push $URL master" would result in
1069                 * ambiguity between remotes/origin/master and heads/master
1070                 * at the remote site.
1071                 */
1072                if (namelen != patlen &&
1073                    patlen != namelen - 5 &&
1074                    !starts_with(name, "refs/heads/") &&
1075                    !starts_with(name, "refs/tags/")) {
1076                        /* We want to catch the case where only weak
1077                         * matches are found and there are multiple
1078                         * matches, and where more than one strong
1079                         * matches are found, as ambiguous.  One
1080                         * strong match with zero or more weak matches
1081                         * are acceptable as a unique match.
1082                         */
1083                        matched_weak = refs;
1084                        weak_match++;
1085                }
1086                else {
1087                        matched = refs;
1088                        match++;
1089                }
1090        }
1091        if (!matched) {
1092                if (matched_ref)
1093                        *matched_ref = matched_weak;
1094                return weak_match;
1095        }
1096        else {
1097                if (matched_ref)
1098                        *matched_ref = matched;
1099                return match;
1100        }
1101}
1102
1103static void tail_link_ref(struct ref *ref, struct ref ***tail)
1104{
1105        **tail = ref;
1106        while (ref->next)
1107                ref = ref->next;
1108        *tail = &ref->next;
1109}
1110
1111static struct ref *alloc_delete_ref(void)
1112{
1113        struct ref *ref = alloc_ref("(delete)");
1114        hashclr(ref->new_sha1);
1115        return ref;
1116}
1117
1118static int try_explicit_object_name(const char *name,
1119                                    struct ref **match)
1120{
1121        unsigned char sha1[20];
1122
1123        if (!*name) {
1124                if (match)
1125                        *match = alloc_delete_ref();
1126                return 0;
1127        }
1128
1129        if (get_sha1(name, sha1))
1130                return -1;
1131
1132        if (match) {
1133                *match = alloc_ref(name);
1134                hashcpy((*match)->new_sha1, sha1);
1135        }
1136        return 0;
1137}
1138
1139static struct ref *make_linked_ref(const char *name, struct ref ***tail)
1140{
1141        struct ref *ret = alloc_ref(name);
1142        tail_link_ref(ret, tail);
1143        return ret;
1144}
1145
1146static char *guess_ref(const char *name, struct ref *peer)
1147{
1148        struct strbuf buf = STRBUF_INIT;
1149        unsigned char sha1[20];
1150
1151        const char *r = resolve_ref_unsafe(peer->name, RESOLVE_REF_READING,
1152                                           sha1, NULL);
1153        if (!r)
1154                return NULL;
1155
1156        if (starts_with(r, "refs/heads/"))
1157                strbuf_addstr(&buf, "refs/heads/");
1158        else if (starts_with(r, "refs/tags/"))
1159                strbuf_addstr(&buf, "refs/tags/");
1160        else
1161                return NULL;
1162
1163        strbuf_addstr(&buf, name);
1164        return strbuf_detach(&buf, NULL);
1165}
1166
1167static int match_explicit_lhs(struct ref *src,
1168                              struct refspec *rs,
1169                              struct ref **match,
1170                              int *allocated_match)
1171{
1172        switch (count_refspec_match(rs->src, src, match)) {
1173        case 1:
1174                if (allocated_match)
1175                        *allocated_match = 0;
1176                return 0;
1177        case 0:
1178                /* The source could be in the get_sha1() format
1179                 * not a reference name.  :refs/other is a
1180                 * way to delete 'other' ref at the remote end.
1181                 */
1182                if (try_explicit_object_name(rs->src, match) < 0)
1183                        return error("src refspec %s does not match any.", rs->src);
1184                if (allocated_match)
1185                        *allocated_match = 1;
1186                return 0;
1187        default:
1188                return error("src refspec %s matches more than one.", rs->src);
1189        }
1190}
1191
1192static int match_explicit(struct ref *src, struct ref *dst,
1193                          struct ref ***dst_tail,
1194                          struct refspec *rs)
1195{
1196        struct ref *matched_src, *matched_dst;
1197        int allocated_src;
1198
1199        const char *dst_value = rs->dst;
1200        char *dst_guess;
1201
1202        if (rs->pattern || rs->matching)
1203                return 0;
1204
1205        matched_src = matched_dst = NULL;
1206        if (match_explicit_lhs(src, rs, &matched_src, &allocated_src) < 0)
1207                return -1;
1208
1209        if (!dst_value) {
1210                unsigned char sha1[20];
1211                int flag;
1212
1213                dst_value = resolve_ref_unsafe(matched_src->name,
1214                                               RESOLVE_REF_READING,
1215                                               sha1, &flag);
1216                if (!dst_value ||
1217                    ((flag & REF_ISSYMREF) &&
1218                     !starts_with(dst_value, "refs/heads/")))
1219                        die("%s cannot be resolved to branch.",
1220                            matched_src->name);
1221        }
1222
1223        switch (count_refspec_match(dst_value, dst, &matched_dst)) {
1224        case 1:
1225                break;
1226        case 0:
1227                if (starts_with(dst_value, "refs/"))
1228                        matched_dst = make_linked_ref(dst_value, dst_tail);
1229                else if (is_null_sha1(matched_src->new_sha1))
1230                        error("unable to delete '%s': remote ref does not exist",
1231                              dst_value);
1232                else if ((dst_guess = guess_ref(dst_value, matched_src)))
1233                        matched_dst = make_linked_ref(dst_guess, dst_tail);
1234                else
1235                        error("unable to push to unqualified destination: %s\n"
1236                              "The destination refspec neither matches an "
1237                              "existing ref on the remote nor\n"
1238                              "begins with refs/, and we are unable to "
1239                              "guess a prefix based on the source ref.",
1240                              dst_value);
1241                break;
1242        default:
1243                matched_dst = NULL;
1244                error("dst refspec %s matches more than one.",
1245                      dst_value);
1246                break;
1247        }
1248        if (!matched_dst)
1249                return -1;
1250        if (matched_dst->peer_ref)
1251                return error("dst ref %s receives from more than one src.",
1252                      matched_dst->name);
1253        else {
1254                matched_dst->peer_ref = allocated_src ?
1255                                        matched_src :
1256                                        copy_ref(matched_src);
1257                matched_dst->force = rs->force;
1258        }
1259        return 0;
1260}
1261
1262static int match_explicit_refs(struct ref *src, struct ref *dst,
1263                               struct ref ***dst_tail, struct refspec *rs,
1264                               int rs_nr)
1265{
1266        int i, errs;
1267        for (i = errs = 0; i < rs_nr; i++)
1268                errs += match_explicit(src, dst, dst_tail, &rs[i]);
1269        return errs;
1270}
1271
1272static char *get_ref_match(const struct refspec *rs, int rs_nr, const struct ref *ref,
1273                int send_mirror, int direction, const struct refspec **ret_pat)
1274{
1275        const struct refspec *pat;
1276        char *name;
1277        int i;
1278        int matching_refs = -1;
1279        for (i = 0; i < rs_nr; i++) {
1280                if (rs[i].matching &&
1281                    (matching_refs == -1 || rs[i].force)) {
1282                        matching_refs = i;
1283                        continue;
1284                }
1285
1286                if (rs[i].pattern) {
1287                        const char *dst_side = rs[i].dst ? rs[i].dst : rs[i].src;
1288                        int match;
1289                        if (direction == FROM_SRC)
1290                                match = match_name_with_pattern(rs[i].src, ref->name, dst_side, &name);
1291                        else
1292                                match = match_name_with_pattern(dst_side, ref->name, rs[i].src, &name);
1293                        if (match) {
1294                                matching_refs = i;
1295                                break;
1296                        }
1297                }
1298        }
1299        if (matching_refs == -1)
1300                return NULL;
1301
1302        pat = rs + matching_refs;
1303        if (pat->matching) {
1304                /*
1305                 * "matching refs"; traditionally we pushed everything
1306                 * including refs outside refs/heads/ hierarchy, but
1307                 * that does not make much sense these days.
1308                 */
1309                if (!send_mirror && !starts_with(ref->name, "refs/heads/"))
1310                        return NULL;
1311                name = xstrdup(ref->name);
1312        }
1313        if (ret_pat)
1314                *ret_pat = pat;
1315        return name;
1316}
1317
1318static struct ref **tail_ref(struct ref **head)
1319{
1320        struct ref **tail = head;
1321        while (*tail)
1322                tail = &((*tail)->next);
1323        return tail;
1324}
1325
1326struct tips {
1327        struct commit **tip;
1328        int nr, alloc;
1329};
1330
1331static void add_to_tips(struct tips *tips, const unsigned char *sha1)
1332{
1333        struct commit *commit;
1334
1335        if (is_null_sha1(sha1))
1336                return;
1337        commit = lookup_commit_reference_gently(sha1, 1);
1338        if (!commit || (commit->object.flags & TMP_MARK))
1339                return;
1340        commit->object.flags |= TMP_MARK;
1341        ALLOC_GROW(tips->tip, tips->nr + 1, tips->alloc);
1342        tips->tip[tips->nr++] = commit;
1343}
1344
1345static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***dst_tail)
1346{
1347        struct string_list dst_tag = STRING_LIST_INIT_NODUP;
1348        struct string_list src_tag = STRING_LIST_INIT_NODUP;
1349        struct string_list_item *item;
1350        struct ref *ref;
1351        struct tips sent_tips;
1352
1353        /*
1354         * Collect everything we know they would have at the end of
1355         * this push, and collect all tags they have.
1356         */
1357        memset(&sent_tips, 0, sizeof(sent_tips));
1358        for (ref = *dst; ref; ref = ref->next) {
1359                if (ref->peer_ref &&
1360                    !is_null_sha1(ref->peer_ref->new_sha1))
1361                        add_to_tips(&sent_tips, ref->peer_ref->new_sha1);
1362                else
1363                        add_to_tips(&sent_tips, ref->old_sha1);
1364                if (starts_with(ref->name, "refs/tags/"))
1365                        string_list_append(&dst_tag, ref->name);
1366        }
1367        clear_commit_marks_many(sent_tips.nr, sent_tips.tip, TMP_MARK);
1368
1369        string_list_sort(&dst_tag);
1370
1371        /* Collect tags they do not have. */
1372        for (ref = src; ref; ref = ref->next) {
1373                if (!starts_with(ref->name, "refs/tags/"))
1374                        continue; /* not a tag */
1375                if (string_list_has_string(&dst_tag, ref->name))
1376                        continue; /* they already have it */
1377                if (sha1_object_info(ref->new_sha1, NULL) != OBJ_TAG)
1378                        continue; /* be conservative */
1379                item = string_list_append(&src_tag, ref->name);
1380                item->util = ref;
1381        }
1382        string_list_clear(&dst_tag, 0);
1383
1384        /*
1385         * At this point, src_tag lists tags that are missing from
1386         * dst, and sent_tips lists the tips we are pushing or those
1387         * that we know they already have. An element in the src_tag
1388         * that is an ancestor of any of the sent_tips needs to be
1389         * sent to the other side.
1390         */
1391        if (sent_tips.nr) {
1392                for_each_string_list_item(item, &src_tag) {
1393                        struct ref *ref = item->util;
1394                        struct ref *dst_ref;
1395                        struct commit *commit;
1396
1397                        if (is_null_sha1(ref->new_sha1))
1398                                continue;
1399                        commit = lookup_commit_reference_gently(ref->new_sha1, 1);
1400                        if (!commit)
1401                                /* not pushing a commit, which is not an error */
1402                                continue;
1403
1404                        /*
1405                         * Is this tag, which they do not have, reachable from
1406                         * any of the commits we are sending?
1407                         */
1408                        if (!in_merge_bases_many(commit, sent_tips.nr, sent_tips.tip))
1409                                continue;
1410
1411                        /* Add it in */
1412                        dst_ref = make_linked_ref(ref->name, dst_tail);
1413                        hashcpy(dst_ref->new_sha1, ref->new_sha1);
1414                        dst_ref->peer_ref = copy_ref(ref);
1415                }
1416        }
1417        string_list_clear(&src_tag, 0);
1418        free(sent_tips.tip);
1419}
1420
1421struct ref *find_ref_by_name(const struct ref *list, const char *name)
1422{
1423        for ( ; list; list = list->next)
1424                if (!strcmp(list->name, name))
1425                        return (struct ref *)list;
1426        return NULL;
1427}
1428
1429static void prepare_ref_index(struct string_list *ref_index, struct ref *ref)
1430{
1431        for ( ; ref; ref = ref->next)
1432                string_list_append_nodup(ref_index, ref->name)->util = ref;
1433
1434        string_list_sort(ref_index);
1435}
1436
1437/*
1438 * Given only the set of local refs, sanity-check the set of push
1439 * refspecs. We can't catch all errors that match_push_refs would,
1440 * but we can catch some errors early before even talking to the
1441 * remote side.
1442 */
1443int check_push_refs(struct ref *src, int nr_refspec, const char **refspec_names)
1444{
1445        struct refspec *refspec = parse_push_refspec(nr_refspec, refspec_names);
1446        int ret = 0;
1447        int i;
1448
1449        for (i = 0; i < nr_refspec; i++) {
1450                struct refspec *rs = refspec + i;
1451
1452                if (rs->pattern || rs->matching)
1453                        continue;
1454
1455                ret |= match_explicit_lhs(src, rs, NULL, NULL);
1456        }
1457
1458        free_refspec(nr_refspec, refspec);
1459        return ret;
1460}
1461
1462/*
1463 * Given the set of refs the local repository has, the set of refs the
1464 * remote repository has, and the refspec used for push, determine
1465 * what remote refs we will update and with what value by setting
1466 * peer_ref (which object is being pushed) and force (if the push is
1467 * forced) in elements of "dst". The function may add new elements to
1468 * dst (e.g. pushing to a new branch, done in match_explicit_refs).
1469 */
1470int match_push_refs(struct ref *src, struct ref **dst,
1471                    int nr_refspec, const char **refspec, int flags)
1472{
1473        struct refspec *rs;
1474        int send_all = flags & MATCH_REFS_ALL;
1475        int send_mirror = flags & MATCH_REFS_MIRROR;
1476        int send_prune = flags & MATCH_REFS_PRUNE;
1477        int errs;
1478        static const char *default_refspec[] = { ":", NULL };
1479        struct ref *ref, **dst_tail = tail_ref(dst);
1480        struct string_list dst_ref_index = STRING_LIST_INIT_NODUP;
1481
1482        if (!nr_refspec) {
1483                nr_refspec = 1;
1484                refspec = default_refspec;
1485        }
1486        rs = parse_push_refspec(nr_refspec, (const char **) refspec);
1487        errs = match_explicit_refs(src, *dst, &dst_tail, rs, nr_refspec);
1488
1489        /* pick the remainder */
1490        for (ref = src; ref; ref = ref->next) {
1491                struct string_list_item *dst_item;
1492                struct ref *dst_peer;
1493                const struct refspec *pat = NULL;
1494                char *dst_name;
1495
1496                dst_name = get_ref_match(rs, nr_refspec, ref, send_mirror, FROM_SRC, &pat);
1497                if (!dst_name)
1498                        continue;
1499
1500                if (!dst_ref_index.nr)
1501                        prepare_ref_index(&dst_ref_index, *dst);
1502
1503                dst_item = string_list_lookup(&dst_ref_index, dst_name);
1504                dst_peer = dst_item ? dst_item->util : NULL;
1505                if (dst_peer) {
1506                        if (dst_peer->peer_ref)
1507                                /* We're already sending something to this ref. */
1508                                goto free_name;
1509                } else {
1510                        if (pat->matching && !(send_all || send_mirror))
1511                                /*
1512                                 * Remote doesn't have it, and we have no
1513                                 * explicit pattern, and we don't have
1514                                 * --all or --mirror.
1515                                 */
1516                                goto free_name;
1517
1518                        /* Create a new one and link it */
1519                        dst_peer = make_linked_ref(dst_name, &dst_tail);
1520                        hashcpy(dst_peer->new_sha1, ref->new_sha1);
1521                        string_list_insert(&dst_ref_index,
1522                                dst_peer->name)->util = dst_peer;
1523                }
1524                dst_peer->peer_ref = copy_ref(ref);
1525                dst_peer->force = pat->force;
1526        free_name:
1527                free(dst_name);
1528        }
1529
1530        string_list_clear(&dst_ref_index, 0);
1531
1532        if (flags & MATCH_REFS_FOLLOW_TAGS)
1533                add_missing_tags(src, dst, &dst_tail);
1534
1535        if (send_prune) {
1536                struct string_list src_ref_index = STRING_LIST_INIT_NODUP;
1537                /* check for missing refs on the remote */
1538                for (ref = *dst; ref; ref = ref->next) {
1539                        char *src_name;
1540
1541                        if (ref->peer_ref)
1542                                /* We're already sending something to this ref. */
1543                                continue;
1544
1545                        src_name = get_ref_match(rs, nr_refspec, ref, send_mirror, FROM_DST, NULL);
1546                        if (src_name) {
1547                                if (!src_ref_index.nr)
1548                                        prepare_ref_index(&src_ref_index, src);
1549                                if (!string_list_has_string(&src_ref_index,
1550                                            src_name))
1551                                        ref->peer_ref = alloc_delete_ref();
1552                                free(src_name);
1553                        }
1554                }
1555                string_list_clear(&src_ref_index, 0);
1556        }
1557        if (errs)
1558                return -1;
1559        return 0;
1560}
1561
1562void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
1563                             int force_update)
1564{
1565        struct ref *ref;
1566
1567        for (ref = remote_refs; ref; ref = ref->next) {
1568                int force_ref_update = ref->force || force_update;
1569                int reject_reason = 0;
1570
1571                if (ref->peer_ref)
1572                        hashcpy(ref->new_sha1, ref->peer_ref->new_sha1);
1573                else if (!send_mirror)
1574                        continue;
1575
1576                ref->deletion = is_null_sha1(ref->new_sha1);
1577                if (!ref->deletion &&
1578                        !hashcmp(ref->old_sha1, ref->new_sha1)) {
1579                        ref->status = REF_STATUS_UPTODATE;
1580                        continue;
1581                }
1582
1583                /*
1584                 * Bypass the usual "must fast-forward" check but
1585                 * replace it with a weaker "the old value must be
1586                 * this value we observed".  If the remote ref has
1587                 * moved and is now different from what we expect,
1588                 * reject any push.
1589                 *
1590                 * It also is an error if the user told us to check
1591                 * with the remote-tracking branch to find the value
1592                 * to expect, but we did not have such a tracking
1593                 * branch.
1594                 */
1595                if (ref->expect_old_sha1) {
1596                        if (ref->expect_old_no_trackback ||
1597                            hashcmp(ref->old_sha1, ref->old_sha1_expect))
1598                                reject_reason = REF_STATUS_REJECT_STALE;
1599                }
1600
1601                /*
1602                 * The usual "must fast-forward" rules.
1603                 *
1604                 * Decide whether an individual refspec A:B can be
1605                 * pushed.  The push will succeed if any of the
1606                 * following are true:
1607                 *
1608                 * (1) the remote reference B does not exist
1609                 *
1610                 * (2) the remote reference B is being removed (i.e.,
1611                 *     pushing :B where no source is specified)
1612                 *
1613                 * (3) the destination is not under refs/tags/, and
1614                 *     if the old and new value is a commit, the new
1615                 *     is a descendant of the old.
1616                 *
1617                 * (4) it is forced using the +A:B notation, or by
1618                 *     passing the --force argument
1619                 */
1620
1621                else if (!ref->deletion && !is_null_sha1(ref->old_sha1)) {
1622                        if (starts_with(ref->name, "refs/tags/"))
1623                                reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS;
1624                        else if (!has_sha1_file(ref->old_sha1))
1625                                reject_reason = REF_STATUS_REJECT_FETCH_FIRST;
1626                        else if (!lookup_commit_reference_gently(ref->old_sha1, 1) ||
1627                                 !lookup_commit_reference_gently(ref->new_sha1, 1))
1628                                reject_reason = REF_STATUS_REJECT_NEEDS_FORCE;
1629                        else if (!ref_newer(ref->new_sha1, ref->old_sha1))
1630                                reject_reason = REF_STATUS_REJECT_NONFASTFORWARD;
1631                }
1632
1633                /*
1634                 * "--force" will defeat any rejection implemented
1635                 * by the rules above.
1636                 */
1637                if (!force_ref_update)
1638                        ref->status = reject_reason;
1639                else if (reject_reason)
1640                        ref->forced_update = 1;
1641        }
1642}
1643
1644static void set_merge(struct branch *ret)
1645{
1646        struct remote *remote;
1647        char *ref;
1648        unsigned char sha1[20];
1649        int i;
1650
1651        if (!ret)
1652                return; /* no branch */
1653        if (ret->merge)
1654                return; /* already run */
1655        if (!ret->remote_name || !ret->merge_nr) {
1656                /*
1657                 * no merge config; let's make sure we don't confuse callers
1658                 * with a non-zero merge_nr but a NULL merge
1659                 */
1660                ret->merge_nr = 0;
1661                return;
1662        }
1663
1664        remote = remote_get(ret->remote_name);
1665
1666        ret->merge = xcalloc(ret->merge_nr, sizeof(*ret->merge));
1667        for (i = 0; i < ret->merge_nr; i++) {
1668                ret->merge[i] = xcalloc(1, sizeof(**ret->merge));
1669                ret->merge[i]->src = xstrdup(ret->merge_name[i]);
1670                if (!remote_find_tracking(remote, ret->merge[i]) ||
1671                    strcmp(ret->remote_name, "."))
1672                        continue;
1673                if (dwim_ref(ret->merge_name[i], strlen(ret->merge_name[i]),
1674                             sha1, &ref) == 1)
1675                        ret->merge[i]->dst = ref;
1676                else
1677                        ret->merge[i]->dst = xstrdup(ret->merge_name[i]);
1678        }
1679}
1680
1681struct branch *branch_get(const char *name)
1682{
1683        struct branch *ret;
1684
1685        read_config();
1686        if (!name || !*name || !strcmp(name, "HEAD"))
1687                ret = current_branch;
1688        else
1689                ret = make_branch(name, 0);
1690        set_merge(ret);
1691        return ret;
1692}
1693
1694int branch_has_merge_config(struct branch *branch)
1695{
1696        return branch && !!branch->merge;
1697}
1698
1699int branch_merge_matches(struct branch *branch,
1700                                 int i,
1701                                 const char *refname)
1702{
1703        if (!branch || i < 0 || i >= branch->merge_nr)
1704                return 0;
1705        return refname_match(branch->merge[i]->src, refname);
1706}
1707
1708__attribute((format (printf,2,3)))
1709static const char *error_buf(struct strbuf *err, const char *fmt, ...)
1710{
1711        if (err) {
1712                va_list ap;
1713                va_start(ap, fmt);
1714                strbuf_vaddf(err, fmt, ap);
1715                va_end(ap);
1716        }
1717        return NULL;
1718}
1719
1720const char *branch_get_upstream(struct branch *branch, struct strbuf *err)
1721{
1722        if (!branch)
1723                return error_buf(err, _("HEAD does not point to a branch"));
1724
1725        if (!branch->merge || !branch->merge[0]) {
1726                /*
1727                 * no merge config; is it because the user didn't define any,
1728                 * or because it is not a real branch, and get_branch
1729                 * auto-vivified it?
1730                 */
1731                if (!ref_exists(branch->refname))
1732                        return error_buf(err, _("no such branch: '%s'"),
1733                                         branch->name);
1734                return error_buf(err,
1735                                 _("no upstream configured for branch '%s'"),
1736                                 branch->name);
1737        }
1738
1739        if (!branch->merge[0]->dst)
1740                return error_buf(err,
1741                                 _("upstream branch '%s' not stored as a remote-tracking branch"),
1742                                 branch->merge[0]->src);
1743
1744        return branch->merge[0]->dst;
1745}
1746
1747static const char *tracking_for_push_dest(struct remote *remote,
1748                                          const char *refname,
1749                                          struct strbuf *err)
1750{
1751        char *ret;
1752
1753        ret = apply_refspecs(remote->fetch, remote->fetch_refspec_nr, refname);
1754        if (!ret)
1755                return error_buf(err,
1756                                 _("push destination '%s' on remote '%s' has no local tracking branch"),
1757                                 refname, remote->name);
1758        return ret;
1759}
1760
1761static const char *branch_get_push_1(struct branch *branch, struct strbuf *err)
1762{
1763        struct remote *remote;
1764
1765        if (!branch)
1766                return error_buf(err, _("HEAD does not point to a branch"));
1767
1768        remote = remote_get(pushremote_for_branch(branch, NULL));
1769        if (!remote)
1770                return error_buf(err,
1771                                 _("branch '%s' has no remote for pushing"),
1772                                 branch->name);
1773
1774        if (remote->push_refspec_nr) {
1775                char *dst;
1776                const char *ret;
1777
1778                dst = apply_refspecs(remote->push, remote->push_refspec_nr,
1779                                     branch->refname);
1780                if (!dst)
1781                        return error_buf(err,
1782                                         _("push refspecs for '%s' do not include '%s'"),
1783                                         remote->name, branch->name);
1784
1785                ret = tracking_for_push_dest(remote, dst, err);
1786                free(dst);
1787                return ret;
1788        }
1789
1790        if (remote->mirror)
1791                return tracking_for_push_dest(remote, branch->refname, err);
1792
1793        switch (push_default) {
1794        case PUSH_DEFAULT_NOTHING:
1795                return error_buf(err, _("push has no destination (push.default is 'nothing')"));
1796
1797        case PUSH_DEFAULT_MATCHING:
1798        case PUSH_DEFAULT_CURRENT:
1799                return tracking_for_push_dest(remote, branch->refname, err);
1800
1801        case PUSH_DEFAULT_UPSTREAM:
1802                return branch_get_upstream(branch, err);
1803
1804        case PUSH_DEFAULT_UNSPECIFIED:
1805        case PUSH_DEFAULT_SIMPLE:
1806                {
1807                        const char *up, *cur;
1808
1809                        up = branch_get_upstream(branch, err);
1810                        if (!up)
1811                                return NULL;
1812                        cur = tracking_for_push_dest(remote, branch->refname, err);
1813                        if (!cur)
1814                                return NULL;
1815                        if (strcmp(cur, up))
1816                                return error_buf(err,
1817                                                 _("cannot resolve 'simple' push to a single destination"));
1818                        return cur;
1819                }
1820        }
1821
1822        die("BUG: unhandled push situation");
1823}
1824
1825const char *branch_get_push(struct branch *branch, struct strbuf *err)
1826{
1827        if (!branch->push_tracking_ref)
1828                branch->push_tracking_ref = branch_get_push_1(branch, err);
1829        return branch->push_tracking_ref;
1830}
1831
1832static int ignore_symref_update(const char *refname)
1833{
1834        unsigned char sha1[20];
1835        int flag;
1836
1837        if (!resolve_ref_unsafe(refname, 0, sha1, &flag))
1838                return 0; /* non-existing refs are OK */
1839        return (flag & REF_ISSYMREF);
1840}
1841
1842/*
1843 * Create and return a list of (struct ref) consisting of copies of
1844 * each remote_ref that matches refspec.  refspec must be a pattern.
1845 * Fill in the copies' peer_ref to describe the local tracking refs to
1846 * which they map.  Omit any references that would map to an existing
1847 * local symbolic ref.
1848 */
1849static struct ref *get_expanded_map(const struct ref *remote_refs,
1850                                    const struct refspec *refspec)
1851{
1852        const struct ref *ref;
1853        struct ref *ret = NULL;
1854        struct ref **tail = &ret;
1855
1856        for (ref = remote_refs; ref; ref = ref->next) {
1857                char *expn_name = NULL;
1858
1859                if (strchr(ref->name, '^'))
1860                        continue; /* a dereference item */
1861                if (match_name_with_pattern(refspec->src, ref->name,
1862                                            refspec->dst, &expn_name) &&
1863                    !ignore_symref_update(expn_name)) {
1864                        struct ref *cpy = copy_ref(ref);
1865
1866                        cpy->peer_ref = alloc_ref(expn_name);
1867                        if (refspec->force)
1868                                cpy->peer_ref->force = 1;
1869                        *tail = cpy;
1870                        tail = &cpy->next;
1871                }
1872                free(expn_name);
1873        }
1874
1875        return ret;
1876}
1877
1878static const struct ref *find_ref_by_name_abbrev(const struct ref *refs, const char *name)
1879{
1880        const struct ref *ref;
1881        for (ref = refs; ref; ref = ref->next) {
1882                if (refname_match(name, ref->name))
1883                        return ref;
1884        }
1885        return NULL;
1886}
1887
1888struct ref *get_remote_ref(const struct ref *remote_refs, const char *name)
1889{
1890        const struct ref *ref = find_ref_by_name_abbrev(remote_refs, name);
1891
1892        if (!ref)
1893                return NULL;
1894
1895        return copy_ref(ref);
1896}
1897
1898static struct ref *get_local_ref(const char *name)
1899{
1900        if (!name || name[0] == '\0')
1901                return NULL;
1902
1903        if (starts_with(name, "refs/"))
1904                return alloc_ref(name);
1905
1906        if (starts_with(name, "heads/") ||
1907            starts_with(name, "tags/") ||
1908            starts_with(name, "remotes/"))
1909                return alloc_ref_with_prefix("refs/", 5, name);
1910
1911        return alloc_ref_with_prefix("refs/heads/", 11, name);
1912}
1913
1914int get_fetch_map(const struct ref *remote_refs,
1915                  const struct refspec *refspec,
1916                  struct ref ***tail,
1917                  int missing_ok)
1918{
1919        struct ref *ref_map, **rmp;
1920
1921        if (refspec->pattern) {
1922                ref_map = get_expanded_map(remote_refs, refspec);
1923        } else {
1924                const char *name = refspec->src[0] ? refspec->src : "HEAD";
1925
1926                if (refspec->exact_sha1) {
1927                        ref_map = alloc_ref(name);
1928                        get_sha1_hex(name, ref_map->old_sha1);
1929                } else {
1930                        ref_map = get_remote_ref(remote_refs, name);
1931                }
1932                if (!missing_ok && !ref_map)
1933                        die("Couldn't find remote ref %s", name);
1934                if (ref_map) {
1935                        ref_map->peer_ref = get_local_ref(refspec->dst);
1936                        if (ref_map->peer_ref && refspec->force)
1937                                ref_map->peer_ref->force = 1;
1938                }
1939        }
1940
1941        for (rmp = &ref_map; *rmp; ) {
1942                if ((*rmp)->peer_ref) {
1943                        if (!starts_with((*rmp)->peer_ref->name, "refs/") ||
1944                            check_refname_format((*rmp)->peer_ref->name, 0)) {
1945                                struct ref *ignore = *rmp;
1946                                error("* Ignoring funny ref '%s' locally",
1947                                      (*rmp)->peer_ref->name);
1948                                *rmp = (*rmp)->next;
1949                                free(ignore->peer_ref);
1950                                free(ignore);
1951                                continue;
1952                        }
1953                }
1954                rmp = &((*rmp)->next);
1955        }
1956
1957        if (ref_map)
1958                tail_link_ref(ref_map, tail);
1959
1960        return 0;
1961}
1962
1963int resolve_remote_symref(struct ref *ref, struct ref *list)
1964{
1965        if (!ref->symref)
1966                return 0;
1967        for (; list; list = list->next)
1968                if (!strcmp(ref->symref, list->name)) {
1969                        hashcpy(ref->old_sha1, list->old_sha1);
1970                        return 0;
1971                }
1972        return 1;
1973}
1974
1975static void unmark_and_free(struct commit_list *list, unsigned int mark)
1976{
1977        while (list) {
1978                struct commit_list *temp = list;
1979                temp->item->object.flags &= ~mark;
1980                list = temp->next;
1981                free(temp);
1982        }
1983}
1984
1985int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1)
1986{
1987        struct object *o;
1988        struct commit *old, *new;
1989        struct commit_list *list, *used;
1990        int found = 0;
1991
1992        /*
1993         * Both new and old must be commit-ish and new is descendant of
1994         * old.  Otherwise we require --force.
1995         */
1996        o = deref_tag(parse_object(old_sha1), NULL, 0);
1997        if (!o || o->type != OBJ_COMMIT)
1998                return 0;
1999        old = (struct commit *) o;
2000
2001        o = deref_tag(parse_object(new_sha1), NULL, 0);
2002        if (!o || o->type != OBJ_COMMIT)
2003                return 0;
2004        new = (struct commit *) o;
2005
2006        if (parse_commit(new) < 0)
2007                return 0;
2008
2009        used = list = NULL;
2010        commit_list_insert(new, &list);
2011        while (list) {
2012                new = pop_most_recent_commit(&list, TMP_MARK);
2013                commit_list_insert(new, &used);
2014                if (new == old) {
2015                        found = 1;
2016                        break;
2017                }
2018        }
2019        unmark_and_free(list, TMP_MARK);
2020        unmark_and_free(used, TMP_MARK);
2021        return found;
2022}
2023
2024/*
2025 * Compare a branch with its upstream, and save their differences (number
2026 * of commits) in *num_ours and *num_theirs. The name of the upstream branch
2027 * (or NULL if no upstream is defined) is returned via *upstream_name, if it
2028 * is not itself NULL.
2029 *
2030 * Returns -1 if num_ours and num_theirs could not be filled in (e.g., no
2031 * upstream defined, or ref does not exist), 0 otherwise.
2032 */
2033int stat_tracking_info(struct branch *branch, int *num_ours, int *num_theirs,
2034                       const char **upstream_name)
2035{
2036        unsigned char sha1[20];
2037        struct commit *ours, *theirs;
2038        char symmetric[84];
2039        struct rev_info revs;
2040        const char *rev_argv[10], *base;
2041        int rev_argc;
2042
2043        /* Cannot stat unless we are marked to build on top of somebody else. */
2044        base = branch_get_upstream(branch, NULL);
2045        if (upstream_name)
2046                *upstream_name = base;
2047        if (!base)
2048                return -1;
2049
2050        /* Cannot stat if what we used to build on no longer exists */
2051        if (read_ref(base, sha1))
2052                return -1;
2053        theirs = lookup_commit_reference(sha1);
2054        if (!theirs)
2055                return -1;
2056
2057        if (read_ref(branch->refname, sha1))
2058                return -1;
2059        ours = lookup_commit_reference(sha1);
2060        if (!ours)
2061                return -1;
2062
2063        /* are we the same? */
2064        if (theirs == ours) {
2065                *num_theirs = *num_ours = 0;
2066                return 0;
2067        }
2068
2069        /* Run "rev-list --left-right ours...theirs" internally... */
2070        rev_argc = 0;
2071        rev_argv[rev_argc++] = NULL;
2072        rev_argv[rev_argc++] = "--left-right";
2073        rev_argv[rev_argc++] = symmetric;
2074        rev_argv[rev_argc++] = "--";
2075        rev_argv[rev_argc] = NULL;
2076
2077        strcpy(symmetric, sha1_to_hex(ours->object.sha1));
2078        strcpy(symmetric + 40, "...");
2079        strcpy(symmetric + 43, sha1_to_hex(theirs->object.sha1));
2080
2081        init_revisions(&revs, NULL);
2082        setup_revisions(rev_argc, rev_argv, &revs, NULL);
2083        if (prepare_revision_walk(&revs))
2084                die("revision walk setup failed");
2085
2086        /* ... and count the commits on each side. */
2087        *num_ours = 0;
2088        *num_theirs = 0;
2089        while (1) {
2090                struct commit *c = get_revision(&revs);
2091                if (!c)
2092                        break;
2093                if (c->object.flags & SYMMETRIC_LEFT)
2094                        (*num_ours)++;
2095                else
2096                        (*num_theirs)++;
2097        }
2098
2099        /* clear object flags smudged by the above traversal */
2100        clear_commit_marks(ours, ALL_REV_FLAGS);
2101        clear_commit_marks(theirs, ALL_REV_FLAGS);
2102        return 0;
2103}
2104
2105/*
2106 * Return true when there is anything to report, otherwise false.
2107 */
2108int format_tracking_info(struct branch *branch, struct strbuf *sb)
2109{
2110        int ours, theirs;
2111        const char *full_base;
2112        char *base;
2113        int upstream_is_gone = 0;
2114
2115        if (stat_tracking_info(branch, &ours, &theirs, &full_base) < 0) {
2116                if (!full_base)
2117                        return 0;
2118                upstream_is_gone = 1;
2119        }
2120
2121        base = shorten_unambiguous_ref(full_base, 0);
2122        if (upstream_is_gone) {
2123                strbuf_addf(sb,
2124                        _("Your branch is based on '%s', but the upstream is gone.\n"),
2125                        base);
2126                if (advice_status_hints)
2127                        strbuf_addf(sb,
2128                                _("  (use \"git branch --unset-upstream\" to fixup)\n"));
2129        } else if (!ours && !theirs) {
2130                strbuf_addf(sb,
2131                        _("Your branch is up-to-date with '%s'.\n"),
2132                        base);
2133        } else if (!theirs) {
2134                strbuf_addf(sb,
2135                        Q_("Your branch is ahead of '%s' by %d commit.\n",
2136                           "Your branch is ahead of '%s' by %d commits.\n",
2137                           ours),
2138                        base, ours);
2139                if (advice_status_hints)
2140                        strbuf_addf(sb,
2141                                _("  (use \"git push\" to publish your local commits)\n"));
2142        } else if (!ours) {
2143                strbuf_addf(sb,
2144                        Q_("Your branch is behind '%s' by %d commit, "
2145                               "and can be fast-forwarded.\n",
2146                           "Your branch is behind '%s' by %d commits, "
2147                               "and can be fast-forwarded.\n",
2148                           theirs),
2149                        base, theirs);
2150                if (advice_status_hints)
2151                        strbuf_addf(sb,
2152                                _("  (use \"git pull\" to update your local branch)\n"));
2153        } else {
2154                strbuf_addf(sb,
2155                        Q_("Your branch and '%s' have diverged,\n"
2156                               "and have %d and %d different commit each, "
2157                               "respectively.\n",
2158                           "Your branch and '%s' have diverged,\n"
2159                               "and have %d and %d different commits each, "
2160                               "respectively.\n",
2161                           theirs),
2162                        base, ours, theirs);
2163                if (advice_status_hints)
2164                        strbuf_addf(sb,
2165                                _("  (use \"git pull\" to merge the remote branch into yours)\n"));
2166        }
2167        free(base);
2168        return 1;
2169}
2170
2171static int one_local_ref(const char *refname, const struct object_id *oid,
2172                         int flag, void *cb_data)
2173{
2174        struct ref ***local_tail = cb_data;
2175        struct ref *ref;
2176        int len;
2177
2178        /* we already know it starts with refs/ to get here */
2179        if (check_refname_format(refname + 5, 0))
2180                return 0;
2181
2182        len = strlen(refname) + 1;
2183        ref = xcalloc(1, sizeof(*ref) + len);
2184        hashcpy(ref->new_sha1, oid->hash);
2185        memcpy(ref->name, refname, len);
2186        **local_tail = ref;
2187        *local_tail = &ref->next;
2188        return 0;
2189}
2190
2191struct ref *get_local_heads(void)
2192{
2193        struct ref *local_refs = NULL, **local_tail = &local_refs;
2194
2195        for_each_ref(one_local_ref, &local_tail);
2196        return local_refs;
2197}
2198
2199struct ref *guess_remote_head(const struct ref *head,
2200                              const struct ref *refs,
2201                              int all)
2202{
2203        const struct ref *r;
2204        struct ref *list = NULL;
2205        struct ref **tail = &list;
2206
2207        if (!head)
2208                return NULL;
2209
2210        /*
2211         * Some transports support directly peeking at
2212         * where HEAD points; if that is the case, then
2213         * we don't have to guess.
2214         */
2215        if (head->symref)
2216                return copy_ref(find_ref_by_name(refs, head->symref));
2217
2218        /* If refs/heads/master could be right, it is. */
2219        if (!all) {
2220                r = find_ref_by_name(refs, "refs/heads/master");
2221                if (r && !hashcmp(r->old_sha1, head->old_sha1))
2222                        return copy_ref(r);
2223        }
2224
2225        /* Look for another ref that points there */
2226        for (r = refs; r; r = r->next) {
2227                if (r != head &&
2228                    starts_with(r->name, "refs/heads/") &&
2229                    !hashcmp(r->old_sha1, head->old_sha1)) {
2230                        *tail = copy_ref(r);
2231                        tail = &((*tail)->next);
2232                        if (!all)
2233                                break;
2234                }
2235        }
2236
2237        return list;
2238}
2239
2240struct stale_heads_info {
2241        struct string_list *ref_names;
2242        struct ref **stale_refs_tail;
2243        struct refspec *refs;
2244        int ref_count;
2245};
2246
2247static int get_stale_heads_cb(const char *refname, const struct object_id *oid,
2248                              int flags, void *cb_data)
2249{
2250        struct stale_heads_info *info = cb_data;
2251        struct string_list matches = STRING_LIST_INIT_DUP;
2252        struct refspec query;
2253        int i, stale = 1;
2254        memset(&query, 0, sizeof(struct refspec));
2255        query.dst = (char *)refname;
2256
2257        query_refspecs_multiple(info->refs, info->ref_count, &query, &matches);
2258        if (matches.nr == 0)
2259                goto clean_exit; /* No matches */
2260
2261        /*
2262         * If we did find a suitable refspec and it's not a symref and
2263         * it's not in the list of refs that currently exist in that
2264         * remote, we consider it to be stale. In order to deal with
2265         * overlapping refspecs, we need to go over all of the
2266         * matching refs.
2267         */
2268        if (flags & REF_ISSYMREF)
2269                goto clean_exit;
2270
2271        for (i = 0; stale && i < matches.nr; i++)
2272                if (string_list_has_string(info->ref_names, matches.items[i].string))
2273                        stale = 0;
2274
2275        if (stale) {
2276                struct ref *ref = make_linked_ref(refname, &info->stale_refs_tail);
2277                hashcpy(ref->new_sha1, oid->hash);
2278        }
2279
2280clean_exit:
2281        string_list_clear(&matches, 0);
2282        return 0;
2283}
2284
2285struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fetch_map)
2286{
2287        struct ref *ref, *stale_refs = NULL;
2288        struct string_list ref_names = STRING_LIST_INIT_NODUP;
2289        struct stale_heads_info info;
2290
2291        info.ref_names = &ref_names;
2292        info.stale_refs_tail = &stale_refs;
2293        info.refs = refs;
2294        info.ref_count = ref_count;
2295        for (ref = fetch_map; ref; ref = ref->next)
2296                string_list_append(&ref_names, ref->name);
2297        string_list_sort(&ref_names);
2298        for_each_ref(get_stale_heads_cb, &info);
2299        string_list_clear(&ref_names, 0);
2300        return stale_refs;
2301}
2302
2303/*
2304 * Compare-and-swap
2305 */
2306static void clear_cas_option(struct push_cas_option *cas)
2307{
2308        int i;
2309
2310        for (i = 0; i < cas->nr; i++)
2311                free(cas->entry[i].refname);
2312        free(cas->entry);
2313        memset(cas, 0, sizeof(*cas));
2314}
2315
2316static struct push_cas *add_cas_entry(struct push_cas_option *cas,
2317                                      const char *refname,
2318                                      size_t refnamelen)
2319{
2320        struct push_cas *entry;
2321        ALLOC_GROW(cas->entry, cas->nr + 1, cas->alloc);
2322        entry = &cas->entry[cas->nr++];
2323        memset(entry, 0, sizeof(*entry));
2324        entry->refname = xmemdupz(refname, refnamelen);
2325        return entry;
2326}
2327
2328int parse_push_cas_option(struct push_cas_option *cas, const char *arg, int unset)
2329{
2330        const char *colon;
2331        struct push_cas *entry;
2332
2333        if (unset) {
2334                /* "--no-<option>" */
2335                clear_cas_option(cas);
2336                return 0;
2337        }
2338
2339        if (!arg) {
2340                /* just "--<option>" */
2341                cas->use_tracking_for_rest = 1;
2342                return 0;
2343        }
2344
2345        /* "--<option>=refname" or "--<option>=refname:value" */
2346        colon = strchrnul(arg, ':');
2347        entry = add_cas_entry(cas, arg, colon - arg);
2348        if (!*colon)
2349                entry->use_tracking = 1;
2350        else if (get_sha1(colon + 1, entry->expect))
2351                return error("cannot parse expected object name '%s'", colon + 1);
2352        return 0;
2353}
2354
2355int parseopt_push_cas_option(const struct option *opt, const char *arg, int unset)
2356{
2357        return parse_push_cas_option(opt->value, arg, unset);
2358}
2359
2360int is_empty_cas(const struct push_cas_option *cas)
2361{
2362        return !cas->use_tracking_for_rest && !cas->nr;
2363}
2364
2365/*
2366 * Look at remote.fetch refspec and see if we have a remote
2367 * tracking branch for the refname there.  Fill its current
2368 * value in sha1[].
2369 * If we cannot do so, return negative to signal an error.
2370 */
2371static int remote_tracking(struct remote *remote, const char *refname,
2372                           unsigned char sha1[20])
2373{
2374        char *dst;
2375
2376        dst = apply_refspecs(remote->fetch, remote->fetch_refspec_nr, refname);
2377        if (!dst)
2378                return -1; /* no tracking ref for refname at remote */
2379        if (read_ref(dst, sha1))
2380                return -1; /* we know what the tracking ref is but we cannot read it */
2381        return 0;
2382}
2383
2384static void apply_cas(struct push_cas_option *cas,
2385                      struct remote *remote,
2386                      struct ref *ref)
2387{
2388        int i;
2389
2390        /* Find an explicit --<option>=<name>[:<value>] entry */
2391        for (i = 0; i < cas->nr; i++) {
2392                struct push_cas *entry = &cas->entry[i];
2393                if (!refname_match(entry->refname, ref->name))
2394                        continue;
2395                ref->expect_old_sha1 = 1;
2396                if (!entry->use_tracking)
2397                        hashcpy(ref->old_sha1_expect, cas->entry[i].expect);
2398                else if (remote_tracking(remote, ref->name, ref->old_sha1_expect))
2399                        ref->expect_old_no_trackback = 1;
2400                return;
2401        }
2402
2403        /* Are we using "--<option>" to cover all? */
2404        if (!cas->use_tracking_for_rest)
2405                return;
2406
2407        ref->expect_old_sha1 = 1;
2408        if (remote_tracking(remote, ref->name, ref->old_sha1_expect))
2409                ref->expect_old_no_trackback = 1;
2410}
2411
2412void apply_push_cas(struct push_cas_option *cas,
2413                    struct remote *remote,
2414                    struct ref *remote_refs)
2415{
2416        struct ref *ref;
2417        for (ref = remote_refs; ref; ref = ref->next)
2418                apply_cas(cas, remote, ref);
2419}