summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/helpers
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-02-22 21:16:00 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-03-17 19:13:40 +1100
commitd991d74b063c8bc8edf27321bf8a98d1a51e3a54 (patch)
treecbd7b93cdffed917e203e8fc344a08df1119b6fc /pkg/gui/controllers/helpers
parent120078f0112b64b201cf038b09f0cb00b8421d72 (diff)
add commit message controller
Diffstat (limited to 'pkg/gui/controllers/helpers')
-rw-r--r--pkg/gui/controllers/helpers/gpg_helper.go74
-rw-r--r--pkg/gui/controllers/helpers/helpers.go2
2 files changed, 76 insertions, 0 deletions
diff --git a/pkg/gui/controllers/helpers/gpg_helper.go b/pkg/gui/controllers/helpers/gpg_helper.go
new file mode 100644
index 000000000..2e287c2b4
--- /dev/null
+++ b/pkg/gui/controllers/helpers/gpg_helper.go
@@ -0,0 +1,74 @@
+package helpers
+
+import (
+ "fmt"
+
+ "github.com/jesseduffield/lazygit/pkg/commands"
+ "github.com/jesseduffield/lazygit/pkg/commands/oscommands"
+ "github.com/jesseduffield/lazygit/pkg/gui/types"
+)
+
+type GpgHelper struct {
+ c *types.HelperCommon
+ os *oscommands.OSCommand
+ git *commands.GitCommand
+}
+
+func NewGpgHelper(
+ c *types.HelperCommon,
+ os *oscommands.OSCommand,
+ git *commands.GitCommand,
+) *GpgHelper {
+ return &GpgHelper{
+ c: c,
+ os: os,
+ git: git,
+ }
+}
+
+// Currently there is a bug where if we switch to a subprocess from within
+// WithWaitingStatus we get stuck there and can't return to lazygit. We could
+// fix this bug, or just stop running subprocesses from within there, given that
+// we don't need to see a loading status if we're in a subprocess.
+// TODO: we shouldn't need to use a shell here, but looks like that NewShell function contains some windows specific quoting stuff. We should centralise that.
+func (self *GpgHelper) WithGpgHandling(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error {
+ useSubprocess := self.git.Config.UsingGpg()
+ if useSubprocess {
+ success, err := self.c.RunSubprocess(self.os.Cmd.NewShell(cmdObj.ToString()))
+ if success && onSuccess != nil {
+ if err := onSuccess(); err != nil {
+ return err
+ }
+ }
+ if err := self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}); err != nil {
+ return err
+ }
+
+ return err
+ } else {
+ return self.runAndStream(cmdObj, waitingStatus, onSuccess)
+ }
+}
+
+func (self *GpgHelper) runAndStream(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error {
+ cmdObj = self.os.Cmd.NewShell(cmdObj.ToString())
+
+ return self.c.WithWaitingStatus(waitingStatus, func() error {
+ if err := cmdObj.StreamOutput().Run(); err != nil {
+ _ = self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
+ return self.c.Error(
+ fmt.Errorf(
+ self.c.Tr.GitCommandFailed, self.c.UserConfig.Keybinding.Universal.ExtrasMenu,
+ ),
+ )
+ }
+
+ if onSuccess != nil {
+ if err := onSuccess(); err != nil {
+ return err
+ }
+ }
+
+ return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
+ })
+}
diff --git a/pkg/gui/controllers/helpers/helpers.go b/pkg/gui/controllers/helpers/helpers.go
index 2a7c43ff0..c45852e29 100644
--- a/pkg/gui/controllers/helpers/helpers.go
+++ b/pkg/gui/controllers/helpers/helpers.go
@@ -11,6 +11,7 @@ type Helpers struct {
CherryPick *CherryPickHelper
Host *HostHelper
PatchBuilding *PatchBuildingHelper
+ GPG *GpgHelper
}
func NewStubHelpers() *Helpers {
@@ -25,5 +26,6 @@ func NewStubHelpers() *Helpers {
CherryPick: &CherryPickHelper{},
Host: &HostHelper{},
PatchBuilding: &PatchBuildingHelper{},
+ GPG: &GpgHelper{},
}
}