diff --git a/pkg/volume/git_repo/git_repo.go b/pkg/volume/git_repo/git_repo.go index 03dad5fdb91..332f33e5ab1 100644 --- a/pkg/volume/git_repo/git_repo.go +++ b/pkg/volume/git_repo/git_repo.go @@ -20,6 +20,7 @@ import ( "fmt" "io/ioutil" "path" + "path/filepath" "strings" "k8s.io/api/core/v1" @@ -194,7 +195,7 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { return err } - args := []string{"clone", b.source} + args := []string{"clone", "--", b.source} if len(b.target) != 0 { args = append(args, b.target) @@ -218,7 +219,7 @@ func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { var subdir string switch { - case b.target == ".": + case len(b.target) != 0 && filepath.Clean(b.target) == ".": // if target dir is '.', use the current dir subdir = path.Join(dir) case len(files) == 1: diff --git a/pkg/volume/git_repo/git_repo_test.go b/pkg/volume/git_repo/git_repo_test.go index 99d29a163a8..601ce9f664e 100644 --- a/pkg/volume/git_repo/git_repo_test.go +++ b/pkg/volume/git_repo/git_repo_test.go @@ -93,7 +93,7 @@ func TestPlugin(t *testing.T) { }, expecteds: []expectedCommand{ { - cmd: []string{"git", "clone", gitUrl, "target_dir"}, + cmd: []string{"git", "clone", "--", gitUrl, "target_dir"}, dir: "", }, { @@ -120,7 +120,7 @@ func TestPlugin(t *testing.T) { }, expecteds: []expectedCommand{ { - cmd: []string{"git", "clone", gitUrl, "target_dir"}, + cmd: []string{"git", "clone", "--", gitUrl, "target_dir"}, dir: "", }, }, @@ -138,7 +138,7 @@ func TestPlugin(t *testing.T) { }, expecteds: []expectedCommand{ { - cmd: []string{"git", "clone", gitUrl}, + cmd: []string{"git", "clone", "--", gitUrl}, dir: "", }, }, @@ -158,7 +158,7 @@ func TestPlugin(t *testing.T) { }, expecteds: []expectedCommand{ { - cmd: []string{"git", "clone", gitUrl}, + cmd: []string{"git", "clone", "--", gitUrl}, dir: "", }, { @@ -186,7 +186,35 @@ func TestPlugin(t *testing.T) { }, expecteds: []expectedCommand{ { - cmd: []string{"git", "clone", gitUrl, "."}, + cmd: []string{"git", "clone", "--", gitUrl, "."}, + dir: "", + }, + { + cmd: []string{"git", "checkout", revision}, + dir: "", + }, + { + cmd: []string{"git", "reset", "--hard"}, + dir: "", + }, + }, + isExpectedFailure: false, + }, + { + name: "current-dir-mess", + vol: &v1.Volume{ + Name: "vol1", + VolumeSource: v1.VolumeSource{ + GitRepo: &v1.GitRepoVolumeSource{ + Repository: gitUrl, + Revision: revision, + Directory: "./.", + }, + }, + }, + expecteds: []expectedCommand{ + { + cmd: []string{"git", "clone", "--", gitUrl, "./."}, dir: "", }, {