summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-11-05 18:10:47 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-11-05 19:22:01 +1100
commitcd3874ffb7826099574f2661475ff24298d16a64 (patch)
tree2503e86c6ab46f227ff4ca65503c57cad00f1289 /pkg
parent10fe88a2cf79d525f4dfa767b2d0fab1793127e8 (diff)
don't let patch manager ever be nil
Diffstat (limited to 'pkg')
-rw-r--r--pkg/commands/git.go8
-rw-r--r--pkg/commands/patch_manager.go32
-rw-r--r--pkg/commands/patch_rebases.go8
-rw-r--r--pkg/gui/commit_files_panel.go20
-rw-r--r--pkg/gui/patch_building_panel.go4
-rw-r--r--pkg/gui/patch_options_panel.go9
6 files changed, 48 insertions, 33 deletions
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index 42c1749af..1448b37cb 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -109,7 +109,7 @@ func NewGitCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.Localizer,
return nil, err
}
- return &GitCommand{
+ gitCommand := &GitCommand{
Log: log,
OSCommand: osCommand,
Tr: tr,
@@ -120,7 +120,11 @@ func NewGitCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.Localizer,
getLocalGitConfig: gitconfig.Local,
removeFile: os.RemoveAll,
DotGitDir: dotGitDir,
- }, nil
+ }
+
+ gitCommand.PatchManager = NewPatchManager(log, gitCommand.ApplyPatch)
+
+ return gitCommand, nil
}
func findDotGitDir(stat func(string) (os.FileInfo, error), readFile func(filename string) ([]byte, error)) (string, error) {
diff --git a/pkg/commands/patch_manager.go b/pkg/commands/patch_manager.go
index 1c747c33d..4abf737a0 100644
--- a/pkg/commands/patch_manager.go
+++ b/pkg/commands/patch_manager.go
@@ -25,21 +25,23 @@ type PatchManager struct {
}
// NewPatchManager returns a new PatchModifier
-func NewPatchManager(log *logrus.Entry, applyPatch applyPatchFunc, commitSha string, diffMap map[string]string) *PatchManager {
- infoMap := map[string]*fileInfo{}
+func NewPatchManager(log *logrus.Entry, applyPatch applyPatchFunc) *PatchManager {
+ return &PatchManager{
+ Log: log,
+ ApplyPatch: applyPatch,
+ }
+}
+
+// NewPatchManager returns a new PatchModifier
+func (p *PatchManager) Start(commitSha string, diffMap map[string]string) {
+ p.CommitSha = commitSha
+ p.fileInfoMap = map[string]*fileInfo{}
for filename, diff := range diffMap {
- infoMap[filename] = &fileInfo{
+ p.fileInfoMap[filename] = &fileInfo{
mode: UNSELECTED,
diff: diff,
}
}
-
- return &PatchManager{
- Log: log,
- fileInfoMap: infoMap,
- CommitSha: commitSha,
- ApplyPatch: applyPatch,
- }
}
func (p *PatchManager) AddFile(filename string) {
@@ -200,3 +202,13 @@ func (p *PatchManager) ApplyPatches(reverse bool) error {
return nil
}
+
+// clears the patch
+func (p *PatchManager) Reset() {
+ p.CommitSha = ""
+ p.fileInfoMap = map[string]*fileInfo{}
+}
+
+func (p *PatchManager) IsEmpty() bool {
+ return p != nil && p.CommitSha == "" || len(p.fileInfoMap) == 0
+}
diff --git a/pkg/commands/patch_rebases.go b/pkg/commands/patch_rebases.go
index f0dadbc16..19116e071 100644
--- a/pkg/commands/patch_rebases.go
+++ b/pkg/commands/patch_rebases.go
@@ -22,7 +22,7 @@ func (c *GitCommand) DeletePatchesFromCommit(commits []*Commit, commitIndex int,
}
c.onSuccessfulContinue = func() error {
- c.PatchManager = nil
+ c.PatchManager.Reset()
return nil
}
@@ -50,7 +50,7 @@ func (c *GitCommand) MovePatchToSelectedCommit(commits []*Commit, sourceCommitId
}
c.onSuccessfulContinue = func() error {
- c.PatchManager = nil
+ c.PatchManager.Reset()
return nil
}
@@ -121,7 +121,7 @@ func (c *GitCommand) MovePatchToSelectedCommit(commits []*Commit, sourceCommitId
}
c.onSuccessfulContinue = func() error {
- c.PatchManager = nil
+ c.PatchManager.Reset()
return nil
}
@@ -161,7 +161,7 @@ func (c *GitCommand) PullPatchIntoIndex(commits []*Commit, commitIdx int, p *Pat
return err
}
- c.PatchManager = nil
+ c.PatchManager.Reset()
return nil
}
diff --git a/pkg/gui/commit_files_panel.go b/pkg/gui/commit_files_panel.go
index 0141e25b8..c0cab24cb 100644
--- a/pkg/gui/commit_files_panel.go
+++ b/pkg/gui/commit_files_panel.go
@@ -136,8 +136,8 @@ func (gui *Gui) handleToggleFileForPatch(g *gocui.Gui, v *gocui.View) error {
}
toggleTheFile := func() error {
- if gui.GitCommand.PatchManager == nil {
- if err := gui.createPatchManager(); err != nil {
+ if gui.GitCommand.PatchManager.IsEmpty() {
+ if err := gui.startPatchManager(); err != nil {
return err
}
}
@@ -147,9 +147,9 @@ func (gui *Gui) handleToggleFileForPatch(g *gocui.Gui, v *gocui.View) error {
return gui.refreshCommitFilesView()
}
- if gui.GitCommand.PatchManager != nil && gui.GitCommand.PatchManager.CommitSha != commitFile.Sha {
+ if !gui.GitCommand.PatchManager.IsEmpty() && gui.GitCommand.PatchManager.CommitSha != commitFile.Sha {
return gui.createConfirmationPanel(g, v, true, gui.Tr.SLocalize("DiscardPatch"), gui.Tr.SLocalize("DiscardPatchConfirm"), func(g *gocui.Gui, v *gocui.View) error {
- gui.GitCommand.PatchManager = nil
+ gui.GitCommand.PatchManager.Reset()
return toggleTheFile()
}, nil)
}
@@ -157,7 +157,7 @@ func (gui *Gui) handleToggleFileForPatch(g *gocui.Gui, v *gocui.View) error {
return toggleTheFile()
}
-func (gui *Gui) createPatchManager() error {
+func (gui *Gui) startPatchManager() error {
diffMap := map[string]string{}
for _, commitFile := range gui.State.CommitFiles {
commitText, err := gui.GitCommand.ShowCommitFile(commitFile.Sha, commitFile.Name, true)
@@ -172,7 +172,7 @@ func (gui *Gui) createPatchManager() error {
return errors.New("No commit selected")
}
- gui.GitCommand.PatchManager = commands.NewPatchManager(gui.Log, gui.GitCommand.ApplyPatch, commit.Sha, diffMap)
+ gui.GitCommand.PatchManager.Start(commit.Sha, diffMap)
return nil
}
@@ -187,8 +187,8 @@ func (gui *Gui) handleEnterCommitFile(g *gocui.Gui, v *gocui.View) error {
}
enterTheFile := func() error {
- if gui.GitCommand.PatchManager == nil {
- if err := gui.createPatchManager(); err != nil {
+ if gui.GitCommand.PatchManager.IsEmpty() {
+ if err := gui.startPatchManager(); err != nil {
return err
}
}
@@ -202,9 +202,9 @@ func (gui *Gui) handleEnterCommitFile(g *gocui.Gui, v *gocui.View) error {
return gui.refreshPatchBuildingPanel()
}
- if gui.GitCommand.PatchManager != nil && gui.GitCommand.PatchManager.CommitSha != commitFile.Sha {
+ if !gui.GitCommand.PatchManager.IsEmpty() && gui.GitCommand.PatchManager.CommitSha != commitFile.Sha {
return gui.createConfirmationPanel(g, v, false, gui.Tr.SLocalize("DiscardPatch"), gui.Tr.SLocalize("DiscardPatchConfirm"), func(g *gocui.Gui, v *gocui.View) error {
- gui.GitCommand.PatchManager = nil
+ gui.GitCommand.PatchManager.Reset()
return enterTheFile()
}, nil)
}
diff --git a/pkg/gui/patch_building_panel.go b/pkg/gui/patch_building_panel.go
index b32253557..26196f6d1 100644
--- a/pkg/gui/patch_building_panel.go
+++ b/pkg/gui/patch_building_panel.go
@@ -5,7 +5,7 @@ import (
)
func (gui *Gui) refreshPatchBuildingPanel() error {
- if gui.GitCommand.PatchManager == nil {
+ if gui.GitCommand.PatchManager.IsEmpty() {
return gui.handleEscapePatchBuildingPanel(gui.g, nil)
}
@@ -91,7 +91,7 @@ func (gui *Gui) handleEscapePatchBuildingPanel(g *gocui.Gui, v *gocui.View) erro
}
func (gui *Gui) refreshSecondaryPatchPanel() error {
- if gui.GitCommand.PatchManager != nil {
+ if !gui.GitCommand.PatchManager.IsEmpty() {
gui.State.SplitMainPanel = true
secondaryView := gui.getSecondaryView()
secondaryView.Highlight = true
diff --git a/pkg/gui/patch_options_panel.go b/pkg/gui/patch_options_panel.go
index a966040e2..748f70365 100644
--- a/pkg/gui/patch_options_panel.go
+++ b/pkg/gui/patch_options_panel.go
@@ -17,15 +17,14 @@ func (o *patchMenuOption) GetDisplayStrings(isFocused bool) []string {
}
func (gui *Gui) handleCreatePatchOptionsMenu(g *gocui.Gui, v *gocui.View) error {
- m := gui.GitCommand.PatchManager
- if m == nil {
+ if gui.GitCommand.PatchManager.IsEmpty() {
return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("NoPatchError"))
}
options := []*patchMenuOption{
{displayName: fmt.Sprintf("remove patch from original commit (%s)", gui.GitCommand.PatchManager.CommitSha), function: gui.handleDeletePatchFromCommit},
{displayName: "pull patch out into index", function: gui.handlePullPatchIntoWorkingTree},
- {displayName: "reset patch", function: gui.handleClearPatch},
+ {displayName: "reset patch", function: gui.handleResetPatch},
}
selectedCommit := gui.getSelectedCommit(gui.g)
@@ -122,7 +121,7 @@ func (gui *Gui) handlePullPatchIntoWorkingTree() error {
})
}
-func (gui *Gui) handleClearPatch() error {
- gui.GitCommand.PatchManager = nil
+func (gui *Gui) handleResetPatch() error {
+ gui.GitCommand.PatchManager.Reset()
return gui.refreshCommitFilesView()
}