summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Lienard--Mayor <Mathieu.Lienard--Mayor@ensimag.imag.fr>2013-06-12 10:06:44 +0200
committerJunio C Hamano <gitster@pobox.com>2013-06-12 16:59:55 -0700
commit7e30944622573ebdf87beed057b098af7360234c (patch)
treef955e84c0c9f38db34106ad261a6ceaff4153354
parent914dc0289d1df75cfa744cea8ec84cb529cbc791 (diff)
downloadgit-7e30944622573ebdf87beed057b098af7360234c.tar.gz
rm: introduce advice.rmHints to shorten messages
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>
-rw-r--r--Documentation/config.txt3
-rw-r--r--advice.c2
-rw-r--r--advice.h1
-rw-r--r--builtin/rm.c3
-rwxr-xr-xt/t3600-rm.sh29
5 files changed, 37 insertions, 1 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 6e53fc5074..eb04479804 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -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::
diff --git a/advice.c b/advice.c
index a8deee6e64..a4c169ca38 100644
--- 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 }
diff --git a/advice.h b/advice.h
index 94caa32f92..36104c4776 100644
--- 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, ...);
diff --git a/builtin/rm.c b/builtin/rm.c
index 5d0c0683da..06025a2e75 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -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);
}
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 902993bb65..5c87b55645 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -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 &&