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 }