implemented git open and fetch

This commit is contained in:
lourenco
2025-09-22 15:07:35 +02:00
parent 6a53e4841b
commit 97adcc923c
2 changed files with 49 additions and 14 deletions

View File

@@ -10,5 +10,18 @@ func main() {
options := git.GitOptions{ options := git.GitOptions{
URL: "https://git.assilvestrar.club/lourenco/go-hugo-cms.git", URL: "https://git.assilvestrar.club/lourenco/go-hugo-cms.git",
} }
fmt.Println(options.Clone()) _, err := options.Clone()
if err != nil {
fmt.Errorf("%w", err)
}
_, err = options.Open()
if err != nil {
fmt.Errorf("%w", err)
}
err = options.Fetch()
if err != nil {
fmt.Errorf("%w", err)
}
} }

View File

@@ -1,7 +1,6 @@
package git package git
import ( import (
"fmt"
"os" "os"
gogit "github.com/go-git/go-git/v5" gogit "github.com/go-git/go-git/v5"
@@ -9,29 +8,52 @@ import (
type GitOptions struct { type GitOptions struct {
URL string URL string
Name string
RecurseSubmodule bool RecurseSubmodule bool
} }
func (g *GitOptions) Clone() (string, error) { func (g *GitOptions) Clone() (*gogit.Repository, error) {
a := &gogit.CloneOptions{ a := &gogit.CloneOptions{
URL: g.URL, URL: g.URL,
Progress: os.Stdout, Progress: os.Stdout,
} }
if err := a.Validate(); err != nil { if err := a.Validate(); err != nil {
return fmt.Sprintln("Validation failed"), err return nil, err
} }
dir, err := os.MkdirTemp("", "clone") 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 { if err != nil {
return "", err return nil, err
} }
defer os.RemoveAll(dir) return result, nil
}
_, err = gogit.PlainClone(dir, false, a)
if err != nil { func (g *GitOptions) Open() (*gogit.Repository, error) {
return "", err return gogit.PlainOpen(g.Name)
} }
return "Success", nil 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
} }