rm: introduce advice.rmHints to shorten messages
authorMathieu Lienard--Mayor <Mathieu.Lienard--Mayor@ensimag.imag.fr>
Wed, 12 Jun 2013 08:06:44 +0000 (10:06 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 Jun 2013 23:59:55 +0000 (16:59 -0700)
Introduce advice.rmHints to choose whether to display advice or not
when git rm fails. Defaults to true, in order to preserve current behavior.

As an example, the message:
error: 'foo.txt' has changes staged in the index
(use --cached to keep the file, or -f to force removal)

would look like, with advice.rmHints=false:
error: 'foo.txt' has changes staged in the index

Signed-off-by: Mathieu Lienard--Mayor <Mathieu.Lienard--Mayor@ensimag.imag.fr>
Signed-off-by: Jorge Juan Garcia Garcia <Jorge-Juan.Garcia-Garcia@ensimag.imag.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config.txt
advice.c
advice.h
builtin/rm.c
t/t3600-rm.sh
index 6e53fc507489fb2add3184998b8ec2a43e84b249..eb044798042000758b733cc713dc3d638dff20e1 100644 (file)
@@ -199,6 +199,9 @@ advice.*::
        amWorkDir::
                Advice that shows the location of the patch file when
                linkgit:git-am[1] fails to apply it.
+       rmHints::
+               In case of failure in the output of linkgit:git-rm[1],
+               show directions on how to proceed from the current state.
 --
 
 core.fileMode::
index a8deee6e6419a1e867e06e90a70300cd2e01b556..a4c169ca382bd8265965f8fab6a961ffa8e7dcd2 100644 (file)
--- a/advice.c
+++ b/advice.c
@@ -14,6 +14,7 @@ int advice_resolve_conflict = 1;
 int advice_implicit_identity = 1;
 int advice_detached_head = 1;
 int advice_set_upstream_failure = 1;
+int advice_rm_hints = 1;
 
 static struct {
        const char *name;
@@ -33,6 +34,7 @@ static struct {
        { "implicitidentity", &advice_implicit_identity },
        { "detachedhead", &advice_detached_head },
        { "setupstreamfailure", &advice_set_upstream_failure },
+       { "rmhints", &advice_rm_hints },
 
        /* make this an alias for backward compatibility */
        { "pushnonfastforward", &advice_push_update_rejected }
index 94caa32f9213f59a627176ec8b4aea022f6b0f8f..36104c477681436493c7f4c1b2fdc27136d1c0f6 100644 (file)
--- a/advice.h
+++ b/advice.h
@@ -17,6 +17,7 @@ extern int advice_resolve_conflict;
 extern int advice_implicit_identity;
 extern int advice_detached_head;
 extern int advice_set_upstream_failure;
+extern int advice_rm_hints;
 
 int git_default_advice_config(const char *var, const char *value);
 void advise(const char *advice, ...);
index 5d0c0683dafd3db409b95df7f2291af947da3d2e..06025a2e751fbc2b2de3b024919c381cd2176c51 100644 (file)
@@ -51,7 +51,8 @@ static void print_error_files(struct string_list *files_list,
                        strbuf_addf(&err_msg,
                                    "\n    %s",
                                    files_list->items[i].string);
-               strbuf_addstr(&err_msg, hints_msg);
+               if (advice_rm_hints)
+                       strbuf_addstr(&err_msg, hints_msg);
                *errs = error("%s", err_msg.buf);
                strbuf_release(&err_msg);
        }
index 902993bb65b09d111cbe88f1498d3c98d8ddab0d..5c87b55645e249929585c2ed0e7bcf98a1b62da3 100755 (executable)
@@ -707,6 +707,18 @@ test_expect_success 'rm files with different staged content' '
        test_i18ncmp expect actual
 '
 
+test_expect_success 'rm files with different staged content without hints' '
+       cat >expect <<-\EOF &&
+       error: the following files have staged content different from both the
+       file and the HEAD:
+           bar.txt
+           foo.txt
+       EOF
+       echo content2 >foo.txt &&
+       echo content2 >bar.txt &&
+       test_must_fail git -c advice.rmhints=false rm foo.txt bar.txt 2>actual &&
+       test_i18ncmp expect actual
+'
 
 test_expect_success 'rm file with local modification' '
        cat >expect <<-\EOF &&
@@ -720,6 +732,15 @@ test_expect_success 'rm file with local modification' '
        test_i18ncmp expect actual
 '
 
+test_expect_success 'rm file with local modification without hints' '
+       cat >expect <<-\EOF &&
+       error: the following file has local modifications:
+           bar.txt
+       EOF
+       echo content4 >bar.txt &&
+       test_must_fail git -c advice.rmhints=false rm bar.txt 2>actual &&
+       test_i18ncmp expect actual
+'
 
 test_expect_success 'rm file with changes in the index' '
        cat >expect <<-\EOF &&
@@ -734,6 +755,14 @@ test_expect_success 'rm file with changes in the index' '
        test_i18ncmp expect actual
 '
 
+test_expect_success 'rm file with changes in the index without hints' '
+       cat >expect <<-\EOF &&
+       error: the following file has changes staged in the index:
+           foo.txt
+       EOF
+       test_must_fail git -c advice.rmhints=false rm foo.txt 2>actual &&
+       test_i18ncmp expect actual
+'
 
 test_expect_success 'rm files with two different errors' '
        cat >expect <<-\EOF &&