diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-07 14:02:25 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-06-07 14:02:25 +0200 | 
| commit | 18aa098f50e2a2c7db01dd4d04dde460fd40f5d5 (patch) | |
| tree | 5e3b3d3ba3206f2765db1a23a378275852154a51 /pkg/git | |
| parent | d0e0c1eb99303e1000140d4b98c610077278dc42 (diff) | |
| download | cerrado-18aa098f50e2a2c7db01dd4d04dde460fd40f5d5.tar.gz cerrado-18aa098f50e2a2c7db01dd4d04dde460fd40f5d5.tar.bz2 cerrado-18aa098f50e2a2c7db01dd4d04dde460fd40f5d5.zip | |
feat: Add blob endpoint
Diffstat (limited to 'pkg/git')
| -rw-r--r-- | pkg/git/git.go | 67 | 
1 files changed, 66 insertions, 1 deletions
| diff --git a/pkg/git/git.go b/pkg/git/git.go index ce72465..6a7b91f 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -13,7 +13,8 @@ import (  var ()  var ( -	MissingRefErr = errors.New("Reference not found") +	MissingRefErr  = errors.New("Reference not found") +	TreeForFileErr = errors.New("Trying to get tree of a file")  )  type ( @@ -145,9 +146,73 @@ func (g *GitRepository) Branches() ([]*plumbing.Reference, error) {  	return branches, nil  } +func (g *GitRepository) Tree(path string) (*object.Tree, error) { +	err := g.validateRef() +	if err != nil { +		return nil, err +	} + +	c, err := g.repository.CommitObject(g.ref) +	if err != nil { +		return nil, err +	} + +	tree, err := c.Tree() +	if err != nil { +		return nil, err +	} + +	if path == "" { +		return tree, nil +	} else { +		o, err := tree.FindEntry(path) +		if err != nil { +			return nil, err +		} + +		if !o.Mode.IsFile() { +			subtree, err := tree.Tree(path) +			if err != nil { +				return nil, err +			} +			return subtree, nil +		} else { +			return nil, TreeForFileErr +		} +	} +} +  func (g *GitRepository) validateRef() error {  	if !g.setRef {  		return g.SetRef("")  	}  	return nil  } + +func (g *GitRepository) FileContent(path string) (string, error) { +	c, err := g.repository.CommitObject(g.ref) +	if err != nil { +		return "", err +	} + +	tree, err := c.Tree() +	if err != nil { +		return "", err +	} + +	file, err := tree.File(path) +	if err != nil { +		return "", err +	} + +	isbin, err := file.IsBinary() +	if err != nil { +		return "", err +	} + +	if !isbin { +		return file.Contents() +	} else { +		return "Binary file", nil +	} +} | 
