mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-04 03:48:07 +02:00
allow entering and returning from submodule
This commit is contained in:
parent
b882ac9e06
commit
914fb36173
@ -8,6 +8,7 @@ import (
|
||||
// "strings"
|
||||
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
@ -159,6 +160,17 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
|
||||
return nil
|
||||
}
|
||||
|
||||
submoduleConfigs := gui.State.SubmoduleConfigs
|
||||
if file.IsSubmodule(submoduleConfigs) {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
gui.State.RepoPathStack = append(gui.State.RepoPathStack, wd)
|
||||
submoduleConfig := file.SubmoduleConfig(submoduleConfigs)
|
||||
return gui.dispatchSwitchToRepo(submoduleConfig.Path)
|
||||
}
|
||||
|
||||
if file.HasInlineMergeConflicts {
|
||||
return gui.handleSwitchToMerge()
|
||||
}
|
||||
|
@ -317,6 +317,10 @@ type guiState struct {
|
||||
// Some views move between windows for example the commitFiles view and when cycling through
|
||||
// side windows we need to know which view to give focus to for a given window
|
||||
WindowViewNameMap map[string]string
|
||||
|
||||
// when you enter into a submodule we'll append the superproject's path to this array
|
||||
// so that you can return to the superproject
|
||||
RepoPathStack []string
|
||||
}
|
||||
|
||||
func (gui *Gui) resetState() {
|
||||
@ -329,10 +333,12 @@ func (gui *Gui) resetState() {
|
||||
CherryPickedCommits: make([]*commands.Commit, 0),
|
||||
ContextKey: "",
|
||||
}
|
||||
prevRepoPathStack := []string{}
|
||||
if gui.State != nil {
|
||||
prevFiltering = gui.State.Modes.Filtering
|
||||
prevDiff = gui.State.Modes.Diffing
|
||||
prevCherryPicking = gui.State.Modes.CherryPicking
|
||||
prevRepoPathStack = gui.State.RepoPathStack
|
||||
}
|
||||
|
||||
modes := Modes{
|
||||
@ -371,6 +377,7 @@ func (gui *Gui) resetState() {
|
||||
Ptmx: nil,
|
||||
Modes: modes,
|
||||
ViewContextMap: gui.initialViewContextMap(),
|
||||
RepoPathStack: prevRepoPathStack,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,18 @@ func (gui *Gui) handleTopLevelReturn(g *gocui.Gui, v *gocui.View) error {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
repoPathStack := gui.State.RepoPathStack
|
||||
if len(repoPathStack) > 0 {
|
||||
n := len(repoPathStack) - 1
|
||||
|
||||
path := repoPathStack[n]
|
||||
|
||||
gui.State.RepoPathStack = repoPathStack[:n]
|
||||
|
||||
return gui.dispatchSwitchToRepo(path)
|
||||
}
|
||||
|
||||
if gui.Config.GetUserConfig().GetBool("quitOnTopLevelReturn") {
|
||||
return gui.handleQuit()
|
||||
}
|
||||
|
@ -17,24 +17,14 @@ func (gui *Gui) handleCreateRecentReposMenu() error {
|
||||
// we won't show the current repo hence the -1
|
||||
menuItems := make([]*menuItem, reposCount-1)
|
||||
for i, path := range recentRepoPaths[1:reposCount] {
|
||||
innerPath := path
|
||||
path := path // cos we're closing over the loop variable
|
||||
menuItems[i] = &menuItem{
|
||||
displayStrings: []string{
|
||||
filepath.Base(innerPath),
|
||||
yellow.Sprint(innerPath),
|
||||
filepath.Base(path),
|
||||
yellow.Sprint(path),
|
||||
},
|
||||
onPress: func() error {
|
||||
env.UnsetGitDirEnvs()
|
||||
if err := os.Chdir(innerPath); err != nil {
|
||||
return err
|
||||
}
|
||||
newGitCommand, err := commands.NewGitCommand(gui.Log, gui.OSCommand, gui.Tr, gui.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
gui.GitCommand = newGitCommand
|
||||
gui.State.Modes.Filtering.Path = ""
|
||||
return gui.Errors.ErrSwitchRepo
|
||||
return gui.dispatchSwitchToRepo(path)
|
||||
},
|
||||
}
|
||||
}
|
||||
@ -42,6 +32,20 @@ func (gui *Gui) handleCreateRecentReposMenu() error {
|
||||
return gui.createMenu(gui.Tr.SLocalize("RecentRepos"), menuItems, createMenuOptions{showCancel: true})
|
||||
}
|
||||
|
||||
func (gui *Gui) dispatchSwitchToRepo(path string) error {
|
||||
env.UnsetGitDirEnvs()
|
||||
if err := os.Chdir(path); err != nil {
|
||||
return err
|
||||
}
|
||||
newGitCommand, err := commands.NewGitCommand(gui.Log, gui.OSCommand, gui.Tr, gui.Config)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
gui.GitCommand = newGitCommand
|
||||
gui.State.Modes.Filtering.Path = ""
|
||||
return gui.Errors.ErrSwitchRepo
|
||||
}
|
||||
|
||||
// updateRecentRepoList registers the fact that we opened lazygit in this repo,
|
||||
// so that we can open the same repo via the 'recent repos' menu
|
||||
func (gui *Gui) updateRecentRepoList() error {
|
||||
|
Loading…
Reference in New Issue
Block a user