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:
@ -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()
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
})
|
})
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user