mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-06-15 00:15:32 +02:00
Make worktrees work
This commit is contained in:
committed by
Jesse Duffield
parent
336f2772e8
commit
58ed23a47a
@ -63,7 +63,7 @@ func NewGitCommand(
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
repo, err := setupRepository(gogit.PlainOpen, cmn.Tr.GitconfigParseErr)
|
repo, err := setupRepository(gogit.PlainOpenWithOptions, gogit.PlainOpenOptions{DetectDotGit: false, EnableDotGitCommonDir: true}, cmn.Tr.GitconfigParseErr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -207,7 +207,7 @@ func resolvePath(path string) (string, error) {
|
|||||||
return filepath.EvalSymlinks(path)
|
return filepath.EvalSymlinks(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupRepository(openGitRepository func(string) (*gogit.Repository, error), gitConfigParseErrorStr string) (*gogit.Repository, error) {
|
func setupRepository(openGitRepository func(string, *gogit.PlainOpenOptions) (*gogit.Repository, error), options gogit.PlainOpenOptions, gitConfigParseErrorStr string) (*gogit.Repository, error) {
|
||||||
unresolvedPath := env.GetGitDirEnv()
|
unresolvedPath := env.GetGitDirEnv()
|
||||||
if unresolvedPath == "" {
|
if unresolvedPath == "" {
|
||||||
var err error
|
var err error
|
||||||
@ -222,7 +222,7 @@ func setupRepository(openGitRepository func(string) (*gogit.Repository, error),
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
repository, err := openGitRepository(path)
|
repository, err := openGitRepository(path, &options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if strings.Contains(err.Error(), `unquoted '\' must be followed by new line`) {
|
if strings.Contains(err.Error(), `unquoted '\' must be followed by new line`) {
|
||||||
return nil, errors.New(gitConfigParseErrorStr)
|
return nil, errors.New(gitConfigParseErrorStr)
|
||||||
@ -254,7 +254,7 @@ func findDotGitDir(stat func(string) (os.FileInfo, error), readFile func(filenam
|
|||||||
}
|
}
|
||||||
fileContent := string(fileBytes)
|
fileContent := string(fileBytes)
|
||||||
if !strings.HasPrefix(fileContent, "gitdir: ") {
|
if !strings.HasPrefix(fileContent, "gitdir: ") {
|
||||||
return "", errors.New(".git is a file which suggests we are in a submodule but the file's contents do not contain a gitdir pointing to the actual .git directory")
|
return "", errors.New(".git is a file which suggests we are in a submodule or a worktree but the file's contents do not contain a gitdir pointing to the actual .git directory")
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(strings.TrimPrefix(fileContent, "gitdir: ")), nil
|
return strings.TrimSpace(strings.TrimPrefix(fileContent, "gitdir: ")), nil
|
||||||
}
|
}
|
||||||
|
@ -116,18 +116,20 @@ func TestNavigateToRepoRootDirectory(t *testing.T) {
|
|||||||
func TestSetupRepository(t *testing.T) {
|
func TestSetupRepository(t *testing.T) {
|
||||||
type scenario struct {
|
type scenario struct {
|
||||||
testName string
|
testName string
|
||||||
openGitRepository func(string) (*gogit.Repository, error)
|
openGitRepository func(string, *gogit.PlainOpenOptions) (*gogit.Repository, error)
|
||||||
errorStr string
|
errorStr string
|
||||||
|
options gogit.PlainOpenOptions
|
||||||
test func(*gogit.Repository, error)
|
test func(*gogit.Repository, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
scenarios := []scenario{
|
scenarios := []scenario{
|
||||||
{
|
{
|
||||||
"A gitconfig parsing error occurred",
|
"A gitconfig parsing error occurred",
|
||||||
func(string) (*gogit.Repository, error) {
|
func(string, *gogit.PlainOpenOptions) (*gogit.Repository, error) {
|
||||||
return nil, fmt.Errorf(`unquoted '\' must be followed by new line`)
|
return nil, fmt.Errorf(`unquoted '\' must be followed by new line`)
|
||||||
},
|
},
|
||||||
"error translated",
|
"error translated",
|
||||||
|
gogit.PlainOpenOptions{},
|
||||||
func(r *gogit.Repository, err error) {
|
func(r *gogit.Repository, err error) {
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.EqualError(t, err, "error translated")
|
assert.EqualError(t, err, "error translated")
|
||||||
@ -135,10 +137,11 @@ func TestSetupRepository(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"A gogit error occurred",
|
"A gogit error occurred",
|
||||||
func(string) (*gogit.Repository, error) {
|
func(string, *gogit.PlainOpenOptions) (*gogit.Repository, error) {
|
||||||
return nil, fmt.Errorf("Error from inside gogit")
|
return nil, fmt.Errorf("Error from inside gogit")
|
||||||
},
|
},
|
||||||
"",
|
"",
|
||||||
|
gogit.PlainOpenOptions{},
|
||||||
func(r *gogit.Repository, err error) {
|
func(r *gogit.Repository, err error) {
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.EqualError(t, err, "Error from inside gogit")
|
assert.EqualError(t, err, "Error from inside gogit")
|
||||||
@ -146,13 +149,14 @@ func TestSetupRepository(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Setup done properly",
|
"Setup done properly",
|
||||||
func(string) (*gogit.Repository, error) {
|
func(string, *gogit.PlainOpenOptions) (*gogit.Repository, error) {
|
||||||
assert.NoError(t, os.RemoveAll("/tmp/lazygit-test"))
|
assert.NoError(t, os.RemoveAll("/tmp/lazygit-test"))
|
||||||
r, err := gogit.PlainInit("/tmp/lazygit-test", false)
|
r, err := gogit.PlainInit("/tmp/lazygit-test", false)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
return r, nil
|
return r, nil
|
||||||
},
|
},
|
||||||
"",
|
"",
|
||||||
|
gogit.PlainOpenOptions{},
|
||||||
func(r *gogit.Repository, err error) {
|
func(r *gogit.Repository, err error) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NotNil(t, r)
|
assert.NotNil(t, r)
|
||||||
@ -163,7 +167,7 @@ func TestSetupRepository(t *testing.T) {
|
|||||||
for _, s := range scenarios {
|
for _, s := range scenarios {
|
||||||
s := s
|
s := s
|
||||||
t.Run(s.testName, func(t *testing.T) {
|
t.Run(s.testName, func(t *testing.T) {
|
||||||
s.test(setupRepository(s.openGitRepository, s.errorStr))
|
s.test(setupRepository(s.openGitRepository, s.options, s.errorStr))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user