This will allow builtin-checkout to suppress merge errors if it's going to try more merging methods. Signed-off-by: Daniel Barkalow <barkalow@xxxxxxxxxxxx> --- unpack-trees.c | 29 +++++++++++++++++------------ unpack-trees.h | 1 + 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index 0958166..a423197 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -362,7 +362,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options } if (o->trivial_merges_only && o->nontrivial_merge) - return error("Merge requires file-level merging"); + return o->gently ? -1 : + error("Merge requires file-level merging"); check_updates(active_cache, active_nr, o); return 0; @@ -416,7 +417,8 @@ static int verify_uptodate(struct cache_entry *ce, } if (errno == ENOENT) return 0; - return error("Entry '%s' not uptodate. Cannot merge.", ce->name); + return o->gently ? -1 : + error("Entry '%s' not uptodate. Cannot merge.", ce->name); } static void invalidate_ce_path(struct cache_entry *ce) @@ -502,8 +504,9 @@ static int verify_clean_subdirectory(struct cache_entry *ce, const char *action, d.exclude_per_dir = o->dir->exclude_per_dir; i = read_directory(&d, ce->name, pathbuf, namelen+1, NULL); if (i) - return error("Updating '%s' would lose untracked files in it", - ce->name); + return o->gently ? -1 : + error("Updating '%s' would lose untracked files in it", + ce->name); free(pathbuf); return cnt; } @@ -575,8 +578,9 @@ static int verify_absent(struct cache_entry *ce, const char *action, return 0; } - return error("Untracked working tree file '%s' " - "would be %s by merge.", ce->name, action); + return o->gently ? -1 : + error("Untracked working tree file '%s' " + "would be %s by merge.", ce->name, action); } return 0; } @@ -708,7 +712,7 @@ int threeway_merge(struct cache_entry **stages, /* #14, #14ALT, #2ALT */ if (remote && !df_conflict_head && head_match && !remote_match) { if (index && !same(index, remote) && !same(index, head)) - return reject_merge(index); + return o->gently ? -1 : reject_merge(index); return merged_entry(remote, index, o); } /* @@ -716,7 +720,7 @@ int threeway_merge(struct cache_entry **stages, * make sure that it matches head. */ if (index && !same(index, head)) { - return reject_merge(index); + return o->gently ? -1 : reject_merge(index); } if (head) { @@ -867,11 +871,11 @@ int twoway_merge(struct cache_entry **src, /* all other failures */ remove_entry(remove); if (oldtree) - return reject_merge(oldtree); + return o->gently ? -1 : reject_merge(oldtree); if (current) - return reject_merge(current); + return o->gently ? -1 : reject_merge(current); if (newtree) - return reject_merge(newtree); + return o->gently ? -1 : reject_merge(newtree); return -1; } } @@ -898,7 +902,8 @@ int bind_merge(struct cache_entry **src, return error("Cannot do a bind merge of %d trees\n", o->merge_size); if (a && old) - return error("Entry '%s' overlaps. Cannot bind.", a->name); + return o->gently ? -1 : + error("Entry '%s' overlaps. Cannot bind.", a->name); if (!a) return keep_entry(old, o); else diff --git a/unpack-trees.h b/unpack-trees.h index 5517faa..619950d 100644 --- a/unpack-trees.h +++ b/unpack-trees.h @@ -16,6 +16,7 @@ struct unpack_trees_options { int trivial_merges_only; int verbose_update; int aggressive; + int gently; const char *prefix; int pos; struct dir_struct *dir; -- 1.5.3.6.886.gb204 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html