1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-27 00:51:18 +02:00

only re-use repo state when jumping in and out of submodules

This commit is contained in:
Jesse Duffield
2021-04-05 13:22:03 +10:00
parent 2d7452bfaa
commit 7178bab6b4
4 changed files with 26 additions and 14 deletions

View File

@ -352,16 +352,28 @@ type guiState struct {
ViewsSetup bool ViewsSetup bool
} }
func (gui *Gui) resetState(filterPath string) { // reuseState determines if we pull the repo state from our repo state map or
// just re-initialize it. For now we're only re-using state when we're going
// in and out of submodules, for the sake of having the cursor back on the submodule
// when we return.
//
// I tried out always reverting to the repo's original state but found that in fact
// it gets a bit confusing to land back in the status panel when visiting a repo
// you've already switched from. There's no doubt some easy way to make the UX
// optimal for all cases but I'm too lazy to think about what that is right now
func (gui *Gui) resetState(filterPath string, reuseState bool) {
currentDir, err := os.Getwd() currentDir, err := os.Getwd()
if err == nil {
if state := gui.RepoStateMap[Repo(currentDir)]; state != nil { if reuseState {
gui.State = state if err == nil {
gui.State.ViewsSetup = false if state := gui.RepoStateMap[Repo(currentDir)]; state != nil {
return gui.State = state
gui.State.ViewsSetup = false
return
}
} else {
gui.Log.Error(err)
} }
} else {
gui.Log.Error(err)
} }
showTree := gui.Config.GetUserConfig().Gui.ShowFileTree showTree := gui.Config.GetUserConfig().Gui.ShowFileTree
@ -443,7 +455,7 @@ func NewGui(log *logrus.Entry, gitCommand *commands.GitCommand, oSCommand *oscom
RepoStateMap: map[Repo]*guiState{}, RepoStateMap: map[Repo]*guiState{},
} }
gui.resetState(filterPath) gui.resetState(filterPath, false)
gui.watchFilesForChanges() gui.watchFilesForChanges()

View File

@ -57,7 +57,7 @@ func (gui *Gui) handleTopLevelReturn() error {
gui.RepoPathStack = repoPathStack[:n] gui.RepoPathStack = repoPathStack[:n]
return gui.dispatchSwitchToRepo(path) return gui.dispatchSwitchToRepo(path, true)
} }
if gui.Config.GetUserConfig().QuitOnTopLevelReturn { if gui.Config.GetUserConfig().QuitOnTopLevelReturn {

View File

@ -28,7 +28,7 @@ func (gui *Gui) handleCreateRecentReposMenu() error {
// if we were in a submodule, we want to forget about that stack of repos // if we were in a submodule, we want to forget about that stack of repos
// so that hitting escape in the new repo does nothing // so that hitting escape in the new repo does nothing
gui.RepoPathStack = []string{} gui.RepoPathStack = []string{}
return gui.dispatchSwitchToRepo(path) return gui.dispatchSwitchToRepo(path, false)
}, },
} }
} }
@ -50,7 +50,7 @@ func (gui *Gui) handleShowAllBranchLogs() error {
}) })
} }
func (gui *Gui) dispatchSwitchToRepo(path string) error { func (gui *Gui) dispatchSwitchToRepo(path string, reuse bool) error {
env.UnsetGitDirEnvs() env.UnsetGitDirEnvs()
originalPath, err := os.Getwd() originalPath, err := os.Getwd()
if err != nil { if err != nil {
@ -87,7 +87,7 @@ func (gui *Gui) dispatchSwitchToRepo(path string) error {
gui.Mutexes.RefreshingFilesMutex.Lock() gui.Mutexes.RefreshingFilesMutex.Lock()
defer gui.Mutexes.RefreshingFilesMutex.Unlock() defer gui.Mutexes.RefreshingFilesMutex.Unlock()
gui.resetState("") gui.resetState("", reuse)
return nil return nil
}) })

View File

@ -73,7 +73,7 @@ func (gui *Gui) enterSubmodule(submodule *models.SubmoduleConfig) error {
} }
gui.RepoPathStack = append(gui.RepoPathStack, wd) gui.RepoPathStack = append(gui.RepoPathStack, wd)
return gui.dispatchSwitchToRepo(submodule.Path) return gui.dispatchSwitchToRepo(submodule.Path, true)
} }
func (gui *Gui) removeSubmodule(submodule *models.SubmoduleConfig) error { func (gui *Gui) removeSubmodule(submodule *models.SubmoduleConfig) error {