aboutsummaryrefslogtreecommitdiff
path: root/pkg/git
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-06-23 17:04:27 +0200
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-06-23 17:04:27 +0200
commit72495f4538215051540eb05c14db0ed16142e06e (patch)
tree293f0f4a9ad4954b8a2390d392e0a4a3bc9a3569 /pkg/git
parent6b96b76d66a929a2b428505809fda23a19005c63 (diff)
downloadcerrado-72495f4538215051540eb05c14db0ed16142e06e.tar.gz
cerrado-72495f4538215051540eb05c14db0ed16142e06e.tar.bz2
cerrado-72495f4538215051540eb05c14db0ed16142e06e.zip
ref: Move binary handling up to the handler
Now it is up to the handler to decide whether it wants to render a file or not, git only returns the content.
Diffstat (limited to 'pkg/git')
-rw-r--r--pkg/git/git.go43
1 files changed, 33 insertions, 10 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go
index 66338a1..6b58d35 100644
--- a/pkg/git/git.go
+++ b/pkg/git/git.go
@@ -2,6 +2,7 @@ package git
import (
"archive/tar"
+ "bytes"
"errors"
"fmt"
"io"
@@ -197,32 +198,54 @@ func (g *GitRepository) validateRef() error {
return nil
}
-func (g *GitRepository) FileContent(path string) (string, error) {
+func (g *GitRepository) IsBinary(path string) (bool, error) {
+ tree, err := g.Tree("")
+ if err != nil {
+ return false, err
+ }
+
+ file, err := tree.File(path)
+ if err != nil {
+ return false, err
+ }
+
+ return file.IsBinary()
+}
+
+func (g *GitRepository) FileContent(path string) ([]byte, error) {
+ err := g.validateRef()
+ if err != nil {
+ return nil, err
+ }
+
c, err := g.repository.CommitObject(g.ref)
if err != nil {
- return "", err
+ return nil, err
}
tree, err := c.Tree()
if err != nil {
- return "", err
+ return nil, err
}
file, err := tree.File(path)
if err != nil {
- return "", err
+ return nil, err
}
- isbin, err := file.IsBinary()
+ r, err := file.Blob.Reader()
if err != nil {
- return "", err
+ return nil, err
}
+ defer r.Close()
- if !isbin {
- return file.Contents()
- } else {
- return "Binary file", nil
+ var buf bytes.Buffer
+ _, err = io.Copy(&buf, r)
+ if err != nil {
+ return nil, err
}
+
+ return buf.Bytes(), nil
}
func (g *GitRepository) WriteTar(w io.Writer, prefix string) error {