aboutsummaryrefslogtreecommitdiff
path: root/internal/testgit/object.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/testgit/object.go')
-rw-r--r--internal/testgit/object.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/internal/testgit/object.go b/internal/testgit/object.go
new file mode 100644
index 00000000..0ea4d4d8
--- /dev/null
+++ b/internal/testgit/object.go
@@ -0,0 +1,27 @@
+package testgit
+
+import (
+ "io"
+ "testing"
+
+ "codeberg.org/lindenii/furgit/object/id"
+ "codeberg.org/lindenii/furgit/object/typ"
+)
+
+// HashObject hashes and writes an object and returns its object ID.
+func (repo *Repo) HashObject(tb testing.TB, ty typ.Type, body io.Reader) id.ObjectID {
+ tb.Helper()
+ cmd := repo.Command(tb, "git", "hash-object", "-t", ty.Name(), "-w", "--stdin", "--literally")
+
+ hex, err := cmd.CombinedOutput()
+ if err != nil {
+ tb.Fatalf("hash-object: %v", hex)
+ }
+
+ id, err := id.FromHex(repo.algo, string(hex))
+ if err != nil {
+ tb.Fatalf("parse git hash-object output %q: %v", hex, err)
+ }
+
+ return id
+}