diff options
-rw-r--r-- | builtin/checkout.c | 2 | ||||
-rw-r--r-- | builtin/merge.c | 2 | ||||
-rw-r--r-- | merge-recursive.c | 31 | ||||
-rw-r--r-- | merge-recursive.h | 7 | ||||
-rw-r--r-- | unpack-trees.c | 5 |
5 files changed, 31 insertions, 16 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c index 7d1706e0f9..22bf47cb6f 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -373,7 +373,7 @@ static int merge_working_tree(struct checkout_opts *opts, topts.src_index = &the_index; topts.dst_index = &the_index; - topts.msgs[ERROR_NOT_UPTODATE_FILE] = "You have local changes to '%s'; cannot switch branches."; + set_porcelain_error_msgs(topts.msgs, "checkout"); refresh_cache(REFRESH_QUIET); diff --git a/builtin/merge.c b/builtin/merge.c index 115a28854d..de5a0f6292 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -704,7 +704,7 @@ int checkout_fast_forward(const unsigned char *head, const unsigned char *remote opts.verbose_update = 1; opts.merge = 1; opts.fn = twoway_merge; - set_porcelain_error_msgs(opts.msgs); + set_porcelain_error_msgs(opts.msgs, "merge"); trees[nr_trees] = parse_tree_indirect(head); if (!trees[nr_trees++]) diff --git a/merge-recursive.c b/merge-recursive.c index d3bd963890..b1e526b0d8 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -185,7 +185,7 @@ static int git_merge_trees(int index_only, opts.fn = threeway_merge; opts.src_index = &the_index; opts.dst_index = &the_index; - set_porcelain_error_msgs(opts.msgs); + set_porcelain_error_msgs(opts.msgs, "merge"); init_tree_desc_from_tree(t+0, common); init_tree_desc_from_tree(t+1, head); @@ -1178,19 +1178,32 @@ static int process_entry(struct merge_options *o, return clean_merge; } -void set_porcelain_error_msgs(const char **msgs) +void set_porcelain_error_msgs(const char **msgs, const char *cmd) { + const char *msg; + char *tmp; + const char *cmd2 = strcmp(cmd, "checkout") ? cmd : "switch branches"; if (advice_commit_before_merge) - msgs[ERROR_WOULD_OVERWRITE] = msgs[ERROR_NOT_UPTODATE_FILE] = - "Your local changes to '%s' would be overwritten by merge. Aborting.\n" - "Please, commit your changes or stash them before you can merge."; + msg = "Your local changes to '%%s' would be overwritten by %s. Aborting.\n" + "Please, commit your changes or stash them before you can %s."; else - msgs[ERROR_WOULD_OVERWRITE] = msgs[ERROR_NOT_UPTODATE_FILE] = - "Your local changes to '%s' would be overwritten by merge. Aborting."; + msg = "Your local changes to '%%s' would be overwritten by %s. Aborting."; + tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen(cmd2) - 3); + sprintf(tmp, msg, cmd, cmd2); + msgs[ERROR_WOULD_OVERWRITE] = tmp; + msgs[ERROR_NOT_UPTODATE_FILE] = tmp; + msgs[ERROR_NOT_UPTODATE_DIR] = "Updating '%s' would lose untracked files in it. Aborting."; - msgs[ERROR_WOULD_LOSE_UNTRACKED] = - "Untracked working tree file '%s' would be %s by merge. Aborting"; + + if (advice_commit_before_merge) + msg = "Untracked working tree file '%%s' would be %%s by %s. Aborting" + "Please move or remove them before you can %s."; + else + msg = "Untracked working tree file '%%s' would be %%s by %s. Aborting"; + tmp = xmalloc(strlen(msg) + strlen(cmd) + strlen(cmd2) - 3); + sprintf(tmp, msg, cmd, cmd2); + msgs[ERROR_WOULD_LOSE_UNTRACKED] = tmp; } int merge_trees(struct merge_options *o, diff --git a/merge-recursive.h b/merge-recursive.h index 8412db87eb..08f9850367 100644 --- a/merge-recursive.h +++ b/merge-recursive.h @@ -23,8 +23,11 @@ struct merge_options { struct string_list current_directory_set; }; -/* Sets the list of user-friendly error messages to be used by merge */ -void set_porcelain_error_msgs(const char **msgs); +/* + * Sets the list of user-friendly error messages to be used by the + * command "cmd" (either merge or checkout) + */ +void set_porcelain_error_msgs(const char **msgs, const char *cmd); /* merge_trees() but with recursive ancestor consolidation */ int merge_recursive(struct merge_options *o, diff --git a/unpack-trees.c b/unpack-trees.c index 304e59a5b7..e3258317d6 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -13,9 +13,8 @@ * Error messages expected by scripts out of plumbing commands such as * read-tree. Non-scripted Porcelain is not required to use these messages * and in fact are encouraged to reword them to better suit their particular - * situation better. See how "git checkout" replaces ERROR_NOT_UPTODATE_FILE to - * explain why it does not allow switching between branches when you have - * local changes, for example. + * situation better. See how "git checkout" and "git merge" replaces + * them using set_porcelain_error_msgs(), for example. */ const char *unpack_plumbing_errors[NB_UNPACK_TREES_ERROR_TYPES] = { /* ERROR_WOULD_OVERWRITE */ |