summaryrefslogtreecommitdiffstats
path: root/pkg/gui/patch_building_panel.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2019-11-05 14:21:19 +1100
committerJesse Duffield <jessedduffield@gmail.com>2019-11-05 19:22:01 +1100
commit6d5d054c30050bc66c9c3e8697982c6c801a2a62 (patch)
tree58e08dbfadbfb0af55799e810b1f684e8e1d5527 /pkg/gui/patch_building_panel.go
parent234415537943c090a3f9c3fa3ad7889b6998f9d2 (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.go88
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())
+}