diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-22 16:30:47 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-22 16:30:47 +0200 | 
| commit | e1664fcbc4685906d3dabc66bf947a17bce7efc0 (patch) | |
| tree | c9ec73616b841e72397fca975e46f691d031e621 /pkg/service | |
| parent | 19839337ce0c74b67c5480b71e98d97a112aa104 (diff) | |
| download | cerrado-e1664fcbc4685906d3dabc66bf947a17bce7efc0.tar.gz cerrado-e1664fcbc4685906d3dabc66bf947a17bce7efc0.tar.bz2 cerrado-e1664fcbc4685906d3dabc66bf947a17bce7efc0.zip | |
feat: Add archive capability
Diffstat (limited to 'pkg/service')
| -rw-r--r-- | pkg/service/git.go | 25 | 
1 files changed, 25 insertions, 0 deletions
| diff --git a/pkg/service/git.go b/pkg/service/git.go index 6bb6e9e..cbee90a 100644 --- a/pkg/service/git.go +++ b/pkg/service/git.go @@ -1,7 +1,9 @@  package service  import ( +	"compress/gzip"  	"errors" +	"io"  	"log/slog"  	"git.gabrielgio.me/cerrado/pkg/config" @@ -92,6 +94,29 @@ func (g *GitService) ListCommits(name, ref string, count int) ([]*object.Commit,  	return repo.Commits(count)  } +func (g *GitService) WriteTarGZip(w io.Writer, name, ref string, filename string) error { +	r := g.configRepo.GetByName(name) +	if r == nil { +		return RepositoryNotFoundErr +	} + +	repo, err := git.OpenRepository(r.Path) +	if err != nil { +		return err +	} + +	err = repo.SetRef(ref) +	if err != nil { +		return err +	} + +	gw := gzip.NewWriter(w) +	defer gw.Close() + +	return repo.WriteTar(gw, filename) + +} +  func (g *GitService) GetTree(name, ref, path string) (*object.Tree, error) {  	r := g.configRepo.GetByName(name)  	if r == nil { | 
