fix lint errors

This commit is contained in:
Jesse Duffield 2020-11-16 20:38:26 +11:00
parent 6faed08d9d
commit 682db77401
28 changed files with 151 additions and 208 deletions

View file

@ -185,9 +185,9 @@ func (c *CommitListBuilder) GetCommits(opts GetCommitsOptions) ([]*models.Commit
// getRebasingCommits obtains the commits that we're in the process of rebasing // getRebasingCommits obtains the commits that we're in the process of rebasing
func (c *CommitListBuilder) getRebasingCommits(rebaseMode string) ([]*models.Commit, error) { func (c *CommitListBuilder) getRebasingCommits(rebaseMode string) ([]*models.Commit, error) {
switch rebaseMode { switch rebaseMode {
case "normal": case REBASE_MODE_MERGING:
return c.getNormalRebasingCommits() return c.getNormalRebasingCommits()
case "interactive": case REBASE_MODE_INTERACTIVE:
return c.getInteractiveRebasingCommits() return c.getInteractiveRebasingCommits()
default: default:
return nil, nil return nil, nil

View file

@ -1,7 +1,6 @@
package commands package commands
import ( import (
"fmt"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
@ -26,8 +25,7 @@ func (c *GitCommand) GetStashEntries(filterPath string) []*models.StashEntry {
return c.getUnfilteredStashEntries() return c.getUnfilteredStashEntries()
} }
unescaped := fmt.Sprintf("git stash list --name-only") rawString, err := c.OSCommand.RunCommandWithOutput("git stash list --name-only")
rawString, err := c.OSCommand.RunCommandWithOutput(unescaped)
if err != nil { if err != nil {
return c.getUnfilteredStashEntries() return c.getUnfilteredStashEntries()
} }

View file

@ -471,12 +471,13 @@ func RunLineOutputCmd(cmd *exec.Cmd, onLine func(line string) (bool, error)) err
return err return err
} }
if stop { if stop {
cmd.Process.Kill() _ = cmd.Process.Kill()
break break
} }
} }
cmd.Wait() _ = cmd.Wait()
return nil return nil
} }

View file

