bidet

commit 211fd0009b9dd8e579158ff492f92736e00cf03f

tree

parent:
7018b5a30bf11213e8a74b4f2dae8ae010c650a0

nmyk <nick@nmyk.io>

2026-02-24T15:36:51-05:00

do not display binary blobs

diff --git a/internal/core/repo.go b/internal/core/repo.go
index a2befcad3b24d4eeed2f859df06c36a28a4f6430..9ebdb909e99d3ee6cfbed6a0287efa70e93d403f 100644
--- a/internal/core/repo.go
+++ b/internal/core/repo.go
@@ -1,14 +1,20 @@
 package core
 
 import (
+	"bytes"
 	"errors"
+	"fmt"
+	"io"
 	"os"
 	"path"
 	"strings"
 
+	"github.com/dustin/go-humanize"
+
 	"github.com/go-git/go-git/v6"
 	"github.com/go-git/go-git/v6/plumbing"
 	"github.com/go-git/go-git/v6/plumbing/object"
+	"github.com/go-git/go-git/v6/utils/binary"
 )
 
 const dotGit = ".git"
@@ -57,15 +63,26 @@ 	file, err := repo.BlobObject(entry.Hash)
 	if err != nil {
 		return "", err
 	}
-	reader, err := file.Reader()
+	r, err := file.Reader()
+	if err != nil {
+		return "", err
+	}
+	data, err := io.ReadAll(r)
 	if err != nil {
 		return "", err
 	}
-	defer reader.Close()
+	defer r.Close()
+	binReader := bytes.NewReader(data)
 
-	content := make([]byte, file.Size)
-	reader.Read(content)
-	return string(content), nil
+	isBin, err := binary.IsBinary(binReader)
+	if err != nil {
+		return "", err
+	}
+	if isBin {
+		return fmt.Sprintf("(%s binary file)", humanize.Bytes(uint64(file.Size))), nil
+	} else {
+		return string(data), nil
+	}
 }
 
 type Commit struct {