Files
go-hugo-cms/pkg/git/git.go
2025-09-22 15:07:35 +02:00

60 lines
947 B
Go

package git
import (
"os"
gogit "github.com/go-git/go-git/v5"
)
type GitOptions struct {
URL string
Name string
RecurseSubmodule bool
}
func (g *GitOptions) Clone() (*gogit.Repository, error) {
a := &gogit.CloneOptions{
URL: g.URL,
Progress: os.Stdout,
}
if err := a.Validate(); err != nil {
return nil, err
}
if err := os.Mkdir(g.Name, 0750); err != nil && !os.IsExist(err) {
return nil, err
}
result, err := gogit.PlainClone(g.Name, false, a)
if err != nil {
return nil, err
}
return result, nil
}
func (g *GitOptions) Open() (*gogit.Repository, error) {
return gogit.PlainOpen(g.Name)
}
func (g *GitOptions) Fetch() error {
a := &gogit.FetchOptions{
RemoteName: g.Name,
RemoteURL: g.URL,
}
if err := a.Validate(); err != nil {
return err
}
repo, err := g.Open()
if err != nil {
return err
}
if err := repo.Fetch(a); err != nil {
return err
}
return nil
}