@ -149,7 +149,7 @@ func (c *GitCommand) PullPatchIntoIndex(commits []*models.Commit, commitIdx int,
} }
if err := p.ApplyPatches(true); err != nil { if err := p.ApplyPatches(true); err != nil {
if c.WorkingTreeState() == "rebasing" { if c.WorkingTreeState() == REBASE_MODE_REBASING {
if err := c.GenericMergeOrRebaseAction("rebase", "abort"); err != nil { if err := c.GenericMergeOrRebaseAction("rebase", "abort"); err != nil {
return err return err
} }
@ -169,7 +169,7 @@ func (c *GitCommand) PullPatchIntoIndex(commits []*models.Commit, commitIdx int,
c.onSuccessfulContinue = func() error { c.onSuccessfulContinue = func() error {
// add patches to index // add patches to index
if err := p.ApplyPatches(false); err != nil { if err := p.ApplyPatches(false); err != nil {
if c.WorkingTreeState() == "rebasing" { if c.WorkingTreeState() == REBASE_MODE_REBASING {
if err := c.GenericMergeOrRebaseAction("rebase", "abort"); err != nil { if err := c.GenericMergeOrRebaseAction("rebase", "abort"); err != nil {
return err return err
} }

View file

@ -6,6 +6,13 @@ import (
gogit "github.com/jesseduffield/go-git/v5" gogit "github.com/jesseduffield/go-git/v5"
) )
const (
REBASE_MODE_NORMAL = "normal"
REBASE_MODE_INTERACTIVE = "interactive"
REBASE_MODE_REBASING = "rebasing"
REBASE_MODE_MERGING = "merging"
)
// RebaseMode returns "" for non-rebase mode, "normal" for normal rebase // RebaseMode returns "" for non-rebase mode, "normal" for normal rebase
// and "interactive" for interactive rebase // and "interactive" for interactive rebase
func (c *GitCommand) RebaseMode() (string, error) { func (c *GitCommand) RebaseMode() (string, error) {
@ -14,11 +21,11 @@ func (c *GitCommand) RebaseMode() (string, error) {
return "", err return "", err
} }
if exists { if exists {
return "normal", nil return REBASE_MODE_NORMAL, nil
} }
exists, err = c.OSCommand.FileExists(filepath.Join(c.DotGitDir, "rebase-merge")) exists, err = c.OSCommand.FileExists(filepath.Join(c.DotGitDir, "rebase-merge"))
if exists { if exists {
return "interactive", err return REBASE_MODE_INTERACTIVE, err
} else { } else {
return "", err return "", err
} }
@ -27,13 +34,13 @@ func (c *GitCommand) RebaseMode() (string, error) {
func (c *GitCommand) WorkingTreeState() string { func (c *GitCommand) WorkingTreeState() string {
rebaseMode, _ := c.RebaseMode() rebaseMode, _ := c.RebaseMode()
if rebaseMode != "" { if rebaseMode != "" {
return "rebasing" return REBASE_MODE_REBASING
} }
merging, _ := c.IsInMergeState() merging, _ := c.IsInMergeState()
if merging { if merging {
return "merging" return REBASE_MODE_MERGING
} }
return "normal" return REBASE_MODE_NORMAL
} }
// IsInMergeState states whether we are still mid-merge // IsInMergeState states whether we are still mid-merge

View file

@ -182,6 +182,7 @@ func TestArrangeWindows(t *testing.T) {
} }
for _, s := range scenarios { for _, s := range scenarios {
s := s
t.Run(s.testName, func(t *testing.T) { t.Run(s.testName, func(t *testing.T) {
s.test(ArrangeWindows(s.root, s.x0, s.y0, s.width, s.height)) s.test(ArrangeWindows(s.root, s.x0, s.y0, s.width, s.height))
}) })

View file

@ -100,7 +100,7 @@ func (gui *Gui) handleCreatePullRequestPress(g *gocui.Gui, v *gocui.View) error
} }
func (gui *Gui) handleGitFetch(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleGitFetch(g *gocui.Gui, v *gocui.View) error {
if err := gui.createLoaderPanel(v, gui.Tr.FetchWait); err != nil { if err := gui.createLoaderPanel(gui.Tr.FetchWait); err != nil {
return err return err
} }
go utils.Safe(func() { go utils.Safe(func() {
@ -386,7 +386,7 @@ func (gui *Gui) handleFastForward(g *gocui.Gui, v *gocui.View) error {
}, },
) )
go utils.Safe(func() { go utils.Safe(func() {
_ = gui.createLoaderPanel(v, message) _ = gui.createLoaderPanel(message)
if gui.State.Panels.Branches.SelectedLineIdx == 0 { if gui.State.Panels.Branches.SelectedLineIdx == 0 {
_ = gui.pullWithMode("ff-only", PullFilesOptions{}) _ = gui.pullWithMode("ff-only", PullFilesOptions{})

View file

@ -445,19 +445,6 @@ func (gui *Gui) handleViewCommitFiles() error {
return gui.switchToCommitFilesContext(commit.Sha, true, gui.Contexts.BranchCommits.Context, "commits") return gui.switchToCommitFilesContext(commit.Sha, true, gui.Contexts.BranchCommits.Context, "commits")
} }
func (gui *Gui) hasCommit(commits []*models.Commit, target string) (int, bool) {
for idx, commit := range commits {
if commit.Sha == target {
return idx, true
}
}
return -1, false
}
func (gui *Gui) unchooseCommit(commits []*models.Commit, i int) []*models.Commit {
return append(commits[:i], commits[i+1:]...)
}
func (gui *Gui) handleCreateFixupCommit(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleCreateFixupCommit(g *gocui.Gui, v *gocui.View) error {
if ok, err := gui.validateNotInFilterMode(); err != nil || !ok { if ok, err := gui.validateNotInFilterMode(); err != nil || !ok {
return err return err

View file

@ -37,7 +37,7 @@ type askOpts struct {
handlersManageFocus bool handlersManageFocus bool
} }
func (gui *Gui) createLoaderPanel(currentView *gocui.View, prompt string) error { func (gui *Gui) createLoaderPanel(prompt string) error {
return gui.createPopupPanel(createPopupPanelOpts{ return gui.createPopupPanel(createPopupPanelOpts{
prompt: prompt, prompt: prompt,
hasLoader: true, hasLoader: true,
@ -160,7 +160,7 @@ func (gui *Gui) prepareConfirmationPanel(title, prompt string, hasLoader bool) (
x0, y0, x1, y1 := gui.getConfirmationPanelDimensions(true, prompt) x0, y0, x1, y1 := gui.getConfirmationPanelDimensions(true, prompt)
confirmationView, err := gui.g.SetView("confirmation", x0, y0, x1, y1, 0) confirmationView, err := gui.g.SetView("confirmation", x0, y0, x1, y1, 0)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return nil, err return nil, err
} }
confirmationView.HasLoader = hasLoader confirmationView.HasLoader = hasLoader

View file

@ -280,9 +280,7 @@ func (gui *Gui) contextTree() ContextTree {
}, },
Merging: SimpleContextNode{ Merging: SimpleContextNode{
Context: BasicContext{ Context: BasicContext{
OnFocus: func() error { OnFocus: gui.refreshMergePanel,
return gui.refreshMergePanel()
},
Kind: MAIN_CONTEXT, Kind: MAIN_CONTEXT,
ViewName: "main", ViewName: "main",
Key: MAIN_MERGING_CONTEXT_KEY, Key: MAIN_MERGING_CONTEXT_KEY,
@ -291,7 +289,7 @@ func (gui *Gui) contextTree() ContextTree {
}, },
Credentials: SimpleContextNode{ Credentials: SimpleContextNode{
Context: BasicContext{ Context: BasicContext{
OnFocus: func() error { return gui.handleCredentialsViewFocused() }, OnFocus: gui.handleCredentialsViewFocused,
Kind: PERSISTENT_POPUP, Kind: PERSISTENT_POPUP,
ViewName: "credentials", ViewName: "credentials",
Key: CREDENTIALS_CONTEXT_KEY, Key: CREDENTIALS_CONTEXT_KEY,
@ -307,7 +305,7 @@ func (gui *Gui) contextTree() ContextTree {
}, },
CommitMessage: SimpleContextNode{ CommitMessage: SimpleContextNode{
Context: BasicContext{ Context: BasicContext{
OnFocus: func() error { return gui.handleCommitMessageFocused() }, OnFocus: gui.handleCommitMessageFocused,
Kind: PERSISTENT_POPUP, Kind: PERSISTENT_POPUP,
ViewName: "commitMessage", ViewName: "commitMessage",
Key: COMMIT_MESSAGE_CONTEXT_KEY, Key: COMMIT_MESSAGE_CONTEXT_KEY,
@ -513,7 +511,7 @@ func (gui *Gui) activateContext(c Context) error {
if viewName == "main" { if viewName == "main" {
gui.changeMainViewsContext(c.GetKey()) gui.changeMainViewsContext(c.GetKey())
} else { } else {
gui.changeMainViewsContext("normal") gui.changeMainViewsContext(MAIN_NORMAL_CONTEXT_KEY)
} }
gui.setViewTabForContext(c) gui.setViewTabForContext(c)
@ -556,13 +554,14 @@ func (gui *Gui) activateContext(c Context) error {
return nil return nil
} }
func (gui *Gui) renderContextStack() string { // currently unused
result := "" // func (gui *Gui) renderContextStack() string {
for _, context := range gui.State.ContextStack { // result := ""
result += context.GetKey() + "\n" // for _, context := range gui.State.ContextStack {
} // result += context.GetKey() + "\n"
return result // }
} // return result
// }
func (gui *Gui) currentContext() Context { func (gui *Gui) currentContext() Context {
if len(gui.State.ContextStack) == 0 { if len(gui.State.ContextStack) == 0 {
@ -755,16 +754,17 @@ func (gui *Gui) rerenderView(viewName string) error {
return context.HandleRender() return context.HandleRender()
} }
func (gui *Gui) getCurrentSideView() *gocui.View { // currently unused
currentSideContext := gui.currentSideContext() // func (gui *Gui) getCurrentSideView() *gocui.View {
if currentSideContext == nil { // currentSideContext := gui.currentSideContext()
return nil // if currentSideContext == nil {
} // return nil
// }
view, _ := gui.g.View(currentSideContext.GetViewName()) // view, _ := gui.g.View(currentSideContext.GetViewName())
return view // return view
} // }
func (gui *Gui) getSideContextSelectedItemId() string { func (gui *Gui) getSideContextSelectedItemId() string {
currentSideContext := gui.currentSideContext() currentSideContext := gui.currentSideContext()

View file

@ -14,13 +14,14 @@ func (gui *Gui) promptUserForCredential(passOrUname string) string {
gui.credentials = make(chan string) gui.credentials = make(chan string)
gui.g.Update(func(g *gocui.Gui) error { gui.g.Update(func(g *gocui.Gui) error {
credentialsView, _ := g.View("credentials") credentialsView, _ := g.View("credentials")
if passOrUname == "username" { switch passOrUname {
case "username":
credentialsView.Title = gui.Tr.CredentialsUsername credentialsView.Title = gui.Tr.CredentialsUsername
credentialsView.Mask = 0 credentialsView.Mask = 0
} else if passOrUname == "password" { case "password":
credentialsView.Title = gui.Tr.CredentialsPassword credentialsView.Title = gui.Tr.CredentialsPassword
credentialsView.Mask = '*' credentialsView.Mask = '*'
} else { default:
credentialsView.Title = gui.Tr.CredentialsPassphrase credentialsView.Title = gui.Tr.CredentialsPassphrase
credentialsView.Mask = '*' credentialsView.Mask = '*'
} }
@ -77,7 +78,7 @@ func (gui *Gui) handleCredentialsPopup(cmdErr error) {
errMessage = gui.Tr.PassUnameWrong errMessage = gui.Tr.PassUnameWrong
} }
// we are not logging this error because it may contain a password or a passphrase // we are not logging this error because it may contain a password or a passphrase
gui.createErrorPanel(errMessage) _ = gui.createErrorPanel(errMessage)
} else { } else {
_ = gui.closeConfirmationPrompt(false) _ = gui.closeConfirmationPrompt(false)
} }

View file

@ -2,19 +2,8 @@ package gui
import ( import (
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands/models"
) )
func (gui *Gui) submoduleFromFile(file *models.File) *models.SubmoduleConfig {
for _, config := range gui.State.Submodules {
if config.Name == file.Name {
return config
}
}
return nil
}
func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
file := gui.getSelectedFile() file := gui.getSelectedFile()
if file == nil { if file == nil {
@ -31,7 +20,7 @@ func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
{ {
displayString: gui.Tr.LcSubmoduleStashAndReset, displayString: gui.Tr.LcSubmoduleStashAndReset,
onPress: func() error { onPress: func() error {
return gui.resetSubmodule(submodule) return gui.handleResetSubmodule(submodule)
}, },
}, },
} }

View file

@ -28,21 +28,6 @@ func NewFileWatcher(log *logrus.Entry) *fileWatcher {
return &fileWatcher{ return &fileWatcher{
Disabled: true, Disabled: true,
} }
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Error(err)
return &fileWatcher{
Disabled: true,
}
}
return &fileWatcher{
Watcher: watcher,
Log: log,
WatchedFilenames: make([]string, 0, MAX_WATCHED_FILES),
}
} }
func (w *fileWatcher) watchingFilename(filename string) bool { func (w *fileWatcher) watchingFilename(filename string) bool {
@ -132,7 +117,7 @@ func (gui *Gui) watchFilesForChanges() {
} }
// only refresh if we're not already // only refresh if we're not already
if !gui.State.IsRefreshingFiles { if !gui.State.IsRefreshingFiles {
gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}}) _ = gui.refreshSidePanels(refreshOptions{mode: ASYNC, scope: []int{FILES}})
} }
// watch for errors // watch for errors

View file

@ -152,7 +152,7 @@ func (gui *Gui) trackedFiles() []*models.File {
return result return result
} }
func (gui *Gui) stageSelectedFile(g *gocui.Gui) error { func (gui *Gui) stageSelectedFile() error {
file := gui.getSelectedFile() file := gui.getSelectedFile()
if file == nil { if file == nil {
return nil return nil
@ -183,7 +183,7 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
if file.HasMergeConflicts { if file.HasMergeConflicts {
return gui.createErrorPanel(gui.Tr.FileStagingRequirements) return gui.createErrorPanel(gui.Tr.FileStagingRequirements)
} }
gui.switchContext(gui.Contexts.Staging.Context) _ = gui.switchContext(gui.Contexts.Staging.Context)
return gui.handleRefreshStagingPanel(forceSecondaryFocused, selectedLineIdx) // TODO: check if this is broken, try moving into context code return gui.handleRefreshStagingPanel(forceSecondaryFocused, selectedLineIdx) // TODO: check if this is broken, try moving into context code
} }
@ -284,7 +284,7 @@ func (gui *Gui) handleWIPCommitPress(g *gocui.Gui, filesView *gocui.View) error
return gui.createErrorPanel(gui.Tr.SkipHookPrefixNotConfigured) return gui.createErrorPanel(gui.Tr.SkipHookPrefixNotConfigured)
} }
gui.renderStringSync("commitMessage", skipHookPreifx) _ = gui.renderStringSync("commitMessage", skipHookPreifx)
if err := gui.getCommitMessageView().SetCursor(len(skipHookPreifx), 0); err != nil { if err := gui.getCommitMessageView().SetCursor(len(skipHookPreifx), 0); err != nil {
return err return err
} }
@ -303,9 +303,7 @@ func (gui *Gui) commitPrefixConfigForRepo() *config.CommitPrefixConfig {
func (gui *Gui) handleCommitPress() error { func (gui *Gui) handleCommitPress() error {
if len(gui.stagedFiles()) == 0 { if len(gui.stagedFiles()) == 0 {
return gui.promptToStageAllAndRetry(func() error { return gui.promptToStageAllAndRetry(gui.handleCommitPress)
return gui.handleCommitPress()
})
} }
commitMessageView := gui.getCommitMessageView() commitMessageView := gui.getCommitMessageView()
@ -354,9 +352,7 @@ func (gui *Gui) promptToStageAllAndRetry(retry func() error) error {
func (gui *Gui) handleAmendCommitPress() error { func (gui *Gui) handleAmendCommitPress() error {
if len(gui.stagedFiles()) == 0 { if len(gui.stagedFiles()) == 0 {
return gui.promptToStageAllAndRetry(func() error { return gui.promptToStageAllAndRetry(gui.handleAmendCommitPress)
return gui.handleAmendCommitPress()
})
} }
if len(gui.State.Commits) == 0 { if len(gui.State.Commits) == 0 {
@ -386,9 +382,7 @@ func (gui *Gui) handleAmendCommitPress() error {
// their editor rather than via the popup panel // their editor rather than via the popup panel
func (gui *Gui) handleCommitEditorPress() error { func (gui *Gui) handleCommitEditorPress() error {
if len(gui.stagedFiles()) == 0 { if len(gui.stagedFiles()) == 0 {
return gui.promptToStageAllAndRetry(func() error { return gui.promptToStageAllAndRetry(gui.handleCommitEditorPress)
return gui.handleCommitEditorPress()
})
} }
gui.PrepareSubProcess("git commit") gui.PrepareSubProcess("git commit")
@ -505,13 +499,13 @@ type PullFilesOptions struct {
} }
func (gui *Gui) pullFiles(opts PullFilesOptions) error { func (gui *Gui) pullFiles(opts PullFilesOptions) error {
if err := gui.createLoaderPanel(gui.g.CurrentView(), gui.Tr.PullWait); err != nil { if err := gui.createLoaderPanel(gui.Tr.PullWait); err != nil {
return err return err
} }
mode := gui.Config.GetUserConfig().Git.Pull.Mode mode := gui.Config.GetUserConfig().Git.Pull.Mode
go utils.Safe(func() { gui.pullWithMode(mode, opts) }) go utils.Safe(func() { _ = gui.pullWithMode(mode, opts) })
return nil return nil
} }
@ -548,7 +542,7 @@ func (gui *Gui) pullWithMode(mode string, opts PullFilesOptions) error {
} }
func (gui *Gui) pushWithForceFlag(v *gocui.View, force bool, upstream string, args string) error { func (gui *Gui) pushWithForceFlag(v *gocui.View, force bool, upstream string, args string) error {
if err := gui.createLoaderPanel(v, gui.Tr.PushWait); err != nil { if err := gui.createLoaderPanel(gui.Tr.PushWait); err != nil {
return err return err
} }
go utils.Safe(func() { go utils.Safe(func() {
@ -557,10 +551,10 @@ func (gui *Gui) pushWithForceFlag(v *gocui.View, force bool, upstream string, ar
if err != nil && !force && strings.Contains(err.Error(), "Updates were rejected") { if err != nil && !force && strings.Contains(err.Error(), "Updates were rejected") {
forcePushDisabled := gui.Config.GetUserConfig().Git.DisableForcePushing forcePushDisabled := gui.Config.GetUserConfig().Git.DisableForcePushing
if forcePushDisabled { if forcePushDisabled {
gui.createErrorPanel(gui.Tr.UpdatesRejectedAndForcePushDisabled) _ = gui.createErrorPanel(gui.Tr.UpdatesRejectedAndForcePushDisabled)
return return
} }
gui.ask(askOpts{ _ = gui.ask(askOpts{
title: gui.Tr.ForcePush, title: gui.Tr.ForcePush,
prompt: gui.Tr.ForcePushPrompt, prompt: gui.Tr.ForcePushPrompt,
handleConfirm: func() error { handleConfirm: func() error {

View file

@ -3,11 +3,9 @@ package gui
func (gui *Gui) validateNotInFilterMode() (bool, error) { func (gui *Gui) validateNotInFilterMode() (bool, error) {
if gui.State.Modes.Filtering.Active() { if gui.State.Modes.Filtering.Active() {
err := gui.ask(askOpts{ err := gui.ask(askOpts{
title: gui.Tr.MustExitFilterModeTitle, title: gui.Tr.MustExitFilterModeTitle,
prompt: gui.Tr.MustExitFilterModePrompt, prompt: gui.Tr.MustExitFilterModePrompt,
handleConfirm: func() error { handleConfirm: gui.exitFilterMode,
return gui.exitFilterMode()
},
}) })
return false, err return false, err

View file

@ -175,10 +175,10 @@ func (gui *Gui) fetch(canPromptForCredentials bool) (err error) {
err = gui.GitCommand.Fetch(fetchOpts) err = gui.GitCommand.Fetch(fetchOpts)
if canPromptForCredentials && err != nil && strings.Contains(err.Error(), "exit status 128") { if canPromptForCredentials && err != nil && strings.Contains(err.Error(), "exit status 128") {
gui.createErrorPanel(gui.Tr.PassUnameWrong) _ = gui.createErrorPanel(gui.Tr.PassUnameWrong)
} }
gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, COMMITS, REMOTES, TAGS}, mode: ASYNC}) _ = gui.refreshSidePanels(refreshOptions{scope: []int{BRANCHES, COMMITS, REMOTES, TAGS}, mode: ASYNC})
return err return err
} }

View file

@ -51,6 +51,8 @@ type SentinelErrors struct {
ErrRestart error ErrRestart error
} }
const UNKNOWN_VIEW_ERROR_MSG = "unknown view"
// GenerateSentinelErrors makes the sentinel errors for the gui. We're defining it here // GenerateSentinelErrors makes the sentinel errors for the gui. We're defining it here
// because we can't do package-scoped errors with localization, and also because // because we can't do package-scoped errors with localization, and also because
// it seems like package-scoped variables are bad in general // it seems like package-scoped variables are bad in general
@ -582,6 +584,7 @@ func (gui *Gui) showInitialPopups(tasks []func(chan struct{}) error) {
go utils.Safe(func() { go utils.Safe(func() {
for _, task := range tasks { for _, task := range tasks {
task := task
go utils.Safe(func() { go utils.Safe(func() {
if err := task(done); err != nil { if err := task(done); err != nil {
_ = gui.surfaceError(err) _ = gui.surfaceError(err)

View file

@ -34,7 +34,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
if height < minimumHeight || width < minimumWidth { if height < minimumHeight || width < minimumWidth {
v, err := g.SetView("limit", 0, 0, width-1, height-1, 0) v, err := g.SetView("limit", 0, 0, width-1, height-1, 0)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
v.Title = gui.Tr.NotEnoughSpace v.Title = gui.Tr.NotEnoughSpace
@ -101,7 +101,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
v, err := setViewFromDimensions("main", "main", true) v, err := setViewFromDimensions("main", "main", true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
v.Title = gui.Tr.DiffTitle v.Title = gui.Tr.DiffTitle
@ -112,7 +112,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
secondaryView, err := setViewFromDimensions("secondary", "secondary", true) secondaryView, err := setViewFromDimensions("secondary", "secondary", true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
secondaryView.Title = gui.Tr.DiffTitle secondaryView.Title = gui.Tr.DiffTitle
@ -124,7 +124,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
hiddenViewOffset := 9999 hiddenViewOffset := 9999
if v, err := setViewFromDimensions("status", "status", true); err != nil { if v, err := setViewFromDimensions("status", "status", true); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
v.Title = gui.Tr.StatusTitle v.Title = gui.Tr.StatusTitle
@ -133,7 +133,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
filesView, err := setViewFromDimensions("files", "files", true) filesView, err := setViewFromDimensions("files", "files", true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
filesView.Highlight = true filesView.Highlight = true
@ -144,7 +144,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
branchesView, err := setViewFromDimensions("branches", "branches", true) branchesView, err := setViewFromDimensions("branches", "branches", true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
branchesView.Title = gui.Tr.BranchesTitle branchesView.Title = gui.Tr.BranchesTitle
@ -154,7 +154,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
commitFilesView, err := setViewFromDimensions("commitFiles", gui.Contexts.CommitFiles.Context.GetWindowName(), true) commitFilesView, err := setViewFromDimensions("commitFiles", gui.Contexts.CommitFiles.Context.GetWindowName(), true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
commitFilesView.Title = gui.Tr.CommitFiles commitFilesView.Title = gui.Tr.CommitFiles
@ -165,7 +165,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
commitsView, err := setViewFromDimensions("commits", "commits", true) commitsView, err := setViewFromDimensions("commits", "commits", true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
commitsView.Title = gui.Tr.CommitsTitle commitsView.Title = gui.Tr.CommitsTitle
@ -175,7 +175,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
stashView, err := setViewFromDimensions("stash", "stash", true) stashView, err := setViewFromDimensions("stash", "stash", true)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
stashView.Title = gui.Tr.StashTitle stashView.Title = gui.Tr.StashTitle
@ -186,7 +186,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
if gui.getCommitMessageView() == nil { if gui.getCommitMessageView() == nil {
// doesn't matter where this view starts because it will be hidden // doesn't matter where this view starts because it will be hidden
if commitMessageView, err := g.SetView("commitMessage", hiddenViewOffset, hiddenViewOffset, hiddenViewOffset+10, hiddenViewOffset+10, 0); err != nil { if commitMessageView, err := g.SetView("commitMessage", hiddenViewOffset, hiddenViewOffset, hiddenViewOffset+10, hiddenViewOffset+10, 0); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
_, _ = g.SetViewOnBottom("commitMessage") _, _ = g.SetViewOnBottom("commitMessage")
@ -200,7 +200,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
if check, _ := g.View("credentials"); check == nil { if check, _ := g.View("credentials"); check == nil {
// doesn't matter where this view starts because it will be hidden // doesn't matter where this view starts because it will be hidden
if credentialsView, err := g.SetView("credentials", hiddenViewOffset, hiddenViewOffset, hiddenViewOffset+10, hiddenViewOffset+10, 0); err != nil { if credentialsView, err := g.SetView("credentials", hiddenViewOffset, hiddenViewOffset, hiddenViewOffset+10, hiddenViewOffset+10, 0); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
_, _ = g.SetViewOnBottom("credentials") _, _ = g.SetViewOnBottom("credentials")
@ -211,7 +211,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
} }
if v, err := setViewFromDimensions("options", "options", false); err != nil { if v, err := setViewFromDimensions("options", "options", false); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
v.Frame = false v.Frame = false
@ -225,7 +225,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
// this view takes up one character. Its only purpose is to show the slash when searching // this view takes up one character. Its only purpose is to show the slash when searching
if searchPrefixView, err := setViewFromDimensions("searchPrefix", "searchPrefix", false); err != nil { if searchPrefixView, err := setViewFromDimensions("searchPrefix", "searchPrefix", false); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
@ -236,7 +236,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
} }
if searchView, err := setViewFromDimensions("search", "search", false); err != nil { if searchView, err := setViewFromDimensions("search", "search", false); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
@ -247,7 +247,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
} }
if appStatusView, err := setViewFromDimensions("appStatus", "appStatus", false); err != nil { if appStatusView, err := setViewFromDimensions("appStatus", "appStatus", false); err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
appStatusView.BgColor = gocui.ColorDefault appStatusView.BgColor = gocui.ColorDefault
@ -258,7 +258,7 @@ func (gui *Gui) layout(g *gocui.Gui) error {
informationView, err := setViewFromDimensions("information", "information", false) informationView, err := setViewFromDimensions("information", "information", false)
if err != nil { if err != nil {
if err.Error() != "unknown view" { if err.Error() != UNKNOWN_VIEW_ERROR_MSG {
return err return err
} }
informationView.BgColor = gocui.ColorDefault informationView.BgColor = gocui.ColorDefault
@ -368,10 +368,3 @@ func (gui *Gui) onInitialViewsCreation() error {
return gui.loadNewRepo() return gui.loadNewRepo()
} }
func max(a, b int) int {
if a > b {
return a
}
return b
}

View file

@ -248,7 +248,7 @@ func (gui *Gui) menuListContext() *ListContext {
GetItemsLength: func() int { return gui.getMenuView().LinesHeight() }, GetItemsLength: func() int { return gui.getMenuView().LinesHeight() },
GetPanelState: func() IListPanelState { return gui.State.Panels.Menu }, GetPanelState: func() IListPanelState { return gui.State.Panels.Menu },
OnFocus: gui.handleMenuSelect, OnFocus: gui.handleMenuSelect,
OnClickSelectedItem: func() error { return gui.onMenuPress() }, OnClickSelectedItem: gui.onMenuPress,
Gui: gui, Gui: gui,
ResetMainViewOriginOnFocus: false, ResetMainViewOriginOnFocus: false,
Kind: PERSISTENT_POPUP, Kind: PERSISTENT_POPUP,

View file

@ -14,11 +14,6 @@ type viewUpdateOpts struct {
task updateTask task updateTask
} }
type coordinates struct {
x int
y int
}
type refreshMainOpts struct { type refreshMainOpts struct {
main *viewUpdateOpts main *viewUpdateOpts
secondary *viewUpdateOpts secondary *viewUpdateOpts
@ -91,9 +86,10 @@ func (gui *Gui) createRunPtyTask(cmd *exec.Cmd) *runPtyTask {
return &runPtyTask{cmd: cmd} return &runPtyTask{cmd: cmd}
} }
func (gui *Gui) createRunPtyTaskWithPrefix(cmd *exec.Cmd, prefix string) *runPtyTask { // currently unused
return &runPtyTask{cmd: cmd, prefix: prefix} // func (gui *Gui) createRunPtyTaskWithPrefix(cmd *exec.Cmd, prefix string) *runPtyTask {
} // return &runPtyTask{cmd: cmd, prefix: prefix}
// }
type runFunctionTask struct { type runFunctionTask struct {
f func(chan struct{}) error f func(chan struct{}) error
@ -103,9 +99,10 @@ func (t *runFunctionTask) GetKind() int {
return RUN_FUNCTION return RUN_FUNCTION
} }
func (gui *Gui) createRunFunctionTask(f func(chan struct{}) error) *runFunctionTask { // currently unused
return &runFunctionTask{f: f} // func (gui *Gui) createRunFunctionTask(f func(chan struct{}) error) *runFunctionTask {
} // return &runFunctionTask{f: f}
// }
func (gui *Gui) runTaskForView(viewName string, task updateTask) error { func (gui *Gui) runTaskForView(viewName string, task updateTask) error {
switch task.GetKind() { switch task.GetKind() {

View file

@ -50,9 +50,9 @@ func (gui *Gui) shouldHighlightLine(index int, conflict commands.Conflict, top b
return (index >= conflict.Start && index <= conflict.Middle && top) || (index >= conflict.Middle && index <= conflict.End && !top) return (index >= conflict.Start && index <= conflict.Middle && top) || (index >= conflict.Middle && index <= conflict.End && !top)
} }
func (gui *Gui) coloredConflictFile(content string, conflicts []commands.Conflict, conflictIndex int, conflictTop, hasFocus bool) (string, error) { func (gui *Gui) coloredConflictFile(content string, conflicts []commands.Conflict, conflictIndex int, conflictTop, hasFocus bool) string {
if len(conflicts) == 0 { if len(conflicts) == 0 {
return content, nil return content
} }
conflict, remainingConflicts := gui.shiftConflict(conflicts) conflict, remainingConflicts := gui.shiftConflict(conflicts)
var outputBuffer bytes.Buffer var outputBuffer bytes.Buffer
@ -71,7 +71,7 @@ func (gui *Gui) coloredConflictFile(content string, conflicts []commands.Conflic
} }
outputBuffer.WriteString(utils.ColoredStringDirect(line, colour) + "\n") outputBuffer.WriteString(utils.ColoredStringDirect(line, colour) + "\n")
} }
return outputBuffer.String(), nil return outputBuffer.String()
} }
func (gui *Gui) takeOverScrolling() { func (gui *Gui) takeOverScrolling() {
@ -142,7 +142,7 @@ func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error {
return ioutil.WriteFile(gitFile.Name, []byte(output), 0644) return ioutil.WriteFile(gitFile.Name, []byte(output), 0644)
} }
func (gui *Gui) pushFileSnapshot(g *gocui.Gui) error { func (gui *Gui) pushFileSnapshot() error {
gitFile := gui.getSelectedFile() gitFile := gui.getSelectedFile()
if gitFile == nil { if gitFile == nil {
return nil return nil
@ -175,7 +175,7 @@ func (gui *Gui) handlePickHunk(g *gocui.Gui, v *gocui.View) error {
gui.takeOverScrolling() gui.takeOverScrolling()
conflict := gui.State.Panels.Merging.Conflicts[gui.State.Panels.Merging.ConflictIndex] conflict := gui.State.Panels.Merging.Conflicts[gui.State.Panels.Merging.ConflictIndex]
if err := gui.pushFileSnapshot(g); err != nil { if err := gui.pushFileSnapshot(); err != nil {
return err return err
} }
@ -201,7 +201,7 @@ func (gui *Gui) handlePickBothHunks(g *gocui.Gui, v *gocui.View) error {
gui.takeOverScrolling() gui.takeOverScrolling()
conflict := gui.State.Panels.Merging.Conflicts[gui.State.Panels.Merging.ConflictIndex] conflict := gui.State.Panels.Merging.Conflicts[gui.State.Panels.Merging.ConflictIndex]
if err := gui.pushFileSnapshot(g); err != nil { if err := gui.pushFileSnapshot(); err != nil {
return err return err
} }
err := gui.resolveConflict(conflict, "both") err := gui.resolveConflict(conflict, "both")
@ -213,7 +213,7 @@ func (gui *Gui) handlePickBothHunks(g *gocui.Gui, v *gocui.View) error {
func (gui *Gui) refreshMergePanel() error { func (gui *Gui) refreshMergePanel() error {
panelState := gui.State.Panels.Merging panelState := gui.State.Panels.Merging
cat, err := gui.catSelectedFile(gui.g) cat, err := gui.catSelectedFile()
if err != nil { if err != nil {
return gui.refreshMainViews(refreshMainOpts{ return gui.refreshMainViews(refreshMainOpts{
main: &viewUpdateOpts{ main: &viewUpdateOpts{
@ -233,12 +233,9 @@ func (gui *Gui) refreshMergePanel() error {
} }
hasFocus := gui.currentViewName() == "main" hasFocus := gui.currentViewName() == "main"
content, err := gui.coloredConflictFile(cat, panelState.Conflicts, panelState.ConflictIndex, panelState.ConflictTop, hasFocus) content := gui.coloredConflictFile(cat, panelState.Conflicts, panelState.ConflictIndex, panelState.ConflictTop, hasFocus)
if err != nil {
return err
}
if err := gui.scrollToConflict(gui.g); err != nil { if err := gui.scrollToConflict(); err != nil {
return err return err
} }
@ -251,7 +248,7 @@ func (gui *Gui) refreshMergePanel() error {
}) })
} }
func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { func (gui *Gui) catSelectedFile() (string, error) {
item := gui.getSelectedFile() item := gui.getSelectedFile()
if item == nil { if item == nil {
return "", errors.New(gui.Tr.NoFilesDisplay) return "", errors.New(gui.Tr.NoFilesDisplay)
@ -269,7 +266,7 @@ func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
return cat, nil return cat, nil
} }
func (gui *Gui) scrollToConflict(g *gocui.Gui) error { func (gui *Gui) scrollToConflict() error {
if gui.State.Panels.Merging.UserScrolling { if gui.State.Panels.Merging.UserScrolling {
return nil return nil
} }
@ -318,7 +315,7 @@ func (gui *Gui) handleEscapeMerge() error {
} }
func (gui *Gui) handleCompleteMerge() error { func (gui *Gui) handleCompleteMerge() error {
if err := gui.stageSelectedFile(gui.g); err != nil { if err := gui.stageSelectedFile(); err != nil {
return err return err
} }
if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil { if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil {
@ -326,7 +323,7 @@ func (gui *Gui) handleCompleteMerge() error {
} }
// if we got conflicts after unstashing, we don't want to call any git // if we got conflicts after unstashing, we don't want to call any git
// commands to continue rebasing/merging here // commands to continue rebasing/merging here
if gui.GitCommand.WorkingTreeState() == "normal" { if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_NORMAL {
return gui.handleEscapeMerge() return gui.handleEscapeMerge()
} }
// if there are no more files with merge conflicts, we should ask whether the user wants to continue // if there are no more files with merge conflicts, we should ask whether the user wants to continue

View file

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands"
) )
func (gui *Gui) handleCreatePatchOptionsMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleCreatePatchOptionsMenu(g *gocui.Gui, v *gocui.View) error {
@ -26,7 +27,7 @@ func (gui *Gui) handleCreatePatchOptionsMenu(g *gocui.Gui, v *gocui.View) error
}, },
} }
if gui.GitCommand.PatchManager.CanRebase && gui.workingTreeState() == "normal" { if gui.GitCommand.PatchManager.CanRebase && gui.workingTreeState() == commands.REBASE_MODE_NORMAL {
menuItems = append(menuItems, []*menuItem{ menuItems = append(menuItems, []*menuItem{
{ {
displayString: fmt.Sprintf("remove patch from original commit (%s)", gui.GitCommand.PatchManager.To), displayString: fmt.Sprintf("remove patch from original commit (%s)", gui.GitCommand.PatchManager.To),
@ -74,7 +75,7 @@ func (gui *Gui) getPatchCommitIndex() int {
} }
func (gui *Gui) validateNormalWorkingTreeState() (bool, error) { func (gui *Gui) validateNormalWorkingTreeState() (bool, error) {
if gui.GitCommand.WorkingTreeState() != "normal" { if gui.GitCommand.WorkingTreeState() != commands.REBASE_MODE_NORMAL {
return false, gui.createErrorPanel(gui.Tr.CantPatchWhileRebasingError) return false, gui.createErrorPanel(gui.Tr.CantPatchWhileRebasingError)
} }
return true, nil return true, nil

View file

@ -3,12 +3,14 @@ package gui
import ( import (
"fmt" "fmt"
"strings" "strings"
"github.com/jesseduffield/lazygit/pkg/commands"
) )
func (gui *Gui) handleCreateRebaseOptionsMenu() error { func (gui *Gui) handleCreateRebaseOptionsMenu() error {
options := []string{"continue", "abort"} options := []string{"continue", "abort"}
if gui.GitCommand.WorkingTreeState() == "rebasing" { if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_REBASING {
options = append(options, "skip") options = append(options, "skip")
} }
@ -25,7 +27,7 @@ func (gui *Gui) handleCreateRebaseOptionsMenu() error {
} }
var title string var title string
if gui.GitCommand.WorkingTreeState() == "merging" { if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_MERGING {
title = gui.Tr.MergeOptionsTitle title = gui.Tr.MergeOptionsTitle
} else { } else {
title = gui.Tr.RebaseOptionsTitle title = gui.Tr.RebaseOptionsTitle
@ -37,7 +39,7 @@ func (gui *Gui) handleCreateRebaseOptionsMenu() error {
func (gui *Gui) genericMergeCommand(command string) error { func (gui *Gui) genericMergeCommand(command string) error {
status := gui.GitCommand.WorkingTreeState() status := gui.GitCommand.WorkingTreeState()
if status != "merging" && status != "rebasing" { if status != commands.REBASE_MODE_MERGING && status != commands.REBASE_MODE_REBASING {
return gui.createErrorPanel(gui.Tr.NotMergingOrRebasing) return gui.createErrorPanel(gui.Tr.NotMergingOrRebasing)
} }
@ -45,7 +47,7 @@ func (gui *Gui) genericMergeCommand(command string) error {
// we should end up with a command like 'git merge --continue' // we should end up with a command like 'git merge --continue'
// it's impossible for a rebase to require a commit so we'll use a subprocess only if it's a merge // it's impossible for a rebase to require a commit so we'll use a subprocess only if it's a merge
if status == "merging" && command != "abort" && gui.Config.GetUserConfig().Git.Merging.ManualCommit { if status == commands.REBASE_MODE_MERGING && command != "abort" && gui.Config.GetUserConfig().Git.Merging.ManualCommit {
sub := gui.OSCommand.PrepareSubProcess("git", commandType, fmt.Sprintf("--%s", command)) sub := gui.OSCommand.PrepareSubProcess("git", commandType, fmt.Sprintf("--%s", command))
if sub != nil { if sub != nil {
gui.SubProcess = sub gui.SubProcess = sub

View file

@ -18,10 +18,8 @@ func (gui *Gui) refreshStagingPanel(forceSecondaryFocused bool, selectedLineIdx
secondaryFocused := false secondaryFocused := false
if forceSecondaryFocused { if forceSecondaryFocused {
secondaryFocused = true secondaryFocused = true
} else { } else if state != nil {
if state != nil { secondaryFocused = state.SecondaryFocused
secondaryFocused = state.SecondaryFocused
}
} }
if (secondaryFocused && !file.HasStagedChanges) || (!secondaryFocused && !file.HasUnstagedChanges) { if (secondaryFocused && !file.HasStagedChanges) || (!secondaryFocused && !file.HasUnstagedChanges) {

View file

@ -6,6 +6,7 @@ import (
"github.com/fatih/color" "github.com/fatih/color"
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands"
"github.com/jesseduffield/lazygit/pkg/gui/presentation" "github.com/jesseduffield/lazygit/pkg/gui/presentation"
"github.com/jesseduffield/lazygit/pkg/utils" "github.com/jesseduffield/lazygit/pkg/utils"
) )
@ -33,7 +34,7 @@ func (gui *Gui) refreshStatus() {
status = utils.ColoredString(fmt.Sprintf("↑%s↓%s ", currentBranch.Pushables, currentBranch.Pullables), trackColor) status = utils.ColoredString(fmt.Sprintf("↑%s↓%s ", currentBranch.Pushables, currentBranch.Pullables), trackColor)
} }
if gui.GitCommand.WorkingTreeState() != "normal" { if gui.GitCommand.WorkingTreeState() != commands.REBASE_MODE_NORMAL {
status += utils.ColoredString(fmt.Sprintf("(%s) ", gui.GitCommand.WorkingTreeState()), color.FgYellow) status += utils.ColoredString(fmt.Sprintf("(%s) ", gui.GitCommand.WorkingTreeState()), color.FgYellow)
} }
@ -57,7 +58,7 @@ func cursorInSubstring(cx int, prefix string, substring string) bool {
func (gui *Gui) handleCheckForUpdate(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleCheckForUpdate(g *gocui.Gui, v *gocui.View) error {
gui.Updater.CheckForNewUpdate(gui.onUserUpdateCheckFinish, true) gui.Updater.CheckForNewUpdate(gui.onUserUpdateCheckFinish, true)
return gui.createLoaderPanel(v, gui.Tr.CheckingForUpdates) return gui.createLoaderPanel(gui.Tr.CheckingForUpdates)
} }
func (gui *Gui) handleStatusClick(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleStatusClick(g *gocui.Gui, v *gocui.View) error {
@ -80,7 +81,7 @@ func (gui *Gui) handleStatusClick(g *gocui.Gui, v *gocui.View) error {
upstreamStatus := fmt.Sprintf("↑%s↓%s", currentBranch.Pushables, currentBranch.Pullables) upstreamStatus := fmt.Sprintf("↑%s↓%s", currentBranch.Pushables, currentBranch.Pullables)
repoName := utils.GetCurrentRepoName() repoName := utils.GetCurrentRepoName()
switch gui.GitCommand.WorkingTreeState() { switch gui.GitCommand.WorkingTreeState() {
case "rebasing", "merging": case commands.REBASE_MODE_REBASING, commands.REBASE_MODE_MERGING:
workingTreeStatus := fmt.Sprintf("(%s)", gui.GitCommand.WorkingTreeState()) workingTreeStatus := fmt.Sprintf("(%s)", gui.GitCommand.WorkingTreeState())
if cursorInSubstring(cx, upstreamStatus+" ", workingTreeStatus) { if cursorInSubstring(cx, upstreamStatus+" ", workingTreeStatus) {
return gui.handleCreateRebaseOptionsMenu() return gui.handleCreateRebaseOptionsMenu()
@ -149,11 +150,11 @@ func lazygitTitle() string {
func (gui *Gui) workingTreeState() string { func (gui *Gui) workingTreeState() string {
rebaseMode, _ := gui.GitCommand.RebaseMode() rebaseMode, _ := gui.GitCommand.RebaseMode()
if rebaseMode != "" { if rebaseMode != "" {
return "rebasing" return commands.REBASE_MODE_REBASING
} }
merging, _ := gui.GitCommand.IsInMergeState() merging, _ := gui.GitCommand.IsInMergeState()
if merging { if merging {
return "merging" return commands.REBASE_MODE_MERGING
} }
return "normal" return commands.REBASE_MODE_NORMAL
} }

View file

@ -2,6 +2,7 @@ package gui
import ( import (
"github.com/jesseduffield/gocui" "github.com/jesseduffield/gocui"
"github.com/jesseduffield/lazygit/pkg/commands"
"github.com/jesseduffield/lazygit/pkg/commands/oscommands" "github.com/jesseduffield/lazygit/pkg/commands/oscommands"
"github.com/jesseduffield/lazygit/pkg/utils" "github.com/jesseduffield/lazygit/pkg/utils"
) )
@ -87,7 +88,7 @@ func (gui *Gui) reflogUndo(g *gocui.Gui, v *gocui.View) error {
undoEnvVars := []string{"GIT_REFLOG_ACTION=[lazygit undo]"} undoEnvVars := []string{"GIT_REFLOG_ACTION=[lazygit undo]"}
undoingStatus := gui.Tr.UndoingStatus undoingStatus := gui.Tr.UndoingStatus
if gui.GitCommand.WorkingTreeState() == "rebasing" { if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_REBASING {
return gui.createErrorPanel(gui.Tr.LcCantUndoWhileRebasing) return gui.createErrorPanel(gui.Tr.LcCantUndoWhileRebasing)
} }
@ -118,7 +119,7 @@ func (gui *Gui) reflogRedo(g *gocui.Gui, v *gocui.View) error {
redoEnvVars := []string{"GIT_REFLOG_ACTION=[lazygit redo]"} redoEnvVars := []string{"GIT_REFLOG_ACTION=[lazygit redo]"}
redoingStatus := gui.Tr.RedoingStatus redoingStatus := gui.Tr.RedoingStatus
if gui.GitCommand.WorkingTreeState() == "rebasing" { if gui.GitCommand.WorkingTreeState() == commands.REBASE_MODE_REBASING {
return gui.createErrorPanel(gui.Tr.LcCantRedoWhileRebasing) return gui.createErrorPanel(gui.Tr.LcCantRedoWhileRebasing)
} }

View file

@ -110,9 +110,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error {
wg.Add(1) wg.Add(1)
func() { func() {
if options.mode == ASYNC { if options.mode == ASYNC {
go utils.Safe(func() { gui.refreshCommits() }) go utils.Safe(func() { _ = gui.refreshCommits() })
} else { } else {
gui.refreshCommits() _ = gui.refreshCommits()
} }
wg.Done() wg.Done()
}() }()
@ -122,9 +122,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error {
wg.Add(1) wg.Add(1)
func() { func() {
if options.mode == ASYNC { if options.mode == ASYNC {
go utils.Safe(func() { gui.refreshFilesAndSubmodules() }) go utils.Safe(func() { _ = gui.refreshFilesAndSubmodules() })
} else { } else {
gui.refreshFilesAndSubmodules() _ = gui.refreshFilesAndSubmodules()
} }
wg.Done() wg.Done()
}() }()
@ -134,9 +134,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error {
wg.Add(1) wg.Add(1)
func() { func() {
if options.mode == ASYNC { if options.mode == ASYNC {
go utils.Safe(func() { gui.refreshStashEntries() }) go utils.Safe(func() { _ = gui.refreshStashEntries() })
} else { } else {
gui.refreshStashEntries() _ = gui.refreshStashEntries()
} }
wg.Done() wg.Done()
}() }()
@ -146,9 +146,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error {
wg.Add(1) wg.Add(1)
func() { func() {
if options.mode == ASYNC { if options.mode == ASYNC {
go utils.Safe(func() { gui.refreshTags() }) go utils.Safe(func() { _ = gui.refreshTags() })
} else { } else {
gui.refreshTags() _ = gui.refreshTags()
} }
wg.Done() wg.Done()
}() }()
@ -158,9 +158,9 @@ func (gui *Gui) refreshSidePanels(options refreshOptions) error {
wg.Add(1) wg.Add(1)
func() { func() {
if options.mode == ASYNC { if options.mode == ASYNC {
go utils.Safe(func() { gui.refreshRemotes() }) go utils.Safe(func() { _ = gui.refreshRemotes() })
} else { } else {
gui.refreshRemotes() _ = gui.refreshRemotes()
} }
wg.Done() wg.Done()
}() }()
@ -244,11 +244,6 @@ func (gui *Gui) getFilesView() *gocui.View {
return v return v
} }
func (gui *Gui) getCommitsView() *gocui.View {
v, _ := gui.g.View("commits")
return v
}
func (gui *Gui) getCommitMessageView() *gocui.View { func (gui *Gui) getCommitMessageView() *gocui.View {
v, _ := gui.g.View("commitMessage") v, _ := gui.g.View("commitMessage")
return v return v
@ -269,15 +264,17 @@ func (gui *Gui) getSecondaryView() *gocui.View {
return v return v
} }
func (gui *Gui) getStashView() *gocui.View { // currently unused
v, _ := gui.g.View("stash") // func (gui *Gui) getStashView() *gocui.View {
return v // v, _ := gui.g.View("stash")
} // return v
// }
func (gui *Gui) getCommitFilesView() *gocui.View { // currently unused
v, _ := gui.g.View("commitFiles") // func (gui *Gui) getCommitFilesView() *gocui.View {
return v // v, _ := gui.g.View("commitFiles")
} // return v
// }
func (gui *Gui) getMenuView() *gocui.View { func (gui *Gui) getMenuView() *gocui.View {
v, _ := gui.g.View("menu") v, _ := gui.g.View("menu")

View file

@ -2,19 +2,11 @@ package i18n
import ( import (
"fmt" "fmt"
"io/ioutil"
"testing" "testing"
"github.com/sirupsen/logrus"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func getDummyLog() *logrus.Entry {
log := logrus.New()
log.Out = ioutil.Discard
return log.WithField("test", "test")
}
// TestDetectLanguage is a function. // TestDetectLanguage is a function.
func TestDetectLanguage(t *testing.T) { func TestDetectLanguage(t *testing.T) {
type scenario struct { type scenario struct {