From: Usman Akinyemi <usmanakinyemi202@xxxxxxxxx> Modify the conflict resolution between tab-in-indent and indent-with-non-tab to issue a warning instead of terminating the operation with `die()`. Update the `git diff --check` test to capture and verify the warning message output. Suggested-by: Phillip Wood <phillip.wood123@xxxxxxxxx> Signed-off-by: Usman Akinyemi <usmanakinyemi202@xxxxxxxxx> --- diff: update conflict handling for whitespace to issue a warning Changes from V1 * Disable both WS_TAB_IN_INDENT and WS_INDENT_WITH_NON_TAB when both are set. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1828%2FUnique-Usman%2Fmaster-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1828/Unique-Usman/master-v2 Pull-Request: https://github.com/git/git/pull/1828 Range-diff vs v1: 1: dfb80a7ff2d ! 1: 8531e80811c diff: update conflict handling for whitespace to issue a warning @@ t/t4015-diff-whitespace.sh: test_expect_success 'ditto, but tabwidth=1 (must be echo "foo ();" >x && - test_must_fail git diff --check + git diff --check 2>error && -+ test_grep "warning: cannot enforce both tab-in-indent and indent-with-non-tab, removing tab-in-indent" error ++ test_grep "warning: cannot enforce both tab-in-indent and indent-with-non-tab, disabling both" error ' test_expect_success 'check tab-in-indent excluded from wildcard whitespace attribute' ' @@ ws.c: unsigned parse_whitespace_rule(const char *string) - if (rule & WS_TAB_IN_INDENT && rule & WS_INDENT_WITH_NON_TAB) - die("cannot enforce both tab-in-indent and indent-with-non-tab"); + if (rule & WS_TAB_IN_INDENT && rule & WS_INDENT_WITH_NON_TAB) { -+ warning(_("cannot enforce both tab-in-indent and indent-with-non-tab, removing tab-in-indent")); ++ warning(_("cannot enforce both tab-in-indent and indent-with-non-tab, disabling both")); + rule &= ~WS_TAB_IN_INDENT; ++ rule &= ~WS_INDENT_WITH_NON_TAB; + } return rule; } t/t4015-diff-whitespace.sh | 3 ++- ws.c | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh index 851cfe4f32c..849f1854fb9 100755 --- a/t/t4015-diff-whitespace.sh +++ b/t/t4015-diff-whitespace.sh @@ -808,7 +808,8 @@ test_expect_success 'ditto, but tabwidth=1 (must be irrelevant)' ' test_expect_success 'check tab-in-indent and indent-with-non-tab conflict' ' git config core.whitespace "tab-in-indent,indent-with-non-tab" && echo "foo ();" >x && - test_must_fail git diff --check + git diff --check 2>error && + test_grep "warning: cannot enforce both tab-in-indent and indent-with-non-tab, disabling both" error ' test_expect_success 'check tab-in-indent excluded from wildcard whitespace attribute' ' diff --git a/ws.c b/ws.c index 9456e2fdbe3..3e9ce55d095 100644 --- a/ws.c +++ b/ws.c @@ -6,6 +6,7 @@ #include "git-compat-util.h" #include "attr.h" #include "strbuf.h" +#include "gettext.h" #include "ws.h" unsigned whitespace_rule_cfg = WS_DEFAULT_RULE; @@ -70,8 +71,11 @@ unsigned parse_whitespace_rule(const char *string) string = ep; } - if (rule & WS_TAB_IN_INDENT && rule & WS_INDENT_WITH_NON_TAB) - die("cannot enforce both tab-in-indent and indent-with-non-tab"); + if (rule & WS_TAB_IN_INDENT && rule & WS_INDENT_WITH_NON_TAB) { + warning(_("cannot enforce both tab-in-indent and indent-with-non-tab, disabling both")); + rule &= ~WS_TAB_IN_INDENT; + rule &= ~WS_INDENT_WITH_NON_TAB; + } return rule; } base-commit: facbe4f633e4ad31e641f64617bc88074c659959 -- gitgitgadget