mirror of https://github.com/k3s-io/k3s
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package git
|
|
|
|
import (
|
|
"sigs.k8s.io/kustomize/api/filesys"
|
|
)
|
|
|
|
// Cloner is a function that can clone a git repo.
|
|
type Cloner func(repoSpec *RepoSpec) error
|
|
|
|
// ClonerUsingGitExec uses a local git install, as opposed
|
|
// to say, some remote API, to obtain a local clone of
|
|
// a remote repo.
|
|
func ClonerUsingGitExec(repoSpec *RepoSpec) error {
|
|
r, err := newCmdRunner()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
repoSpec.Dir = r.dir
|
|
if err = r.run("init"); err != nil {
|
|
return err
|
|
}
|
|
if err = r.run(
|
|
"remote", "add", "origin", repoSpec.CloneSpec()); err != nil {
|
|
return err
|
|
}
|
|
ref := "HEAD"
|
|
if repoSpec.Ref != "" {
|
|
ref = repoSpec.Ref
|
|
}
|
|
if err = r.run("fetch", "--depth=1", "origin", ref); err != nil {
|
|
return err
|
|
}
|
|
if err = r.run("checkout", "FETCH_HEAD"); err != nil {
|
|
return err
|
|
}
|
|
return r.run("submodule", "update", "--init", "--recursive")
|
|
}
|
|
|
|
// DoNothingCloner returns a cloner that only sets
|
|
// cloneDir field in the repoSpec. It's assumed that
|
|
// the cloneDir is associated with some fake filesystem
|
|
// used in a test.
|
|
func DoNothingCloner(dir filesys.ConfirmedDir) Cloner {
|
|
return func(rs *RepoSpec) error {
|
|
rs.Dir = dir
|
|
return nil
|
|
}
|
|
}
|