[PATCH v3 2/2] rm: introduce advice.rmHints to shorten messages

2013-06-10 Thread Mathieu Lienard--Mayor
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--ma...@ensimag.imag.fr
Signed-off-by: Jorge Juan Garcia Garcia 
jorge-juan.garcia-gar...@ensimag.imag.fr
Signed-off-by: Matthieu Moy matthieu@grenoble-inp.fr
---
 Documentation/config.txt |3 +++
 advice.c |2 ++
 advice.h |1 +
 builtin/rm.c |   11 +++
 t/t3600-rm.sh|   29 +
 5 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 6e53fc5..eb04479 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 a8deee6..a4c169c 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 94caa32..36104c4 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 07306eb..c991fe6 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -62,9 +62,11 @@ static int check_submodules_use_gitfiles(void)
 
if (!submodule_uses_gitfile(name))
errs = error(_(submodule '%s' (or one of its nested 
-submodules) uses a .git directory\n
-(use 'rm -rf' if you really want to 
remove 
-it including all of its history)), name);
+  submodules) uses a .git directory%s), 
name,
+  advice_rm_hints
+  ? \n(use 'rm -rf' if you really want to 
remove 
+  it including all of its history)
+  : );
}
 
return errs;
@@ -83,7 +85,8 @@ static void print_eventual_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);
}
 }
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 10dd380..74f048c 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -707,6 +707,18 @@ EOF
test_cmp 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 2actual 

+   test_cmp expect actual
+'
 
 test_expect_success 'rm file with local modification' '
cat expect  EOF 
@@ -720,6 +732,15 @@ EOF
test_cmp expect actual
 '
 
+test_expect_success 'rm file with local modification without hints' '
+   cat expect  EOF 
+error: the following files have local modifications:
+bar.txt
+EOF
+   echo content4 bar.txt 
+   test_must_fail git -c advice.rmhints=false rm bar.txt 2actual 
+   test_cmp expect actual
+'
 
 test_expect_success 'rm file with changes in the index' '
 cat expect  EOF 
@@ -734,6 +755,14 @@ EOF
test_cmp 

[PATCH v3 2/2] rm: introduce advice.rmHints to shorten messages

2013-06-10 Thread Mathieu Lienard--Mayor
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--ma...@ensimag.imag.fr
Signed-off-by: Jorge Juan Garcia Garcia 
jorge-juan.garcia-gar...@ensimag.imag.fr
Signed-off-by: Matthieu Moy matthieu@grenoble-inp.fr
---
 Documentation/config.txt |3 +++
 advice.c |2 ++
 advice.h |1 +
 builtin/rm.c |   11 +++
 t/t3600-rm.sh|   29 +
 5 files changed, 42 insertions(+), 4 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 6e53fc5..eb04479 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 a8deee6..a4c169c 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 94caa32..36104c4 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 07306eb..c991fe6 100644
--- a/builtin/rm.c
+++ b/builtin/rm.c
@@ -62,9 +62,11 @@ static int check_submodules_use_gitfiles(void)
 
if (!submodule_uses_gitfile(name))
errs = error(_(submodule '%s' (or one of its nested 
-submodules) uses a .git directory\n
-(use 'rm -rf' if you really want to 
remove 
-it including all of its history)), name);
+  submodules) uses a .git directory%s), 
name,
+  advice_rm_hints
+  ? \n(use 'rm -rf' if you really want to 
remove 
+  it including all of its history)
+  : );
}
 
return errs;
@@ -83,7 +85,8 @@ static void print_eventual_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);
}
 }
diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
index 10dd380..74f048c 100755
--- a/t/t3600-rm.sh
+++ b/t/t3600-rm.sh
@@ -707,6 +707,18 @@ EOF
test_cmp 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 2actual 

+   test_cmp expect actual
+'
 
 test_expect_success 'rm file with local modification' '
cat expect  EOF 
@@ -720,6 +732,15 @@ EOF
test_cmp expect actual
 '
 
+test_expect_success 'rm file with local modification without hints' '
+   cat expect  EOF 
+error: the following files have local modifications:
+bar.txt
+EOF
+   echo content4 bar.txt 
+   test_must_fail git -c advice.rmhints=false rm bar.txt 2actual 
+   test_cmp expect actual
+'
 
 test_expect_success 'rm file with changes in the index' '
 cat expect  EOF 
@@ -734,6 +755,14 @@ EOF
test_cmp 

Re: [PATCH v3 2/2] rm: introduce advice.rmHints to shorten messages

2013-06-10 Thread Junio C Hamano
Mathieu Lienard--Mayor mathieu.lienard--ma...@ensimag.imag.fr
writes:

 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--ma...@ensimag.imag.fr
 Signed-off-by: Jorge Juan Garcia Garcia 
 jorge-juan.garcia-gar...@ensimag.imag.fr
 Signed-off-by: Matthieu Moy matthieu@grenoble-inp.fr
 ---
  Documentation/config.txt |3 +++
  advice.c |2 ++
  advice.h |1 +
  builtin/rm.c |   11 +++
  t/t3600-rm.sh|   29 +
  5 files changed, 42 insertions(+), 4 deletions(-)

 diff --git a/Documentation/config.txt b/Documentation/config.txt
 index 6e53fc5..eb04479 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 a8deee6..a4c169c 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 94caa32..36104c4 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;

The handling of a new advice variable (i.e. definition, declaration
and reading from configuration) looks correct in this patch.  Good
job.

  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 07306eb..c991fe6 100644
 --- a/builtin/rm.c
 +++ b/builtin/rm.c
 @@ -62,9 +62,11 @@ static int check_submodules_use_gitfiles(void)
  
   if (!submodule_uses_gitfile(name))
   errs = error(_(submodule '%s' (or one of its nested 
 +submodules) uses a .git directory%s), 
 name,
 +advice_rm_hints
 +? \n(use 'rm -rf' if you really want to 
 remove 
 +it including all of its history)
 +: );

The advice part is not subject to i18n?

   }
  
   return errs;

Interesting.

Is there a reason why this kind of errors are not collected together
into one error message and then list of paths, like all the other
kinds of errors are done with print_eventual_error_files()?

 @@ -83,7 +85,8 @@ static void print_eventual_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);
   }
  }
 diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh
 index 10dd380..74f048c 100755
 --- a/t/t3600-rm.sh
 +++ b/t/t3600-rm.sh
 @@ -707,6 +707,18 @@ EOF
   test_cmp 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 2actual 
 
 + test_cmp expect actual
 +'

Same comments as the ones for 1/2 applies to the tests in this patch.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html