[PATCH v2] diff: update conflict handling for whitespace to issue a warning
- From
Usman Akinyemi via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Nov 13, 2024, 19:01 UTC
- Message-ID
- <pull.1828.v2.git.git.1731524467045.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1828.git.git.1731347396097.gitgitgadget@gmail.com>
From: Usman Akinyemi <usmanakinyemi202@gmail.com>
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@gmail.com>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
---
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