diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2022-02-22 21:16:00 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2022-03-17 19:13:40 +1100 |
commit | d991d74b063c8bc8edf27321bf8a98d1a51e3a54 (patch) | |
tree | cbd7b93cdffed917e203e8fc344a08df1119b6fc /pkg/gui/controllers/helpers | |
parent | 120078f0112b64b201cf038b09f0cb00b8421d72 (diff) |
add commit message controller
Diffstat (limited to 'pkg/gui/controllers/helpers')
-rw-r--r-- | pkg/gui/controllers/helpers/gpg_helper.go | 74 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/helpers.go | 2 |
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{}, } } |