From 4bf11eae4b290e9763a38a39fa3c913f2285002f Mon Sep 17 00:00:00 2001 From: Stefan Haller Date: Fri, 30 Aug 2024 14:25:23 +0200 Subject: [PATCH] Add free-standing function IsWorkingTreeDirty The long story: I want to call this function from RefsHelper; however, I can't make WorkingTreeHelper a field of RefsHelper because RefsHelper is already a field in WorkingTreeHelper, so that would be a circular dependency. The shorter story: there's really little reason to have to instantiate a helper object in order to call a simple function like this. Long term I would like to get to a state where a lot more of these helper functions are free-standing, and you pass in the data they need. While at it, simplify the implementation of AnyStagedFiles and AnyTrackedFiles to one-liners. --- .../helpers/working_tree_helper.go | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pkg/gui/controllers/helpers/working_tree_helper.go b/pkg/gui/controllers/helpers/working_tree_helper.go index a95bdb98e..4d0d1e9da 100644 --- a/pkg/gui/controllers/helpers/working_tree_helper.go +++ b/pkg/gui/controllers/helpers/working_tree_helper.go @@ -10,6 +10,7 @@ import ( "github.com/jesseduffield/lazygit/pkg/config" "github.com/jesseduffield/lazygit/pkg/gui/context" "github.com/jesseduffield/lazygit/pkg/gui/types" + "github.com/samber/lo" ) type WorkingTreeHelper struct { @@ -34,25 +35,27 @@ func NewWorkingTreeHelper( } func (self *WorkingTreeHelper) AnyStagedFiles() bool { - for _, file := range self.c.Model().Files { - if file.HasStagedChanges { - return true - } - } - return false + return AnyStagedFiles(self.c.Model().Files) +} + +func AnyStagedFiles(files []*models.File) bool { + return lo.SomeBy(files, func(f *models.File) bool { return f.HasStagedChanges }) } func (self *WorkingTreeHelper) AnyTrackedFiles() bool { - for _, file := range self.c.Model().Files { - if file.Tracked { - return true - } - } - return false + return AnyTrackedFiles(self.c.Model().Files) +} + +func AnyTrackedFiles(files []*models.File) bool { + return lo.SomeBy(files, func(f *models.File) bool { return f.Tracked }) } func (self *WorkingTreeHelper) IsWorkingTreeDirty() bool { - return self.AnyStagedFiles() || self.AnyTrackedFiles() + return IsWorkingTreeDirty(self.c.Model().Files) +} + +func IsWorkingTreeDirty(files []*models.File) bool { + return AnyStagedFiles(files) || AnyTrackedFiles(files) } func (self *WorkingTreeHelper) FileForSubmodule(submodule *models.SubmoduleConfig) *models.File {