38 lines
569 B
Go
38 lines
569 B
Go
package git
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
gogit "github.com/go-git/go-git/v5"
|
|
)
|
|
|
|
type GitOptions struct {
|
|
URL string
|
|
RecurseSubmodule bool
|
|
}
|
|
|
|
func (g *GitOptions) Clone() (string, error) {
|
|
a := &gogit.CloneOptions{
|
|
URL: g.URL,
|
|
Progress: os.Stdout,
|
|
}
|
|
if err := a.Validate(); err != nil {
|
|
return fmt.Sprintln("Validation failed"), err
|
|
}
|
|
|
|
dir, err := os.MkdirTemp("", "clone")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
defer os.RemoveAll(dir)
|
|
|
|
_, err = gogit.PlainClone(dir, false, a)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return "Success", nil
|
|
}
|