7267ae7c632b075d263c06d837af7b0b3629456b
   1#define NO_THE_INDEX_COMPATIBILITY_MACROS
   2#include "cache.h"
   3#include "dir.h"
   4#include "tree.h"
   5#include "tree-walk.h"
   6#include "cache-tree.h"
   7#include "unpack-trees.h"
   8#include "progress.h"
   9#include "refs.h"
  10#include "attr.h"
  11
  12/*
  13 * Error messages expected by scripts out of plumbing commands such as
  14 * read-tree.  Non-scripted Porcelain is not required to use these messages
  15 * and in fact are encouraged to reword them to better suit their particular
  16 * situation better.  See how "git checkout" and "git merge" replaces
  17 * them using setup_unpack_trees_porcelain(), for example.
  18 */
  19const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = {
  20        /* ERROR_WOULD_OVERWRITE */
  21        "Entry '%s' would be overwritten by merge. Cannot merge.",
  22
  23        /* ERROR_NOT_UPTODATE_FILE */
  24        "Entry '%s' not uptodate. Cannot merge.",
  25
  26        /* ERROR_NOT_UPTODATE_DIR */
  27        "Updating '%s' would lose untracked files in it",
  28
  29        /* ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN */
  30        "Untracked working tree file '%s' would be overwritten by merge.",
  31
  32        /* ERROR_WOULD_LOSE_UNTRACKED_REMOVED */
  33        "Untracked working tree file '%s' would be removed by merge.",
  34
  35        /* ERROR_BIND_OVERLAP */
  36        "Entry '%s' overlaps with '%s'.  Cannot bind.",
  37
  38        /* ERROR_SPARSE_NOT_UPTODATE_FILE */
  39        "Entry '%s' not uptodate. Cannot update sparse checkout.",
  40
  41        /* ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN */
  42        "Working tree file '%s' would be overwritten by sparse checkout update.",
  43
  44        /* ERROR_WOULD_LOSE_ORPHANED_REMOVED */
  45        "Working tree file '%s' would be removed by sparse checkout update.",
  46};
  47
  48#define ERRORMSG(o,type) \
  49        ( ((o) && (o)->msgs[(type)]) \
  50          ? ((o)->msgs[(type)])      \
  51          : (unpack_plumbing_errors[(type)]) )
  52
  53void setup_unpack_trees_porcelain(const char **msgs, const char *cmd)
  54{
  55        const char *msg;
  56        char *tmp;
  57        const char *cmd2 = strcmp(cmd, "checkout") ? cmd : "switch branches";
  58        if (advice_commit_before_merge)
  59                msg = "Your local changes to the following files would be overwritten by %s:\n%%s"
  60                        "Please, commit your changes or stash them before you can %s.";
  61        else
  62                msg = "Your local changes to the following files would be overwritten by %s:\n%%s";
  63        tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen(cmd2) - 2);
  64        sprintf(tmp, msg, cmd, cmd2);
  65        msgs[ERROR_WOULD_OVERWRITE] = tmp;
  66        msgs[ERROR_NOT_UPTODATE_FILE] = tmp;
  67
  68        msgs[ERROR_NOT_UPTODATE_DIR] =
  69                "Updating the following directories would lose untracked files in it:\n%s";
  70
  71        if (advice_commit_before_merge)
  72                msg = "The following untracked working tree files would be %s by %s:\n%%s"
  73                        "Please move or remove them before you can %s.";
  74        else
  75                msg = "The following untracked working tree files would be %s by %s:\n%%s";
  76        tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen("removed") + strlen(cmd2) - 4);
  77        sprintf(tmp, msg, "removed", cmd, cmd2);
  78        msgs[ERROR_WOULD_LOSE_UNTRACKED_REMOVED] = tmp;
  79        tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen("overwritten") + strlen(cmd2) - 4);
  80        sprintf(tmp, msg, "overwritten", cmd, cmd2);
  81        msgs[ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN] = tmp;
  82
  83        /*
  84         * Special case: ERROR_BIND_OVERLAP refers to a pair of paths, we
  85         * cannot easily display it as a list.
  86         */
  87        msgs[ERROR_BIND_OVERLAP] = "Entry '%s' overlaps with '%s'.  Cannot bind.";
  88
  89        msgs[ERROR_SPARSE_NOT_UPTODATE_FILE] =
  90                "Cannot update sparse checkout: the following entries are not up-to-date:\n%s";
  91        msgs[ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN] =
  92                "The following Working tree files would be overwritten by sparse checkout update:\n%s";
  93        msgs[ERROR_WOULD_LOSE_ORPHANED_REMOVED] =
  94                "The following Working tree files would be removed by sparse checkout update:\n%s";
  95}
  96
  97static void add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
  98        unsigned int set, unsigned int clear)
  99{
 100        unsigned int size = ce_size(ce);
 101        struct cache_entry *new = xmalloc(size);
 102
 103        clear |= CE_HASHED | CE_UNHASHED;
 104
 105        memcpy(new, ce, size);
 106        new->next = NULL;
 107        new->ce_flags = (new->ce_flags & ~clear) | set;
 108        add_index_entry(&o->result, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
 109}
 110
 111/*
 112 * add error messages on path <path>
 113 * corresponding to the type <e> with the message <msg>
 114 * indicating if it should be display in porcelain or not
 115 */
 116static int add_rejected_path(struct unpack_trees_options *o,
 117                             enum unpack_trees_error_types e,
 118                             const char *path)
 119{
 120        struct rejected_paths_list *newentry;
 121        int porcelain = o && (o)->msgs[e];
 122        /*
 123         * simply display the given error message if in plumbing mode
 124         */
 125        if (!porcelain)
 126                o->show_all_errors = 0;
 127        if (!o->show_all_errors)
 128                return error(ERRORMSG(o, e), path);
 129
 130        /*
 131         * Otherwise, insert in a list for future display by
 132         * display_error_msgs()
 133         */
 134        newentry = xmalloc(sizeof(struct rejected_paths_list));
 135        newentry->path = (char *)path;
 136        newentry->next = o->unpack_rejects[e];
 137        o->unpack_rejects[e] = newentry;
 138        return -1;
 139}
 140
 141/*
 142 * free all the structures allocated for the error <e>
 143 */
 144static void free_rejected_paths(struct unpack_trees_options *o,
 145                                enum unpack_trees_error_types e)
 146{
 147        while (o->unpack_rejects[e]) {
 148                struct rejected_paths_list *del = o->unpack_rejects[e];
 149                o->unpack_rejects[e] = o->unpack_rejects[e]->next;
 150                free(del);
 151        }
 152        free(o->unpack_rejects[e]);
 153}
 154
 155/*
 156 * display all the error messages stored in a nice way
 157 */
 158static void display_error_msgs(struct unpack_trees_options *o)
 159{
 160        int e;
 161        int something_displayed = 0;
 162        for (e = 0; e < NB_UNPACK_TREES_ERROR_TYPES; e++) {
 163                if (o->unpack_rejects[e]) {
 164                        struct rejected_paths_list *rp;
 165                        struct strbuf path = STRBUF_INIT;
 166                        something_displayed = 1;
 167                        for (rp = o->unpack_rejects[e]; rp; rp = rp->next)
 168                                strbuf_addf(&path, "\t%s\n", rp->path);
 169                        error(ERRORMSG(o, e), path.buf);
 170                        strbuf_release(&path);
 171                        free_rejected_paths(o, e);
 172                }
 173        }
 174        if (something_displayed)
 175                printf("Aborting\n");
 176}
 177
 178/*
 179 * Unlink the last component and schedule the leading directories for
 180 * removal, such that empty directories get removed.
 181 */
 182static void unlink_entry(struct cache_entry *ce)
 183{
 184        if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
 185                return;
 186        if (remove_or_warn(ce->ce_mode, ce->name))
 187                return;
 188        schedule_dir_for_removal(ce->name, ce_namelen(ce));
 189}
 190
 191static struct checkout state;
 192static int check_updates(struct unpack_trees_options *o)
 193{
 194        unsigned cnt = 0, total = 0;
 195        struct progress *progress = NULL;
 196        struct index_state *index = &o->result;
 197        int i;
 198        int errs = 0;
 199
 200        if (o->update && o->verbose_update) {
 201                for (total = cnt = 0; cnt < index->cache_nr; cnt++) {
 202                        struct cache_entry *ce = index->cache[cnt];
 203                        if (ce->ce_flags & (CE_UPDATE | CE_REMOVE | CE_WT_REMOVE))
 204                                total++;
 205                }
 206
 207                progress = start_progress_delay("Checking out files",
 208                                                total, 50, 1);
 209                cnt = 0;
 210        }
 211
 212        if (o->update)
 213                git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result);
 214        for (i = 0; i < index->cache_nr; i++) {
 215                struct cache_entry *ce = index->cache[i];
 216
 217                if (ce->ce_flags & CE_WT_REMOVE) {
 218                        display_progress(progress, ++cnt);
 219                        if (o->update)
 220                                unlink_entry(ce);
 221                        continue;
 222                }
 223
 224                if (ce->ce_flags & CE_REMOVE) {
 225                        display_progress(progress, ++cnt);
 226                        if (o->update)
 227                                unlink_entry(ce);
 228                }
 229        }
 230        remove_marked_cache_entries(&o->result);
 231        remove_scheduled_dirs();
 232
 233        for (i = 0; i < index->cache_nr; i++) {
 234                struct cache_entry *ce = index->cache[i];
 235
 236                if (ce->ce_flags & CE_UPDATE) {
 237                        display_progress(progress, ++cnt);
 238                        ce->ce_flags &= ~CE_UPDATE;
 239                        if (o->update) {
 240                                errs |= checkout_entry(ce, &state, NULL);
 241                        }
 242                }
 243        }
 244        stop_progress(&progress);
 245        if (o->update)
 246                git_attr_set_direction(GIT_ATTR_CHECKIN, NULL);
 247        return errs != 0;
 248}
 249
 250static int verify_uptodate_sparse(struct cache_entry *ce, struct unpack_trees_options *o);
 251static int verify_absent_sparse(struct cache_entry *ce, enum unpack_trees_error_types, struct unpack_trees_options *o);
 252
 253static int will_have_skip_worktree(const struct cache_entry *ce, struct unpack_trees_options *o)
 254{
 255        const char *basename;
 256
 257        if (ce_stage(ce))
 258                return 0;
 259
 260        basename = strrchr(ce->name, '/');
 261        basename = basename ? basename+1 : ce->name;
 262        return excluded_from_list(ce->name, ce_namelen(ce), basename, NULL, o->el) <= 0;
 263}
 264
 265static int apply_sparse_checkout(struct cache_entry *ce, struct unpack_trees_options *o)
 266{
 267        int was_skip_worktree = ce_skip_worktree(ce);
 268
 269        if (will_have_skip_worktree(ce, o))
 270                ce->ce_flags |= CE_SKIP_WORKTREE;
 271        else
 272                ce->ce_flags &= ~CE_SKIP_WORKTREE;
 273
 274        /*
 275         * We only care about files getting into the checkout area
 276         * If merge strategies want to remove some, go ahead, this
 277         * flag will be removed eventually in unpack_trees() if it's
 278         * outside checkout area.
 279         */
 280        if (ce->ce_flags & CE_REMOVE)
 281                return 0;
 282
 283        if (!was_skip_worktree && ce_skip_worktree(ce)) {
 284                /*
 285                 * If CE_UPDATE is set, verify_uptodate() must be called already
 286                 * also stat info may have lost after merged_entry() so calling
 287                 * verify_uptodate() again may fail
 288                 */
 289                if (!(ce->ce_flags & CE_UPDATE) && verify_uptodate_sparse(ce, o))
 290                        return -1;
 291                ce->ce_flags |= CE_WT_REMOVE;
 292        }
 293        if (was_skip_worktree && !ce_skip_worktree(ce)) {
 294                if (verify_absent_sparse(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
 295                        return -1;
 296                ce->ce_flags |= CE_UPDATE;
 297        }
 298        return 0;
 299}
 300
 301static inline int call_unpack_fn(struct cache_entry **src, struct unpack_trees_options *o)
 302{
 303        int ret = o->fn(src, o);
 304        if (ret > 0)
 305                ret = 0;
 306        return ret;
 307}
 308
 309static void mark_ce_used(struct cache_entry *ce, struct unpack_trees_options *o)
 310{
 311        ce->ce_flags |= CE_UNPACKED;
 312
 313        if (o->cache_bottom < o->src_index->cache_nr &&
 314            o->src_index->cache[o->cache_bottom] == ce) {
 315                int bottom = o->cache_bottom;
 316                while (bottom < o->src_index->cache_nr &&
 317                       o->src_index->cache[bottom]->ce_flags & CE_UNPACKED)
 318                        bottom++;
 319                o->cache_bottom = bottom;
 320        }
 321}
 322
 323static void mark_all_ce_unused(struct index_state *index)
 324{
 325        int i;
 326        for (i = 0; i < index->cache_nr; i++)
 327                index->cache[i]->ce_flags &= ~CE_UNPACKED;
 328}
 329
 330static int locate_in_src_index(struct cache_entry *ce,
 331                               struct unpack_trees_options *o)
 332{
 333        struct index_state *index = o->src_index;
 334        int len = ce_namelen(ce);
 335        int pos = index_name_pos(index, ce->name, len);
 336        if (pos < 0)
 337                pos = -1 - pos;
 338        return pos;
 339}
 340
 341/*
 342 * We call unpack_index_entry() with an unmerged cache entry
 343 * only in diff-index, and it wants a single callback.  Skip
 344 * the other unmerged entry with the same name.
 345 */
 346static void mark_ce_used_same_name(struct cache_entry *ce,
 347                                   struct unpack_trees_options *o)
 348{
 349        struct index_state *index = o->src_index;
 350        int len = ce_namelen(ce);
 351        int pos;
 352
 353        for (pos = locate_in_src_index(ce, o); pos < index->cache_nr; pos++) {
 354                struct cache_entry *next = index->cache[pos];
 355                if (len != ce_namelen(next) ||
 356                    memcmp(ce->name, next->name, len))
 357                        break;
 358                mark_ce_used(next, o);
 359        }
 360}
 361
 362static struct cache_entry *next_cache_entry(struct unpack_trees_options *o)
 363{
 364        const struct index_state *index = o->src_index;
 365        int pos = o->cache_bottom;
 366
 367        while (pos < index->cache_nr) {
 368                struct cache_entry *ce = index->cache[pos];
 369                if (!(ce->ce_flags & CE_UNPACKED))
 370                        return ce;
 371                pos++;
 372        }
 373        return NULL;
 374}
 375
 376static void add_same_unmerged(struct cache_entry *ce,
 377                              struct unpack_trees_options *o)
 378{
 379        struct index_state *index = o->src_index;
 380        int len = ce_namelen(ce);
 381        int pos = index_name_pos(index, ce->name, len);
 382
 383        if (0 <= pos)
 384                die("programming error in a caller of mark_ce_used_same_name");
 385        for (pos = -pos - 1; pos < index->cache_nr; pos++) {
 386                struct cache_entry *next = index->cache[pos];
 387                if (len != ce_namelen(next) ||
 388                    memcmp(ce->name, next->name, len))
 389                        break;
 390                add_entry(o, next, 0, 0);
 391                mark_ce_used(next, o);
 392        }
 393}
 394
 395static int unpack_index_entry(struct cache_entry *ce,
 396                              struct unpack_trees_options *o)
 397{
 398        struct cache_entry *src[5] = { NULL };
 399        int ret;
 400
 401        src[0] = ce;
 402
 403        mark_ce_used(ce, o);
 404        if (ce_stage(ce)) {
 405                if (o->skip_unmerged) {
 406                        add_entry(o, ce, 0, 0);
 407                        return 0;
 408                }
 409        }
 410        ret = call_unpack_fn(src, o);
 411        if (ce_stage(ce))
 412                mark_ce_used_same_name(ce, o);
 413        return ret;
 414}
 415
 416static int find_cache_pos(struct traverse_info *, const struct name_entry *);
 417
 418static void restore_cache_bottom(struct traverse_info *info, int bottom)
 419{
 420        struct unpack_trees_options *o = info->data;
 421
 422        if (o->diff_index_cached)
 423                return;
 424        o->cache_bottom = bottom;
 425}
 426
 427static int switch_cache_bottom(struct traverse_info *info)
 428{
 429        struct unpack_trees_options *o = info->data;
 430        int ret, pos;
 431
 432        if (o->diff_index_cached)
 433                return 0;
 434        ret = o->cache_bottom;
 435        pos = find_cache_pos(info->prev, &info->name);
 436
 437        if (pos < -1)
 438                o->cache_bottom = -2 - pos;
 439        else if (pos < 0)
 440                o->cache_bottom = o->src_index->cache_nr;
 441        return ret;
 442}
 443
 444static int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long df_conflicts, struct name_entry *names, struct traverse_info *info)
 445{
 446        int i, ret, bottom;
 447        struct tree_desc t[MAX_UNPACK_TREES];
 448        struct traverse_info newinfo;
 449        struct name_entry *p;
 450
 451        p = names;
 452        while (!p->mode)
 453                p++;
 454
 455        newinfo = *info;
 456        newinfo.prev = info;
 457        newinfo.name = *p;
 458        newinfo.pathlen += tree_entry_len(p->path, p->sha1) + 1;
 459        newinfo.conflicts |= df_conflicts;
 460
 461        for (i = 0; i < n; i++, dirmask >>= 1) {
 462                const unsigned char *sha1 = NULL;
 463                if (dirmask & 1)
 464                        sha1 = names[i].sha1;
 465                fill_tree_descriptor(t+i, sha1);
 466        }
 467
 468        bottom = switch_cache_bottom(&newinfo);
 469        ret = traverse_trees(n, t, &newinfo);
 470        restore_cache_bottom(&newinfo, bottom);
 471        return ret;
 472}
 473
 474/*
 475 * Compare the traverse-path to the cache entry without actually
 476 * having to generate the textual representation of the traverse
 477 * path.
 478 *
 479 * NOTE! This *only* compares up to the size of the traverse path
 480 * itself - the caller needs to do the final check for the cache
 481 * entry having more data at the end!
 482 */
 483static int do_compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
 484{
 485        int len, pathlen, ce_len;
 486        const char *ce_name;
 487
 488        if (info->prev) {
 489                int cmp = do_compare_entry(ce, info->prev, &info->name);
 490                if (cmp)
 491                        return cmp;
 492        }
 493        pathlen = info->pathlen;
 494        ce_len = ce_namelen(ce);
 495
 496        /* If ce_len < pathlen then we must have previously hit "name == directory" entry */
 497        if (ce_len < pathlen)
 498                return -1;
 499
 500        ce_len -= pathlen;
 501        ce_name = ce->name + pathlen;
 502
 503        len = tree_entry_len(n->path, n->sha1);
 504        return df_name_compare(ce_name, ce_len, S_IFREG, n->path, len, n->mode);
 505}
 506
 507static int compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
 508{
 509        int cmp = do_compare_entry(ce, info, n);
 510        if (cmp)
 511                return cmp;
 512
 513        /*
 514         * Even if the beginning compared identically, the ce should
 515         * compare as bigger than a directory leading up to it!
 516         */
 517        return ce_namelen(ce) > traverse_path_len(info, n);
 518}
 519
 520static int ce_in_traverse_path(const struct cache_entry *ce,
 521                               const struct traverse_info *info)
 522{
 523        if (!info->prev)
 524                return 1;
 525        if (do_compare_entry(ce, info->prev, &info->name))
 526                return 0;
 527        /*
 528         * If ce (blob) is the same name as the path (which is a tree
 529         * we will be descending into), it won't be inside it.
 530         */
 531        return (info->pathlen < ce_namelen(ce));
 532}
 533
 534static struct cache_entry *create_ce_entry(const struct traverse_info *info, const struct name_entry *n, int stage)
 535{
 536        int len = traverse_path_len(info, n);
 537        struct cache_entry *ce = xcalloc(1, cache_entry_size(len));
 538
 539        ce->ce_mode = create_ce_mode(n->mode);
 540        ce->ce_flags = create_ce_flags(len, stage);
 541        hashcpy(ce->sha1, n->sha1);
 542        make_traverse_path(ce->name, info, n);
 543
 544        return ce;
 545}
 546
 547static int unpack_nondirectories(int n, unsigned long mask,
 548                                 unsigned long dirmask,
 549                                 struct cache_entry **src,
 550                                 const struct name_entry *names,
 551                                 const struct traverse_info *info)
 552{
 553        int i;
 554        struct unpack_trees_options *o = info->data;
 555        unsigned long conflicts;
 556
 557        /* Do we have *only* directories? Nothing to do */
 558        if (mask == dirmask && !src[0])
 559                return 0;
 560
 561        conflicts = info->conflicts;
 562        if (o->merge)
 563                conflicts >>= 1;
 564        conflicts |= dirmask;
 565
 566        /*
 567         * Ok, we've filled in up to any potential index entry in src[0],
 568         * now do the rest.
 569         */
 570        for (i = 0; i < n; i++) {
 571                int stage;
 572                unsigned int bit = 1ul << i;
 573                if (conflicts & bit) {
 574                        src[i + o->merge] = o->df_conflict_entry;
 575                        continue;
 576                }
 577                if (!(mask & bit))
 578                        continue;
 579                if (!o->merge)
 580                        stage = 0;
 581                else if (i + 1 < o->head_idx)
 582                        stage = 1;
 583                else if (i + 1 > o->head_idx)
 584                        stage = 3;
 585                else
 586                        stage = 2;
 587                src[i + o->merge] = create_ce_entry(info, names + i, stage);
 588        }
 589
 590        if (o->merge)
 591                return call_unpack_fn(src, o);
 592
 593        for (i = 0; i < n; i++)
 594                if (src[i] && src[i] != o->df_conflict_entry)
 595                        add_entry(o, src[i], 0, 0);
 596        return 0;
 597}
 598
 599static int unpack_failed(struct unpack_trees_options *o, const char *message)
 600{
 601        discard_index(&o->result);
 602        if (!o->gently) {
 603                if (message)
 604                        return error("%s", message);
 605                return -1;
 606        }
 607        return -1;
 608}
 609
 610/* NEEDSWORK: give this a better name and share with tree-walk.c */
 611static int name_compare(const char *a, int a_len,
 612                        const char *b, int b_len)
 613{
 614        int len = (a_len < b_len) ? a_len : b_len;
 615        int cmp = memcmp(a, b, len);
 616        if (cmp)
 617                return cmp;
 618        return (a_len - b_len);
 619}
 620
 621/*
 622 * The tree traversal is looking at name p.  If we have a matching entry,
 623 * return it.  If name p is a directory in the index, do not return
 624 * anything, as we will want to match it when the traversal descends into
 625 * the directory.
 626 */
 627static int find_cache_pos(struct traverse_info *info,
 628                          const struct name_entry *p)
 629{
 630        int pos;
 631        struct unpack_trees_options *o = info->data;
 632        struct index_state *index = o->src_index;
 633        int pfxlen = info->pathlen;
 634        int p_len = tree_entry_len(p->path, p->sha1);
 635
 636        for (pos = o->cache_bottom; pos < index->cache_nr; pos++) {
 637                struct cache_entry *ce = index->cache[pos];
 638                const char *ce_name, *ce_slash;
 639                int cmp, ce_len;
 640
 641                if (ce->ce_flags & CE_UNPACKED) {
 642                        /*
 643                         * cache_bottom entry is already unpacked, so
 644                         * we can never match it; don't check it
 645                         * again.
 646                         */
 647                        if (pos == o->cache_bottom)
 648                                ++o->cache_bottom;
 649                        continue;
 650                }
 651                if (!ce_in_traverse_path(ce, info))
 652                        continue;
 653                ce_name = ce->name + pfxlen;
 654                ce_slash = strchr(ce_name, '/');
 655                if (ce_slash)
 656                        ce_len = ce_slash - ce_name;
 657                else
 658                        ce_len = ce_namelen(ce) - pfxlen;
 659                cmp = name_compare(p->path, p_len, ce_name, ce_len);
 660                /*
 661                 * Exact match; if we have a directory we need to
 662                 * delay returning it.
 663                 */
 664                if (!cmp)
 665                        return ce_slash ? -2 - pos : pos;
 666                if (0 < cmp)
 667                        continue; /* keep looking */
 668                /*
 669                 * ce_name sorts after p->path; could it be that we
 670                 * have files under p->path directory in the index?
 671                 * E.g.  ce_name == "t-i", and p->path == "t"; we may
 672                 * have "t/a" in the index.
 673                 */
 674                if (p_len < ce_len && !memcmp(ce_name, p->path, p_len) &&
 675                    ce_name[p_len] < '/')
 676                        continue; /* keep looking */
 677                break;
 678        }
 679        return -1;
 680}
 681
 682static struct cache_entry *find_cache_entry(struct traverse_info *info,
 683                                            const struct name_entry *p)
 684{
 685        int pos = find_cache_pos(info, p);
 686        struct unpack_trees_options *o = info->data;
 687
 688        if (0 <= pos)
 689                return o->src_index->cache[pos];
 690        else
 691                return NULL;
 692}
 693
 694static void debug_path(struct traverse_info *info)
 695{
 696        if (info->prev) {
 697                debug_path(info->prev);
 698                if (*info->prev->name.path)
 699                        putchar('/');
 700        }
 701        printf("%s", info->name.path);
 702}
 703
 704static void debug_name_entry(int i, struct name_entry *n)
 705{
 706        printf("ent#%d %06o %s\n", i,
 707               n->path ? n->mode : 0,
 708               n->path ? n->path : "(missing)");
 709}
 710
 711static void debug_unpack_callback(int n,
 712                                  unsigned long mask,
 713                                  unsigned long dirmask,
 714                                  struct name_entry *names,
 715                                  struct traverse_info *info)
 716{
 717        int i;
 718        printf("* unpack mask %lu, dirmask %lu, cnt %d ",
 719               mask, dirmask, n);
 720        debug_path(info);
 721        putchar('\n');
 722        for (i = 0; i < n; i++)
 723                debug_name_entry(i, names + i);
 724}
 725
 726static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, struct name_entry *names, struct traverse_info *info)
 727{
 728        struct cache_entry *src[MAX_UNPACK_TREES + 1] = { NULL, };
 729        struct unpack_trees_options *o = info->data;
 730        const struct name_entry *p = names;
 731
 732        /* Find first entry with a real name (we could use "mask" too) */
 733        while (!p->mode)
 734                p++;
 735
 736        if (o->debug_unpack)
 737                debug_unpack_callback(n, mask, dirmask, names, info);
 738
 739        /* Are we supposed to look at the index too? */
 740        if (o->merge) {
 741                while (1) {
 742                        int cmp;
 743                        struct cache_entry *ce;
 744
 745                        if (o->diff_index_cached)
 746                                ce = next_cache_entry(o);
 747                        else
 748                                ce = find_cache_entry(info, p);
 749
 750                        if (!ce)
 751                                break;
 752                        cmp = compare_entry(ce, info, p);
 753                        if (cmp < 0) {
 754                                if (unpack_index_entry(ce, o) < 0)
 755                                        return unpack_failed(o, NULL);
 756                                continue;
 757                        }
 758                        if (!cmp) {
 759                                if (ce_stage(ce)) {
 760                                        /*
 761                                         * If we skip unmerged index
 762                                         * entries, we'll skip this
 763                                         * entry *and* the tree
 764                                         * entries associated with it!
 765                                         */
 766                                        if (o->skip_unmerged) {
 767                                                add_same_unmerged(ce, o);
 768                                                return mask;
 769                                        }
 770                                }
 771                                src[0] = ce;
 772                        }
 773                        break;
 774                }
 775        }
 776
 777        if (unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
 778                return -1;
 779
 780        if (src[0]) {
 781                if (ce_stage(src[0]))
 782                        mark_ce_used_same_name(src[0], o);
 783                else
 784                        mark_ce_used(src[0], o);
 785        }
 786
 787        /* Now handle any directories.. */
 788        if (dirmask) {
 789                unsigned long conflicts = mask & ~dirmask;
 790                if (o->merge) {
 791                        conflicts <<= 1;
 792                        if (src[0])
 793                                conflicts |= 1;
 794                }
 795
 796                /* special case: "diff-index --cached" looking at a tree */
 797                if (o->diff_index_cached &&
 798                    n == 1 && dirmask == 1 && S_ISDIR(names->mode)) {
 799                        int matches;
 800                        matches = cache_tree_matches_traversal(o->src_index->cache_tree,
 801                                                               names, info);
 802                        /*
 803                         * Everything under the name matches; skip the
 804                         * entire hierarchy.  diff_index_cached codepath
 805                         * special cases D/F conflicts in such a way that
 806                         * it does not do any look-ahead, so this is safe.
 807                         */
 808                        if (matches) {
 809                                o->cache_bottom += matches;
 810                                return mask;
 811                        }
 812                }
 813
 814                if (traverse_trees_recursive(n, dirmask, conflicts,
 815                                             names, info) < 0)
 816                        return -1;
 817                return mask;
 818        }
 819
 820        return mask;
 821}
 822
 823/*
 824 * N-way merge "len" trees.  Returns 0 on success, -1 on failure to manipulate the
 825 * resulting index, -2 on failure to reflect the changes to the work tree.
 826 */
 827int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
 828{
 829        int i, ret;
 830        static struct cache_entry *dfc;
 831        struct exclude_list el;
 832
 833        if (len > MAX_UNPACK_TREES)
 834                die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
 835        memset(&state, 0, sizeof(state));
 836        state.base_dir = "";
 837        state.force = 1;
 838        state.quiet = 1;
 839        state.refresh_cache = 1;
 840
 841        memset(&el, 0, sizeof(el));
 842        if (!core_apply_sparse_checkout || !o->update)
 843                o->skip_sparse_checkout = 1;
 844        if (!o->skip_sparse_checkout) {
 845                if (add_excludes_from_file_to_list(git_path("info/sparse-checkout"), "", 0, NULL, &el, 0) < 0)
 846                        o->skip_sparse_checkout = 1;
 847                else
 848                        o->el = &el;
 849        }
 850
 851        memset(&o->result, 0, sizeof(o->result));
 852        o->result.initialized = 1;
 853        o->result.timestamp.sec = o->src_index->timestamp.sec;
 854        o->result.timestamp.nsec = o->src_index->timestamp.nsec;
 855        o->merge_size = len;
 856        mark_all_ce_unused(o->src_index);
 857
 858        if (!dfc)
 859                dfc = xcalloc(1, cache_entry_size(0));
 860        o->df_conflict_entry = dfc;
 861
 862        if (len) {
 863                const char *prefix = o->prefix ? o->prefix : "";
 864                struct traverse_info info;
 865
 866                setup_traverse_info(&info, prefix);
 867                info.fn = unpack_callback;
 868                info.data = o;
 869                info.show_all_errors = o->show_all_errors;
 870
 871                if (o->prefix) {
 872                        /*
 873                         * Unpack existing index entries that sort before the
 874                         * prefix the tree is spliced into.  Note that o->merge
 875                         * is always true in this case.
 876                         */
 877                        while (1) {
 878                                struct cache_entry *ce = next_cache_entry(o);
 879                                if (!ce)
 880                                        break;
 881                                if (ce_in_traverse_path(ce, &info))
 882                                        break;
 883                                if (unpack_index_entry(ce, o) < 0)
 884                                        goto return_failed;
 885                        }
 886                }
 887
 888                if (traverse_trees(len, t, &info) < 0)
 889                        goto return_failed;
 890        }
 891
 892        /* Any left-over entries in the index? */
 893        if (o->merge) {
 894                while (1) {
 895                        struct cache_entry *ce = next_cache_entry(o);
 896                        if (!ce)
 897                                break;
 898                        if (unpack_index_entry(ce, o) < 0)
 899                                goto return_failed;
 900                }
 901        }
 902        mark_all_ce_unused(o->src_index);
 903
 904        if (o->trivial_merges_only && o->nontrivial_merge) {
 905                ret = unpack_failed(o, "Merge requires file-level merging");
 906                goto done;
 907        }
 908
 909        if (!o->skip_sparse_checkout) {
 910                int empty_worktree = 1;
 911                for (i = 0;i < o->result.cache_nr;i++) {
 912                        struct cache_entry *ce = o->result.cache[i];
 913
 914                        if (apply_sparse_checkout(ce, o)) {
 915                                ret = -1;
 916                                goto done;
 917                        }
 918                        /*
 919                         * Merge strategies may set CE_UPDATE|CE_REMOVE outside checkout
 920                         * area as a result of ce_skip_worktree() shortcuts in
 921                         * verify_absent() and verify_uptodate(). Clear them.
 922                         */
 923                        if (ce_skip_worktree(ce))
 924                                ce->ce_flags &= ~(CE_UPDATE | CE_REMOVE);
 925                        else
 926                                empty_worktree = 0;
 927
 928                }
 929                if (o->result.cache_nr && empty_worktree) {
 930                        ret = unpack_failed(o, "Sparse checkout leaves no entry on working directory");
 931                        goto done;
 932                }
 933        }
 934
 935        o->src_index = NULL;
 936        ret = check_updates(o) ? (-2) : 0;
 937        if (o->dst_index)
 938                *o->dst_index = o->result;
 939
 940done:
 941        for (i = 0;i < el.nr;i++)
 942                free(el.excludes[i]);
 943        if (el.excludes)
 944                free(el.excludes);
 945
 946        return ret;
 947
 948return_failed:
 949        if (o->show_all_errors)
 950                display_error_msgs(o);
 951        mark_all_ce_unused(o->src_index);
 952        ret = unpack_failed(o, NULL);
 953        goto done;
 954}
 955
 956/* Here come the merge functions */
 957
 958static int reject_merge(struct cache_entry *ce, struct unpack_trees_options *o)
 959{
 960        return add_rejected_path(o, ERROR_WOULD_OVERWRITE, ce->name);
 961}
 962
 963static int same(struct cache_entry *a, struct cache_entry *b)
 964{
 965        if (!!a != !!b)
 966                return 0;
 967        if (!a && !b)
 968                return 1;
 969        if ((a->ce_flags | b->ce_flags) & CE_CONFLICTED)
 970                return 0;
 971        return a->ce_mode == b->ce_mode &&
 972               !hashcmp(a->sha1, b->sha1);
 973}
 974
 975
 976/*
 977 * When a CE gets turned into an unmerged entry, we
 978 * want it to be up-to-date
 979 */
 980static int verify_uptodate_1(struct cache_entry *ce,
 981                                   struct unpack_trees_options *o,
 982                                   enum unpack_trees_error_types error_type)
 983{
 984        struct stat st;
 985
 986        if (o->index_only || (!((ce->ce_flags & CE_VALID) || ce_skip_worktree(ce)) && (o->reset || ce_uptodate(ce))))
 987                return 0;
 988
 989        if (!lstat(ce->name, &st)) {
 990                unsigned changed = ie_match_stat(o->src_index, ce, &st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
 991                if (!changed)
 992                        return 0;
 993                /*
 994                 * NEEDSWORK: the current default policy is to allow
 995                 * submodule to be out of sync wrt the supermodule
 996                 * index.  This needs to be tightened later for
 997                 * submodules that are marked to be automatically
 998                 * checked out.
 999                 */
1000                if (S_ISGITLINK(ce->ce_mode))
1001                        return 0;
1002                errno = 0;
1003        }
1004        if (errno == ENOENT)
1005                return 0;
1006        return o->gently ? -1 :
1007                add_rejected_path(o, error_type, ce->name);
1008}
1009
1010static int verify_uptodate(struct cache_entry *ce,
1011                           struct unpack_trees_options *o)
1012{
1013        if (!o->skip_sparse_checkout && will_have_skip_worktree(ce, o))
1014                return 0;
1015        return verify_uptodate_1(ce, o, ERROR_NOT_UPTODATE_FILE);
1016}
1017
1018static int verify_uptodate_sparse(struct cache_entry *ce,
1019                                  struct unpack_trees_options *o)
1020{
1021        return verify_uptodate_1(ce, o, ERROR_SPARSE_NOT_UPTODATE_FILE);
1022}
1023
1024static void invalidate_ce_path(struct cache_entry *ce, struct unpack_trees_options *o)
1025{
1026        if (ce)
1027                cache_tree_invalidate_path(o->src_index->cache_tree, ce->name);
1028}
1029
1030/*
1031 * Check that checking out ce->sha1 in subdir ce->name is not
1032 * going to overwrite any working files.
1033 *
1034 * Currently, git does not checkout subprojects during a superproject
1035 * checkout, so it is not going to overwrite anything.
1036 */
1037static int verify_clean_submodule(struct cache_entry *ce,
1038                                      enum unpack_trees_error_types error_type,
1039                                      struct unpack_trees_options *o)
1040{
1041        return 0;
1042}
1043
1044static int verify_clean_subdirectory(struct cache_entry *ce,
1045                                      enum unpack_trees_error_types error_type,
1046                                      struct unpack_trees_options *o)
1047{
1048        /*
1049         * we are about to extract "ce->name"; we would not want to lose
1050         * anything in the existing directory there.
1051         */
1052        int namelen;
1053        int i;
1054        struct dir_struct d;
1055        char *pathbuf;
1056        int cnt = 0;
1057        unsigned char sha1[20];
1058
1059        if (S_ISGITLINK(ce->ce_mode) &&
1060            resolve_gitlink_ref(ce->name, "HEAD", sha1) == 0) {
1061                /* If we are not going to update the submodule, then
1062                 * we don't care.
1063                 */
1064                if (!hashcmp(sha1, ce->sha1))
1065                        return 0;
1066                return verify_clean_submodule(ce, error_type, o);
1067        }
1068
1069        /*
1070         * First let's make sure we do not have a local modification
1071         * in that directory.
1072         */
1073        namelen = strlen(ce->name);
1074        for (i = locate_in_src_index(ce, o);
1075             i < o->src_index->cache_nr;
1076             i++) {
1077                struct cache_entry *ce2 = o->src_index->cache[i];
1078                int len = ce_namelen(ce2);
1079                if (len < namelen ||
1080                    strncmp(ce->name, ce2->name, namelen) ||
1081                    ce2->name[namelen] != '/')
1082                        break;
1083                /*
1084                 * ce2->name is an entry in the subdirectory to be
1085                 * removed.
1086                 */
1087                if (!ce_stage(ce2)) {
1088                        if (verify_uptodate(ce2, o))
1089                                return -1;
1090                        add_entry(o, ce2, CE_REMOVE, 0);
1091                        mark_ce_used(ce2, o);
1092                }
1093                cnt++;
1094        }
1095
1096        /*
1097         * Then we need to make sure that we do not lose a locally
1098         * present file that is not ignored.
1099         */
1100        pathbuf = xmalloc(namelen + 2);
1101        memcpy(pathbuf, ce->name, namelen);
1102        strcpy(pathbuf+namelen, "/");
1103
1104        memset(&d, 0, sizeof(d));
1105        if (o->dir)
1106                d.exclude_per_dir = o->dir->exclude_per_dir;
1107        i = read_directory(&d, pathbuf, namelen+1, NULL);
1108        if (i)
1109                return o->gently ? -1 :
1110                        add_rejected_path(o, ERROR_NOT_UPTODATE_DIR, ce->name);
1111        free(pathbuf);
1112        return cnt;
1113}
1114
1115/*
1116 * This gets called when there was no index entry for the tree entry 'dst',
1117 * but we found a file in the working tree that 'lstat()' said was fine,
1118 * and we're on a case-insensitive filesystem.
1119 *
1120 * See if we can find a case-insensitive match in the index that also
1121 * matches the stat information, and assume it's that other file!
1122 */
1123static int icase_exists(struct unpack_trees_options *o, struct cache_entry *dst, struct stat *st)
1124{
1125        struct cache_entry *src;
1126
1127        src = index_name_exists(o->src_index, dst->name, ce_namelen(dst), 1);
1128        return src && !ie_match_stat(o->src_index, src, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
1129}
1130
1131/*
1132 * We do not want to remove or overwrite a working tree file that
1133 * is not tracked, unless it is ignored.
1134 */
1135static int verify_absent_1(struct cache_entry *ce,
1136                                 enum unpack_trees_error_types error_type,
1137                                 struct unpack_trees_options *o)
1138{
1139        struct stat st;
1140
1141        if (o->index_only || o->reset || !o->update)
1142                return 0;
1143
1144        if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
1145                return 0;
1146
1147        if (!lstat(ce->name, &st)) {
1148                int dtype = ce_to_dtype(ce);
1149                struct cache_entry *result;
1150
1151                /*
1152                 * It may be that the 'lstat()' succeeded even though
1153                 * target 'ce' was absent, because there is an old
1154                 * entry that is different only in case..
1155                 *
1156                 * Ignore that lstat() if it matches.
1157                 */
1158                if (ignore_case && icase_exists(o, ce, &st))
1159                        return 0;
1160
1161                if (o->dir && excluded(o->dir, ce->name, &dtype))
1162                        /*
1163                         * ce->name is explicitly excluded, so it is Ok to
1164                         * overwrite it.
1165                         */
1166                        return 0;
1167                if (S_ISDIR(st.st_mode)) {
1168                        /*
1169                         * We are checking out path "foo" and
1170                         * found "foo/." in the working tree.
1171                         * This is tricky -- if we have modified
1172                         * files that are in "foo/" we would lose
1173                         * them.
1174                         */
1175                        if (verify_clean_subdirectory(ce, error_type, o) < 0)
1176                                return -1;
1177                        return 0;
1178                }
1179
1180                /*
1181                 * The previous round may already have decided to
1182                 * delete this path, which is in a subdirectory that
1183                 * is being replaced with a blob.
1184                 */
1185                result = index_name_exists(&o->result, ce->name, ce_namelen(ce), 0);
1186                if (result) {
1187                        if (result->ce_flags & CE_REMOVE)
1188                                return 0;
1189                }
1190
1191                return o->gently ? -1 :
1192                        add_rejected_path(o, error_type, ce->name);
1193        }
1194        return 0;
1195}
1196static int verify_absent(struct cache_entry *ce,
1197                         enum unpack_trees_error_types error_type,
1198                         struct unpack_trees_options *o)
1199{
1200        if (!o->skip_sparse_checkout && will_have_skip_worktree(ce, o))
1201                return 0;
1202        return verify_absent_1(ce, error_type, o);
1203}
1204
1205static int verify_absent_sparse(struct cache_entry *ce,
1206                         enum unpack_trees_error_types error_type,
1207                         struct unpack_trees_options *o)
1208{
1209        enum unpack_trees_error_types orphaned_error = error_type;
1210        if (orphaned_error == ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN)
1211                orphaned_error = ERROR_WOULD_LOSE_ORPHANED_OVERWRITTEN;
1212
1213        return verify_absent_1(ce, orphaned_error, o);
1214}
1215
1216static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
1217                struct unpack_trees_options *o)
1218{
1219        int update = CE_UPDATE;
1220
1221        if (!old) {
1222                if (verify_absent(merge, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
1223                        return -1;
1224                invalidate_ce_path(merge, o);
1225        } else if (!(old->ce_flags & CE_CONFLICTED)) {
1226                /*
1227                 * See if we can re-use the old CE directly?
1228                 * That way we get the uptodate stat info.
1229                 *
1230                 * This also removes the UPDATE flag on a match; otherwise
1231                 * we will end up overwriting local changes in the work tree.
1232                 */
1233                if (same(old, merge)) {
1234                        copy_cache_entry(merge, old);
1235                        update = 0;
1236                } else {
1237                        if (verify_uptodate(old, o))
1238                                return -1;
1239                        if (ce_skip_worktree(old))
1240                                update |= CE_SKIP_WORKTREE;
1241                        invalidate_ce_path(old, o);
1242                }
1243        } else {
1244                /*
1245                 * Previously unmerged entry left as an existence
1246                 * marker by read_index_unmerged();
1247                 */
1248                invalidate_ce_path(old, o);
1249        }
1250
1251        add_entry(o, merge, update, CE_STAGEMASK);
1252        return 1;
1253}
1254
1255static int deleted_entry(struct cache_entry *ce, struct cache_entry *old,
1256                struct unpack_trees_options *o)
1257{
1258        /* Did it exist in the index? */
1259        if (!old) {
1260                if (verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_REMOVED, o))
1261                        return -1;
1262                return 0;
1263        }
1264        if (!(old->ce_flags & CE_CONFLICTED) && verify_uptodate(old, o))
1265                return -1;
1266        add_entry(o, ce, CE_REMOVE, 0);
1267        invalidate_ce_path(ce, o);
1268        return 1;
1269}
1270
1271static int keep_entry(struct cache_entry *ce, struct unpack_trees_options *o)
1272{
1273        add_entry(o, ce, 0, 0);
1274        return 1;
1275}
1276
1277#if DBRT_DEBUG
1278static void show_stage_entry(FILE *o,
1279                             const char *label, const struct cache_entry *ce)
1280{
1281        if (!ce)
1282                fprintf(o, "%s (missing)\n", label);
1283        else
1284                fprintf(o, "%s%06o %s %d\t%s\n",
1285                        label,
1286                        ce->ce_mode,
1287                        sha1_to_hex(ce->sha1),
1288                        ce_stage(ce),
1289                        ce->name);
1290}
1291#endif
1292
1293int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
1294{
1295        struct cache_entry *index;
1296        struct cache_entry *head;
1297        struct cache_entry *remote = stages[o->head_idx + 1];
1298        int count;
1299        int head_match = 0;
1300        int remote_match = 0;
1301
1302        int df_conflict_head = 0;
1303        int df_conflict_remote = 0;
1304
1305        int any_anc_missing = 0;
1306        int no_anc_exists = 1;
1307        int i;
1308
1309        for (i = 1; i < o->head_idx; i++) {
1310                if (!stages[i] || stages[i] == o->df_conflict_entry)
1311                        any_anc_missing = 1;
1312                else
1313                        no_anc_exists = 0;
1314        }
1315
1316        index = stages[0];
1317        head = stages[o->head_idx];
1318
1319        if (head == o->df_conflict_entry) {
1320                df_conflict_head = 1;
1321                head = NULL;
1322        }
1323
1324        if (remote == o->df_conflict_entry) {
1325                df_conflict_remote = 1;
1326                remote = NULL;
1327        }
1328
1329        /*
1330         * First, if there's a #16 situation, note that to prevent #13
1331         * and #14.
1332         */
1333        if (!same(remote, head)) {
1334                for (i = 1; i < o->head_idx; i++) {
1335                        if (same(stages[i], head)) {
1336                                head_match = i;
1337                        }
1338                        if (same(stages[i], remote)) {
1339                                remote_match = i;
1340                        }
1341                }
1342        }
1343
1344        /*
1345         * We start with cases where the index is allowed to match
1346         * something other than the head: #14(ALT) and #2ALT, where it
1347         * is permitted to match the result instead.
1348         */
1349        /* #14, #14ALT, #2ALT */
1350        if (remote && !df_conflict_head && head_match && !remote_match) {
1351                if (index && !same(index, remote) && !same(index, head))
1352                        return o->gently ? -1 : reject_merge(index, o);
1353                return merged_entry(remote, index, o);
1354        }
1355        /*
1356         * If we have an entry in the index cache, then we want to
1357         * make sure that it matches head.
1358         */
1359        if (index && !same(index, head))
1360                return o->gently ? -1 : reject_merge(index, o);
1361
1362        if (head) {
1363                /* #5ALT, #15 */
1364                if (same(head, remote))
1365                        return merged_entry(head, index, o);
1366                /* #13, #3ALT */
1367                if (!df_conflict_remote && remote_match && !head_match)
1368                        return merged_entry(head, index, o);
1369        }
1370
1371        /* #1 */
1372        if (!head && !remote && any_anc_missing)
1373                return 0;
1374
1375        /*
1376         * Under the "aggressive" rule, we resolve mostly trivial
1377         * cases that we historically had git-merge-one-file resolve.
1378         */
1379        if (o->aggressive) {
1380                int head_deleted = !head;
1381                int remote_deleted = !remote;
1382                struct cache_entry *ce = NULL;
1383
1384                if (index)
1385                        ce = index;
1386                else if (head)
1387                        ce = head;
1388                else if (remote)
1389                        ce = remote;
1390                else {
1391                        for (i = 1; i < o->head_idx; i++) {
1392                                if (stages[i] && stages[i] != o->df_conflict_entry) {
1393                                        ce = stages[i];
1394                                        break;
1395                                }
1396                        }
1397                }
1398
1399                /*
1400                 * Deleted in both.
1401                 * Deleted in one and unchanged in the other.
1402                 */
1403                if ((head_deleted && remote_deleted) ||
1404                    (head_deleted && remote && remote_match) ||
1405                    (remote_deleted && head && head_match)) {
1406                        if (index)
1407                                return deleted_entry(index, index, o);
1408                        if (ce && !head_deleted) {
1409                                if (verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_REMOVED, o))
1410                                        return -1;
1411                        }
1412                        return 0;
1413                }
1414                /*
1415                 * Added in both, identically.
1416                 */
1417                if (no_anc_exists && head && remote && same(head, remote))
1418                        return merged_entry(head, index, o);
1419
1420        }
1421
1422        /* Below are "no merge" cases, which require that the index be
1423         * up-to-date to avoid the files getting overwritten with
1424         * conflict resolution files.
1425         */
1426        if (index) {
1427                if (verify_uptodate(index, o))
1428                        return -1;
1429        }
1430
1431        o->nontrivial_merge = 1;
1432
1433        /* #2, #3, #4, #6, #7, #9, #10, #11. */
1434        count = 0;
1435        if (!head_match || !remote_match) {
1436                for (i = 1; i < o->head_idx; i++) {
1437                        if (stages[i] && stages[i] != o->df_conflict_entry) {
1438                                keep_entry(stages[i], o);
1439                                count++;
1440                                break;
1441                        }
1442                }
1443        }
1444#if DBRT_DEBUG
1445        else {
1446                fprintf(stderr, "read-tree: warning #16 detected\n");
1447                show_stage_entry(stderr, "head   ", stages[head_match]);
1448                show_stage_entry(stderr, "remote ", stages[remote_match]);
1449        }
1450#endif
1451        if (head) { count += keep_entry(head, o); }
1452        if (remote) { count += keep_entry(remote, o); }
1453        return count;
1454}
1455
1456/*
1457 * Two-way merge.
1458 *
1459 * The rule is to "carry forward" what is in the index without losing
1460 * information across a "fast-forward", favoring a successful merge
1461 * over a merge failure when it makes sense.  For details of the
1462 * "carry forward" rule, please see <Documentation/git-read-tree.txt>.
1463 *
1464 */
1465int twoway_merge(struct cache_entry **src, struct unpack_trees_options *o)
1466{
1467        struct cache_entry *current = src[0];
1468        struct cache_entry *oldtree = src[1];
1469        struct cache_entry *newtree = src[2];
1470
1471        if (o->merge_size != 2)
1472                return error("Cannot do a twoway merge of %d trees",
1473                             o->merge_size);
1474
1475        if (oldtree == o->df_conflict_entry)
1476                oldtree = NULL;
1477        if (newtree == o->df_conflict_entry)
1478                newtree = NULL;
1479
1480        if (current) {
1481                if ((!oldtree && !newtree) || /* 4 and 5 */
1482                    (!oldtree && newtree &&
1483                     same(current, newtree)) || /* 6 and 7 */
1484                    (oldtree && newtree &&
1485                     same(oldtree, newtree)) || /* 14 and 15 */
1486                    (oldtree && newtree &&
1487                     !same(oldtree, newtree) && /* 18 and 19 */
1488                     same(current, newtree))) {
1489                        return keep_entry(current, o);
1490                }
1491                else if (oldtree && !newtree && same(current, oldtree)) {
1492                        /* 10 or 11 */
1493                        return deleted_entry(oldtree, current, o);
1494                }
1495                else if (oldtree && newtree &&
1496                         same(current, oldtree) && !same(current, newtree)) {
1497                        /* 20 or 21 */
1498                        return merged_entry(newtree, current, o);
1499                }
1500                else {
1501                        /* all other failures */
1502                        if (oldtree)
1503                                return o->gently ? -1 : reject_merge(oldtree, o);
1504                        if (current)
1505                                return o->gently ? -1 : reject_merge(current, o);
1506                        if (newtree)
1507                                return o->gently ? -1 : reject_merge(newtree, o);
1508                        return -1;
1509                }
1510        }
1511        else if (newtree) {
1512                if (oldtree && !o->initial_checkout) {
1513                        /*
1514                         * deletion of the path was staged;
1515                         */
1516                        if (same(oldtree, newtree))
1517                                return 1;
1518                        return reject_merge(oldtree, o);
1519                }
1520                return merged_entry(newtree, current, o);
1521        }
1522        return deleted_entry(oldtree, current, o);
1523}
1524
1525/*
1526 * Bind merge.
1527 *
1528 * Keep the index entries at stage0, collapse stage1 but make sure
1529 * stage0 does not have anything there.
1530 */
1531int bind_merge(struct cache_entry **src,
1532                struct unpack_trees_options *o)
1533{
1534        struct cache_entry *old = src[0];
1535        struct cache_entry *a = src[1];
1536
1537        if (o->merge_size != 1)
1538                return error("Cannot do a bind merge of %d trees\n",
1539                             o->merge_size);
1540        if (a && old)
1541                return o->gently ? -1 :
1542                        error(ERRORMSG(o, ERROR_BIND_OVERLAP), a->name, old->name);
1543        if (!a)
1544                return keep_entry(old, o);
1545        else
1546                return merged_entry(a, NULL, o);
1547}
1548
1549/*
1550 * One-way merge.
1551 *
1552 * The rule is:
1553 * - take the stat information from stage0, take the data from stage1
1554 */
1555int oneway_merge(struct cache_entry **src, struct unpack_trees_options *o)
1556{
1557        struct cache_entry *old = src[0];
1558        struct cache_entry *a = src[1];
1559
1560        if (o->merge_size != 1)
1561                return error("Cannot do a oneway merge of %d trees",
1562                             o->merge_size);
1563
1564        if (!a || a == o->df_conflict_entry)
1565                return deleted_entry(old, old, o);
1566
1567        if (old && same(old, a)) {
1568                int update = 0;
1569                if (o->reset && !ce_uptodate(old) && !ce_skip_worktree(old)) {
1570                        struct stat st;
1571                        if (lstat(old->name, &st) ||
1572                            ie_match_stat(o->src_index, old, &st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE))
1573                                update |= CE_UPDATE;
1574                }
1575                add_entry(o, old, update, 0);
1576                return 0;
1577        }
1578        return merged_entry(a, old, o);
1579}