diff options
author | skanehira <sho19921005@gmail.com> | 2019-03-23 22:46:08 +0900 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-04-06 13:02:20 +1100 |
commit | c350cdba4337fa8961e5fbe16e70d73fae7ccc20 (patch) | |
tree | d0445a56f0d964f6d50f200042851ec8b3c02e7f /pkg/gui/commits_panel.go | |
parent | 1a933eaa731e910cc22e361b93cba8fd5603016f (diff) |
add feature of display diff between specific commits #397
Diffstat (limited to 'pkg/gui/commits_panel.go')
-rw-r--r-- | pkg/gui/commits_panel.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/pkg/gui/commits_panel.go b/pkg/gui/commits_panel.go index 1bd8be4a1..0d3dd6e84 100644 --- a/pkg/gui/commits_panel.go +++ b/pkg/gui/commits_panel.go @@ -39,6 +39,12 @@ func (gui *Gui) handleCommitSelect(g *gocui.Gui, v *gocui.View) error { if err := gui.focusPoint(0, gui.State.Panels.Commits.SelectedLine, len(gui.State.Commits), v); err != nil { return err } + + // if specific diff mode is on, don't show diff + if gui.State.Panels.Commits.SpecificDiffMode { + return nil + } + commitText, err := gui.GitCommand.Show(commit.Sha) if err != nil { return err @@ -56,6 +62,13 @@ func (gui *Gui) refreshCommits(g *gocui.Gui) error { if err != nil { return err } + + for _, commit := range commits { + if _, has := gui.State.DiffEntries[commit.Sha]; has { + commit.Selected = true + } + } + gui.State.Commits = commits gui.refreshSelectedLine(&gui.State.Panels.Commits.SelectedLine, len(gui.State.Commits)) @@ -448,3 +461,56 @@ func (gui *Gui) handleSwitchToCommitFilesPanel(g *gocui.Gui, v *gocui.View) erro return gui.switchFocus(g, v, gui.getCommitFilesView()) } + +func (gui *Gui) handleToggleDiffCommit(g *gocui.Gui, v *gocui.View) error { + selectLimit := 2 + + // get selected commit + commit := gui.getSelectedCommit(g) + if commit == nil { + return gui.renderString(g, "main", gui.Tr.SLocalize("NoCommitsThisBranch")) + } + + // if already selected commit delete + if _, has := gui.State.DiffEntries[commit.Sha]; has { + delete(gui.State.DiffEntries, commit.Sha) + gui.setDiffMode() + } else { + if len(gui.State.DiffEntries) == selectLimit { + return gui.createErrorPanel(gui.g, "you have already selected two commit, please deselect one of two") + } + gui.State.DiffEntries[commit.Sha] = commit + gui.setDiffMode() + } + + // if selected tow commits, display diff between + if len(gui.State.DiffEntries) == selectLimit { + var entries []string + for _, entry := range gui.State.DiffEntries { + entries = append(entries, entry.Sha) + } + + commitText, err := gui.GitCommand.DiffCommits(entries[0], entries[1]) + + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + return gui.renderString(g, "main", commitText) + } + + return nil +} + +func (gui *Gui) setDiffMode() { + v := gui.getCommitsView() + if len(gui.State.DiffEntries) != 0 { + gui.State.Panels.Commits.SpecificDiffMode = true + v.Title = gui.Tr.SLocalize("CommitsDiffTitle") + } else { + gui.State.Panels.Commits.SpecificDiffMode = false + v.Title = gui.Tr.SLocalize("CommitsTitle") + } + + gui.refreshCommits(gui.g) +} |