2 * GIT - The information manager from hell
4 * Copyright (C) Linus Torvalds, 2005
12 #include "tree-walk.h"
13 #include "cache-tree.h"
14 #include "unpack-trees.h"
17 static struct object_list
*trees
= NULL
;
19 static void reject_merge(struct cache_entry
*ce
)
21 die("Entry '%s' would be overwritten by merge. Cannot merge.",
25 static int list_tree(unsigned char *sha1
)
27 struct tree
*tree
= parse_tree_indirect(sha1
);
30 object_list_append(&tree
->object
, &trees
);
34 static int same(struct cache_entry
*a
, struct cache_entry
*b
)
40 return a
->ce_mode
== b
->ce_mode
&&
41 !memcmp(a
->sha1
, b
->sha1
, 20);
46 * When a CE gets turned into an unmerged entry, we
47 * want it to be up-to-date
49 static void verify_uptodate(struct cache_entry
*ce
,
50 struct unpack_trees_options
*o
)
54 if (o
->index_only
|| o
->reset
)
57 if (!lstat(ce
->name
, &st
)) {
58 unsigned changed
= ce_match_stat(ce
, &st
, 1);
64 ce
->ce_flags
|= htons(CE_UPDATE
);
69 die("Entry '%s' not uptodate. Cannot merge.", ce
->name
);
72 static void invalidate_ce_path(struct cache_entry
*ce
)
75 cache_tree_invalidate_path(active_cache_tree
, ce
->name
);
79 * We do not want to remove or overwrite a working tree file that
82 static void verify_absent(const char *path
, const char *action
,
83 struct unpack_trees_options
*o
)
87 if (o
->index_only
|| o
->reset
|| !o
->update
)
89 if (!lstat(path
, &st
))
90 die("Untracked working tree file '%s' "
91 "would be %s by merge.", path
, action
);
94 static int merged_entry(struct cache_entry
*merge
, struct cache_entry
*old
,
95 struct unpack_trees_options
*o
)
97 merge
->ce_flags
|= htons(CE_UPDATE
);
100 * See if we can re-use the old CE directly?
101 * That way we get the uptodate stat info.
103 * This also removes the UPDATE flag on
106 if (same(old
, merge
)) {
109 verify_uptodate(old
, o
);
110 invalidate_ce_path(old
);
114 verify_absent(merge
->name
, "overwritten", o
);
115 invalidate_ce_path(merge
);
118 merge
->ce_flags
&= ~htons(CE_STAGEMASK
);
119 add_cache_entry(merge
, ADD_CACHE_OK_TO_ADD
|ADD_CACHE_OK_TO_REPLACE
);
123 static int deleted_entry(struct cache_entry
*ce
, struct cache_entry
*old
,
124 struct unpack_trees_options
*o
)
127 verify_uptodate(old
, o
);
129 verify_absent(ce
->name
, "removed", o
);
131 add_cache_entry(ce
, ADD_CACHE_OK_TO_ADD
|ADD_CACHE_OK_TO_REPLACE
);
132 invalidate_ce_path(ce
);
136 static int keep_entry(struct cache_entry
*ce
)
138 add_cache_entry(ce
, ADD_CACHE_OK_TO_ADD
);
143 static void show_stage_entry(FILE *o
,
144 const char *label
, const struct cache_entry
*ce
)
147 fprintf(o
, "%s (missing)\n", label
);
149 fprintf(o
, "%s%06o %s %d\t%s\n",
152 sha1_to_hex(ce
->sha1
),
158 static int threeway_merge(struct cache_entry
**stages
,
159 struct unpack_trees_options
*o
)
161 struct cache_entry
*index
;
162 struct cache_entry
*head
;
163 struct cache_entry
*remote
= stages
[o
->head_idx
+ 1];
166 int remote_match
= 0;
167 const char *path
= NULL
;
169 int df_conflict_head
= 0;
170 int df_conflict_remote
= 0;
172 int any_anc_missing
= 0;
173 int no_anc_exists
= 1;
176 for (i
= 1; i
< o
->head_idx
; i
++) {
181 path
= stages
[i
]->name
;
187 head
= stages
[o
->head_idx
];
189 if (head
== &o
->df_conflict_entry
) {
190 df_conflict_head
= 1;
194 if (remote
== &o
->df_conflict_entry
) {
195 df_conflict_remote
= 1;
206 /* First, if there's a #16 situation, note that to prevent #13
209 if (!same(remote
, head
)) {
210 for (i
= 1; i
< o
->head_idx
; i
++) {
211 if (same(stages
[i
], head
)) {
214 if (same(stages
[i
], remote
)) {
220 /* We start with cases where the index is allowed to match
221 * something other than the head: #14(ALT) and #2ALT, where it
222 * is permitted to match the result instead.
224 /* #14, #14ALT, #2ALT */
225 if (remote
&& !df_conflict_head
&& head_match
&& !remote_match
) {
226 if (index
&& !same(index
, remote
) && !same(index
, head
))
228 return merged_entry(remote
, index
, o
);
231 * If we have an entry in the index cache, then we want to
232 * make sure that it matches head.
234 if (index
&& !same(index
, head
)) {
240 if (same(head
, remote
))
241 return merged_entry(head
, index
, o
);
243 if (!df_conflict_remote
&& remote_match
&& !head_match
)
244 return merged_entry(head
, index
, o
);
248 if (!head
&& !remote
&& any_anc_missing
)
251 /* Under the new "aggressive" rule, we resolve mostly trivial
252 * cases that we historically had git-merge-one-file resolve.
255 int head_deleted
= !head
&& !df_conflict_head
;
256 int remote_deleted
= !remote
&& !df_conflict_remote
;
259 * Deleted in one and unchanged in the other.
261 if ((head_deleted
&& remote_deleted
) ||
262 (head_deleted
&& remote
&& remote_match
) ||
263 (remote_deleted
&& head
&& head_match
)) {
265 return deleted_entry(index
, index
, o
);
267 verify_absent(path
, "removed", o
);
271 * Added in both, identically.
273 if (no_anc_exists
&& head
&& remote
&& same(head
, remote
))
274 return merged_entry(head
, index
, o
);
278 /* Below are "no merge" cases, which require that the index be
279 * up-to-date to avoid the files getting overwritten with
280 * conflict resolution files.
283 verify_uptodate(index
, o
);
286 verify_absent(path
, "overwritten", o
);
288 o
->nontrivial_merge
= 1;
290 /* #2, #3, #4, #6, #7, #9, #11. */
292 if (!head_match
|| !remote_match
) {
293 for (i
= 1; i
< o
->head_idx
; i
++) {
295 keep_entry(stages
[i
]);
303 fprintf(stderr
, "read-tree: warning #16 detected\n");
304 show_stage_entry(stderr
, "head ", stages
[head_match
]);
305 show_stage_entry(stderr
, "remote ", stages
[remote_match
]);
308 if (head
) { count
+= keep_entry(head
); }
309 if (remote
) { count
+= keep_entry(remote
); }
316 * The rule is to "carry forward" what is in the index without losing
317 * information across a "fast forward", favoring a successful merge
318 * over a merge failure when it makes sense. For details of the
319 * "carry forward" rule, please see <Documentation/git-read-tree.txt>.
322 static int twoway_merge(struct cache_entry
**src
,
323 struct unpack_trees_options
*o
)
325 struct cache_entry
*current
= src
[0];
326 struct cache_entry
*oldtree
= src
[1], *newtree
= src
[2];
328 if (o
->merge_size
!= 2)
329 return error("Cannot do a twoway merge of %d trees",
333 if ((!oldtree
&& !newtree
) || /* 4 and 5 */
334 (!oldtree
&& newtree
&&
335 same(current
, newtree
)) || /* 6 and 7 */
336 (oldtree
&& newtree
&&
337 same(oldtree
, newtree
)) || /* 14 and 15 */
338 (oldtree
&& newtree
&&
339 !same(oldtree
, newtree
) && /* 18 and 19*/
340 same(current
, newtree
))) {
341 return keep_entry(current
);
343 else if (oldtree
&& !newtree
&& same(current
, oldtree
)) {
345 return deleted_entry(oldtree
, current
, o
);
347 else if (oldtree
&& newtree
&&
348 same(current
, oldtree
) && !same(current
, newtree
)) {
350 return merged_entry(newtree
, current
, o
);
353 /* all other failures */
355 reject_merge(oldtree
);
357 reject_merge(current
);
359 reject_merge(newtree
);
364 return merged_entry(newtree
, current
, o
);
366 return deleted_entry(oldtree
, current
, o
);
372 * Keep the index entries at stage0, collapse stage1 but make sure
373 * stage0 does not have anything there.
375 static int bind_merge(struct cache_entry
**src
,
376 struct unpack_trees_options
*o
)
378 struct cache_entry
*old
= src
[0];
379 struct cache_entry
*a
= src
[1];
381 if (o
->merge_size
!= 1)
382 return error("Cannot do a bind merge of %d trees\n",
385 die("Entry '%s' overlaps. Cannot bind.", a
->name
);
387 return keep_entry(old
);
389 return merged_entry(a
, NULL
, o
);
396 * - take the stat information from stage0, take the data from stage1
398 static int oneway_merge(struct cache_entry
**src
,
399 struct unpack_trees_options
*o
)
401 struct cache_entry
*old
= src
[0];
402 struct cache_entry
*a
= src
[1];
404 if (o
->merge_size
!= 1)
405 return error("Cannot do a oneway merge of %d trees",
409 return deleted_entry(old
, old
, o
);
410 if (old
&& same(old
, a
)) {
413 if (lstat(old
->name
, &st
) ||
414 ce_match_stat(old
, &st
, 1))
415 old
->ce_flags
|= htons(CE_UPDATE
);
417 return keep_entry(old
);
419 return merged_entry(a
, old
, o
);
422 static int read_cache_unmerged(void)
425 struct cache_entry
**dst
;
426 struct cache_entry
*last
= NULL
;
430 for (i
= 0; i
< active_nr
; i
++) {
431 struct cache_entry
*ce
= active_cache
[i
];
433 if (last
&& !strcmp(ce
->name
, last
->name
))
435 invalidate_ce_path(ce
);
438 ce
->ce_flags
&= ~htons(CE_STAGEMASK
);
442 active_nr
= dst
- active_cache
;
446 static void prime_cache_tree_rec(struct cache_tree
*it
, struct tree
*tree
)
448 struct tree_desc desc
;
449 struct name_entry entry
;
452 memcpy(it
->sha1
, tree
->object
.sha1
, 20);
453 desc
.buf
= tree
->buffer
;
454 desc
.size
= tree
->size
;
456 while (tree_entry(&desc
, &entry
)) {
457 if (!S_ISDIR(entry
.mode
))
460 struct cache_tree_sub
*sub
;
461 struct tree
*subtree
= lookup_tree(entry
.sha1
);
462 if (!subtree
->object
.parsed
)
464 sub
= cache_tree_sub(it
, entry
.path
);
465 sub
->cache_tree
= cache_tree();
466 prime_cache_tree_rec(sub
->cache_tree
, subtree
);
467 cnt
+= sub
->cache_tree
->entry_count
;
470 it
->entry_count
= cnt
;
473 static void prime_cache_tree(void)
475 struct tree
*tree
= (struct tree
*)trees
->item
;
478 active_cache_tree
= cache_tree();
479 prime_cache_tree_rec(active_cache_tree
, tree
);
483 static const char read_tree_usage
[] = "git-read-tree (<sha> | [[-m [--aggressive] | --reset | --prefix=<prefix>] [-u | -i]] <sha1> [<sha2> [<sha3>]])";
485 static struct lock_file lock_file
;
487 int cmd_read_tree(int argc
, const char **argv
, const char *prefix
)
489 int i
, newfd
, stage
= 0;
490 unsigned char sha1
[20];
491 struct unpack_trees_options opts
;
493 memset(&opts
, 0, sizeof(opts
));
496 setup_git_directory();
497 git_config(git_default_config
);
499 newfd
= hold_lock_file_for_update(&lock_file
, get_index_file());
501 die("unable to create new index file");
503 git_config(git_default_config
);
505 for (i
= 1; i
< argc
; i
++) {
506 const char *arg
= argv
[i
];
508 /* "-u" means "update", meaning that a merge will update
511 if (!strcmp(arg
, "-u")) {
516 if (!strcmp(arg
, "-v")) {
517 opts
.verbose_update
= 1;
521 /* "-i" means "index only", meaning that a merge will
522 * not even look at the working tree.
524 if (!strcmp(arg
, "-i")) {
529 /* "--prefix=<subdirectory>/" means keep the current index
530 * entries and put the entries from the tree under the
531 * given subdirectory.
533 if (!strncmp(arg
, "--prefix=", 9)) {
534 if (stage
|| opts
.merge
|| opts
.prefix
)
535 usage(read_tree_usage
);
536 opts
.prefix
= arg
+ 9;
539 if (read_cache_unmerged())
540 die("you need to resolve your current index first");
544 /* This differs from "-m" in that we'll silently ignore
545 * unmerged entries and overwrite working tree files that
546 * correspond to them.
548 if (!strcmp(arg
, "--reset")) {
549 if (stage
|| opts
.merge
|| opts
.prefix
)
550 usage(read_tree_usage
);
554 read_cache_unmerged();
558 if (!strcmp(arg
, "--trivial")) {
559 opts
.trivial_merges_only
= 1;
563 if (!strcmp(arg
, "--aggressive")) {
568 /* "-m" stands for "merge", meaning we start in stage 1 */
569 if (!strcmp(arg
, "-m")) {
570 if (stage
|| opts
.merge
|| opts
.prefix
)
571 usage(read_tree_usage
);
572 if (read_cache_unmerged())
573 die("you need to resolve your current index first");
579 /* using -u and -i at the same time makes no sense */
580 if (1 < opts
.index_only
+ opts
.update
)
581 usage(read_tree_usage
);
583 if (get_sha1(arg
, sha1
))
584 die("Not a valid object name %s", arg
);
585 if (list_tree(sha1
) < 0)
586 die("failed to unpack tree object %s", arg
);
589 if ((opts
.update
||opts
.index_only
) && !opts
.merge
)
590 usage(read_tree_usage
);
593 int pfxlen
= strlen(opts
.prefix
);
595 if (opts
.prefix
[pfxlen
-1] != '/')
596 die("prefix must end with /");
598 die("binding merge takes only one tree");
599 pos
= cache_name_pos(opts
.prefix
, pfxlen
);
601 die("corrupt index file");
603 if (pos
< active_nr
&&
604 !strncmp(active_cache
[pos
]->name
, opts
.prefix
, pfxlen
))
605 die("subdirectory '%s' already exists.", opts
.prefix
);
606 pos
= cache_name_pos(opts
.prefix
, pfxlen
-1);
608 die("file '%.*s' already exists.",
609 pfxlen
-1, opts
.prefix
);
614 die("just how do you expect me to merge %d trees?", stage
-1);
617 opts
.fn
= opts
.prefix
? bind_merge
: oneway_merge
;
620 opts
.fn
= twoway_merge
;
624 opts
.fn
= threeway_merge
;
625 cache_tree_free(&active_cache_tree
);
630 opts
.head_idx
= stage
- 2;
635 unpack_trees(trees
, &opts
);
638 * When reading only one tree (either the most basic form,
639 * "-m ent" or "--reset ent" form), we can obtain a fully
640 * valid cache-tree because the index must match exactly
641 * what came from the tree.
643 if (trees
&& trees
->item
&& !opts
.prefix
&& (!opts
.merge
|| (stage
== 2))) {
644 cache_tree_free(&active_cache_tree
);
648 if (write_cache(newfd
, active_cache
, active_nr
) ||
649 close(newfd
) || commit_lock_file(&lock_file
))
650 die("unable to write new index file");