From 97adcc923c9399d3533bdfad1cf4d3c0bd511741 Mon Sep 17 00:00:00 2001 From: lourenco <> Date: Mon, 22 Sep 2025 15:07:35 +0200 Subject: [PATCH] implemented git open and fetch --- cmd/go-hugo-cms/main.go | 15 ++++++++++++- pkg/git/git.go | 48 ++++++++++++++++++++++++++++++----------- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/cmd/go-hugo-cms/main.go b/cmd/go-hugo-cms/main.go index 4445d9c..d5c70b0 100644 --- a/cmd/go-hugo-cms/main.go +++ b/cmd/go-hugo-cms/main.go @@ -10,5 +10,18 @@ func main() { options := git.GitOptions{ 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) + } } diff --git a/pkg/git/git.go b/pkg/git/git.go index d87c3a7..c6bf7f8 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -1,7 +1,6 @@ package git import ( - "fmt" "os" gogit "github.com/go-git/go-git/v5" @@ -9,29 +8,52 @@ import ( type GitOptions struct { URL string + Name string RecurseSubmodule bool } -func (g *GitOptions) Clone() (string, error) { +func (g *GitOptions) Clone() (*gogit.Repository, error) { a := &gogit.CloneOptions{ URL: g.URL, Progress: os.Stdout, } 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 { - return "", err + return nil, err } - defer os.RemoveAll(dir) - - _, err = gogit.PlainClone(dir, false, a) - if err != nil { - return "", err - } - - return "Success", nil + 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 }