diff --git a/pkg/app/app.go b/pkg/app/app.go index 755f707c4..bbe714458 100644 --- a/pkg/app/app.go +++ b/pkg/app/app.go @@ -71,14 +71,15 @@ func NewCommon(config config.AppConfigurer) (*common.Common, error) { return nil, err } - return &common.Common{ - Log: log, - Tr: tr, - UserConfig: userConfig, - AppState: appState, - Debug: config.GetDebug(), - Fs: afero.NewOsFs(), - }, nil + cmn := &common.Common{ + Log: log, + Tr: tr, + AppState: appState, + Debug: config.GetDebug(), + Fs: afero.NewOsFs(), + } + cmn.SetUserConfig(userConfig) + return cmn, nil } func newLogger(cfg config.AppConfigurer) *logrus.Entry { @@ -195,7 +196,7 @@ func (app *App) setupRepo( var shouldInitRepo bool initialBranchArg := "" - switch app.UserConfig.NotARepository { + switch app.UserConfig().NotARepository { case "prompt": // Offer to initialize a new repository in current directory. fmt.Print(app.Tr.CreateRepo) diff --git a/pkg/commands/git_commands/branch.go b/pkg/commands/git_commands/branch.go index 6c9aa8740..c63087a80 100644 --- a/pkg/commands/git_commands/branch.go +++ b/pkg/commands/git_commands/branch.go @@ -145,7 +145,7 @@ func (self *BranchCommands) GetGraph(branchName string) (string, error) { } func (self *BranchCommands) GetGraphCmdObj(branchName string) oscommands.ICmdObj { - branchLogCmdTemplate := self.UserConfig.Git.BranchLogCmd + branchLogCmdTemplate := self.UserConfig().Git.BranchLogCmd templateValues := map[string]string{ "branchName": self.cmd.Quote(branchName), } @@ -236,7 +236,7 @@ func (self *BranchCommands) Merge(branchName string, opts MergeOpts) error { } cmdArgs := NewGitCmd("merge"). Arg("--no-edit"). - Arg(strings.Fields(self.UserConfig.Git.Merging.Args)...). + Arg(strings.Fields(self.UserConfig().Git.Merging.Args)...). ArgIf(opts.FastForwardOnly, "--ff-only"). ArgIf(opts.Squash, "--squash", "--ff"). Arg(branchName). @@ -248,9 +248,9 @@ func (self *BranchCommands) Merge(branchName string, opts MergeOpts) error { func (self *BranchCommands) AllBranchesLogCmdObj() oscommands.ICmdObj { // Only choose between non-empty, non-identical commands candidates := lo.Uniq(lo.WithoutEmpty(append([]string{ - self.UserConfig.Git.AllBranchesLogCmd, + self.UserConfig().Git.AllBranchesLogCmd, }, - self.UserConfig.Git.AllBranchesLogCmds..., + self.UserConfig().Git.AllBranchesLogCmds..., ))) n := len(candidates) diff --git a/pkg/commands/git_commands/branch_loader.go b/pkg/commands/git_commands/branch_loader.go index 929d5964d..cf36cfe23 100644 --- a/pkg/commands/git_commands/branch_loader.go +++ b/pkg/commands/git_commands/branch_loader.go @@ -140,7 +140,7 @@ func (self *BranchLoader) Load(reflogCommits []*models.Commit, } } - if loadBehindCounts && self.UserConfig.Gui.ShowDivergenceFromBaseBranch != "none" { + if loadBehindCounts && self.UserConfig().Gui.ShowDivergenceFromBaseBranch != "none" { onWorker(func() error { return self.GetBehindBaseBranchValuesForAllBranches(branches, mainBranches, renderFunc) }) diff --git a/pkg/commands/git_commands/commit.go b/pkg/commands/git_commands/commit.go index 1ff7c095f..45582c6bd 100644 --- a/pkg/commands/git_commands/commit.go +++ b/pkg/commands/git_commands/commit.go @@ -88,7 +88,7 @@ func (self *CommitCommands) ResetToCommit(hash string, strength string, envVars func (self *CommitCommands) CommitCmdObj(summary string, description string) oscommands.ICmdObj { messageArgs := self.commitMessageArgs(summary, description) - skipHookPrefix := self.UserConfig.Git.SkipHookPrefix + skipHookPrefix := self.UserConfig().Git.SkipHookPrefix cmdArgs := NewGitCmd("commit"). ArgIf(skipHookPrefix != "" && strings.HasPrefix(summary, skipHookPrefix), "--no-verify"). @@ -148,7 +148,7 @@ func (self *CommitCommands) CommitEditorCmdObj() oscommands.ICmdObj { } func (self *CommitCommands) signoffFlag() string { - if self.UserConfig.Git.Commit.SignOff { + if self.UserConfig().Git.Commit.SignOff { return "--signoff" } else { return "" @@ -258,13 +258,13 @@ func (self *CommitCommands) AmendHeadCmdObj() oscommands.ICmdObj { func (self *CommitCommands) ShowCmdObj(hash string, filterPath string) oscommands.ICmdObj { contextSize := self.AppState.DiffContextSize - extDiffCmd := self.UserConfig.Git.Paging.ExternalDiffCommand + extDiffCmd := self.UserConfig().Git.Paging.ExternalDiffCommand cmdArgs := NewGitCmd("show"). Config("diff.noprefix=false"). ConfigIf(extDiffCmd != "", "diff.external="+extDiffCmd). ArgIfElse(extDiffCmd != "", "--ext-diff", "--no-ext-diff"). Arg("--submodule"). - Arg("--color="+self.UserConfig.Git.Paging.ColorArg). + Arg("--color="+self.UserConfig().Git.Paging.ColorArg). Arg(fmt.Sprintf("--unified=%d", contextSize)). Arg("--stat"). Arg("--decorate"). diff --git a/pkg/commands/git_commands/commit_loader_test.go b/pkg/commands/git_commands/commit_loader_test.go index a8ef9e69a..9c9138062 100644 --- a/pkg/commands/git_commands/commit_loader_test.go +++ b/pkg/commands/git_commands/commit_loader_test.go @@ -322,7 +322,7 @@ func TestGetCommits(t *testing.T) { }, } - common.UserConfig.Git.MainBranches = scenario.mainBranches + common.UserConfig().Git.MainBranches = scenario.mainBranches opts := scenario.opts opts.MainBranches = NewMainBranches(scenario.mainBranches, cmd) commits, err := builder.GetCommits(opts) diff --git a/pkg/commands/git_commands/config.go b/pkg/commands/git_commands/config.go index 014591556..9771f01d3 100644 --- a/pkg/commands/git_commands/config.go +++ b/pkg/commands/git_commands/config.go @@ -43,7 +43,7 @@ func (self *ConfigCommands) ConfiguredPager() string { } func (self *ConfigCommands) GetPager(width int) string { - useConfig := self.UserConfig.Git.Paging.UseConfig + useConfig := self.UserConfig().Git.Paging.UseConfig if useConfig { pager := self.ConfiguredPager() return strings.Split(pager, "| less")[0] @@ -53,14 +53,14 @@ func (self *ConfigCommands) GetPager(width int) string { "columnWidth": strconv.Itoa(width/2 - 6), } - pagerTemplate := string(self.UserConfig.Git.Paging.Pager) + pagerTemplate := string(self.UserConfig().Git.Paging.Pager) return utils.ResolvePlaceholderString(pagerTemplate, templateValues) } // UsingGpg tells us whether the user has gpg enabled so that we can know // whether we need to run a subprocess to allow them to enter their password func (self *ConfigCommands) UsingGpg() bool { - overrideGpg := self.UserConfig.Git.OverrideGpg + overrideGpg := self.UserConfig().Git.OverrideGpg if overrideGpg { return false } diff --git a/pkg/commands/git_commands/deps_test.go b/pkg/commands/git_commands/deps_test.go index eaf53306a..a7412bd38 100644 --- a/pkg/commands/git_commands/deps_test.go +++ b/pkg/commands/git_commands/deps_test.go @@ -58,9 +58,9 @@ func buildGitCommon(deps commonDeps) *GitCommon { } gitCommon.cmd = cmd - gitCommon.Common.UserConfig = deps.userConfig - if gitCommon.Common.UserConfig == nil { - gitCommon.Common.UserConfig = config.GetDefaultConfig() + gitCommon.Common.SetUserConfig(deps.userConfig) + if gitCommon.Common.UserConfig() == nil { + gitCommon.Common.SetUserConfig(config.GetDefaultConfig()) } gitCommon.version = deps.gitVersion diff --git a/pkg/commands/git_commands/diff.go b/pkg/commands/git_commands/diff.go index 979279914..8eb4799b6 100644 --- a/pkg/commands/git_commands/diff.go +++ b/pkg/commands/git_commands/diff.go @@ -17,7 +17,7 @@ func NewDiffCommands(gitCommon *GitCommon) *DiffCommands { } func (self *DiffCommands) DiffCmdObj(diffArgs []string) oscommands.ICmdObj { - extDiffCmd := self.UserConfig.Git.Paging.ExternalDiffCommand + extDiffCmd := self.UserConfig().Git.Paging.ExternalDiffCommand useExtDiff := extDiffCmd != "" return self.cmd.New( @@ -26,7 +26,7 @@ func (self *DiffCommands) DiffCmdObj(diffArgs []string) oscommands.ICmdObj { ConfigIf(useExtDiff, "diff.external="+extDiffCmd). ArgIfElse(useExtDiff, "--ext-diff", "--no-ext-diff"). Arg("--submodule"). - Arg(fmt.Sprintf("--color=%s", self.UserConfig.Git.Paging.ColorArg)). + Arg(fmt.Sprintf("--color=%s", self.UserConfig().Git.Paging.ColorArg)). Arg(diffArgs...). Dir(self.repoPaths.worktreePath). ToArgv(), diff --git a/pkg/commands/git_commands/file.go b/pkg/commands/git_commands/file.go index 9401e6d54..8997c34c0 100644 --- a/pkg/commands/git_commands/file.go +++ b/pkg/commands/git_commands/file.go @@ -31,7 +31,7 @@ func (self *FileCommands) Cat(fileName string) (string, error) { } func (self *FileCommands) GetEditCmdStrLegacy(filename string, lineNumber int) (string, error) { - editor := self.UserConfig.OS.EditCommand + editor := self.UserConfig().OS.EditCommand if editor == "" { editor = self.config.GetCoreEditor() @@ -60,7 +60,7 @@ func (self *FileCommands) GetEditCmdStrLegacy(filename string, lineNumber int) ( "line": strconv.Itoa(lineNumber), } - editCmdTemplate := self.UserConfig.OS.EditCommandTemplate + editCmdTemplate := self.UserConfig().OS.EditCommandTemplate if len(editCmdTemplate) == 0 { switch editor { case "emacs", "nano", "vi", "vim", "nvim": @@ -78,7 +78,7 @@ func (self *FileCommands) GetEditCmdStrLegacy(filename string, lineNumber int) ( func (self *FileCommands) GetEditCmdStr(filenames []string) (string, bool) { // Legacy support for old config; to be removed at some point - if self.UserConfig.OS.Edit == "" && self.UserConfig.OS.EditCommandTemplate != "" { + if self.UserConfig().OS.Edit == "" && self.UserConfig().OS.EditCommandTemplate != "" { // If multiple files are selected, we'll simply edit just the first one. // It's not worth fixing this for the legacy support. if cmdStr, err := self.GetEditCmdStrLegacy(filenames[0], 1); err == nil { @@ -86,7 +86,7 @@ func (self *FileCommands) GetEditCmdStr(filenames []string) (string, bool) { } } - template, suspend := config.GetEditTemplate(&self.UserConfig.OS, self.guessDefaultEditor) + template, suspend := config.GetEditTemplate(&self.UserConfig().OS, self.guessDefaultEditor) quotedFilenames := lo.Map(filenames, func(filename string, _ int) string { return self.cmd.Quote(filename) }) templateValues := map[string]string{ @@ -99,13 +99,13 @@ func (self *FileCommands) GetEditCmdStr(filenames []string) (string, bool) { func (self *FileCommands) GetEditAtLineCmdStr(filename string, lineNumber int) (string, bool) { // Legacy support for old config; to be removed at some point - if self.UserConfig.OS.EditAtLine == "" && self.UserConfig.OS.EditCommandTemplate != "" { + if self.UserConfig().OS.EditAtLine == "" && self.UserConfig().OS.EditCommandTemplate != "" { if cmdStr, err := self.GetEditCmdStrLegacy(filename, lineNumber); err == nil { return cmdStr, true } } - template, suspend := config.GetEditAtLineTemplate(&self.UserConfig.OS, self.guessDefaultEditor) + template, suspend := config.GetEditAtLineTemplate(&self.UserConfig().OS, self.guessDefaultEditor) templateValues := map[string]string{ "filename": self.cmd.Quote(filename), @@ -118,13 +118,13 @@ func (self *FileCommands) GetEditAtLineCmdStr(filename string, lineNumber int) ( func (self *FileCommands) GetEditAtLineAndWaitCmdStr(filename string, lineNumber int) string { // Legacy support for old config; to be removed at some point - if self.UserConfig.OS.EditAtLineAndWait == "" && self.UserConfig.OS.EditCommandTemplate != "" { + if self.UserConfig().OS.EditAtLineAndWait == "" && self.UserConfig().OS.EditCommandTemplate != "" { if cmdStr, err := self.GetEditCmdStrLegacy(filename, lineNumber); err == nil { return cmdStr } } - template := config.GetEditAtLineAndWaitTemplate(&self.UserConfig.OS, self.guessDefaultEditor) + template := config.GetEditAtLineAndWaitTemplate(&self.UserConfig().OS, self.guessDefaultEditor) templateValues := map[string]string{ "filename": self.cmd.Quote(filename), @@ -136,7 +136,7 @@ func (self *FileCommands) GetEditAtLineAndWaitCmdStr(filename string, lineNumber } func (self *FileCommands) GetOpenDirInEditorCmdStr(path string) (string, bool) { - template, suspend := config.GetOpenDirInEditorTemplate(&self.UserConfig.OS, self.guessDefaultEditor) + template, suspend := config.GetOpenDirInEditorTemplate(&self.UserConfig().OS, self.guessDefaultEditor) templateValues := map[string]string{ "dir": self.cmd.Quote(path), diff --git a/pkg/commands/git_commands/stash.go b/pkg/commands/git_commands/stash.go index 047985e38..e3a91c887 100644 --- a/pkg/commands/git_commands/stash.go +++ b/pkg/commands/git_commands/stash.go @@ -84,7 +84,7 @@ func (self *StashCommands) ShowStashEntryCmdObj(index int) oscommands.ICmdObj { cmdArgs := NewGitCmd("stash").Arg("show"). Arg("-p"). Arg("--stat"). - Arg(fmt.Sprintf("--color=%s", self.UserConfig.Git.Paging.ColorArg)). + Arg(fmt.Sprintf("--color=%s", self.UserConfig().Git.Paging.ColorArg)). Arg(fmt.Sprintf("--unified=%d", self.AppState.DiffContextSize)). ArgIf(self.AppState.IgnoreWhitespaceInDiffView, "--ignore-all-space"). Arg(fmt.Sprintf("--find-renames=%d%%", self.AppState.RenameSimilarityThreshold)). diff --git a/pkg/commands/git_commands/sync.go b/pkg/commands/git_commands/sync.go index 7ab209c0e..8eab2f7c8 100644 --- a/pkg/commands/git_commands/sync.go +++ b/pkg/commands/git_commands/sync.go @@ -60,7 +60,7 @@ func (self *SyncCommands) fetchCommandBuilder(fetchAll bool) *GitCommandBuilder } func (self *SyncCommands) FetchCmdObj(task gocui.Task) oscommands.ICmdObj { - cmdArgs := self.fetchCommandBuilder(self.UserConfig.Git.FetchAll).ToArgv() + cmdArgs := self.fetchCommandBuilder(self.UserConfig().Git.FetchAll).ToArgv() cmdObj := self.cmd.New(cmdArgs) cmdObj.PromptOnCredentialRequest(task) @@ -72,7 +72,7 @@ func (self *SyncCommands) Fetch(task gocui.Task) error { } func (self *SyncCommands) FetchBackgroundCmdObj() oscommands.ICmdObj { - cmdArgs := self.fetchCommandBuilder(self.UserConfig.Git.FetchAll).ToArgv() + cmdArgs := self.fetchCommandBuilder(self.UserConfig().Git.FetchAll).ToArgv() cmdObj := self.cmd.New(cmdArgs) cmdObj.DontLog().FailOnCredentialRequest() diff --git a/pkg/commands/git_commands/sync_test.go b/pkg/commands/git_commands/sync_test.go index 353ac72aa..183912c31 100644 --- a/pkg/commands/git_commands/sync_test.go +++ b/pkg/commands/git_commands/sync_test.go @@ -133,7 +133,7 @@ func TestSyncFetch(t *testing.T) { for _, s := range scenarios { t.Run(s.testName, func(t *testing.T) { instance := buildSyncCommands(commonDeps{}) - instance.UserConfig.Git.FetchAll = s.fetchAllConfig + instance.UserConfig().Git.FetchAll = s.fetchAllConfig task := gocui.NewFakeTask() s.test(instance.FetchCmdObj(task)) }) @@ -171,7 +171,7 @@ func TestSyncFetchBackground(t *testing.T) { for _, s := range scenarios { t.Run(s.testName, func(t *testing.T) { instance := buildSyncCommands(commonDeps{}) - instance.UserConfig.Git.FetchAll = s.fetchAllConfig + instance.UserConfig().Git.FetchAll = s.fetchAllConfig s.test(instance.FetchBackgroundCmdObj()) }) } diff --git a/pkg/commands/git_commands/working_tree.go b/pkg/commands/git_commands/working_tree.go index 5e3758ad5..d0148bfe9 100644 --- a/pkg/commands/git_commands/working_tree.go +++ b/pkg/commands/git_commands/working_tree.go @@ -245,7 +245,7 @@ func (self *WorkingTreeCommands) WorktreeFileDiff(file *models.File, plain bool, } func (self *WorkingTreeCommands) WorktreeFileDiffCmdObj(node models.IFile, plain bool, cached bool) oscommands.ICmdObj { - colorArg := self.UserConfig.Git.Paging.ColorArg + colorArg := self.UserConfig().Git.Paging.ColorArg if plain { colorArg = "never" } @@ -253,7 +253,7 @@ func (self *WorkingTreeCommands) WorktreeFileDiffCmdObj(node models.IFile, plain contextSize := self.AppState.DiffContextSize prevPath := node.GetPreviousPath() noIndex := !node.GetIsTracked() && !node.GetHasStagedChanges() && !cached && node.GetIsFile() - extDiffCmd := self.UserConfig.Git.Paging.ExternalDiffCommand + extDiffCmd := self.UserConfig().Git.Paging.ExternalDiffCommand useExtDiff := extDiffCmd != "" && !plain cmdArgs := NewGitCmd("diff"). @@ -285,12 +285,12 @@ func (self *WorkingTreeCommands) ShowFileDiff(from string, to string, reverse bo func (self *WorkingTreeCommands) ShowFileDiffCmdObj(from string, to string, reverse bool, fileName string, plain bool) oscommands.ICmdObj { contextSize := self.AppState.DiffContextSize - colorArg := self.UserConfig.Git.Paging.ColorArg + colorArg := self.UserConfig().Git.Paging.ColorArg if plain { colorArg = "never" } - extDiffCmd := self.UserConfig.Git.Paging.ExternalDiffCommand + extDiffCmd := self.UserConfig().Git.Paging.ExternalDiffCommand useExtDiff := extDiffCmd != "" && !plain cmdArgs := NewGitCmd("diff"). diff --git a/pkg/commands/oscommands/os.go b/pkg/commands/oscommands/os.go index 7f31b5332..cbeb99d43 100644 --- a/pkg/commands/oscommands/os.go +++ b/pkg/commands/oscommands/os.go @@ -80,10 +80,10 @@ func FileType(path string) string { } func (c *OSCommand) OpenFile(filename string) error { - commandTemplate := c.UserConfig.OS.Open + commandTemplate := c.UserConfig().OS.Open if commandTemplate == "" { // Legacy support - commandTemplate = c.UserConfig.OS.OpenCommand + commandTemplate = c.UserConfig().OS.OpenCommand } if commandTemplate == "" { commandTemplate = config.GetPlatformDefaultConfig().Open @@ -96,10 +96,10 @@ func (c *OSCommand) OpenFile(filename string) error { } func (c *OSCommand) OpenLink(link string) error { - commandTemplate := c.UserConfig.OS.OpenLink + commandTemplate := c.UserConfig().OS.OpenLink if commandTemplate == "" { // Legacy support - commandTemplate = c.UserConfig.OS.OpenLinkCommand + commandTemplate = c.UserConfig().OS.OpenLinkCommand } if commandTemplate == "" { commandTemplate = config.GetPlatformDefaultConfig().OpenLink @@ -294,8 +294,8 @@ func (c *OSCommand) CopyToClipboard(str string) error { }, ) c.LogCommand(msg, false) - if c.UserConfig.OS.CopyToClipboardCmd != "" { - cmdStr := utils.ResolvePlaceholderString(c.UserConfig.OS.CopyToClipboardCmd, map[string]string{ + if c.UserConfig().OS.CopyToClipboardCmd != "" { + cmdStr := utils.ResolvePlaceholderString(c.UserConfig().OS.CopyToClipboardCmd, map[string]string{ "text": c.Cmd.Quote(str), }) return c.Cmd.NewShell(cmdStr).Run() @@ -307,8 +307,8 @@ func (c *OSCommand) CopyToClipboard(str string) error { func (c *OSCommand) PasteFromClipboard() (string, error) { var s string var err error - if c.UserConfig.OS.CopyToClipboardCmd != "" { - cmdStr := c.UserConfig.OS.ReadFromClipboardCmd + if c.UserConfig().OS.CopyToClipboardCmd != "" { + cmdStr := c.UserConfig().OS.ReadFromClipboardCmd s, err = c.Cmd.NewShell(cmdStr).RunWithOutput() } else { s, err = clipboard.ReadAll() diff --git a/pkg/commands/oscommands/os_default_test.go b/pkg/commands/oscommands/os_default_test.go index 7291b2d3a..94da4b078 100644 --- a/pkg/commands/oscommands/os_default_test.go +++ b/pkg/commands/oscommands/os_default_test.go @@ -75,7 +75,7 @@ func TestOSCommandOpenFileDarwin(t *testing.T) { for _, s := range scenarios { oSCmd := NewDummyOSCommandWithRunner(s.runner) oSCmd.Platform.OS = "darwin" - oSCmd.UserConfig.OS.Open = "open {{filename}}" + oSCmd.UserConfig().OS.Open = "open {{filename}}" s.test(oSCmd.OpenFile(s.filename)) } @@ -135,7 +135,7 @@ func TestOSCommandOpenFileLinux(t *testing.T) { for _, s := range scenarios { oSCmd := NewDummyOSCommandWithRunner(s.runner) oSCmd.Platform.OS = "linux" - oSCmd.UserConfig.OS.Open = `xdg-open {{filename}} > /dev/null` + oSCmd.UserConfig().OS.Open = `xdg-open {{filename}} > /dev/null` s.test(oSCmd.OpenFile(s.filename)) } diff --git a/pkg/commands/oscommands/os_windows_test.go b/pkg/commands/oscommands/os_windows_test.go index cf9c1e68a..fd71a22f7 100644 --- a/pkg/commands/oscommands/os_windows_test.go +++ b/pkg/commands/oscommands/os_windows_test.go @@ -71,7 +71,7 @@ func TestOSCommandOpenFileWindows(t *testing.T) { } oSCmd.Platform = platform oSCmd.Cmd.platform = platform - oSCmd.UserConfig.OS.OpenCommand = `start "" {{filename}}` + oSCmd.UserConfig().OS.OpenCommand = `start "" {{filename}}` s.test(oSCmd.OpenFile(s.filename)) } diff --git a/pkg/common/common.go b/pkg/common/common.go index 39de6e0d8..2a18cf0e1 100644 --- a/pkg/common/common.go +++ b/pkg/common/common.go @@ -11,10 +11,18 @@ import ( type Common struct { Log *logrus.Entry Tr *i18n.TranslationSet - UserConfig *config.UserConfig + userConfig *config.UserConfig AppState *config.AppState Debug bool // for interacting with the filesystem. We use afero rather than the default // `os` package for the sake of mocking the filesystem in tests Fs afero.Fs } + +func (c *Common) UserConfig() *config.UserConfig { + return c.userConfig +} + +func (c *Common) SetUserConfig(userConfig *config.UserConfig) { + c.userConfig = userConfig +} diff --git a/pkg/gui/background.go b/pkg/gui/background.go index 061502a43..7c81def39 100644 --- a/pkg/gui/background.go +++ b/pkg/gui/background.go @@ -25,7 +25,7 @@ func (self *BackgroundRoutineMgr) PauseBackgroundRefreshes(pause bool) { } func (self *BackgroundRoutineMgr) startBackgroundRoutines() { - userConfig := self.gui.UserConfig + userConfig := self.gui.UserConfig() if userConfig.Git.AutoFetch { fetchInterval := userConfig.Refresher.FetchInterval @@ -77,7 +77,7 @@ func (self *BackgroundRoutineMgr) startBackgroundFetch() { self.gui.waitForIntro.Wait() isNew := self.gui.IsNewRepo - userConfig := self.gui.UserConfig + userConfig := self.gui.UserConfig() if !isNew { time.After(time.Duration(userConfig.Refresher.FetchInterval) * time.Second) } diff --git a/pkg/gui/command_log_panel.go b/pkg/gui/command_log_panel.go index 2faee3572..fda8124c2 100644 --- a/pkg/gui/command_log_panel.go +++ b/pkg/gui/command_log_panel.go @@ -55,11 +55,11 @@ func (gui *Gui) LogCommand(cmdStr string, commandLine bool) { func (gui *Gui) printCommandLogHeader() { introStr := fmt.Sprintf( gui.c.Tr.CommandLogHeader, - keybindings.Label(gui.c.UserConfig.Keybinding.Universal.ExtrasMenu), + keybindings.Label(gui.c.UserConfig().Keybinding.Universal.ExtrasMenu), ) fmt.Fprintln(gui.Views.Extras, style.FgCyan.Sprint(introStr)) - if gui.c.UserConfig.Gui.ShowRandomTip { + if gui.c.UserConfig().Gui.ShowRandomTip { fmt.Fprintf( gui.Views.Extras, "%s: %s", @@ -70,7 +70,7 @@ func (gui *Gui) printCommandLogHeader() { } func (gui *Gui) getRandomTip() string { - config := gui.c.UserConfig.Keybinding + config := gui.c.UserConfig().Keybinding formattedKey := func(key string) string { return keybindings.Label(key) diff --git a/pkg/gui/context/branches_context.go b/pkg/gui/context/branches_context.go index d289f2729..3c274d684 100644 --- a/pkg/gui/context/branches_context.go +++ b/pkg/gui/context/branches_context.go @@ -32,7 +32,7 @@ func NewBranchesContext(c *ContextCommon) *BranchesContext { c.Modes().Diffing.Ref, c.Views().Branches.Width(), c.Tr, - c.UserConfig, + c.UserConfig(), c.Model().Worktrees, ) } diff --git a/pkg/gui/context/commit_files_context.go b/pkg/gui/context/commit_files_context.go index b56798fea..97c1728d1 100644 --- a/pkg/gui/context/commit_files_context.go +++ b/pkg/gui/context/commit_files_context.go @@ -28,7 +28,7 @@ func NewCommitFilesContext(c *ContextCommon) *CommitFilesContext { viewModel := filetree.NewCommitFileTreeViewModel( func() []*models.CommitFile { return c.Model().CommitFiles }, c.Log, - c.UserConfig.Gui.ShowFileTree, + c.UserConfig().Gui.ShowFileTree, ) getDisplayStrings := func(_ int, _ int) [][]string { @@ -36,7 +36,7 @@ func NewCommitFilesContext(c *ContextCommon) *CommitFilesContext { return [][]string{{style.FgRed.Sprint("(none)")}} } - showFileIcons := icons.IsIconEnabled() && c.UserConfig.Gui.ShowFileIcons + showFileIcons := icons.IsIconEnabled() && c.UserConfig().Gui.ShowFileIcons lines := presentation.RenderCommitFileTree(viewModel, c.Git().Patch.PatchBuilder, showFileIcons) return lo.Map(lines, func(line string, _ int) []string { return []string{line} diff --git a/pkg/gui/context/commit_message_context.go b/pkg/gui/context/commit_message_context.go index 402f9b12e..ab62b1625 100644 --- a/pkg/gui/context/commit_message_context.go +++ b/pkg/gui/context/commit_message_context.go @@ -113,15 +113,15 @@ func (self *CommitMessageContext) SetPanelState( self.c.Views().CommitDescription.Subtitle = utils.ResolvePlaceholderString(self.c.Tr.CommitDescriptionSubTitle, map[string]string{ - "togglePanelKeyBinding": keybindings.Label(self.c.UserConfig.Keybinding.Universal.TogglePanel), - "commitMenuKeybinding": keybindings.Label(self.c.UserConfig.Keybinding.CommitMessage.CommitMenu), + "togglePanelKeyBinding": keybindings.Label(self.c.UserConfig().Keybinding.Universal.TogglePanel), + "commitMenuKeybinding": keybindings.Label(self.c.UserConfig().Keybinding.CommitMessage.CommitMenu), }) self.c.Views().CommitDescription.Visible = true } func (self *CommitMessageContext) RenderCommitLength() { - if !self.c.UserConfig.Gui.CommitLength.Show { + if !self.c.UserConfig().Gui.CommitLength.Show { return } diff --git a/pkg/gui/context/local_commits_context.go b/pkg/gui/context/local_commits_context.go index aeab10e66..0cb7a628c 100644 --- a/pkg/gui/context/local_commits_context.go +++ b/pkg/gui/context/local_commits_context.go @@ -54,10 +54,10 @@ func NewLocalCommitsContext(c *ContextCommon) *LocalCommitsContext { c.Modes().CherryPicking.SelectedHashSet(), c.Modes().Diffing.Ref, c.Modes().MarkedBaseCommit.GetHash(), - c.UserConfig.Gui.TimeFormat, - c.UserConfig.Gui.ShortTimeFormat, + c.UserConfig().Gui.TimeFormat, + c.UserConfig().Gui.ShortTimeFormat, time.Now(), - c.UserConfig.Git.ParseEmoji, + c.UserConfig().Git.ParseEmoji, selectedCommitHash, startIdx, endIdx, @@ -110,7 +110,7 @@ func NewLocalCommitsViewModel(getModel func() []*models.Commit, c *ContextCommon self := &LocalCommitsViewModel{ ListViewModel: NewListViewModel(getModel), limitCommits: true, - showWholeGitGraph: c.UserConfig.Git.Log.ShowWholeGraph, + showWholeGitGraph: c.UserConfig().Git.Log.ShowWholeGraph, } return self diff --git a/pkg/gui/context/menu_context.go b/pkg/gui/context/menu_context.go index 06cdf8b46..ec738681c 100644 --- a/pkg/gui/context/menu_context.go +++ b/pkg/gui/context/menu_context.go @@ -139,7 +139,7 @@ func (self *MenuViewModel) GetNonModelItems() []*NonModelItem { // Don't display section headers when we are filtering, and the filter mode // is fuzzy. The reason is that filtering changes the order of the items // (they are sorted by best match), so all the sections would be messed up. - if self.FilteredListViewModel.IsFiltering() && self.c.UserConfig.Gui.UseFuzzySearch() { + if self.FilteredListViewModel.IsFiltering() && self.c.UserConfig().Gui.UseFuzzySearch() { return result } diff --git a/pkg/gui/context/reflog_commits_context.go b/pkg/gui/context/reflog_commits_context.go index cec54988d..403e5e91c 100644 --- a/pkg/gui/context/reflog_commits_context.go +++ b/pkg/gui/context/reflog_commits_context.go @@ -33,9 +33,9 @@ func NewReflogCommitsContext(c *ContextCommon) *ReflogCommitsContext { c.Modes().CherryPicking.SelectedHashSet(), c.Modes().Diffing.Ref, time.Now(), - c.UserConfig.Gui.TimeFormat, - c.UserConfig.Gui.ShortTimeFormat, - c.UserConfig.Git.ParseEmoji, + c.UserConfig().Gui.TimeFormat, + c.UserConfig().Gui.ShortTimeFormat, + c.UserConfig().Git.ParseEmoji, ) } diff --git a/pkg/gui/context/remotes_context.go b/pkg/gui/context/remotes_context.go index ae01bb56b..237783dca 100644 --- a/pkg/gui/context/remotes_context.go +++ b/pkg/gui/context/remotes_context.go @@ -26,7 +26,7 @@ func NewRemotesContext(c *ContextCommon) *RemotesContext { getDisplayStrings := func(_ int, _ int) [][]string { return presentation.GetRemoteListDisplayStrings( - viewModel.GetItems(), c.Modes().Diffing.Ref, c.State().GetItemOperation, c.Tr, c.UserConfig) + viewModel.GetItems(), c.Modes().Diffing.Ref, c.State().GetItemOperation, c.Tr, c.UserConfig()) } return &RemotesContext{ diff --git a/pkg/gui/context/search_trait.go b/pkg/gui/context/search_trait.go index b8faf0757..0b01ee8d6 100644 --- a/pkg/gui/context/search_trait.go +++ b/pkg/gui/context/search_trait.go @@ -51,7 +51,7 @@ func (self *SearchTrait) onSelectItemWrapper(innerFunc func(int) error) func(int } func (self *SearchTrait) RenderSearchStatus(index int, total int) { - keybindingConfig := self.c.UserConfig.Keybinding + keybindingConfig := self.c.UserConfig().Keybinding if total == 0 { self.c.SetViewContent( diff --git a/pkg/gui/context/sub_commits_context.go b/pkg/gui/context/sub_commits_context.go index 7a9dfa476..d1a63b750 100644 --- a/pkg/gui/context/sub_commits_context.go +++ b/pkg/gui/context/sub_commits_context.go @@ -68,10 +68,10 @@ func NewSubCommitsContext( c.Modes().CherryPicking.SelectedHashSet(), c.Modes().Diffing.Ref, "", - c.UserConfig.Gui.TimeFormat, - c.UserConfig.Gui.ShortTimeFormat, + c.UserConfig().Gui.TimeFormat, + c.UserConfig().Gui.ShortTimeFormat, time.Now(), - c.UserConfig.Git.ParseEmoji, + c.UserConfig().Git.ParseEmoji, selectedCommitHash, startIdx, endIdx, diff --git a/pkg/gui/context/tags_context.go b/pkg/gui/context/tags_context.go index b956c77f4..39ae60702 100644 --- a/pkg/gui/context/tags_context.go +++ b/pkg/gui/context/tags_context.go @@ -30,7 +30,7 @@ func NewTagsContext( return presentation.GetTagListDisplayStrings( viewModel.GetItems(), c.State().GetItemOperation, - c.Modes().Diffing.Ref, c.Tr, c.UserConfig) + c.Modes().Diffing.Ref, c.Tr, c.UserConfig()) } return &TagsContext{ diff --git a/pkg/gui/context/working_tree_context.go b/pkg/gui/context/working_tree_context.go index 76eb56d57..88d2ab9fe 100644 --- a/pkg/gui/context/working_tree_context.go +++ b/pkg/gui/context/working_tree_context.go @@ -25,11 +25,11 @@ func NewWorkingTreeContext(c *ContextCommon) *WorkingTreeContext { viewModel := filetree.NewFileTreeViewModel( func() []*models.File { return c.Model().Files }, c.Log, - c.UserConfig.Gui.ShowFileTree, + c.UserConfig().Gui.ShowFileTree, ) getDisplayStrings := func(_ int, _ int) [][]string { - showFileIcons := icons.IsIconEnabled() && c.UserConfig.Gui.ShowFileIcons + showFileIcons := icons.IsIconEnabled() && c.UserConfig().Gui.ShowFileIcons lines := presentation.RenderFileTree(viewModel, c.Model().Submodules, showFileIcons) return lo.Map(lines, func(line string, _ int) []string { return []string{line} diff --git a/pkg/gui/controllers/basic_commits_controller.go b/pkg/gui/controllers/basic_commits_controller.go index 22e3da9d5..9d3595a61 100644 --- a/pkg/gui/controllers/basic_commits_controller.go +++ b/pkg/gui/controllers/basic_commits_controller.go @@ -311,8 +311,8 @@ func (self *BasicCommitsController) canCopyCommits(selectedCommits []*models.Com func (self *BasicCommitsController) handleOldCherryPickKey() error { msg := utils.ResolvePlaceholderString(self.c.Tr.OldCherryPickKeyWarning, map[string]string{ - "copy": keybindings.Label(self.c.UserConfig.Keybinding.Commits.CherryPickCopy), - "paste": keybindings.Label(self.c.UserConfig.Keybinding.Commits.PasteCommits), + "copy": keybindings.Label(self.c.UserConfig().Keybinding.Commits.CherryPickCopy), + "paste": keybindings.Label(self.c.UserConfig().Keybinding.Commits.PasteCommits), }) return errors.New(msg) diff --git a/pkg/gui/controllers/commit_message_controller.go b/pkg/gui/controllers/commit_message_controller.go index d989086c4..ec60b4da5 100644 --- a/pkg/gui/controllers/commit_message_controller.go +++ b/pkg/gui/controllers/commit_message_controller.go @@ -118,8 +118,8 @@ func (self *CommitMessageController) setCommitMessageAtIndex(index int) (bool, e } return false, errors.New(self.c.Tr.CommitWithoutMessageErr) } - if self.c.UserConfig.Git.Commit.AutoWrapCommitMessage { - commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig.Git.Commit.AutoWrapWidth) + if self.c.UserConfig().Git.Commit.AutoWrapCommitMessage { + commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig().Git.Commit.AutoWrapWidth) } self.c.Helpers().Commits.UpdateCommitPanelView(commitMessage) return true, nil diff --git a/pkg/gui/controllers/confirmation_controller.go b/pkg/gui/controllers/confirmation_controller.go index 542458a71..042f83115 100644 --- a/pkg/gui/controllers/confirmation_controller.go +++ b/pkg/gui/controllers/confirmation_controller.go @@ -46,7 +46,7 @@ func (self *ConfirmationController) GetKeybindings(opts types.KeybindingsOpts) [ // We assume that whenever things are deletable, they // are also editable, so we show both keybindings subtitle = fmt.Sprintf(self.c.Tr.SuggestionsSubtitle, - self.c.UserConfig.Keybinding.Universal.Remove, self.c.UserConfig.Keybinding.Universal.Edit) + self.c.UserConfig().Keybinding.Universal.Remove, self.c.UserConfig().Keybinding.Universal.Edit) } self.c.Views().Suggestions.Subtitle = subtitle return self.c.Context().Replace(self.c.Contexts().Suggestions) diff --git a/pkg/gui/controllers/files_controller.go b/pkg/gui/controllers/files_controller.go index 934aca511..65ea941fd 100644 --- a/pkg/gui/controllers/files_controller.go +++ b/pkg/gui/controllers/files_controller.go @@ -258,7 +258,7 @@ func (self *FilesController) GetOnRenderToMain() func() error { pair = self.c.MainViewPairs().Staging } - split := self.c.UserConfig.Gui.SplitDiff == "always" || (node.GetHasUnstagedChanges() && node.GetHasStagedChanges()) + split := self.c.UserConfig().Gui.SplitDiff == "always" || (node.GetHasUnstagedChanges() && node.GetHasStagedChanges()) mainShowsStaged := !split && node.GetHasStagedChanges() cmdObj := self.c.Git().WorkingTree.WorktreeFileDiffCmdObj(node, false, mainShowsStaged) @@ -1083,7 +1083,7 @@ func (self *FilesController) remove(selectedNodes []*filetree.FileNode) error { return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.FILES, types.WORKTREES}}) }, - Key: self.c.KeybindingsOpts().GetKey(self.c.UserConfig.Keybinding.Files.ConfirmDiscard), + Key: self.c.KeybindingsOpts().GetKey(self.c.UserConfig().Keybinding.Files.ConfirmDiscard), Tooltip: utils.ResolvePlaceholderString( self.c.Tr.DiscardAllTooltip, map[string]string{ diff --git a/pkg/gui/controllers/helpers/app_status_helper.go b/pkg/gui/controllers/helpers/app_status_helper.go index b0d1b3818..cf94c58cd 100644 --- a/pkg/gui/controllers/helpers/app_status_helper.go +++ b/pkg/gui/controllers/helpers/app_status_helper.go @@ -81,16 +81,16 @@ func (self *AppStatusHelper) HasStatus() bool { } func (self *AppStatusHelper) GetStatusString() string { - appStatus, _ := self.statusMgr().GetStatusString(self.c.UserConfig) + appStatus, _ := self.statusMgr().GetStatusString(self.c.UserConfig()) return appStatus } func (self *AppStatusHelper) renderAppStatus() { self.c.OnWorker(func(_ gocui.Task) error { - ticker := time.NewTicker(time.Millisecond * time.Duration(self.c.UserConfig.Gui.Spinner.Rate)) + ticker := time.NewTicker(time.Millisecond * time.Duration(self.c.UserConfig().Gui.Spinner.Rate)) defer ticker.Stop() for range ticker.C { - appStatus, color := self.statusMgr().GetStatusString(self.c.UserConfig) + appStatus, color := self.statusMgr().GetStatusString(self.c.UserConfig()) self.c.Views().AppStatus.FgColor = color self.c.OnUIThread(func() error { self.c.SetViewContent(self.c.Views().AppStatus, appStatus) @@ -124,7 +124,7 @@ func (self *AppStatusHelper) renderAppStatusSync(stop chan struct{}) { for { select { case <-ticker.C: - appStatus, color := self.statusMgr().GetStatusString(self.c.UserConfig) + appStatus, color := self.statusMgr().GetStatusString(self.c.UserConfig()) self.c.Views().AppStatus.FgColor = color self.c.SetViewContent(self.c.Views().AppStatus, appStatus) // Redraw all views of the bottom line: diff --git a/pkg/gui/controllers/helpers/confirmation_helper.go b/pkg/gui/controllers/helpers/confirmation_helper.go index fa2b502a9..25f05906b 100644 --- a/pkg/gui/controllers/helpers/confirmation_helper.go +++ b/pkg/gui/controllers/helpers/confirmation_helper.go @@ -173,7 +173,7 @@ func (self *ConfirmationHelper) prepareConfirmationPanel( suggestionsView.FgColor = theme.GocuiDefaultTextColor suggestionsContext.SetSuggestions(opts.FindSuggestionsFunc("")) suggestionsView.Visible = true - suggestionsView.Title = fmt.Sprintf(self.c.Tr.SuggestionsTitle, self.c.UserConfig.Keybinding.Universal.TogglePanel) + suggestionsView.Title = fmt.Sprintf(self.c.Tr.SuggestionsTitle, self.c.UserConfig().Keybinding.Universal.TogglePanel) suggestionsView.Subtitle = "" } diff --git a/pkg/gui/controllers/helpers/gpg_helper.go b/pkg/gui/controllers/helpers/gpg_helper.go index a49c0cb38..6974e1c5c 100644 --- a/pkg/gui/controllers/helpers/gpg_helper.go +++ b/pkg/gui/controllers/helpers/gpg_helper.go @@ -46,7 +46,7 @@ func (self *GpgHelper) runAndStream(cmdObj oscommands.ICmdObj, waitingStatus str if err := cmdObj.StreamOutput().Run(); err != nil { _ = self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) return fmt.Errorf( - self.c.Tr.GitCommandFailed, self.c.UserConfig.Keybinding.Universal.ExtrasMenu, + self.c.Tr.GitCommandFailed, self.c.UserConfig().Keybinding.Universal.ExtrasMenu, ) } diff --git a/pkg/gui/controllers/helpers/host_helper.go b/pkg/gui/controllers/helpers/host_helper.go index bbd464ba8..ab8631d36 100644 --- a/pkg/gui/controllers/helpers/host_helper.go +++ b/pkg/gui/controllers/helpers/host_helper.go @@ -46,6 +46,6 @@ func (self *HostHelper) getHostingServiceMgr() (*hosting_service.HostingServiceM if err != nil { return nil, err } - configServices := self.c.UserConfig.Services + configServices := self.c.UserConfig().Services return hosting_service.NewHostingServiceMgr(self.c.Log, self.c.Tr, remoteUrl, configServices), nil } diff --git a/pkg/gui/controllers/helpers/inline_status_helper.go b/pkg/gui/controllers/helpers/inline_status_helper.go index b13f19473..cc9da86ea 100644 --- a/pkg/gui/controllers/helpers/inline_status_helper.go +++ b/pkg/gui/controllers/helpers/inline_status_helper.go @@ -99,7 +99,7 @@ func (self *InlineStatusHelper) start(opts InlineStatusOpts) { self.contextsWithInlineStatus[opts.ContextKey] = info go utils.Safe(func() { - ticker := time.NewTicker(time.Millisecond * time.Duration(self.c.UserConfig.Gui.Spinner.Rate)) + ticker := time.NewTicker(time.Millisecond * time.Duration(self.c.UserConfig().Gui.Spinner.Rate)) defer ticker.Stop() outer: for { diff --git a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go index 73c345070..7ce60701d 100644 --- a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go +++ b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go @@ -112,7 +112,7 @@ func (self *MergeAndRebaseHelper) genericMergeCommand(command string) error { // we should end up with a command like 'git merge --continue' // it's impossible for a rebase to require a commit so we'll use a subprocess only if it's a merge - needsSubprocess := (status == enums.REBASE_MODE_MERGING && command != REBASE_OPTION_ABORT && self.c.UserConfig.Git.Merging.ManualCommit) || + needsSubprocess := (status == enums.REBASE_MODE_MERGING && command != REBASE_OPTION_ABORT && self.c.UserConfig().Git.Merging.ManualCommit) || // but we'll also use a subprocess if we have exec todos; those are likely to be lengthy build // tasks whose output the user will want to see in the terminal (status == enums.REBASE_MODE_REBASING && command != REBASE_OPTION_ABORT && self.hasExecTodos()) @@ -435,7 +435,7 @@ func (self *MergeAndRebaseHelper) SquashMergeCommitted(refName, checkedOutBranch if err = self.CheckMergeOrRebase(err); err != nil { return err } - message := utils.ResolvePlaceholderString(self.c.UserConfig.Git.Merging.SquashMergeMessage, map[string]string{ + message := utils.ResolvePlaceholderString(self.c.UserConfig().Git.Merging.SquashMergeMessage, map[string]string{ "selectedRef": refName, "currentBranch": checkedOutBranchName, }) diff --git a/pkg/gui/controllers/helpers/refresh_helper.go b/pkg/gui/controllers/helpers/refresh_helper.go index 4295c11ab..e29879b9d 100644 --- a/pkg/gui/controllers/helpers/refresh_helper.go +++ b/pkg/gui/controllers/helpers/refresh_helper.go @@ -737,7 +737,7 @@ func (self *RefreshHelper) refreshStatus() { repoName := self.c.Git().RepoPaths.RepoName() - status := presentation.FormatStatus(repoName, currentBranch, types.ItemOperationNone, linkedWorktreeName, workingTreeState, self.c.Tr, self.c.UserConfig) + status := presentation.FormatStatus(repoName, currentBranch, types.ItemOperationNone, linkedWorktreeName, workingTreeState, self.c.Tr, self.c.UserConfig()) self.c.SetViewContent(self.c.Views().Status, status) } diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index ceadc8dfa..63a288f80 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -275,7 +275,7 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest ) if suggestedBranchName == "" { - suggestedBranchName = self.c.UserConfig.Git.BranchPrefix + suggestedBranchName = self.c.UserConfig().Git.BranchPrefix } return self.c.Prompt(types.PromptOpts{ diff --git a/pkg/gui/controllers/helpers/search_helper.go b/pkg/gui/controllers/helpers/search_helper.go index b282f0c66..0480cd095 100644 --- a/pkg/gui/controllers/helpers/search_helper.go +++ b/pkg/gui/controllers/helpers/search_helper.go @@ -76,7 +76,7 @@ func (self *SearchHelper) DisplayFilterStatus(context types.IFilterableContext) self.searchPrefixView().SetContent(self.c.Tr.FilterPrefix) promptView := self.promptView() - keybindingConfig := self.c.UserConfig.Keybinding + keybindingConfig := self.c.UserConfig().Keybinding promptView.SetContent(fmt.Sprintf("matches for '%s' ", searchString) + theme.OptionsFgColor.Sprintf(self.c.Tr.ExitTextFilterMode, keybindings.Label(keybindingConfig.Universal.Return))) } @@ -229,7 +229,7 @@ func (self *SearchHelper) OnPromptContentChanged(searchString string) { case types.IFilterableContext: context.SetSelection(0) _ = context.GetView().SetOriginY(0) - context.SetFilter(searchString, self.c.UserConfig.Gui.UseFuzzySearch()) + context.SetFilter(searchString, self.c.UserConfig().Gui.UseFuzzySearch()) _ = self.c.PostRefreshUpdate(context) case types.ISearchableContext: // do nothing @@ -246,7 +246,7 @@ func (self *SearchHelper) ReApplyFilter(context types.Context) { filterableContext.SetSelection(0) _ = filterableContext.GetView().SetOriginY(0) } - filterableContext.ReApplyFilter(self.c.UserConfig.Gui.UseFuzzySearch()) + filterableContext.ReApplyFilter(self.c.UserConfig().Gui.UseFuzzySearch()) } } diff --git a/pkg/gui/controllers/helpers/suggestions_helper.go b/pkg/gui/controllers/helpers/suggestions_helper.go index ff8aeea71..441a488b5 100644 --- a/pkg/gui/controllers/helpers/suggestions_helper.go +++ b/pkg/gui/controllers/helpers/suggestions_helper.go @@ -66,7 +66,7 @@ func matchesToSuggestions(matches []string) []*types.Suggestion { func (self *SuggestionsHelper) GetRemoteSuggestionsFunc() func(string) []*types.Suggestion { remoteNames := self.getRemoteNames() - return FilterFunc(remoteNames, self.c.UserConfig.Gui.UseFuzzySearch()) + return FilterFunc(remoteNames, self.c.UserConfig().Gui.UseFuzzySearch()) } func (self *SuggestionsHelper) getBranchNames() []string { @@ -83,7 +83,7 @@ func (self *SuggestionsHelper) GetBranchNameSuggestionsFunc() func(string) []*ty if input == "" { matchingBranchNames = branchNames } else { - matchingBranchNames = utils.FilterStrings(input, branchNames, self.c.UserConfig.Gui.UseFuzzySearch()) + matchingBranchNames = utils.FilterStrings(input, branchNames, self.c.UserConfig().Gui.UseFuzzySearch()) } return lo.Map(matchingBranchNames, func(branchName string, _ int) *types.Suggestion { @@ -129,7 +129,7 @@ func (self *SuggestionsHelper) GetFilePathSuggestionsFunc() func(string) []*type return func(input string) []*types.Suggestion { matchingNames := []string{} - if self.c.UserConfig.Gui.UseFuzzySearch() { + if self.c.UserConfig().Gui.UseFuzzySearch() { _ = self.c.Model().FilesTrie.VisitFuzzy(patricia.Prefix(input), true, func(prefix patricia.Prefix, item patricia.Item, skipped int) error { matchingNames = append(matchingNames, item.(string)) return nil @@ -163,7 +163,7 @@ func (self *SuggestionsHelper) getRemoteBranchNames(separator string) []string { } func (self *SuggestionsHelper) GetRemoteBranchesSuggestionsFunc(separator string) func(string) []*types.Suggestion { - return FilterFunc(self.getRemoteBranchNames(separator), self.c.UserConfig.Gui.UseFuzzySearch()) + return FilterFunc(self.getRemoteBranchNames(separator), self.c.UserConfig().Gui.UseFuzzySearch()) } func (self *SuggestionsHelper) getTagNames() []string { @@ -175,7 +175,7 @@ func (self *SuggestionsHelper) getTagNames() []string { func (self *SuggestionsHelper) GetTagsSuggestionsFunc() func(string) []*types.Suggestion { tagNames := self.getTagNames() - return FilterFunc(tagNames, self.c.UserConfig.Gui.UseFuzzySearch()) + return FilterFunc(tagNames, self.c.UserConfig().Gui.UseFuzzySearch()) } func (self *SuggestionsHelper) GetRefsSuggestionsFunc() func(string) []*types.Suggestion { @@ -186,7 +186,7 @@ func (self *SuggestionsHelper) GetRefsSuggestionsFunc() func(string) []*types.Su refNames := append(append(append(remoteBranchNames, localBranchNames...), tagNames...), additionalRefNames...) - return FilterFunc(refNames, self.c.UserConfig.Gui.UseFuzzySearch()) + return FilterFunc(refNames, self.c.UserConfig().Gui.UseFuzzySearch()) } func (self *SuggestionsHelper) GetAuthorsSuggestionsFunc() func(string) []*types.Suggestion { @@ -196,7 +196,7 @@ func (self *SuggestionsHelper) GetAuthorsSuggestionsFunc() func(string) []*types slices.Sort(authors) - return FilterFunc(authors, self.c.UserConfig.Gui.UseFuzzySearch()) + return FilterFunc(authors, self.c.UserConfig().Gui.UseFuzzySearch()) } func FilterFunc(options []string, useFuzzySearch bool) func(string) []*types.Suggestion { diff --git a/pkg/gui/controllers/helpers/tags_helper.go b/pkg/gui/controllers/helpers/tags_helper.go index 542037fba..8725eb054 100644 --- a/pkg/gui/controllers/helpers/tags_helper.go +++ b/pkg/gui/controllers/helpers/tags_helper.go @@ -48,8 +48,8 @@ func (self *TagsHelper) OpenCreateTagPrompt(ref string, onCreate func()) error { self.c.Tr.ForceTagPrompt, map[string]string{ "tagName": tagName, - "cancelKey": self.c.UserConfig.Keybinding.Universal.Return, - "confirmKey": self.c.UserConfig.Keybinding.Universal.Confirm, + "cancelKey": self.c.UserConfig().Keybinding.Universal.Return, + "confirmKey": self.c.UserConfig().Keybinding.Universal.Confirm, }, ) return self.c.Confirm(types.ConfirmOpts{ diff --git a/pkg/gui/controllers/helpers/update_helper.go b/pkg/gui/controllers/helpers/update_helper.go index f50a757de..e01bae3c6 100644 --- a/pkg/gui/controllers/helpers/update_helper.go +++ b/pkg/gui/controllers/helpers/update_helper.go @@ -31,7 +31,7 @@ func (self *UpdateHelper) CheckForUpdateInBackground() { if newVersion == "" { return nil } - if self.c.UserConfig.Update.Method == "background" { + if self.c.UserConfig().Update.Method == "background" { self.startUpdating(newVersion) return nil } diff --git a/pkg/gui/controllers/helpers/window_arrangement_helper.go b/pkg/gui/controllers/helpers/window_arrangement_helper.go index d27e9aa82..d4ac4ee60 100644 --- a/pkg/gui/controllers/helpers/window_arrangement_helper.go +++ b/pkg/gui/controllers/helpers/window_arrangement_helper.go @@ -87,7 +87,7 @@ func (self *WindowArrangementHelper) GetWindowDimensions(informationStr string, args := WindowArrangementArgs{ Width: width, Height: height, - UserConfig: self.c.UserConfig, + UserConfig: self.c.UserConfig(), CurrentWindow: self.windowHelper.CurrentWindow(), CurrentSideWindow: self.c.Context().CurrentSide().GetWindowName(), CurrentStaticWindow: self.c.Context().CurrentStatic().GetWindowName(), diff --git a/pkg/gui/controllers/helpers/working_tree_helper.go b/pkg/gui/controllers/helpers/working_tree_helper.go index 51a6bc553..96baaeebe 100644 --- a/pkg/gui/controllers/helpers/working_tree_helper.go +++ b/pkg/gui/controllers/helpers/working_tree_helper.go @@ -136,7 +136,7 @@ func (self *WorkingTreeHelper) HandleCommitEditorPress() error { } func (self *WorkingTreeHelper) HandleWIPCommitPress() error { - skipHookPrefix := self.c.UserConfig.Git.SkipHookPrefix + skipHookPrefix := self.c.UserConfig().Git.SkipHookPrefix if skipHookPrefix == "" { return errors.New(self.c.Tr.SkipHookPrefixNotConfigured) } @@ -209,7 +209,7 @@ func (self *WorkingTreeHelper) syncRefresh() error { func (self *WorkingTreeHelper) prepareFilesForCommit() error { noStagedFiles := !self.AnyStagedFiles() - if noStagedFiles && self.c.UserConfig.Gui.SkipNoStagedFilesWarning { + if noStagedFiles && self.c.UserConfig().Gui.SkipNoStagedFilesWarning { self.c.LogAction(self.c.Tr.Actions.StageAllFiles) err := self.c.Git().WorkingTree.StageAll() if err != nil { @@ -223,10 +223,10 @@ func (self *WorkingTreeHelper) prepareFilesForCommit() error { } func (self *WorkingTreeHelper) commitPrefixConfigForRepo() *config.CommitPrefixConfig { - cfg, ok := self.c.UserConfig.Git.CommitPrefixes[self.c.Git().RepoPaths.RepoName()] + cfg, ok := self.c.UserConfig().Git.CommitPrefixes[self.c.Git().RepoPaths.RepoName()] if ok { return &cfg } - return self.c.UserConfig.Git.CommitPrefix + return self.c.UserConfig().Git.CommitPrefix } diff --git a/pkg/gui/controllers/list_controller.go b/pkg/gui/controllers/list_controller.go index b63954501..7e51c504d 100644 --- a/pkg/gui/controllers/list_controller.go +++ b/pkg/gui/controllers/list_controller.go @@ -51,7 +51,7 @@ func (self *ListController) HandleScrollRight() error { } func (self *ListController) HandleScrollUp() error { - scrollHeight := self.c.UserConfig.Gui.ScrollHeight + scrollHeight := self.c.UserConfig().Gui.ScrollHeight self.context.GetViewTrait().ScrollUp(scrollHeight) if self.context.RenderOnlyVisibleLines() { return self.context.HandleRender() @@ -61,7 +61,7 @@ func (self *ListController) HandleScrollUp() error { } func (self *ListController) HandleScrollDown() error { - scrollHeight := self.c.UserConfig.Gui.ScrollHeight + scrollHeight := self.c.UserConfig().Gui.ScrollHeight self.context.GetViewTrait().ScrollDown(scrollHeight) if self.context.RenderOnlyVisibleLines() { return self.context.HandleRender() @@ -106,10 +106,10 @@ func (self *ListController) handleLineChangeAux(f func(int), change int) error { cursorMoved := before != after if cursorMoved { if change == -1 { - checkScrollUp(self.context.GetViewTrait(), self.c.UserConfig, + checkScrollUp(self.context.GetViewTrait(), self.c.UserConfig(), self.context.ModelIndexToViewIndex(before), self.context.ModelIndexToViewIndex(after)) } else if change == 1 { - checkScrollDown(self.context.GetViewTrait(), self.c.UserConfig, + checkScrollDown(self.context.GetViewTrait(), self.c.UserConfig(), self.context.ModelIndexToViewIndex(before), self.context.ModelIndexToViewIndex(after)) } } diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go index 913601b5c..3900d7f32 100644 --- a/pkg/gui/controllers/local_commits_controller.go +++ b/pkg/gui/controllers/local_commits_controller.go @@ -357,8 +357,8 @@ func (self *LocalCommitsController) reword(commit *models.Commit) error { if err != nil { return err } - if self.c.UserConfig.Git.Commit.AutoWrapCommitMessage { - commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig.Git.Commit.AutoWrapWidth) + if self.c.UserConfig().Git.Commit.AutoWrapCommitMessage { + commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig().Git.Commit.AutoWrapWidth) } return self.c.Helpers().Commits.OpenCommitMessagePanel( &helpers.OpenCommitMessagePanelOpts{ @@ -438,7 +438,7 @@ func (self *LocalCommitsController) doRewordEditor() error { } func (self *LocalCommitsController) rewordEditor(commit *models.Commit) error { - if self.c.UserConfig.Gui.SkipRewordInEditorWarning { + if self.c.UserConfig().Gui.SkipRewordInEditorWarning { return self.doRewordEditor() } else { return self.c.Confirm(types.ConfirmOpts{ @@ -564,7 +564,7 @@ func (self *LocalCommitsController) findCommitForQuickStartInteractiveRebase() ( if !ok || index == 0 { errorMsg := utils.ResolvePlaceholderString(self.c.Tr.CannotQuickStartInteractiveRebase, map[string]string{ - "editKey": keybindings.Label(self.c.UserConfig.Keybinding.Universal.Edit), + "editKey": keybindings.Label(self.c.UserConfig().Keybinding.Universal.Edit), }) return nil, errors.New(errorMsg) @@ -905,8 +905,8 @@ func (self *LocalCommitsController) createAmendCommit(commit *models.Commit, inc if err != nil { return err } - if self.c.UserConfig.Git.Commit.AutoWrapCommitMessage { - commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig.Git.Commit.AutoWrapWidth) + if self.c.UserConfig().Git.Commit.AutoWrapCommitMessage { + commitMessage = helpers.TryRemoveHardLineBreaks(commitMessage, self.c.UserConfig().Git.Commit.AutoWrapWidth) } originalSubject, _, _ := strings.Cut(commitMessage, "\n") return self.c.Helpers().Commits.OpenCommitMessagePanel( diff --git a/pkg/gui/controllers/merge_conflicts_controller.go b/pkg/gui/controllers/merge_conflicts_controller.go index 7ed5762f7..06bfda94f 100644 --- a/pkg/gui/controllers/merge_conflicts_controller.go +++ b/pkg/gui/controllers/merge_conflicts_controller.go @@ -173,14 +173,14 @@ func (self *MergeConflictsController) GetOnFocusLost() func(types.OnFocusLostOpt func (self *MergeConflictsController) HandleScrollUp() error { self.context().SetUserScrolling(true) - self.context().GetViewTrait().ScrollUp(self.c.UserConfig.Gui.ScrollHeight) + self.context().GetViewTrait().ScrollUp(self.c.UserConfig().Gui.ScrollHeight) return nil } func (self *MergeConflictsController) HandleScrollDown() error { self.context().SetUserScrolling(true) - self.context().GetViewTrait().ScrollDown(self.c.UserConfig.Gui.ScrollHeight) + self.context().GetViewTrait().ScrollDown(self.c.UserConfig().Gui.ScrollHeight) return nil } diff --git a/pkg/gui/controllers/patch_explorer_controller.go b/pkg/gui/controllers/patch_explorer_controller.go index 2df62b0f3..6d3290f04 100644 --- a/pkg/gui/controllers/patch_explorer_controller.go +++ b/pkg/gui/controllers/patch_explorer_controller.go @@ -173,7 +173,7 @@ func (self *PatchExplorerController) HandlePrevLine() error { after := self.context.GetState().GetSelectedLineIdx() if self.context.GetState().SelectingLine() { - checkScrollUp(self.context.GetViewTrait(), self.c.UserConfig, before, after) + checkScrollUp(self.context.GetViewTrait(), self.c.UserConfig(), before, after) } return nil @@ -185,7 +185,7 @@ func (self *PatchExplorerController) HandleNextLine() error { after := self.context.GetState().GetSelectedLineIdx() if self.context.GetState().SelectingLine() { - checkScrollDown(self.context.GetViewTrait(), self.c.UserConfig, before, after) + checkScrollDown(self.context.GetViewTrait(), self.c.UserConfig(), before, after) } return nil diff --git a/pkg/gui/controllers/quit_actions.go b/pkg/gui/controllers/quit_actions.go index f7cd8e56f..762260331 100644 --- a/pkg/gui/controllers/quit_actions.go +++ b/pkg/gui/controllers/quit_actions.go @@ -25,7 +25,7 @@ func (self *QuitActions) quitAux() error { return self.confirmQuitDuringUpdate() } - if self.c.UserConfig.ConfirmOnQuit { + if self.c.UserConfig().ConfirmOnQuit { return self.c.Confirm(types.ConfirmOpts{ Title: "", Prompt: self.c.Tr.ConfirmQuit, @@ -88,7 +88,7 @@ func (self *QuitActions) Escape() error { return self.c.Helpers().Repos.DispatchSwitchToRepo(repoPathStack.Pop(), context.NO_CONTEXT) } - if self.c.UserConfig.QuitOnTopLevelReturn { + if self.c.UserConfig().QuitOnTopLevelReturn { return self.Quit() } diff --git a/pkg/gui/controllers/shell_command_action.go b/pkg/gui/controllers/shell_command_action.go index 7393c188c..943006ff9 100644 --- a/pkg/gui/controllers/shell_command_action.go +++ b/pkg/gui/controllers/shell_command_action.go @@ -60,7 +60,7 @@ func (self *ShellCommandAction) GetShellCommandsHistorySuggestionsFunc() func(st return func(input string) []*types.Suggestion { history := self.c.GetAppState().ShellCommandsHistory - return helpers.FilterFunc(history, self.c.UserConfig.Gui.UseFuzzySearch())(input) + return helpers.FilterFunc(history, self.c.UserConfig().Gui.UseFuzzySearch())(input) } } diff --git a/pkg/gui/controllers/staging_controller.go b/pkg/gui/controllers/staging_controller.go index c3dcbafde..deac75a6c 100644 --- a/pkg/gui/controllers/staging_controller.go +++ b/pkg/gui/controllers/staging_controller.go @@ -190,7 +190,7 @@ func (self *StagingController) ToggleStaged() error { func (self *StagingController) DiscardSelection() error { reset := func() error { return self.applySelectionAndRefresh(true) } - if !self.staged && !self.c.UserConfig.Gui.SkipDiscardChangeWarning { + if !self.staged && !self.c.UserConfig().Gui.SkipDiscardChangeWarning { return self.c.Confirm(types.ConfirmOpts{ Title: self.c.Tr.DiscardChangeTitle, Prompt: self.c.Tr.DiscardChangePrompt, diff --git a/pkg/gui/controllers/stash_controller.go b/pkg/gui/controllers/stash_controller.go index 403c22b67..9f6884b59 100644 --- a/pkg/gui/controllers/stash_controller.go +++ b/pkg/gui/controllers/stash_controller.go @@ -114,7 +114,7 @@ func (self *StashController) handleStashApply(stashEntry *models.StashEntry) err return nil } - if self.c.UserConfig.Gui.SkipStashWarning { + if self.c.UserConfig().Gui.SkipStashWarning { return apply() } @@ -138,7 +138,7 @@ func (self *StashController) handleStashPop(stashEntry *models.StashEntry) error return nil } - if self.c.UserConfig.Gui.SkipStashWarning { + if self.c.UserConfig().Gui.SkipStashWarning { return pop() } diff --git a/pkg/gui/controllers/status_controller.go b/pkg/gui/controllers/status_controller.go index cdfa08257..3008f08c0 100644 --- a/pkg/gui/controllers/status_controller.go +++ b/pkg/gui/controllers/status_controller.go @@ -89,7 +89,7 @@ func (self *StatusController) onClickMain(opts gocui.ViewMouseBindingOpts) error } func (self *StatusController) GetOnRenderToMain() func() error { - config := self.c.UserConfig.Gui + config := self.c.UserConfig().Gui switch config.StatusPanelView { case "dashboard": @@ -117,7 +117,7 @@ func (self *StatusController) onClick(opts gocui.ViewMouseBindingOpts) error { return err } - upstreamStatus := utils.Decolorise(presentation.BranchStatus(currentBranch, types.ItemOperationNone, self.c.Tr, time.Now(), self.c.UserConfig)) + upstreamStatus := utils.Decolorise(presentation.BranchStatus(currentBranch, types.ItemOperationNone, self.c.Tr, time.Now(), self.c.UserConfig())) repoName := self.c.Git().RepoPaths.RepoName() workingTreeState := self.c.Git().Status.WorkingTreeState() switch workingTreeState { diff --git a/pkg/gui/controllers/sync_controller.go b/pkg/gui/controllers/sync_controller.go index 8c7334031..b97289438 100644 --- a/pkg/gui/controllers/sync_controller.go +++ b/pkg/gui/controllers/sync_controller.go @@ -210,7 +210,7 @@ func (self *SyncController) pushAux(currentBranch *models.Branch, opts pushOpts) return errors.New(self.c.Tr.UpdatesRejected) } - forcePushDisabled := self.c.UserConfig.Git.DisableForcePushing + forcePushDisabled := self.c.UserConfig().Git.DisableForcePushing if forcePushDisabled { return errors.New(self.c.Tr.UpdatesRejectedAndForcePushDisabled) } @@ -233,7 +233,7 @@ func (self *SyncController) pushAux(currentBranch *models.Branch, opts pushOpts) } func (self *SyncController) requestToForcePush(currentBranch *models.Branch, opts pushOpts) error { - forcePushDisabled := self.c.UserConfig.Git.DisableForcePushing + forcePushDisabled := self.c.UserConfig().Git.DisableForcePushing if forcePushDisabled { return errors.New(self.c.Tr.ForcePushDisabled) } @@ -252,8 +252,8 @@ func (self *SyncController) forcePushPrompt() string { return utils.ResolvePlaceholderString( self.c.Tr.ForcePushPrompt, map[string]string{ - "cancelKey": self.c.UserConfig.Keybinding.Universal.Return, - "confirmKey": self.c.UserConfig.Keybinding.Universal.Confirm, + "cancelKey": self.c.UserConfig().Keybinding.Universal.Return, + "confirmKey": self.c.UserConfig().Keybinding.Universal.Confirm, }, ) } diff --git a/pkg/gui/controllers/vertical_scroll_controller.go b/pkg/gui/controllers/vertical_scroll_controller.go index 90958fadd..b168e86a8 100644 --- a/pkg/gui/controllers/vertical_scroll_controller.go +++ b/pkg/gui/controllers/vertical_scroll_controller.go @@ -65,13 +65,13 @@ func (self *VerticalScrollController) GetMouseKeybindings(opts types.Keybindings } func (self *VerticalScrollController) HandleScrollUp() error { - self.context.GetViewTrait().ScrollUp(self.c.UserConfig.Gui.ScrollHeight) + self.context.GetViewTrait().ScrollUp(self.c.UserConfig().Gui.ScrollHeight) return nil } func (self *VerticalScrollController) HandleScrollDown() error { - scrollHeight := self.c.UserConfig.Gui.ScrollHeight + scrollHeight := self.c.UserConfig().Gui.ScrollHeight self.context.GetViewTrait().ScrollDown(scrollHeight) if manager, ok := (*self.viewBufferManagerMap)[self.context.GetViewName()]; ok { diff --git a/pkg/gui/controllers/workspace_reset_controller.go b/pkg/gui/controllers/workspace_reset_controller.go index 3115d6f68..48ae6de36 100644 --- a/pkg/gui/controllers/workspace_reset_controller.go +++ b/pkg/gui/controllers/workspace_reset_controller.go @@ -35,7 +35,7 @@ func (self *FilesController) createResetMenu() error { return err } - if self.c.UserConfig.Gui.AnimateExplosion { + if self.c.UserConfig().Gui.AnimateExplosion { self.animateExplosion() } diff --git a/pkg/gui/global_handlers.go b/pkg/gui/global_handlers.go index 98089321e..e75dfb8f5 100644 --- a/pkg/gui/global_handlers.go +++ b/pkg/gui/global_handlers.go @@ -13,11 +13,11 @@ import ( const HORIZONTAL_SCROLL_FACTOR = 3 func (gui *Gui) scrollUpView(view *gocui.View) { - view.ScrollUp(gui.c.UserConfig.Gui.ScrollHeight) + view.ScrollUp(gui.c.UserConfig().Gui.ScrollHeight) } func (gui *Gui) scrollDownView(view *gocui.View) { - scrollHeight := gui.c.UserConfig.Gui.ScrollHeight + scrollHeight := gui.c.UserConfig().Gui.ScrollHeight view.ScrollDown(scrollHeight) if manager, ok := gui.viewBufferManagerMap[view.Name()]; ok { @@ -123,7 +123,7 @@ func (gui *Gui) handleCopySelectedSideContextItemToClipboard() error { func (gui *Gui) handleCopySelectedSideContextItemCommitHashToClipboard() error { return gui.handleCopySelectedSideContextItemToClipboardWithTruncation( - gui.UserConfig.Git.TruncateCopiedCommitHashesTo) + gui.UserConfig().Git.TruncateCopiedCommitHashesTo) } func (gui *Gui) handleCopySelectedSideContextItemToClipboardWithTruncation(maxWidth int) error { diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index f7319b796..cd2cdf983 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -379,7 +379,7 @@ func (gui *Gui) resetState(startArgs appTypes.StartArgs) types.Context { BisectInfo: git_commands.NewNullBisectInfo(), FilesTrie: patricia.NewTrie(), Authors: map[string]*models.Author{}, - MainBranches: git_commands.NewMainBranches(gui.UserConfig.Git.MainBranches, gui.os.Cmd), + MainBranches: git_commands.NewMainBranches(gui.UserConfig().Git.MainBranches, gui.os.Cmd), }, Modes: &types.Modes{ Filtering: filtering.New(startArgs.FilterPath, ""), @@ -481,7 +481,7 @@ func NewGui( // originally we could only hide the command log permanently via the config // but now we do it via state. So we need to still support the config for the // sake of backwards compatibility. We're making use of short circuiting here - ShowExtrasWindow: cmn.UserConfig.Gui.ShowCommandLog && !config.GetAppState().HideCommandLog, + ShowExtrasWindow: cmn.UserConfig().Gui.ShowCommandLog && !config.GetAppState().HideCommandLog, Mutexes: types.Mutexes{ RefreshingFilesMutex: &deadlock.Mutex{}, RefreshingBranchesMutex: &deadlock.Mutex{}, @@ -538,13 +538,13 @@ func NewGui( // TODO: reset these controllers upon changing repos due to state changing gui.c = helperCommon - authors.SetCustomAuthors(gui.UserConfig.Gui.AuthorColors) - if gui.UserConfig.Gui.NerdFontsVersion != "" { - icons.SetNerdFontsVersion(gui.UserConfig.Gui.NerdFontsVersion) - } else if gui.UserConfig.Gui.ShowIcons { + authors.SetCustomAuthors(gui.UserConfig().Gui.AuthorColors) + if gui.UserConfig().Gui.NerdFontsVersion != "" { + icons.SetNerdFontsVersion(gui.UserConfig().Gui.NerdFontsVersion) + } else if gui.UserConfig().Gui.ShowIcons { icons.SetNerdFontsVersion("2") } - presentation.SetCustomBranches(gui.UserConfig.Gui.BranchColors) + presentation.SetCustomBranches(gui.UserConfig().Gui.BranchColors) gui.BackgroundRoutineMgr = &BackgroundRoutineMgr{gui: gui} gui.stateAccessor = &StateAccessor{gui: gui} @@ -661,13 +661,13 @@ func (gui *Gui) Run(startArgs appTypes.StartArgs) error { userConfig := gui.UserConfig gui.g.OnSearchEscape = func() error { gui.helpers.Search.Cancel(); return nil } - gui.g.SearchEscapeKey = keybindings.GetKey(userConfig.Keybinding.Universal.Return) - gui.g.NextSearchMatchKey = keybindings.GetKey(userConfig.Keybinding.Universal.NextMatch) - gui.g.PrevSearchMatchKey = keybindings.GetKey(userConfig.Keybinding.Universal.PrevMatch) + gui.g.SearchEscapeKey = keybindings.GetKey(userConfig().Keybinding.Universal.Return) + gui.g.NextSearchMatchKey = keybindings.GetKey(userConfig().Keybinding.Universal.NextMatch) + gui.g.PrevSearchMatchKey = keybindings.GetKey(userConfig().Keybinding.Universal.PrevMatch) - gui.g.ShowListFooter = userConfig.Gui.ShowListFooter + gui.g.ShowListFooter = userConfig().Gui.ShowListFooter - if userConfig.Gui.MouseEvents { + if userConfig().Gui.MouseEvents { gui.g.Mouse = true } @@ -732,7 +732,7 @@ func (gui *Gui) RunAndHandleError(startArgs appTypes.StartArgs) error { } func (gui *Gui) checkForDeprecatedEditConfigs() { - osConfig := &gui.UserConfig.OS + osConfig := &gui.UserConfig().OS deprecatedConfigs := []struct { config string oldName string @@ -932,7 +932,7 @@ func (gui *Gui) showBreakingChangesMessage() { // setColorScheme sets the color scheme for the app based on the user config func (gui *Gui) setColorScheme() { - userConfig := gui.UserConfig + userConfig := gui.UserConfig() theme.UpdateTheme(userConfig.Gui.Theme) gui.g.FgColor = theme.InactiveBorderColor diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index 83f72c074..c12d2777e 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -60,7 +60,7 @@ func (self *Gui) GetCheatsheetKeybindings() []*types.Binding { } func (self *Gui) keybindingOpts() types.KeybindingsOpts { - config := self.c.UserConfig.Keybinding + config := self.c.UserConfig().Keybinding guards := types.KeybindingGuards{ OutsideFilterMode: self.outsideFilterMode, diff --git a/pkg/gui/layout.go b/pkg/gui/layout.go index ff7923117..62c2233dd 100644 --- a/pkg/gui/layout.go +++ b/pkg/gui/layout.go @@ -260,7 +260,7 @@ func (gui *Gui) onRepoViewReset() error { } func (gui *Gui) onInitialViewsCreation() error { - if !gui.c.UserConfig.DisableStartupPopups { + if !gui.c.UserConfig().DisableStartupPopups { storedPopupVersion := gui.c.GetAppState().StartupPopupVersion if storedPopupVersion < StartupPopupVersion { gui.showIntroPopupMessage() diff --git a/pkg/gui/presentation/branches_test.go b/pkg/gui/presentation/branches_test.go index 71dc89c8a..d91784674 100644 --- a/pkg/gui/presentation/branches_test.go +++ b/pkg/gui/presentation/branches_test.go @@ -324,7 +324,7 @@ func Test_getBranchDisplayStrings(t *testing.T) { for i, s := range scenarios { icons.SetNerdFontsVersion(lo.Ternary(s.useIcons, "3", "")) - c.UserConfig.Gui.ShowDivergenceFromBaseBranch = s.showDivergenceCfg + c.UserConfig().Gui.ShowDivergenceFromBaseBranch = s.showDivergenceCfg worktrees := []*models.Worktree{} if s.checkedOutByWorktree { @@ -332,7 +332,7 @@ func Test_getBranchDisplayStrings(t *testing.T) { } t.Run(fmt.Sprintf("getBranchDisplayStrings_%d", i), func(t *testing.T) { - strings := getBranchDisplayStrings(s.branch, s.itemOperation, s.fullDescription, false, s.viewWidth, c.Tr, c.UserConfig, worktrees, time.Time{}) + strings := getBranchDisplayStrings(s.branch, s.itemOperation, s.fullDescription, false, s.viewWidth, c.Tr, c.UserConfig(), worktrees, time.Time{}) assert.Equal(t, s.expected, strings) }) } diff --git a/pkg/gui/presentation/commits.go b/pkg/gui/presentation/commits.go index 92327462f..f9bdb4eb7 100644 --- a/pkg/gui/presentation/commits.go +++ b/pkg/gui/presentation/commits.go @@ -173,7 +173,7 @@ func GetCommitListDisplayStrings( // Don't show a marker for the current branch b.Name != currentBranchName && // Don't show a marker for main branches - !lo.Contains(common.UserConfig.Git.MainBranches, b.Name) && + !lo.Contains(common.UserConfig().Git.MainBranches, b.Name) && // Don't show a marker for the head commit unless the // rebase.updateRefs config is on (hasRebaseUpdateRefsConfig || b.CommitHash != commits[0].Hash) @@ -370,7 +370,7 @@ func displayCommit( hashString := "" hashColor := getHashColor(commit, diffName, cherryPickedCommitHashSet, bisectStatus, bisectInfo) - hashLength := common.UserConfig.Gui.CommitHashLength + hashLength := common.UserConfig().Gui.CommitHashLength if hashLength >= len(commit.Hash) { hashString = hashColor.Sprint(commit.Hash) } else if hashLength > 0 { @@ -440,9 +440,9 @@ func displayCommit( mark = fmt.Sprintf("%s ", willBeRebased) } - authorLength := common.UserConfig.Gui.CommitAuthorShortLength + authorLength := common.UserConfig().Gui.CommitAuthorShortLength if fullDescription { - authorLength = common.UserConfig.Gui.CommitAuthorLongLength + authorLength = common.UserConfig().Gui.CommitAuthorLongLength } author := authors.AuthorWithLength(commit.AuthorName, authorLength) diff --git a/pkg/gui/services/custom_commands/client.go b/pkg/gui/services/custom_commands/client.go index 571445424..4e49d0cf1 100644 --- a/pkg/gui/services/custom_commands/client.go +++ b/pkg/gui/services/custom_commands/client.go @@ -26,7 +26,7 @@ func NewClient( helpers.MergeAndRebase, ) keybindingCreator := NewKeybindingCreator(c) - customCommands := c.UserConfig.CustomCommands + customCommands := c.UserConfig().CustomCommands return &Client{ customCommands: customCommands, diff --git a/pkg/gui/views.go b/pkg/gui/views.go index ec23a5590..e76ed24d3 100644 --- a/pkg/gui/views.go +++ b/pkg/gui/views.go @@ -179,7 +179,7 @@ func (gui *Gui) createAllViews() error { func (gui *Gui) configureViewProperties() { frameRunes := []rune{'─', '│', '┌', '┐', '└', '┘'} - switch gui.c.UserConfig.Gui.Border { + switch gui.c.UserConfig().Gui.Border { case "double": frameRunes = []rune{'═', '║', '╔', '╗', '╚', '╝'} case "rounded": @@ -198,15 +198,15 @@ func (gui *Gui) configureViewProperties() { } for _, view := range []*gocui.View{gui.Views.Main, gui.Views.Secondary, gui.Views.Staging, gui.Views.StagingSecondary, gui.Views.PatchBuilding, gui.Views.PatchBuildingSecondary, gui.Views.MergeConflicts} { - view.CanScrollPastBottom = gui.c.UserConfig.Gui.ScrollPastBottom + view.CanScrollPastBottom = gui.c.UserConfig().Gui.ScrollPastBottom } gui.Views.CommitDescription.FgColor = theme.GocuiDefaultTextColor - gui.Views.CommitDescription.TextArea.AutoWrap = gui.c.UserConfig.Git.Commit.AutoWrapCommitMessage - gui.Views.CommitDescription.TextArea.AutoWrapWidth = gui.c.UserConfig.Git.Commit.AutoWrapWidth + gui.Views.CommitDescription.TextArea.AutoWrap = gui.c.UserConfig().Git.Commit.AutoWrapCommitMessage + gui.Views.CommitDescription.TextArea.AutoWrapWidth = gui.c.UserConfig().Git.Commit.AutoWrapWidth - if gui.c.UserConfig.Gui.ShowPanelJumps { - jumpBindings := gui.c.UserConfig.Keybinding.Universal.JumpToBlock + if gui.c.UserConfig().Gui.ShowPanelJumps { + jumpBindings := gui.c.UserConfig().Keybinding.Universal.JumpToBlock jumpLabels := lo.Map(jumpBindings, func(binding string, _ int) string { return fmt.Sprintf("[%s]", binding) }) diff --git a/pkg/updates/updates.go b/pkg/updates/updates.go index e98a995b1..60788de8e 100644 --- a/pkg/updates/updates.go +++ b/pkg/updates/updates.go @@ -168,7 +168,7 @@ func (u *Updater) skipUpdateCheck() bool { return true } - userConfig := u.UserConfig + userConfig := u.UserConfig() if userConfig.Update.Method == "never" { u.Log.Info("Update method is set to never so we won't check for an update") return true diff --git a/pkg/utils/dummies.go b/pkg/utils/dummies.go index b84a9e38e..1a2348b7a 100644 --- a/pkg/utils/dummies.go +++ b/pkg/utils/dummies.go @@ -19,23 +19,25 @@ func NewDummyLog() *logrus.Entry { func NewDummyCommon() *common.Common { tr := i18n.EnglishTranslationSet() - return &common.Common{ - Log: NewDummyLog(), - Tr: tr, - UserConfig: config.GetDefaultConfig(), - Fs: afero.NewOsFs(), + cmn := &common.Common{ + Log: NewDummyLog(), + Tr: tr, + Fs: afero.NewOsFs(), } + cmn.SetUserConfig(config.GetDefaultConfig()) + return cmn } func NewDummyCommonWithUserConfigAndAppState(userConfig *config.UserConfig, appState *config.AppState) *common.Common { tr := i18n.EnglishTranslationSet() - return &common.Common{ - Log: NewDummyLog(), - Tr: tr, - UserConfig: userConfig, - AppState: appState, + cmn := &common.Common{ + Log: NewDummyLog(), + Tr: tr, + AppState: appState, // TODO: remove dependency on actual filesystem in tests and switch to using // in-memory for everything Fs: afero.NewOsFs(), } + cmn.SetUserConfig(userConfig) + return cmn }