[PATCH v3 2/2] 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--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
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
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