1
0
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:
Luka Markušić
2022-04-07 18:45:08 +02:00
committed by Jesse Duffield
parent 336f2772e8
commit 58ed23a47a
2 changed files with 13 additions and 9 deletions

View File

@ -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
} }

View File

@ -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))
}) })
} }
} }