diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-05 14:21:19 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-05 19:22:01 +1100 |
commit | 6d5d054c30050bc66c9c3e8697982c6c801a2a62 (patch) | |
tree | 58e08dbfadbfb0af55799e810b1f684e8e1d5527 /pkg/gui/patch_building_panel.go | |
parent | 234415537943c090a3f9c3fa3ad7889b6998f9d2 (diff) |
support line by line additions in staging and patch building contexts
Diffstat (limited to 'pkg/gui/patch_building_panel.go')
-rw-r--r-- | pkg/gui/patch_building_panel.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/pkg/gui/patch_building_panel.go b/pkg/gui/patch_building_panel.go new file mode 100644 index 000000000..cc16111b7 --- /dev/null +++ b/pkg/gui/patch_building_panel.go @@ -0,0 +1,88 @@ +package gui + +import ( + "github.com/jesseduffield/gocui" +) + +func (gui *Gui) refreshPatchBuildingPanel() error { + gui.State.SplitMainPanel = true + + // get diff from commit file that's currently selected + commitFile := gui.getSelectedCommitFile(gui.g) + if commitFile == nil { + return gui.renderString(gui.g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles")) + } + + diff, err := gui.GitCommand.ShowCommitFile(commitFile.Sha, commitFile.Name, true) + if err != nil { + return err + } + + secondaryDiff := gui.GitCommand.PatchManager.RenderPatchForFile(commitFile.Name, true, false, true) + if err != nil { + return err + } + + gui.Log.Warn(secondaryDiff) + + empty, err := gui.refreshLineByLinePanel(diff, secondaryDiff, false) + if err != nil { + return err + } + + if empty { + return gui.handleStagingEscape(gui.g, nil) + } + + return nil +} + +func (gui *Gui) handleAddSelectionToPatch(g *gocui.Gui, v *gocui.View) error { + state := gui.State.Panels.LineByLine + + // add range of lines to those set for the file + commitFile := gui.getSelectedCommitFile(gui.g) + if commitFile == nil { + return gui.renderString(gui.g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles")) + } + + gui.GitCommand.PatchManager.AddFileLineRange(commitFile.Name, state.FirstLineIdx, state.LastLineIdx) + + if err := gui.refreshCommitFilesView(); err != nil { + return err + } + + if err := gui.refreshPatchBuildingPanel(); err != nil { + return err + } + + return nil +} + +func (gui *Gui) handleRemoveSelectionFromPatch(g *gocui.Gui, v *gocui.View) error { + state := gui.State.Panels.LineByLine + + // add range of lines to those set for the file + commitFile := gui.getSelectedCommitFile(gui.g) + if commitFile == nil { + return gui.renderString(gui.g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles")) + } + + gui.GitCommand.PatchManager.RemoveFileLineRange(commitFile.Name, state.FirstLineIdx, state.LastLineIdx) + + if err := gui.refreshCommitFilesView(); err != nil { + return err + } + + if err := gui.refreshPatchBuildingPanel(); err != nil { + return err + } + + return nil +} + +func (gui *Gui) handleEscapePatchBuildingPanel(g *gocui.Gui, v *gocui.View) error { + gui.State.Panels.LineByLine = nil + + return gui.switchFocus(gui.g, nil, gui.getCommitFilesView()) +} |