Be more user-friendly when refusing to do something because of conflict.
[gitweb.git] / advice.c
index ae4b1e81dfea0f63db10691ba0005c8888fd6dc7..3309521f456b0218fa765ba7f3dd7d7a3e94dea2 100644 (file)
--- a/advice.c
+++ b/advice.c
@@ -2,6 +2,8 @@
 
 int advice_push_nonfastforward = 1;
 int advice_status_hints = 1;
+int advice_commit_before_merge = 1;
+int advice_resolve_conflict = 1;
 
 static struct {
        const char *name;
@@ -9,6 +11,8 @@ static struct {
 } advice_config[] = {
        { "pushnonfastforward", &advice_push_nonfastforward },
        { "statushints", &advice_status_hints },
+       { "commitbeforemerge", &advice_commit_before_merge },
+       { "resolveconflict", &advice_resolve_conflict },
 };
 
 int git_default_advice_config(const char *var, const char *value)
@@ -25,3 +29,17 @@ int git_default_advice_config(const char *var, const char *value)
 
        return 0;
 }
+
+void NORETURN die_resolve_conflict(const char *me)
+{
+       if (advice_resolve_conflict)
+               /*
+                * Message used both when 'git commit' fails and when
+                * other commands doing a merge do.
+                */
+               die("'%s' is not possible because you have unmerged files.\n"
+                   "Please, fix them up in the work tree, and then use 'git add/rm <file>' as\n"
+                   "appropriate to mark resolution and make a commit, or use 'git commit -a'.", me);
+       else
+               die("'%s' is not possible because you have unmerged files.", me);
+}