feat(git): --separate-git-dir support

This commit is contained in:
lnu 2022-04-11 20:54:30 +02:00 committed by Jan De Dobbeleer
parent 7e1f4a743d
commit 09735e7ccc
2 changed files with 36 additions and 0 deletions

View file

@ -190,6 +190,15 @@ func (g *Git) shouldDisplay() bool {
return true
}
// check for separate git folder(--separate-git-dir)
// check if the folder contains a HEAD file
if g.env.HasFilesInDir(g.gitWorkingFolder, "HEAD") {
gitFolder := strings.TrimSuffix(g.gitRootFolder, ".git")
g.gitRootFolder = g.gitWorkingFolder
g.gitWorkingFolder = gitFolder
g.gitRealFolder = gitFolder
return true
}
return false
}
return false

View file

@ -109,6 +109,33 @@ func TestEnabledInSubmodule(t *testing.T) {
assert.Equal(t, "/dev/parent/test-submodule/../.git/modules/test-submodule", g.gitRootFolder)
}
func TestEnabledInSeparateGitDir(t *testing.T) {
env := new(mock.MockedEnvironment)
env.On("InWSLSharedDrive").Return(false)
env.On("HasCommand", "git").Return(true)
env.On("GOOS").Return("")
env.On("IsWsl").Return(false)
fileInfo := &environment.FileInfo{
Path: "/dev/parent/test-separate-git-dir/.git",
ParentFolder: "/dev/parent/test-separate-git-dir",
IsDir: false,
}
env.On("HasFilesInDir", "/dev/separate-git-dir", "HEAD").Return(true)
env.On("FileContent", "/dev/parent/test-separate-git-dir//HEAD").Return("")
env.MockGitCommand("/dev/parent/test-separate-git-dir/", "", "describe", "--tags", "--exact-match")
env.On("HasParentFilePath", ".git").Return(fileInfo, nil)
env.On("FileContent", "/dev/parent/test-separate-git-dir/.git").Return("gitdir: /dev/separate-git-dir")
g := &Git{
scm: scm{
env: env,
props: properties.Map{},
},
}
assert.True(t, g.Enabled())
assert.Equal(t, "/dev/parent/test-separate-git-dir/", g.gitWorkingFolder)
assert.Equal(t, "/dev/parent/test-separate-git-dir/", g.gitRealFolder)
assert.Equal(t, "/dev/separate-git-dir", g.gitRootFolder)
}
func TestGetGitOutputForCommand(t *testing.T) {
args := []string{"-C", "", "--no-optional-locks", "-c", "core.quotepath=false", "-c", "color.status=false"}
commandArgs := []string{"symbolic-ref", "--short", "HEAD"}