mirror of
				https://github.com/jesseduffield/lazygit.git
				synced 2025-10-30 23:57:43 +02:00 
			
		
		
		
	Extract some functions from CommitFilesController to a new CommitFilesHelper
This commit is contained in:
		| @@ -110,6 +110,7 @@ func (gui *Gui) resetHelpersAndControllers() { | ||||
| 		FixupHelper:     helpers.NewFixupHelper(helperCommon), | ||||
| 		Commits:         commitsHelper, | ||||
| 		SuspendResume:   helpers.NewSuspendResumeHelper(helperCommon), | ||||
| 		CommitFiles:     helpers.NewCommitFilesHelper(helperCommon, patchBuildingHelper), | ||||
| 		Snake:           helpers.NewSnakeHelper(helperCommon), | ||||
| 		Diff:            diffHelper, | ||||
| 		Repos:           reposHelper, | ||||
|   | ||||
| @@ -386,7 +386,7 @@ func (self *CommitFilesController) toggleForPatch(selectedNodes []*filetree.Comm | ||||
| 	toggle := func() error { | ||||
| 		return self.c.WithWaitingStatus(self.c.Tr.UpdatingPatch, func(gocui.Task) error { | ||||
| 			if !self.c.Git().Patch.PatchBuilder.Active() { | ||||
| 				if err := self.startPatchBuilder(); err != nil { | ||||
| 				if err := self.c.Helpers().CommitFiles.StartPatchBuilder(); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} | ||||
| @@ -425,7 +425,7 @@ func (self *CommitFilesController) toggleForPatch(selectedNodes []*filetree.Comm | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
| 	from, to, reverse := self.currentFromToReverseForPatchBuilding() | ||||
| 	from, to, reverse := self.c.Helpers().CommitFiles.CurrentFromToReverseForPatchBuilding() | ||||
| 	mustDiscardPatch := self.c.Git().Patch.PatchBuilder.Active() && self.c.Git().Patch.PatchBuilder.NewPatchRequired(from, to, reverse) | ||||
| 	return self.c.ConfirmIf(mustDiscardPatch, types.ConfirmOpts{ | ||||
| 		Title:  self.c.Tr.DiscardPatch, | ||||
| @@ -445,68 +445,8 @@ func (self *CommitFilesController) toggleAllForPatch(_ *filetree.CommitFileNode) | ||||
| 	return self.toggleForPatch([]*filetree.CommitFileNode{root}) | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesController) startPatchBuilder() error { | ||||
| 	commitFilesContext := self.context() | ||||
|  | ||||
| 	canRebase := commitFilesContext.GetCanRebase() | ||||
| 	from, to, reverse := self.currentFromToReverseForPatchBuilding() | ||||
|  | ||||
| 	self.c.Git().Patch.PatchBuilder.Start(from, to, reverse, canRebase) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesController) currentFromToReverseForPatchBuilding() (string, string, bool) { | ||||
| 	commitFilesContext := self.context() | ||||
|  | ||||
| 	from, to := commitFilesContext.GetFromAndToForDiff() | ||||
| 	from, reverse := self.c.Modes().Diffing.GetFromAndReverseArgsForDiff(from) | ||||
| 	return from, to, reverse | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesController) enter(node *filetree.CommitFileNode) error { | ||||
| 	return self.enterCommitFile(node, types.OnFocusOpts{ClickedWindowName: "", ClickedViewLineIdx: -1, ClickedViewRealLineIdx: -1}) | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesController) enterCommitFile(node *filetree.CommitFileNode, opts types.OnFocusOpts) error { | ||||
| 	if node.File == nil { | ||||
| 		return self.handleToggleCommitFileDirCollapsed(node) | ||||
| 	} | ||||
|  | ||||
| 	if self.c.UserConfig().Git.DiffContextSize == 0 { | ||||
| 		return fmt.Errorf(self.c.Tr.Actions.NotEnoughContextForCustomPatch, | ||||
| 			keybindings.Label(self.c.UserConfig().Keybinding.Universal.IncreaseContextInDiffView)) | ||||
| 	} | ||||
|  | ||||
| 	from, to, reverse := self.currentFromToReverseForPatchBuilding() | ||||
| 	mustDiscardPatch := self.c.Git().Patch.PatchBuilder.Active() && self.c.Git().Patch.PatchBuilder.NewPatchRequired(from, to, reverse) | ||||
| 	return self.c.ConfirmIf(mustDiscardPatch, types.ConfirmOpts{ | ||||
| 		Title:  self.c.Tr.DiscardPatch, | ||||
| 		Prompt: self.c.Tr.DiscardPatchConfirm, | ||||
| 		HandleConfirm: func() error { | ||||
| 			if mustDiscardPatch { | ||||
| 				self.c.Git().Patch.PatchBuilder.Reset() | ||||
| 			} | ||||
|  | ||||
| 			if !self.c.Git().Patch.PatchBuilder.Active() { | ||||
| 				if err := self.startPatchBuilder(); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			self.c.Context().Push(self.c.Contexts().CustomPatchBuilder, opts) | ||||
| 			self.c.Helpers().PatchBuilding.ShowHunkStagingHint() | ||||
|  | ||||
| 			return nil | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesController) handleToggleCommitFileDirCollapsed(node *filetree.CommitFileNode) error { | ||||
| 	self.context().CommitFileTreeViewModel.ToggleCollapsed(node.GetInternalPath()) | ||||
|  | ||||
| 	self.c.PostRefreshUpdate(self.context()) | ||||
|  | ||||
| 	return nil | ||||
| 	return self.c.Helpers().CommitFiles.EnterCommitFile(node, types.OnFocusOpts{ClickedWindowName: "", ClickedViewLineIdx: -1, ClickedViewRealLineIdx: -1}) | ||||
| } | ||||
|  | ||||
| // NOTE: this is very similar to handleToggleFileTreeView, could be DRY'd with generics | ||||
| @@ -563,7 +503,7 @@ func (self *CommitFilesController) GetOnClickFocusedMainView() func(mainViewName | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		return self.enterCommitFile(node, types.OnFocusOpts{ClickedWindowName: "main", ClickedViewLineIdx: line, ClickedViewRealLineIdx: line}) | ||||
| 		return self.c.Helpers().CommitFiles.EnterCommitFile(node, types.OnFocusOpts{ClickedWindowName: "main", ClickedViewLineIdx: line, ClickedViewRealLineIdx: line}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										86
									
								
								pkg/gui/controllers/helpers/commit_files_helper.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								pkg/gui/controllers/helpers/commit_files_helper.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| package helpers | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
|  | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/context" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/filetree" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/keybindings" | ||||
| 	"github.com/jesseduffield/lazygit/pkg/gui/types" | ||||
| ) | ||||
|  | ||||
| type CommitFilesHelper struct { | ||||
| 	c *HelperCommon | ||||
|  | ||||
| 	patchBuildingHelper *PatchBuildingHelper | ||||
| } | ||||
|  | ||||
| func NewCommitFilesHelper(c *HelperCommon, patchBuildingHelper *PatchBuildingHelper) *CommitFilesHelper { | ||||
| 	return &CommitFilesHelper{ | ||||
| 		c:                   c, | ||||
| 		patchBuildingHelper: patchBuildingHelper, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesHelper) EnterCommitFile(node *filetree.CommitFileNode, opts types.OnFocusOpts) error { | ||||
| 	if node.File == nil { | ||||
| 		self.handleToggleCommitFileDirCollapsed(node) | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if self.c.UserConfig().Git.DiffContextSize == 0 { | ||||
| 		return fmt.Errorf(self.c.Tr.Actions.NotEnoughContextToStage, | ||||
| 			keybindings.Label(self.c.UserConfig().Keybinding.Universal.IncreaseContextInDiffView)) | ||||
| 	} | ||||
|  | ||||
| 	from, to, reverse := self.CurrentFromToReverseForPatchBuilding() | ||||
| 	mustDiscardPatch := self.c.Git().Patch.PatchBuilder.Active() && self.c.Git().Patch.PatchBuilder.NewPatchRequired(from, to, reverse) | ||||
| 	return self.c.ConfirmIf(mustDiscardPatch, types.ConfirmOpts{ | ||||
| 		Title:  self.c.Tr.DiscardPatch, | ||||
| 		Prompt: self.c.Tr.DiscardPatchConfirm, | ||||
| 		HandleConfirm: func() error { | ||||
| 			if mustDiscardPatch { | ||||
| 				self.c.Git().Patch.PatchBuilder.Reset() | ||||
| 			} | ||||
|  | ||||
| 			if !self.c.Git().Patch.PatchBuilder.Active() { | ||||
| 				if err := self.StartPatchBuilder(); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			self.c.Context().Push(self.c.Contexts().CustomPatchBuilder, opts) | ||||
| 			self.patchBuildingHelper.ShowHunkStagingHint() | ||||
|  | ||||
| 			return nil | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesHelper) context() *context.CommitFilesContext { | ||||
| 	return self.c.Contexts().CommitFiles | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesHelper) handleToggleCommitFileDirCollapsed(node *filetree.CommitFileNode) { | ||||
| 	self.context().CommitFileTreeViewModel.ToggleCollapsed(node.GetInternalPath()) | ||||
|  | ||||
| 	self.c.PostRefreshUpdate(self.context()) | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesHelper) StartPatchBuilder() error { | ||||
| 	commitFilesContext := self.context() | ||||
|  | ||||
| 	canRebase := commitFilesContext.GetCanRebase() | ||||
| 	from, to, reverse := self.CurrentFromToReverseForPatchBuilding() | ||||
|  | ||||
| 	self.c.Git().Patch.PatchBuilder.Start(from, to, reverse, canRebase) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (self *CommitFilesHelper) CurrentFromToReverseForPatchBuilding() (string, string, bool) { | ||||
| 	commitFilesContext := self.context() | ||||
|  | ||||
| 	from, to := commitFilesContext.GetFromAndToForDiff() | ||||
| 	from, reverse := self.c.Modes().Diffing.GetFromAndReverseArgsForDiff(from) | ||||
| 	return from, to, reverse | ||||
| } | ||||
| @@ -36,6 +36,7 @@ type Helpers struct { | ||||
| 	FixupHelper    *FixupHelper | ||||
| 	Commits        *CommitsHelper | ||||
| 	SuspendResume  *SuspendResumeHelper | ||||
| 	CommitFiles    *CommitFilesHelper | ||||
| 	Snake          *SnakeHelper | ||||
| 	// lives in context package because our contexts need it to render to main | ||||
| 	Diff              *DiffHelper | ||||
| @@ -74,6 +75,7 @@ func NewStubHelpers() *Helpers { | ||||
| 		AmendHelper:       &AmendHelper{}, | ||||
| 		FixupHelper:       &FixupHelper{}, | ||||
| 		Commits:           &CommitsHelper{}, | ||||
| 		CommitFiles:       &CommitFilesHelper{}, | ||||
| 		Snake:             &SnakeHelper{}, | ||||
| 		Diff:              &DiffHelper{}, | ||||
| 		Repos:             &ReposHelper{}, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user