Thread-safe xmalloc and xrealloc needs a recursive mutex
[git/dscho.git] / unpack-trees.c
blob75f54cac97f62ddaad736c2cd582cc6cdeaaebfa
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"
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" replaces not_uptodate_file to
17  * explain why it does not allow switching between branches when you have
18  * local changes, for example.
19  */
20 static struct unpack_trees_error_msgs unpack_plumbing_errors = {
21         /* would_overwrite */
22         "Entry '%s' would be overwritten by merge. Cannot merge.",
24         /* not_uptodate_file */
25         "Entry '%s' not uptodate. Cannot merge.",
27         /* not_uptodate_dir */
28         "Updating '%s' would lose untracked files in it",
30         /* would_lose_untracked */
31         "Untracked working tree file '%s' would be %s by merge.",
33         /* bind_overlap */
34         "Entry '%s' overlaps with '%s'.  Cannot bind.",
36         /* sparse_not_uptodate_file */
37         "Entry '%s' not uptodate. Cannot update sparse checkout.",
39         /* would_lose_orphaned */
40         "Working tree file '%s' would be %s by sparse checkout update.",
43 #define ERRORMSG(o,fld) \
44         ( ((o) && (o)->msgs.fld) \
45         ? ((o)->msgs.fld) \
46         : (unpack_plumbing_errors.fld) )
48 static void add_entry(struct unpack_trees_options *o, struct cache_entry *ce,
49         unsigned int set, unsigned int clear)
51         unsigned int size = ce_size(ce);
52         struct cache_entry *new = xmalloc(size);
54         clear |= CE_HASHED | CE_UNHASHED;
56         memcpy(new, ce, size);
57         new->next = NULL;
58         new->ce_flags = (new->ce_flags & ~clear) | set;
59         add_index_entry(&o->result, new, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
63  * Unlink the last component and schedule the leading directories for
64  * removal, such that empty directories get removed.
65  */
66 static void unlink_entry(struct cache_entry *ce)
68         if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
69                 return;
70         if (S_ISGITLINK(ce->ce_mode)) {
71                 if (rmdir(ce->name)) {
72                         warning("unable to rmdir %s: %s",
73                                 ce->name, strerror(errno));
74                         return;
75                 }
76         }
77         else
78                 if (unlink_or_warn(ce->name))
79                         return;
80         schedule_dir_for_removal(ce->name, ce_namelen(ce));
83 static struct checkout state;
84 static int check_updates(struct unpack_trees_options *o)
86         unsigned cnt = 0, total = 0;
87         struct progress *progress = NULL;
88         struct index_state *index = &o->result;
89         int i;
90         int errs = 0;
92         if (o->update && o->verbose_update) {
93                 for (total = cnt = 0; cnt < index->cache_nr; cnt++) {
94                         struct cache_entry *ce = index->cache[cnt];
95                         if (ce->ce_flags & (CE_UPDATE | CE_REMOVE | CE_WT_REMOVE))
96                                 total++;
97                 }
99                 progress = start_progress_delay("Checking out files",
100                                                 total, 50, 1);
101                 cnt = 0;
102         }
104         if (o->update)
105                 git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result);
106         for (i = 0; i < index->cache_nr; i++) {
107                 struct cache_entry *ce = index->cache[i];
109                 if (ce->ce_flags & CE_WT_REMOVE) {
110                         display_progress(progress, ++cnt);
111                         if (o->update)
112                                 unlink_entry(ce);
113                         continue;
114                 }
116                 if (ce->ce_flags & CE_REMOVE) {
117                         display_progress(progress, ++cnt);
118                         if (o->update)
119                                 unlink_entry(ce);
120                 }
121         }
122         remove_marked_cache_entries(&o->result);
123         remove_scheduled_dirs();
125         for (i = 0; i < index->cache_nr; i++) {
126                 struct cache_entry *ce = index->cache[i];
128                 if (ce->ce_flags & CE_UPDATE) {
129                         display_progress(progress, ++cnt);
130                         ce->ce_flags &= ~CE_UPDATE;
131                         if (o->update) {
132                                 errs |= checkout_entry(ce, &state, NULL);
133                         }
134                 }
135         }
136         stop_progress(&progress);
137         if (o->update)
138                 git_attr_set_direction(GIT_ATTR_CHECKIN, NULL);
139         return errs != 0;
142 static int verify_uptodate_sparse(struct cache_entry *ce, struct unpack_trees_options *o);
143 static int verify_absent_sparse(struct cache_entry *ce, const char *action, struct unpack_trees_options *o);
145 static int will_have_skip_worktree(const struct cache_entry *ce, struct unpack_trees_options *o)
147         const char *basename;
149         if (ce_stage(ce))
150                 return 0;
152         basename = strrchr(ce->name, '/');
153         basename = basename ? basename+1 : ce->name;
154         return excluded_from_list(ce->name, ce_namelen(ce), basename, NULL, o->el) <= 0;
157 static int apply_sparse_checkout(struct cache_entry *ce, struct unpack_trees_options *o)
159         int was_skip_worktree = ce_skip_worktree(ce);
161         if (will_have_skip_worktree(ce, o))
162                 ce->ce_flags |= CE_SKIP_WORKTREE;
163         else
164                 ce->ce_flags &= ~CE_SKIP_WORKTREE;
166         /*
167          * We only care about files getting into the checkout area
168          * If merge strategies want to remove some, go ahead, this
169          * flag will be removed eventually in unpack_trees() if it's
170          * outside checkout area.
171          */
172         if (ce->ce_flags & CE_REMOVE)
173                 return 0;
175         if (!was_skip_worktree && ce_skip_worktree(ce)) {
176                 /*
177                  * If CE_UPDATE is set, verify_uptodate() must be called already
178                  * also stat info may have lost after merged_entry() so calling
179                  * verify_uptodate() again may fail
180                  */
181                 if (!(ce->ce_flags & CE_UPDATE) && verify_uptodate_sparse(ce, o))
182                         return -1;
183                 ce->ce_flags |= CE_WT_REMOVE;
184         }
185         if (was_skip_worktree && !ce_skip_worktree(ce)) {
186                 if (verify_absent_sparse(ce, "overwritten", o))
187                         return -1;
188                 ce->ce_flags |= CE_UPDATE;
189         }
190         return 0;
193 static inline int call_unpack_fn(struct cache_entry **src, struct unpack_trees_options *o)
195         int ret = o->fn(src, o);
196         if (ret > 0)
197                 ret = 0;
198         return ret;
201 static void mark_ce_used(struct cache_entry *ce, struct unpack_trees_options *o)
203         ce->ce_flags |= CE_UNPACKED;
205         if (o->cache_bottom < o->src_index->cache_nr &&
206             o->src_index->cache[o->cache_bottom] == ce) {
207                 int bottom = o->cache_bottom;
208                 while (bottom < o->src_index->cache_nr &&
209                        o->src_index->cache[bottom]->ce_flags & CE_UNPACKED)
210                         bottom++;
211                 o->cache_bottom = bottom;
212         }
215 static void mark_all_ce_unused(struct index_state *index)
217         int i;
218         for (i = 0; i < index->cache_nr; i++)
219                 index->cache[i]->ce_flags &= ~CE_UNPACKED;
222 static int locate_in_src_index(struct cache_entry *ce,
223                                struct unpack_trees_options *o)
225         struct index_state *index = o->src_index;
226         int len = ce_namelen(ce);
227         int pos = index_name_pos(index, ce->name, len);
228         if (pos < 0)
229                 pos = -1 - pos;
230         return pos;
234  * We call unpack_index_entry() with an unmerged cache entry
235  * only in diff-index, and it wants a single callback.  Skip
236  * the other unmerged entry with the same name.
237  */
238 static void mark_ce_used_same_name(struct cache_entry *ce,
239                                    struct unpack_trees_options *o)
241         struct index_state *index = o->src_index;
242         int len = ce_namelen(ce);
243         int pos;
245         for (pos = locate_in_src_index(ce, o); pos < index->cache_nr; pos++) {
246                 struct cache_entry *next = index->cache[pos];
247                 if (len != ce_namelen(next) ||
248                     memcmp(ce->name, next->name, len))
249                         break;
250                 mark_ce_used(next, o);
251         }
254 static struct cache_entry *next_cache_entry(struct unpack_trees_options *o)
256         const struct index_state *index = o->src_index;
257         int pos = o->cache_bottom;
259         while (pos < index->cache_nr) {
260                 struct cache_entry *ce = index->cache[pos];
261                 if (!(ce->ce_flags & CE_UNPACKED))
262                         return ce;
263                 pos++;
264         }
265         return NULL;
268 static void add_same_unmerged(struct cache_entry *ce,
269                               struct unpack_trees_options *o)
271         struct index_state *index = o->src_index;
272         int len = ce_namelen(ce);
273         int pos = index_name_pos(index, ce->name, len);
275         if (0 <= pos)
276                 die("programming error in a caller of mark_ce_used_same_name");
277         for (pos = -pos - 1; pos < index->cache_nr; pos++) {
278                 struct cache_entry *next = index->cache[pos];
279                 if (len != ce_namelen(next) ||
280                     memcmp(ce->name, next->name, len))
281                         break;
282                 add_entry(o, next, 0, 0);
283                 mark_ce_used(next, o);
284         }
287 static int unpack_index_entry(struct cache_entry *ce,
288                               struct unpack_trees_options *o)
290         struct cache_entry *src[5] = { ce, NULL, };
291         int ret;
293         mark_ce_used(ce, o);
294         if (ce_stage(ce)) {
295                 if (o->skip_unmerged) {
296                         add_entry(o, ce, 0, 0);
297                         return 0;
298                 }
299         }
300         ret = call_unpack_fn(src, o);
301         if (ce_stage(ce))
302                 mark_ce_used_same_name(ce, o);
303         return ret;
306 static int find_cache_pos(struct traverse_info *, const struct name_entry *);
308 static void restore_cache_bottom(struct traverse_info *info, int bottom)
310         struct unpack_trees_options *o = info->data;
312         if (o->diff_index_cached)
313                 return;
314         o->cache_bottom = bottom;
317 static int switch_cache_bottom(struct traverse_info *info)
319         struct unpack_trees_options *o = info->data;
320         int ret, pos;
322         if (o->diff_index_cached)
323                 return 0;
324         ret = o->cache_bottom;
325         pos = find_cache_pos(info->prev, &info->name);
327         if (pos < -1)
328                 o->cache_bottom = -2 - pos;
329         else if (pos < 0)
330                 o->cache_bottom = o->src_index->cache_nr;
331         return ret;
334 static int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long df_conflicts, struct name_entry *names, struct traverse_info *info)
336         int i, ret, bottom;
337         struct tree_desc t[MAX_UNPACK_TREES];
338         struct traverse_info newinfo;
339         struct name_entry *p;
341         p = names;
342         while (!p->mode)
343                 p++;
345         newinfo = *info;
346         newinfo.prev = info;
347         newinfo.name = *p;
348         newinfo.pathlen += tree_entry_len(p->path, p->sha1) + 1;
349         newinfo.conflicts |= df_conflicts;
351         for (i = 0; i < n; i++, dirmask >>= 1) {
352                 const unsigned char *sha1 = NULL;
353                 if (dirmask & 1)
354                         sha1 = names[i].sha1;
355                 fill_tree_descriptor(t+i, sha1);
356         }
358         bottom = switch_cache_bottom(&newinfo);
359         ret = traverse_trees(n, t, &newinfo);
360         restore_cache_bottom(&newinfo, bottom);
361         return ret;
365  * Compare the traverse-path to the cache entry without actually
366  * having to generate the textual representation of the traverse
367  * path.
369  * NOTE! This *only* compares up to the size of the traverse path
370  * itself - the caller needs to do the final check for the cache
371  * entry having more data at the end!
372  */
373 static int do_compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
375         int len, pathlen, ce_len;
376         const char *ce_name;
378         if (info->prev) {
379                 int cmp = do_compare_entry(ce, info->prev, &info->name);
380                 if (cmp)
381                         return cmp;
382         }
383         pathlen = info->pathlen;
384         ce_len = ce_namelen(ce);
386         /* If ce_len < pathlen then we must have previously hit "name == directory" entry */
387         if (ce_len < pathlen)
388                 return -1;
390         ce_len -= pathlen;
391         ce_name = ce->name + pathlen;
393         len = tree_entry_len(n->path, n->sha1);
394         return df_name_compare(ce_name, ce_len, S_IFREG, n->path, len, n->mode);
397 static int compare_entry(const struct cache_entry *ce, const struct traverse_info *info, const struct name_entry *n)
399         int cmp = do_compare_entry(ce, info, n);
400         if (cmp)
401                 return cmp;
403         /*
404          * Even if the beginning compared identically, the ce should
405          * compare as bigger than a directory leading up to it!
406          */
407         return ce_namelen(ce) > traverse_path_len(info, n);
410 static int ce_in_traverse_path(const struct cache_entry *ce,
411                                const struct traverse_info *info)
413         if (!info->prev)
414                 return 1;
415         if (do_compare_entry(ce, info->prev, &info->name))
416                 return 0;
417         /*
418          * If ce (blob) is the same name as the path (which is a tree
419          * we will be descending into), it won't be inside it.
420          */
421         return (info->pathlen < ce_namelen(ce));
424 static struct cache_entry *create_ce_entry(const struct traverse_info *info, const struct name_entry *n, int stage)
426         int len = traverse_path_len(info, n);
427         struct cache_entry *ce = xcalloc(1, cache_entry_size(len));
429         ce->ce_mode = create_ce_mode(n->mode);
430         ce->ce_flags = create_ce_flags(len, stage);
431         hashcpy(ce->sha1, n->sha1);
432         make_traverse_path(ce->name, info, n);
434         return ce;
437 static int unpack_nondirectories(int n, unsigned long mask,
438                                  unsigned long dirmask,
439                                  struct cache_entry **src,
440                                  const struct name_entry *names,
441                                  const struct traverse_info *info)
443         int i;
444         struct unpack_trees_options *o = info->data;
445         unsigned long conflicts;
447         /* Do we have *only* directories? Nothing to do */
448         if (mask == dirmask && !src[0])
449                 return 0;
451         conflicts = info->conflicts;
452         if (o->merge)
453                 conflicts >>= 1;
454         conflicts |= dirmask;
456         /*
457          * Ok, we've filled in up to any potential index entry in src[0],
458          * now do the rest.
459          */
460         for (i = 0; i < n; i++) {
461                 int stage;
462                 unsigned int bit = 1ul << i;
463                 if (conflicts & bit) {
464                         src[i + o->merge] = o->df_conflict_entry;
465                         continue;
466                 }
467                 if (!(mask & bit))
468                         continue;
469                 if (!o->merge)
470                         stage = 0;
471                 else if (i + 1 < o->head_idx)
472                         stage = 1;
473                 else if (i + 1 > o->head_idx)
474                         stage = 3;
475                 else
476                         stage = 2;
477                 src[i + o->merge] = create_ce_entry(info, names + i, stage);
478         }
480         if (o->merge)
481                 return call_unpack_fn(src, o);
483         for (i = 0; i < n; i++)
484                 if (src[i] && src[i] != o->df_conflict_entry)
485                         add_entry(o, src[i], 0, 0);
486         return 0;
489 static int unpack_failed(struct unpack_trees_options *o, const char *message)
491         discard_index(&o->result);
492         if (!o->gently) {
493                 if (message)
494                         return error("%s", message);
495                 return -1;
496         }
497         return -1;
500 /* NEEDSWORK: give this a better name and share with tree-walk.c */
501 static int name_compare(const char *a, int a_len,
502                         const char *b, int b_len)
504         int len = (a_len < b_len) ? a_len : b_len;
505         int cmp = memcmp(a, b, len);
506         if (cmp)
507                 return cmp;
508         return (a_len - b_len);
512  * The tree traversal is looking at name p.  If we have a matching entry,
513  * return it.  If name p is a directory in the index, do not return
514  * anything, as we will want to match it when the traversal descends into
515  * the directory.
516  */
517 static int find_cache_pos(struct traverse_info *info,
518                           const struct name_entry *p)
520         int pos;
521         struct unpack_trees_options *o = info->data;
522         struct index_state *index = o->src_index;
523         int pfxlen = info->pathlen;
524         int p_len = tree_entry_len(p->path, p->sha1);
526         for (pos = o->cache_bottom; pos < index->cache_nr; pos++) {
527                 struct cache_entry *ce = index->cache[pos];
528                 const char *ce_name, *ce_slash;
529                 int cmp, ce_len;
531                 if (!ce_in_traverse_path(ce, info))
532                         continue;
533                 if (ce->ce_flags & CE_UNPACKED)
534                         continue;
535                 ce_name = ce->name + pfxlen;
536                 ce_slash = strchr(ce_name, '/');
537                 if (ce_slash)
538                         ce_len = ce_slash - ce_name;
539                 else
540                         ce_len = ce_namelen(ce) - pfxlen;
541                 cmp = name_compare(p->path, p_len, ce_name, ce_len);
542                 /*
543                  * Exact match; if we have a directory we need to
544                  * delay returning it.
545                  */
546                 if (!cmp)
547                         return ce_slash ? -2 - pos : pos;
548                 if (0 < cmp)
549                         continue; /* keep looking */
550                 /*
551                  * ce_name sorts after p->path; could it be that we
552                  * have files under p->path directory in the index?
553                  * E.g.  ce_name == "t-i", and p->path == "t"; we may
554                  * have "t/a" in the index.
555                  */
556                 if (p_len < ce_len && !memcmp(ce_name, p->path, p_len) &&
557                     ce_name[p_len] < '/')
558                         continue; /* keep looking */
559                 break;
560         }
561         return -1;
564 static struct cache_entry *find_cache_entry(struct traverse_info *info,
565                                             const struct name_entry *p)
567         int pos = find_cache_pos(info, p);
568         struct unpack_trees_options *o = info->data;
570         if (0 <= pos)
571                 return o->src_index->cache[pos];
572         else
573                 return NULL;
576 static void debug_path(struct traverse_info *info)
578         if (info->prev) {
579                 debug_path(info->prev);
580                 if (*info->prev->name.path)
581                         putchar('/');
582         }
583         printf("%s", info->name.path);
586 static void debug_name_entry(int i, struct name_entry *n)
588         printf("ent#%d %06o %s\n", i,
589                n->path ? n->mode : 0,
590                n->path ? n->path : "(missing)");
593 static void debug_unpack_callback(int n,
594                                   unsigned long mask,
595                                   unsigned long dirmask,
596                                   struct name_entry *names,
597                                   struct traverse_info *info)
599         int i;
600         printf("* unpack mask %lu, dirmask %lu, cnt %d ",
601                mask, dirmask, n);
602         debug_path(info);
603         putchar('\n');
604         for (i = 0; i < n; i++)
605                 debug_name_entry(i, names + i);
608 static int unpack_callback(int n, unsigned long mask, unsigned long dirmask, struct name_entry *names, struct traverse_info *info)
610         struct cache_entry *src[MAX_UNPACK_TREES + 1] = { NULL, };
611         struct unpack_trees_options *o = info->data;
612         const struct name_entry *p = names;
614         /* Find first entry with a real name (we could use "mask" too) */
615         while (!p->mode)
616                 p++;
618         if (o->debug_unpack)
619                 debug_unpack_callback(n, mask, dirmask, names, info);
621         /* Are we supposed to look at the index too? */
622         if (o->merge) {
623                 while (1) {
624                         int cmp;
625                         struct cache_entry *ce;
627                         if (o->diff_index_cached)
628                                 ce = next_cache_entry(o);
629                         else
630                                 ce = find_cache_entry(info, p);
632                         if (!ce)
633                                 break;
634                         cmp = compare_entry(ce, info, p);
635                         if (cmp < 0) {
636                                 if (unpack_index_entry(ce, o) < 0)
637                                         return unpack_failed(o, NULL);
638                                 continue;
639                         }
640                         if (!cmp) {
641                                 if (ce_stage(ce)) {
642                                         /*
643                                          * If we skip unmerged index
644                                          * entries, we'll skip this
645                                          * entry *and* the tree
646                                          * entries associated with it!
647                                          */
648                                         if (o->skip_unmerged) {
649                                                 add_same_unmerged(ce, o);
650                                                 return mask;
651                                         }
652                                 }
653                                 src[0] = ce;
654                         }
655                         break;
656                 }
657         }
659         if (unpack_nondirectories(n, mask, dirmask, src, names, info) < 0)
660                 return -1;
662         if (src[0]) {
663                 if (ce_stage(src[0]))
664                         mark_ce_used_same_name(src[0], o);
665                 else
666                         mark_ce_used(src[0], o);
667         }
669         /* Now handle any directories.. */
670         if (dirmask) {
671                 unsigned long conflicts = mask & ~dirmask;
672                 if (o->merge) {
673                         conflicts <<= 1;
674                         if (src[0])
675                                 conflicts |= 1;
676                 }
678                 /* special case: "diff-index --cached" looking at a tree */
679                 if (o->diff_index_cached &&
680                     n == 1 && dirmask == 1 && S_ISDIR(names->mode)) {
681                         int matches;
682                         matches = cache_tree_matches_traversal(o->src_index->cache_tree,
683                                                                names, info);
684                         /*
685                          * Everything under the name matches; skip the
686                          * entire hierarchy.  diff_index_cached codepath
687                          * special cases D/F conflicts in such a way that
688                          * it does not do any look-ahead, so this is safe.
689                          */
690                         if (matches) {
691                                 o->cache_bottom += matches;
692                                 return mask;
693                         }
694                 }
696                 if (traverse_trees_recursive(n, dirmask, conflicts,
697                                              names, info) < 0)
698                         return -1;
699                 return mask;
700         }
702         return mask;
706  * N-way merge "len" trees.  Returns 0 on success, -1 on failure to manipulate the
707  * resulting index, -2 on failure to reflect the changes to the work tree.
708  */
709 int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options *o)
711         int i, ret;
712         static struct cache_entry *dfc;
713         struct exclude_list el;
715         if (len > MAX_UNPACK_TREES)
716                 die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES);
717         memset(&state, 0, sizeof(state));
718         state.base_dir = "";
719         state.force = 1;
720         state.quiet = 1;
721         state.refresh_cache = 1;
723         memset(&el, 0, sizeof(el));
724         if (!core_apply_sparse_checkout || !o->update)
725                 o->skip_sparse_checkout = 1;
726         if (!o->skip_sparse_checkout) {
727                 if (add_excludes_from_file_to_list(git_path("info/sparse-checkout"), "", 0, NULL, &el, 0) < 0)
728                         o->skip_sparse_checkout = 1;
729                 else
730                         o->el = &el;
731         }
733         memset(&o->result, 0, sizeof(o->result));
734         o->result.initialized = 1;
735         o->result.timestamp.sec = o->src_index->timestamp.sec;
736         o->result.timestamp.nsec = o->src_index->timestamp.nsec;
737         o->merge_size = len;
738         mark_all_ce_unused(o->src_index);
740         if (!dfc)
741                 dfc = xcalloc(1, cache_entry_size(0));
742         o->df_conflict_entry = dfc;
744         if (len) {
745                 const char *prefix = o->prefix ? o->prefix : "";
746                 struct traverse_info info;
748                 setup_traverse_info(&info, prefix);
749                 info.fn = unpack_callback;
750                 info.data = o;
752                 if (o->prefix) {
753                         /*
754                          * Unpack existing index entries that sort before the
755                          * prefix the tree is spliced into.  Note that o->merge
756                          * is always true in this case.
757                          */
758                         while (1) {
759                                 struct cache_entry *ce = next_cache_entry(o);
760                                 if (!ce)
761                                         break;
762                                 if (ce_in_traverse_path(ce, &info))
763                                         break;
764                                 if (unpack_index_entry(ce, o) < 0)
765                                         goto return_failed;
766                         }
767                 }
769                 if (traverse_trees(len, t, &info) < 0)
770                         goto return_failed;
771         }
773         /* Any left-over entries in the index? */
774         if (o->merge) {
775                 while (1) {
776                         struct cache_entry *ce = next_cache_entry(o);
777                         if (!ce)
778                                 break;
779                         if (unpack_index_entry(ce, o) < 0)
780                                 goto return_failed;
781                 }
782         }
783         mark_all_ce_unused(o->src_index);
785         if (o->trivial_merges_only && o->nontrivial_merge) {
786                 ret = unpack_failed(o, "Merge requires file-level merging");
787                 goto done;
788         }
790         if (!o->skip_sparse_checkout) {
791                 int empty_worktree = 1;
792                 for (i = 0;i < o->result.cache_nr;i++) {
793                         struct cache_entry *ce = o->result.cache[i];
795                         if (apply_sparse_checkout(ce, o)) {
796                                 ret = -1;
797                                 goto done;
798                         }
799                         /*
800                          * Merge strategies may set CE_UPDATE|CE_REMOVE outside checkout
801                          * area as a result of ce_skip_worktree() shortcuts in
802                          * verify_absent() and verify_uptodate(). Clear them.
803                          */
804                         if (ce_skip_worktree(ce))
805                                 ce->ce_flags &= ~(CE_UPDATE | CE_REMOVE);
806                         else
807                                 empty_worktree = 0;
809                 }
810                 if (o->result.cache_nr && empty_worktree) {
811                         ret = unpack_failed(o, "Sparse checkout leaves no entry on working directory");
812                         goto done;
813                 }
814         }
816         o->src_index = NULL;
817         ret = check_updates(o) ? (-2) : 0;
818         if (o->dst_index)
819                 *o->dst_index = o->result;
821 done:
822         for (i = 0;i < el.nr;i++)
823                 free(el.excludes[i]);
824         if (el.excludes)
825                 free(el.excludes);
827         return ret;
829 return_failed:
830         mark_all_ce_unused(o->src_index);
831         ret = unpack_failed(o, NULL);
832         goto done;
835 /* Here come the merge functions */
837 static int reject_merge(struct cache_entry *ce, struct unpack_trees_options *o)
839         return error(ERRORMSG(o, would_overwrite), ce->name);
842 static int same(struct cache_entry *a, struct cache_entry *b)
844         if (!!a != !!b)
845                 return 0;
846         if (!a && !b)
847                 return 1;
848         if ((a->ce_flags | b->ce_flags) & CE_CONFLICTED)
849                 return 0;
850         return a->ce_mode == b->ce_mode &&
851                !hashcmp(a->sha1, b->sha1);
856  * When a CE gets turned into an unmerged entry, we
857  * want it to be up-to-date
858  */
859 static int verify_uptodate_1(struct cache_entry *ce,
860                                    struct unpack_trees_options *o,
861                                    const char *error_msg)
863         struct stat st;
865         if (o->index_only || (!ce_skip_worktree(ce) && (o->reset || ce_uptodate(ce))))
866                 return 0;
868         if (!lstat(ce->name, &st)) {
869                 unsigned changed = ie_match_stat(o->src_index, ce, &st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
870                 if (!changed)
871                         return 0;
872                 /*
873                  * NEEDSWORK: the current default policy is to allow
874                  * submodule to be out of sync wrt the supermodule
875                  * index.  This needs to be tightened later for
876                  * submodules that are marked to be automatically
877                  * checked out.
878                  */
879                 if (S_ISGITLINK(ce->ce_mode))
880                         return 0;
881                 errno = 0;
882         }
883         if (errno == ENOENT)
884                 return 0;
885         return o->gently ? -1 :
886                 error(error_msg, ce->name);
889 static int verify_uptodate(struct cache_entry *ce,
890                            struct unpack_trees_options *o)
892         if (!o->skip_sparse_checkout && will_have_skip_worktree(ce, o))
893                 return 0;
894         return verify_uptodate_1(ce, o, ERRORMSG(o, not_uptodate_file));
897 static int verify_uptodate_sparse(struct cache_entry *ce,
898                                   struct unpack_trees_options *o)
900         return verify_uptodate_1(ce, o, ERRORMSG(o, sparse_not_uptodate_file));
903 static void invalidate_ce_path(struct cache_entry *ce, struct unpack_trees_options *o)
905         if (ce)
906                 cache_tree_invalidate_path(o->src_index->cache_tree, ce->name);
910  * Check that checking out ce->sha1 in subdir ce->name is not
911  * going to overwrite any working files.
913  * Currently, git does not checkout subprojects during a superproject
914  * checkout, so it is not going to overwrite anything.
915  */
916 static int verify_clean_submodule(struct cache_entry *ce, const char *action,
917                                       struct unpack_trees_options *o)
919         return 0;
922 static int verify_clean_subdirectory(struct cache_entry *ce, const char *action,
923                                       struct unpack_trees_options *o)
925         /*
926          * we are about to extract "ce->name"; we would not want to lose
927          * anything in the existing directory there.
928          */
929         int namelen;
930         int i;
931         struct dir_struct d;
932         char *pathbuf;
933         int cnt = 0;
934         unsigned char sha1[20];
936         if (S_ISGITLINK(ce->ce_mode) &&
937             resolve_gitlink_ref(ce->name, "HEAD", sha1) == 0) {
938                 /* If we are not going to update the submodule, then
939                  * we don't care.
940                  */
941                 if (!hashcmp(sha1, ce->sha1))
942                         return 0;
943                 return verify_clean_submodule(ce, action, o);
944         }
946         /*
947          * First let's make sure we do not have a local modification
948          * in that directory.
949          */
950         namelen = strlen(ce->name);
951         for (i = locate_in_src_index(ce, o);
952              i < o->src_index->cache_nr;
953              i++) {
954                 struct cache_entry *ce2 = o->src_index->cache[i];
955                 int len = ce_namelen(ce2);
956                 if (len < namelen ||
957                     strncmp(ce->name, ce2->name, namelen) ||
958                     ce2->name[namelen] != '/')
959                         break;
960                 /*
961                  * ce2->name is an entry in the subdirectory to be
962                  * removed.
963                  */
964                 if (!ce_stage(ce2)) {
965                         if (verify_uptodate(ce2, o))
966                                 return -1;
967                         add_entry(o, ce2, CE_REMOVE, 0);
968                         mark_ce_used(ce2, o);
969                 }
970                 cnt++;
971         }
973         /*
974          * Then we need to make sure that we do not lose a locally
975          * present file that is not ignored.
976          */
977         pathbuf = xmalloc(namelen + 2);
978         memcpy(pathbuf, ce->name, namelen);
979         strcpy(pathbuf+namelen, "/");
981         memset(&d, 0, sizeof(d));
982         if (o->dir)
983                 d.exclude_per_dir = o->dir->exclude_per_dir;
984         i = read_directory(&d, pathbuf, namelen+1, NULL);
985         if (i)
986                 return o->gently ? -1 :
987                         error(ERRORMSG(o, not_uptodate_dir), ce->name);
988         free(pathbuf);
989         return cnt;
993  * This gets called when there was no index entry for the tree entry 'dst',
994  * but we found a file in the working tree that 'lstat()' said was fine,
995  * and we're on a case-insensitive filesystem.
997  * See if we can find a case-insensitive match in the index that also
998  * matches the stat information, and assume it's that other file!
999  */
1000 static int icase_exists(struct unpack_trees_options *o, struct cache_entry *dst, struct stat *st)
1002         struct cache_entry *src;
1004         src = index_name_exists(o->src_index, dst->name, ce_namelen(dst), 1);
1005         return src && !ie_match_stat(o->src_index, src, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
1009  * We do not want to remove or overwrite a working tree file that
1010  * is not tracked, unless it is ignored.
1011  */
1012 static int verify_absent_1(struct cache_entry *ce, const char *action,
1013                                  struct unpack_trees_options *o,
1014                                  const char *error_msg)
1016         struct stat st;
1018         if (o->index_only || o->reset || !o->update)
1019                 return 0;
1021         if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
1022                 return 0;
1024         if (!lstat(ce->name, &st)) {
1025                 int dtype = ce_to_dtype(ce);
1026                 struct cache_entry *result;
1028                 /*
1029                  * It may be that the 'lstat()' succeeded even though
1030                  * target 'ce' was absent, because there is an old
1031                  * entry that is different only in case..
1032                  *
1033                  * Ignore that lstat() if it matches.
1034                  */
1035                 if (ignore_case && icase_exists(o, ce, &st))
1036                         return 0;
1038                 if (o->dir && excluded(o->dir, ce->name, &dtype))
1039                         /*
1040                          * ce->name is explicitly excluded, so it is Ok to
1041                          * overwrite it.
1042                          */
1043                         return 0;
1044                 if (S_ISDIR(st.st_mode)) {
1045                         /*
1046                          * We are checking out path "foo" and
1047                          * found "foo/." in the working tree.
1048                          * This is tricky -- if we have modified
1049                          * files that are in "foo/" we would lose
1050                          * them.
1051                          */
1052                         if (verify_clean_subdirectory(ce, action, o) < 0)
1053                                 return -1;
1054                         return 0;
1055                 }
1057                 /*
1058                  * The previous round may already have decided to
1059                  * delete this path, which is in a subdirectory that
1060                  * is being replaced with a blob.
1061                  */
1062                 result = index_name_exists(&o->result, ce->name, ce_namelen(ce), 0);
1063                 if (result) {
1064                         if (result->ce_flags & CE_REMOVE)
1065                                 return 0;
1066                 }
1068                 return o->gently ? -1 :
1069                         error(ERRORMSG(o, would_lose_untracked), ce->name, action);
1070         }
1071         return 0;
1073 static int verify_absent(struct cache_entry *ce, const char *action,
1074                          struct unpack_trees_options *o)
1076         if (!o->skip_sparse_checkout && will_have_skip_worktree(ce, o))
1077                 return 0;
1078         return verify_absent_1(ce, action, o, ERRORMSG(o, would_lose_untracked));
1081 static int verify_absent_sparse(struct cache_entry *ce, const char *action,
1082                          struct unpack_trees_options *o)
1084         return verify_absent_1(ce, action, o, ERRORMSG(o, would_lose_orphaned));
1087 static int merged_entry(struct cache_entry *merge, struct cache_entry *old,
1088                 struct unpack_trees_options *o)
1090         int update = CE_UPDATE;
1092         if (!old) {
1093                 if (verify_absent(merge, "overwritten", o))
1094                         return -1;
1095                 invalidate_ce_path(merge, o);
1096         } else if (!(old->ce_flags & CE_CONFLICTED)) {
1097                 /*
1098                  * See if we can re-use the old CE directly?
1099                  * That way we get the uptodate stat info.
1100                  *
1101                  * This also removes the UPDATE flag on a match; otherwise
1102                  * we will end up overwriting local changes in the work tree.
1103                  */
1104                 if (same(old, merge)) {
1105                         copy_cache_entry(merge, old);
1106                         update = 0;
1107                 } else {
1108                         if (verify_uptodate(old, o))
1109                                 return -1;
1110                         if (ce_skip_worktree(old))
1111                                 update |= CE_SKIP_WORKTREE;
1112                         invalidate_ce_path(old, o);
1113                 }
1114         } else {
1115                 /*
1116                  * Previously unmerged entry left as an existence
1117                  * marker by read_index_unmerged();
1118                  */
1119                 invalidate_ce_path(old, o);
1120         }
1122         add_entry(o, merge, update, CE_STAGEMASK);
1123         return 1;
1126 static int deleted_entry(struct cache_entry *ce, struct cache_entry *old,
1127                 struct unpack_trees_options *o)
1129         /* Did it exist in the index? */
1130         if (!old) {
1131                 if (verify_absent(ce, "removed", o))
1132                         return -1;
1133                 return 0;
1134         }
1135         if (!(old->ce_flags & CE_CONFLICTED) && verify_uptodate(old, o))
1136                 return -1;
1137         add_entry(o, ce, CE_REMOVE, 0);
1138         invalidate_ce_path(ce, o);
1139         return 1;
1142 static int keep_entry(struct cache_entry *ce, struct unpack_trees_options *o)
1144         add_entry(o, ce, 0, 0);
1145         return 1;
1148 #if DBRT_DEBUG
1149 static void show_stage_entry(FILE *o,
1150                              const char *label, const struct cache_entry *ce)
1152         if (!ce)
1153                 fprintf(o, "%s (missing)\n", label);
1154         else
1155                 fprintf(o, "%s%06o %s %d\t%s\n",
1156                         label,
1157                         ce->ce_mode,
1158                         sha1_to_hex(ce->sha1),
1159                         ce_stage(ce),
1160                         ce->name);
1162 #endif
1164 int threeway_merge(struct cache_entry **stages, struct unpack_trees_options *o)
1166         struct cache_entry *index;
1167         struct cache_entry *head;
1168         struct cache_entry *remote = stages[o->head_idx + 1];
1169         int count;
1170         int head_match = 0;
1171         int remote_match = 0;
1173         int df_conflict_head = 0;
1174         int df_conflict_remote = 0;
1176         int any_anc_missing = 0;
1177         int no_anc_exists = 1;
1178         int i;
1180         for (i = 1; i < o->head_idx; i++) {
1181                 if (!stages[i] || stages[i] == o->df_conflict_entry)
1182                         any_anc_missing = 1;
1183                 else
1184                         no_anc_exists = 0;
1185         }
1187         index = stages[0];
1188         head = stages[o->head_idx];
1190         if (head == o->df_conflict_entry) {
1191                 df_conflict_head = 1;
1192                 head = NULL;
1193         }
1195         if (remote == o->df_conflict_entry) {
1196                 df_conflict_remote = 1;
1197                 remote = NULL;
1198         }
1200         /*
1201          * First, if there's a #16 situation, note that to prevent #13
1202          * and #14.
1203          */
1204         if (!same(remote, head)) {
1205                 for (i = 1; i < o->head_idx; i++) {
1206                         if (same(stages[i], head)) {
1207                                 head_match = i;
1208                         }
1209                         if (same(stages[i], remote)) {
1210                                 remote_match = i;
1211                         }
1212                 }
1213         }
1215         /*
1216          * We start with cases where the index is allowed to match
1217          * something other than the head: #14(ALT) and #2ALT, where it
1218          * is permitted to match the result instead.
1219          */
1220         /* #14, #14ALT, #2ALT */
1221         if (remote && !df_conflict_head && head_match && !remote_match) {
1222                 if (index && !same(index, remote) && !same(index, head))
1223                         return o->gently ? -1 : reject_merge(index, o);
1224                 return merged_entry(remote, index, o);
1225         }
1226         /*
1227          * If we have an entry in the index cache, then we want to
1228          * make sure that it matches head.
1229          */
1230         if (index && !same(index, head))
1231                 return o->gently ? -1 : reject_merge(index, o);
1233         if (head) {
1234                 /* #5ALT, #15 */
1235                 if (same(head, remote))
1236                         return merged_entry(head, index, o);
1237                 /* #13, #3ALT */
1238                 if (!df_conflict_remote && remote_match && !head_match)
1239                         return merged_entry(head, index, o);
1240         }
1242         /* #1 */
1243         if (!head && !remote && any_anc_missing)
1244                 return 0;
1246         /*
1247          * Under the "aggressive" rule, we resolve mostly trivial
1248          * cases that we historically had git-merge-one-file resolve.
1249          */
1250         if (o->aggressive) {
1251                 int head_deleted = !head;
1252                 int remote_deleted = !remote;
1253                 struct cache_entry *ce = NULL;
1255                 if (index)
1256                         ce = index;
1257                 else if (head)
1258                         ce = head;
1259                 else if (remote)
1260                         ce = remote;
1261                 else {
1262                         for (i = 1; i < o->head_idx; i++) {
1263                                 if (stages[i] && stages[i] != o->df_conflict_entry) {
1264                                         ce = stages[i];
1265                                         break;
1266                                 }
1267                         }
1268                 }
1270                 /*
1271                  * Deleted in both.
1272                  * Deleted in one and unchanged in the other.
1273                  */
1274                 if ((head_deleted && remote_deleted) ||
1275                     (head_deleted && remote && remote_match) ||
1276                     (remote_deleted && head && head_match)) {
1277                         if (index)
1278                                 return deleted_entry(index, index, o);
1279                         if (ce && !head_deleted) {
1280                                 if (verify_absent(ce, "removed", o))
1281                                         return -1;
1282                         }
1283                         return 0;
1284                 }
1285                 /*
1286                  * Added in both, identically.
1287                  */
1288                 if (no_anc_exists && head && remote && same(head, remote))
1289                         return merged_entry(head, index, o);
1291         }
1293         /* Below are "no merge" cases, which require that the index be
1294          * up-to-date to avoid the files getting overwritten with
1295          * conflict resolution files.
1296          */
1297         if (index) {
1298                 if (verify_uptodate(index, o))
1299                         return -1;
1300         }
1302         o->nontrivial_merge = 1;
1304         /* #2, #3, #4, #6, #7, #9, #10, #11. */
1305         count = 0;
1306         if (!head_match || !remote_match) {
1307                 for (i = 1; i < o->head_idx; i++) {
1308                         if (stages[i] && stages[i] != o->df_conflict_entry) {
1309                                 keep_entry(stages[i], o);
1310                                 count++;
1311                                 break;
1312                         }
1313                 }
1314         }
1315 #if DBRT_DEBUG
1316         else {
1317                 fprintf(stderr, "read-tree: warning #16 detected\n");
1318                 show_stage_entry(stderr, "head   ", stages[head_match]);
1319                 show_stage_entry(stderr, "remote ", stages[remote_match]);
1320         }
1321 #endif
1322         if (head) { count += keep_entry(head, o); }
1323         if (remote) { count += keep_entry(remote, o); }
1324         return count;
1328  * Two-way merge.
1330  * The rule is to "carry forward" what is in the index without losing
1331  * information across a "fast-forward", favoring a successful merge
1332  * over a merge failure when it makes sense.  For details of the
1333  * "carry forward" rule, please see <Documentation/git-read-tree.txt>.
1335  */
1336 int twoway_merge(struct cache_entry **src, struct unpack_trees_options *o)
1338         struct cache_entry *current = src[0];
1339         struct cache_entry *oldtree = src[1];
1340         struct cache_entry *newtree = src[2];
1342         if (o->merge_size != 2)
1343                 return error("Cannot do a twoway merge of %d trees",
1344                              o->merge_size);
1346         if (oldtree == o->df_conflict_entry)
1347                 oldtree = NULL;
1348         if (newtree == o->df_conflict_entry)
1349                 newtree = NULL;
1351         if (current) {
1352                 if ((!oldtree && !newtree) || /* 4 and 5 */
1353                     (!oldtree && newtree &&
1354                      same(current, newtree)) || /* 6 and 7 */
1355                     (oldtree && newtree &&
1356                      same(oldtree, newtree)) || /* 14 and 15 */
1357                     (oldtree && newtree &&
1358                      !same(oldtree, newtree) && /* 18 and 19 */
1359                      same(current, newtree))) {
1360                         return keep_entry(current, o);
1361                 }
1362                 else if (oldtree && !newtree && same(current, oldtree)) {
1363                         /* 10 or 11 */
1364                         return deleted_entry(oldtree, current, o);
1365                 }
1366                 else if (oldtree && newtree &&
1367                          same(current, oldtree) && !same(current, newtree)) {
1368                         /* 20 or 21 */
1369                         return merged_entry(newtree, current, o);
1370                 }
1371                 else {
1372                         /* all other failures */
1373                         if (oldtree)
1374                                 return o->gently ? -1 : reject_merge(oldtree, o);
1375                         if (current)
1376                                 return o->gently ? -1 : reject_merge(current, o);
1377                         if (newtree)
1378                                 return o->gently ? -1 : reject_merge(newtree, o);
1379                         return -1;
1380                 }
1381         }
1382         else if (newtree) {
1383                 if (oldtree && !o->initial_checkout) {
1384                         /*
1385                          * deletion of the path was staged;
1386                          */
1387                         if (same(oldtree, newtree))
1388                                 return 1;
1389                         return reject_merge(oldtree, o);
1390                 }
1391                 return merged_entry(newtree, current, o);
1392         }
1393         return deleted_entry(oldtree, current, o);
1397  * Bind merge.
1399  * Keep the index entries at stage0, collapse stage1 but make sure
1400  * stage0 does not have anything there.
1401  */
1402 int bind_merge(struct cache_entry **src,
1403                 struct unpack_trees_options *o)
1405         struct cache_entry *old = src[0];
1406         struct cache_entry *a = src[1];
1408         if (o->merge_size != 1)
1409                 return error("Cannot do a bind merge of %d trees\n",
1410                              o->merge_size);
1411         if (a && old)
1412                 return o->gently ? -1 :
1413                         error(ERRORMSG(o, bind_overlap), a->name, old->name);
1414         if (!a)
1415                 return keep_entry(old, o);
1416         else
1417                 return merged_entry(a, NULL, o);
1421  * One-way merge.
1423  * The rule is:
1424  * - take the stat information from stage0, take the data from stage1
1425  */
1426 int oneway_merge(struct cache_entry **src, struct unpack_trees_options *o)
1428         struct cache_entry *old = src[0];
1429         struct cache_entry *a = src[1];
1431         if (o->merge_size != 1)
1432                 return error("Cannot do a oneway merge of %d trees",
1433                              o->merge_size);
1435         if (!a || a == o->df_conflict_entry)
1436                 return deleted_entry(old, old, o);
1438         if (old && same(old, a)) {
1439                 int update = 0;
1440                 if (o->reset && !ce_uptodate(old) && !ce_skip_worktree(old)) {
1441                         struct stat st;
1442                         if (lstat(old->name, &st) ||
1443                             ie_match_stat(o->src_index, old, &st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE))
1444                                 update |= CE_UPDATE;
1445                 }
1446                 add_entry(o, old, update, 0);
1447                 return 0;
1448         }
1449         return merged_entry(a, old, o);