From 4d939845d20d377e06bce5b02667ff21f69c3beb Mon Sep 17 00:00:00 2001 From: Viktor Suprun Date: Tue, 8 Feb 2022 17:15:04 +1100 Subject: [PATCH] Added auto-save whitespace behavior if it changed manually (#15566) --- models/user/setting_keys.go | 4 +++- routers/web/repo/middlewares.go | 24 +++++++++++++++++--- services/gitdiff/gitdiff.go | 10 +++++--- templates/repo/diff/whitespace_dropdown.tmpl | 4 ++-- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/models/user/setting_keys.go b/models/user/setting_keys.go index 458b78e357f..109b5dd9163 100644 --- a/models/user/setting_keys.go +++ b/models/user/setting_keys.go @@ -5,6 +5,8 @@ package user const ( - // SettingsKeyHiddenCommentTypes is the settings key for hidden comment types + // SettingsKeyHiddenCommentTypes is the setting key for hidden comment types SettingsKeyHiddenCommentTypes = "issue.hidden_comment_types" + // SettingsKeyDiffWhitespaceBehavior is the setting key for whitespace behavior of diff + SettingsKeyDiffWhitespaceBehavior = "diff.whitespace_behaviour" ) diff --git a/routers/web/repo/middlewares.go b/routers/web/repo/middlewares.go index 3ee9d1a3e98..c99f0ee8f9e 100644 --- a/routers/web/repo/middlewares.go +++ b/routers/web/repo/middlewares.go @@ -63,11 +63,29 @@ func SetDiffViewStyle(ctx *context.Context) { // SetWhitespaceBehavior set whitespace behavior as render variable func SetWhitespaceBehavior(ctx *context.Context) { + const defaultWhitespaceBehavior = "show-all" whitespaceBehavior := ctx.FormString("whitespace") switch whitespaceBehavior { - case "ignore-all", "ignore-eol", "ignore-change": - ctx.Data["WhitespaceBehavior"] = whitespaceBehavior + case "", "ignore-all", "ignore-eol", "ignore-change": + break default: - ctx.Data["WhitespaceBehavior"] = "" + whitespaceBehavior = defaultWhitespaceBehavior + } + if ctx.IsSigned { + userWhitespaceBehavior, err := user_model.GetUserSetting(ctx.User.ID, user_model.SettingsKeyDiffWhitespaceBehavior, defaultWhitespaceBehavior) + if err == nil { + if whitespaceBehavior == "" { + whitespaceBehavior = userWhitespaceBehavior + } else if whitespaceBehavior != userWhitespaceBehavior { + _ = user_model.SetUserSetting(ctx.User.ID, user_model.SettingsKeyDiffWhitespaceBehavior, whitespaceBehavior) + } + } // else: we can ignore the error safely + } + + // these behaviors are for gitdiff.GetWhitespaceFlag + if whitespaceBehavior == "" { + ctx.Data["WhitespaceBehavior"] = defaultWhitespaceBehavior + } else { + ctx.Data["WhitespaceBehavior"] = whitespaceBehavior } } diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go index 0fcb3616196..017341d63f6 100644 --- a/services/gitdiff/gitdiff.go +++ b/services/gitdiff/gitdiff.go @@ -1532,13 +1532,17 @@ func CommentMustAsDiff(c *models.Comment) *Diff { } // GetWhitespaceFlag returns git diff flag for treating whitespaces -func GetWhitespaceFlag(whiteSpaceBehavior string) string { +func GetWhitespaceFlag(whitespaceBehavior string) string { whitespaceFlags := map[string]string{ "ignore-all": "-w", "ignore-change": "-b", "ignore-eol": "--ignore-space-at-eol", - "": "", + "show-all": "", } - return whitespaceFlags[whiteSpaceBehavior] + if flag, ok := whitespaceFlags[whitespaceBehavior]; ok { + return flag + } + log.Warn("unknown whitespace behavior: %q, default to 'show-all'", whitespaceBehavior) + return "" } diff --git a/templates/repo/diff/whitespace_dropdown.tmpl b/templates/repo/diff/whitespace_dropdown.tmpl index 1e0e046925c..7ea4238d6d2 100644 --- a/templates/repo/diff/whitespace_dropdown.tmpl +++ b/templates/repo/diff/whitespace_dropdown.tmpl @@ -2,8 +2,8 @@ {{.i18n.Tr "repo.diff.whitespace_button"}} {{svg "octicon-triangle-down" 14 "dropdown icon"}}