diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2020-09-30 08:27:23 +1000 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2020-10-02 08:09:42 +1000 |
commit | 7b4a0f20b26d884cb756f09bc7514e57941709d4 (patch) | |
tree | 89fe1962fd3bc4b2b8a58b41eef15191839df909 /pkg/gui/submodules_panel.go | |
parent | 3b93b5dde410fbed657f04c16d6b89c80c5be861 (diff) |
add submodules context
Diffstat (limited to 'pkg/gui/submodules_panel.go')
-rw-r--r-- | pkg/gui/submodules_panel.go | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/pkg/gui/submodules_panel.go b/pkg/gui/submodules_panel.go new file mode 100644 index 000000000..e956a30f4 --- /dev/null +++ b/pkg/gui/submodules_panel.go @@ -0,0 +1,135 @@ +package gui + +import ( + "fmt" + "os" + + "github.com/fatih/color" + "github.com/jesseduffield/lazygit/pkg/commands/models" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +func (gui *Gui) getSelectedSubmodule() *models.SubmoduleConfig { + selectedLine := gui.State.Panels.Submodules.SelectedLineIdx + if selectedLine == -1 || len(gui.State.Submodules) == 0 { + return nil + } + + return gui.State.Submodules[selectedLine] +} + +func (gui *Gui) handleSubmoduleSelect() error { + var task updateTask + submodule := gui.getSelectedSubmodule() + if submodule == nil { + task = gui.createRenderStringTask("No submodules") + } else { + // TODO: we want to display the path, name, url, and a diff. We really need to be able to pipe commands together. We can always pipe commands together and just not do it asynchronously, but what if it's an expensive diff to obtain? I think that makes the most sense now though. + task = gui.createRenderStringTask( + fmt.Sprintf( + "Name: %s\nPath: %s\nUrl: %s\n", + utils.ColoredString(submodule.Name, color.FgGreen), + utils.ColoredString(submodule.Path, color.FgYellow), + utils.ColoredString(submodule.Url, color.FgCyan), + ), + ) + } + + return gui.refreshMainViews(refreshMainOpts{ + main: &viewUpdateOpts{ + title: "Submodule", + task: task, + }, + }) +} + +func (gui *Gui) handleSubmoduleEnter() error { + submodule := gui.getSelectedSubmodule() + if submodule == nil { + return nil + } + + return gui.enterSubmodule(submodule) +} + +func (gui *Gui) enterSubmodule(submodule *models.SubmoduleConfig) error { + wd, err := os.Getwd() + if err != nil { + return err + } + gui.State.RepoPathStack = append(gui.State.RepoPathStack, wd) + + return gui.dispatchSwitchToRepo(submodule.Path) +} + +// func (gui *Gui) handleAddRemote(g *gocui.Gui, v *gocui.View) error { +// return gui.prompt(gui.Tr.SLocalize("newRemoteName"), "", func(remoteName string) error { +// return gui.prompt(gui.Tr.SLocalize("newRemoteUrl"), "", func(remoteUrl string) error { +// if err := gui.GitCommand.AddRemote(remoteName, remoteUrl); err != nil { +// return err +// } +// return gui.refreshSidePanels(refreshOptions{scope: []int{REMOTES}}) +// }) +// }) +// } + +// func (gui *Gui) handleRemoveRemote(g *gocui.Gui, v *gocui.View) error { +// remote := gui.getSelectedSubmodule() +// if remote == nil { +// return nil +// } + +// return gui.ask(askOpts{ +// title: gui.Tr.SLocalize("removeRemote"), +// prompt: gui.Tr.SLocalize("removeRemotePrompt") + " '" + remote.Name + "'?", +// handleConfirm: func() error { +// if err := gui.GitCommand.RemoveRemote(remote.Name); err != nil { +// return err +// } + +// return gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, REMOTES}}) +// }, +// }) +// } + +// func (gui *Gui) handleEditRemote(g *gocui.Gui, v *gocui.View) error { +// remote := gui.getSelectedSubmodule() +// if remote == nil { +// return nil +// } + +// editNameMessage := gui.Tr.TemplateLocalize( +// "editRemoteName", +// Teml{ +// "remoteName": remote.Name, +// }, +// ) + +// return gui.prompt(editNameMessage, remote.Name, func(updatedRemoteName string) error { +// if updatedRemoteName != remote.Name { +// if err := gui.GitCommand.RenameRemote(remote.Name, updatedRemoteName); err != nil { +// return gui.surfaceError(err) +// } +// } + +// editUrlMessage := gui.Tr.TemplateLocalize( +// "editRemoteUrl", +// Teml{ +// "remoteName": updatedRemoteName, +// }, +// ) + +// urls := remote.Urls +// url := "" +// if len(urls) > 0 { +// url = urls[0] +// } + +// return gui.prompt(editUrlMessage, url, func(updatedRemoteUrl string) error { +// if err := gui.GitCommand.UpdateRemoteUrl(updatedRemoteName, updatedRemoteUrl); err != nil { +// return gui.surfaceError(err) +// } +// return gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, REMOTES}}) +// }) +// }) +// } |