Files
go-hugo-cms/pkg/git/git.go
2025-09-25 12:22:40 +02:00

66 lines
1.1 KiB
Go

package git
import (
"fmt"
"io"
"os"
gogit "github.com/go-git/go-git/v5"
)
type GitOptions struct {
URL string
Name string
RecurseSubmodule bool
}
func (g *GitOptions) Clone() error {
a := &gogit.CloneOptions{
URL: g.URL,
Progress: os.Stdout,
}
if err := a.Validate(); err != nil {
return err
}
if err := os.Mkdir(g.Name, 0750); err != nil && !os.IsExist(err) {
return err
}
_, err := gogit.PlainClone(g.Name, false, a)
if err != nil {
return err
}
return nil
}
func (g *GitOptions) Open() (*gogit.Repository, error) {
return gogit.PlainOpen(g.Name)
}
func (g *GitOptions) Fetch() error {
repo, err := g.Open()
if err != nil {
return err
}
a := &gogit.FetchOptions{
RemoteName: "origin",
Progress: os.Stdout,
}
if err := a.Validate(); err != nil {
return err
}
if err = repo.Fetch(a); err != nil {
if err == gogit.NoErrAlreadyUpToDate { // not an actual error
io.WriteString(os.Stdout, fmt.Sprintln("already up to date")) // keeping this here just for debug
return nil
}
return err
}
return nil
}