shithub: furgit

Download patch

ref: 645f1df93518a8522e735113eaf947eac421a911
parent: c2cb06aa23a1769a0d84756acccf1ac1358f61ef
author: Runxi Yu <me@runxiyu.org>
date: Tue Mar 10 10:14:00 EDT 2026

object/stored: Move from objectstored

--- a/cmd/show-object/main.go
+++ b/cmd/show-object/main.go
@@ -8,8 +8,8 @@
 	"os"
 	"strings"
 
+	"codeberg.org/lindenii/furgit/object/stored"
 	"codeberg.org/lindenii/furgit/objectid"
-	"codeberg.org/lindenii/furgit/objectstored"
 	"codeberg.org/lindenii/furgit/objecttype"
 	"codeberg.org/lindenii/furgit/repository"
 )
@@ -50,7 +50,7 @@
 		return fmt.Errorf("resolve %q: %w", *name, err)
 	}
 
-	stored, err := repo.ReadStored(id)
+	s, err := repo.ReadStored(id)
 	if err != nil {
 		_ = repo.Close()
 
@@ -57,7 +57,7 @@
 		return fmt.Errorf("read object %s: %w", id, err)
 	}
 
-	printStored(stored)
+	printStored(s)
 
 	err = repo.Close()
 	if err != nil {
@@ -81,11 +81,11 @@
 	return resolved.ID, nil
 }
 
-func printStored(stored objectstored.StoredObject) {
+func printStored(s stored.StoredObject) {
 	var b strings.Builder
 
-	id := stored.ID()
-	ty := stored.Object().ObjectType()
+	id := s.ID()
+	ty := s.Object().ObjectType()
 
 	tyName, ok := objecttype.Name(ty)
 	if !ok {
@@ -95,20 +95,20 @@
 	fmt.Fprintf(&b, "id: %s\n", id)
 	fmt.Fprintf(&b, "type: %s\n", tyName)
 
-	switch stored := stored.(type) {
-	case *objectstored.StoredBlob:
-		blob := stored.Blob()
+	switch s := s.(type) {
+	case *stored.StoredBlob:
+		blob := s.Blob()
 		fmt.Fprintf(&b, "size: %d\n", len(blob.Data))
 		fmt.Fprintf(&b, "data: %q\n", string(blob.Data))
-	case *objectstored.StoredTree:
-		tree := stored.Tree()
+	case *stored.StoredTree:
+		tree := s.Tree()
 		fmt.Fprintf(&b, "entries: %d\n", len(tree.Entries))
 
 		for _, entry := range tree.Entries {
 			fmt.Fprintf(&b, "%06o %s\t%s\n", entry.Mode, entry.ID, entry.Name)
 		}
-	case *objectstored.StoredCommit:
-		commit := stored.Commit()
+	case *stored.StoredCommit:
+		commit := s.Commit()
 		fmt.Fprintf(&b, "tree: %s\n", commit.Tree)
 
 		for _, parent := range commit.Parents {
@@ -118,8 +118,8 @@
 		fmt.Fprintf(&b, "author: %s <%s>\n", commit.Author.Name, commit.Author.Email)
 		fmt.Fprintf(&b, "committer: %s <%s>\n", commit.Committer.Name, commit.Committer.Email)
 		fmt.Fprintf(&b, "message:\n%s\n", string(commit.Message))
-	case *objectstored.StoredTag:
-		tag := stored.Tag()
+	case *stored.StoredTag:
+		tag := s.Tag()
 
 		targetTy, ok := objecttype.Name(tag.TargetType)
 		if !ok {
@@ -135,7 +135,7 @@
 
 		fmt.Fprintf(&b, "message:\n%s\n", string(tag.Message))
 	default:
-		fmt.Fprintf(&b, "%#v\n", stored.Object())
+		fmt.Fprintf(&b, "%#v\n", s.Object())
 	}
 
 	_, _ = os.Stdout.WriteString(b.String())
--- /dev/null
+++ b/object/stored/blob.go
@@ -1,0 +1,35 @@
+package stored
+
+import (
+	"codeberg.org/lindenii/furgit/object"
+	"codeberg.org/lindenii/furgit/objectid"
+)
+
+// StoredBlob is a parsed blob paired with its storage ID.
+//
+// This Blob object is fully materialized in memory.
+// Consider using objectstore/Store.ReadReaderContent.
+type StoredBlob struct {
+	id   objectid.ObjectID
+	blob *object.Blob
+}
+
+// NewStoredBlob creates one stored blob wrapper.
+func NewStoredBlob(id objectid.ObjectID, blob *object.Blob) *StoredBlob {
+	return &StoredBlob{id: id, blob: blob}
+}
+
+// ID returns the object ID this blob was loaded from.
+func (stored *StoredBlob) ID() objectid.ObjectID {
+	return stored.id
+}
+
+// Object returns the parsed blob as the generic object interface.
+func (stored *StoredBlob) Object() object.Object {
+	return stored.blob
+}
+
+// Blob returns the parsed blob value.
+func (stored *StoredBlob) Blob() *object.Blob {
+	return stored.blob
+}
--- /dev/null
+++ b/object/stored/commit.go
@@ -1,0 +1,32 @@
+package stored
+
+import (
+	"codeberg.org/lindenii/furgit/object"
+	"codeberg.org/lindenii/furgit/objectid"
+)
+
+// StoredCommit is a parsed commit paired with its storage ID.
+type StoredCommit struct {
+	id     objectid.ObjectID
+	commit *object.Commit
+}
+
+// NewStoredCommit creates one stored commit wrapper.
+func NewStoredCommit(id objectid.ObjectID, commit *object.Commit) *StoredCommit {
+	return &StoredCommit{id: id, commit: commit}
+}
+
+// ID returns the object ID this commit was loaded from.
+func (stored *StoredCommit) ID() objectid.ObjectID {
+	return stored.id
+}
+
+// Object returns the parsed commit as the generic object interface.
+func (stored *StoredCommit) Object() object.Object {
+	return stored.commit
+}
+
+// Commit returns the parsed commit value.
+func (stored *StoredCommit) Commit() *object.Commit {
+	return stored.commit
+}
--- /dev/null
+++ b/object/stored/object.go
@@ -1,0 +1,14 @@
+package stored
+
+import (
+	"codeberg.org/lindenii/furgit/object"
+	"codeberg.org/lindenii/furgit/objectid"
+)
+
+// StoredObject is a parsed object paired with its storage ID.
+type StoredObject interface {
+	// ID returns the object ID the object was loaded from.
+	ID() objectid.ObjectID
+	// Object returns the parsed object value.
+	Object() object.Object
+}
--- /dev/null
+++ b/object/stored/objectstored.go
@@ -1,0 +1,32 @@
+package stored
+
+import (
+	"codeberg.org/lindenii/furgit/object"
+	"codeberg.org/lindenii/furgit/objectid"
+)
+
+// StoredTag is a parsed tag paired with its storage ID.
+type StoredTag struct {
+	id  objectid.ObjectID
+	tag *object.Tag
+}
+
+// NewStoredTag creates one stored tag wrapper.
+func NewStoredTag(id objectid.ObjectID, tag *object.Tag) *StoredTag {
+	return &StoredTag{id: id, tag: tag}
+}
+
+// ID returns the object ID this tag was loaded from.
+func (stored *StoredTag) ID() objectid.ObjectID {
+	return stored.id
+}
+
+// Object returns the parsed tag as the generic object interface.
+func (stored *StoredTag) Object() object.Object {
+	return stored.tag
+}
+
+// Tag returns the parsed tag value.
+func (stored *StoredTag) Tag() *object.Tag {
+	return stored.tag
+}
--- /dev/null
+++ b/object/stored/stored.go
@@ -1,0 +1,2 @@
+// Package stored wraps parsed objects with their storage object IDs.
+package stored
--- /dev/null
+++ b/object/stored/tree.go
@@ -1,0 +1,32 @@
+package stored
+
+import (
+	"codeberg.org/lindenii/furgit/object"
+	"codeberg.org/lindenii/furgit/objectid"
+)
+
+// StoredTree is a parsed tree paired with its storage ID.
+type StoredTree struct {
+	id   objectid.ObjectID
+	tree *object.Tree
+}
+
+// NewStoredTree creates one stored tree wrapper.
+func NewStoredTree(id objectid.ObjectID, tree *object.Tree) *StoredTree {
+	return &StoredTree{id: id, tree: tree}
+}
+
+// ID returns the object ID this tree was loaded from.
+func (stored *StoredTree) ID() objectid.ObjectID {
+	return stored.id
+}
+
+// Object returns the parsed tree as the generic object interface.
+func (stored *StoredTree) Object() object.Object {
+	return stored.tree
+}
+
+// Tree returns the parsed tree value.
+func (stored *StoredTree) Tree() *object.Tree {
+	return stored.tree
+}
--- a/objectstored/blob.go
+++ /dev/null
@@ -1,35 +1,0 @@
-package objectstored
-
-import (
-	"codeberg.org/lindenii/furgit/object"
-	"codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredBlob is a parsed blob paired with its storage ID.
-//
-// This Blob object is fully materialized in memory.
-// Consider using objectstore/Store.ReadReaderContent.
-type StoredBlob struct {
-	id   objectid.ObjectID
-	blob *object.Blob
-}
-
-// NewStoredBlob creates one stored blob wrapper.
-func NewStoredBlob(id objectid.ObjectID, blob *object.Blob) *StoredBlob {
-	return &StoredBlob{id: id, blob: blob}
-}
-
-// ID returns the object ID this blob was loaded from.
-func (stored *StoredBlob) ID() objectid.ObjectID {
-	return stored.id
-}
-
-// Object returns the parsed blob as the generic object interface.
-func (stored *StoredBlob) Object() object.Object {
-	return stored.blob
-}
-
-// Blob returns the parsed blob value.
-func (stored *StoredBlob) Blob() *object.Blob {
-	return stored.blob
-}
--- a/objectstored/commit.go
+++ /dev/null
@@ -1,32 +1,0 @@
-package objectstored
-
-import (
-	"codeberg.org/lindenii/furgit/object"
-	"codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredCommit is a parsed commit paired with its storage ID.
-type StoredCommit struct {
-	id     objectid.ObjectID
-	commit *object.Commit
-}
-
-// NewStoredCommit creates one stored commit wrapper.
-func NewStoredCommit(id objectid.ObjectID, commit *object.Commit) *StoredCommit {
-	return &StoredCommit{id: id, commit: commit}
-}
-
-// ID returns the object ID this commit was loaded from.
-func (stored *StoredCommit) ID() objectid.ObjectID {
-	return stored.id
-}
-
-// Object returns the parsed commit as the generic object interface.
-func (stored *StoredCommit) Object() object.Object {
-	return stored.commit
-}
-
-// Commit returns the parsed commit value.
-func (stored *StoredCommit) Commit() *object.Commit {
-	return stored.commit
-}
--- a/objectstored/object.go
+++ /dev/null
@@ -1,14 +1,0 @@
-package objectstored
-
-import (
-	"codeberg.org/lindenii/furgit/object"
-	"codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredObject is a parsed object paired with its storage ID.
-type StoredObject interface {
-	// ID returns the object ID the object was loaded from.
-	ID() objectid.ObjectID
-	// Object returns the parsed object value.
-	Object() object.Object
-}
--- a/objectstored/objectstored.go
+++ /dev/null
@@ -1,32 +1,0 @@
-package objectstored
-
-import (
-	"codeberg.org/lindenii/furgit/object"
-	"codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredTag is a parsed tag paired with its storage ID.
-type StoredTag struct {
-	id  objectid.ObjectID
-	tag *object.Tag
-}
-
-// NewStoredTag creates one stored tag wrapper.
-func NewStoredTag(id objectid.ObjectID, tag *object.Tag) *StoredTag {
-	return &StoredTag{id: id, tag: tag}
-}
-
-// ID returns the object ID this tag was loaded from.
-func (stored *StoredTag) ID() objectid.ObjectID {
-	return stored.id
-}
-
-// Object returns the parsed tag as the generic object interface.
-func (stored *StoredTag) Object() object.Object {
-	return stored.tag
-}
-
-// Tag returns the parsed tag value.
-func (stored *StoredTag) Tag() *object.Tag {
-	return stored.tag
-}
--- a/objectstored/stored.go
+++ /dev/null
@@ -1,2 +1,0 @@
-// Package objectstored wraps parsed objects with their storage object IDs.
-package objectstored
--- a/objectstored/tree.go
+++ /dev/null
@@ -1,32 +1,0 @@
-package objectstored
-
-import (
-	"codeberg.org/lindenii/furgit/object"
-	"codeberg.org/lindenii/furgit/objectid"
-)
-
-// StoredTree is a parsed tree paired with its storage ID.
-type StoredTree struct {
-	id   objectid.ObjectID
-	tree *object.Tree
-}
-
-// NewStoredTree creates one stored tree wrapper.
-func NewStoredTree(id objectid.ObjectID, tree *object.Tree) *StoredTree {
-	return &StoredTree{id: id, tree: tree}
-}
-
-// ID returns the object ID this tree was loaded from.
-func (stored *StoredTree) ID() objectid.ObjectID {
-	return stored.id
-}
-
-// Object returns the parsed tree as the generic object interface.
-func (stored *StoredTree) Object() object.Object {
-	return stored.tree
-}
-
-// Tree returns the parsed tree value.
-func (stored *StoredTree) Tree() *object.Tree {
-	return stored.tree
-}
--- a/repository/stored.go
+++ b/repository/stored.go
@@ -4,8 +4,8 @@
 	"fmt"
 
 	"codeberg.org/lindenii/furgit/object"
+	"codeberg.org/lindenii/furgit/object/stored"
 	"codeberg.org/lindenii/furgit/objectid"
-	"codeberg.org/lindenii/furgit/objectstored"
 	"codeberg.org/lindenii/furgit/objecttype"
 )
 
@@ -12,7 +12,7 @@
 // ReadStored reads, parses, and wraps one object by ID.
 //
 //nolint:ireturn
-func (repo *Repository) ReadStored(id objectid.ObjectID) (objectstored.StoredObject, error) {
+func (repo *Repository) ReadStored(id objectid.ObjectID) (stored.StoredObject, error) {
 	parsed, err := repo.readParsedObject(id)
 	if err != nil {
 		return nil, err
@@ -20,13 +20,13 @@
 
 	switch parsed := parsed.(type) {
 	case *object.Blob:
-		return objectstored.NewStoredBlob(id, parsed), nil
+		return stored.NewStoredBlob(id, parsed), nil
 	case *object.Tree:
-		return objectstored.NewStoredTree(id, parsed), nil
+		return stored.NewStoredTree(id, parsed), nil
 	case *object.Commit:
-		return objectstored.NewStoredCommit(id, parsed), nil
+		return stored.NewStoredCommit(id, parsed), nil
 	case *object.Tag:
-		return objectstored.NewStoredTag(id, parsed), nil
+		return stored.NewStoredTag(id, parsed), nil
 	default:
 		return nil, fmt.Errorf("repository: unsupported parsed object type %T", parsed)
 	}
@@ -33,15 +33,15 @@
 }
 
 // ReadStoredBlob reads and parses a blob object by ID.
-func (repo *Repository) ReadStoredBlob(id objectid.ObjectID) (*objectstored.StoredBlob, error) {
-	stored, err := repo.ReadStored(id)
+func (repo *Repository) ReadStoredBlob(id objectid.ObjectID) (*stored.StoredBlob, error) {
+	s, err := repo.ReadStored(id)
 	if err != nil {
 		return nil, err
 	}
 
-	blob, ok := stored.(*objectstored.StoredBlob)
+	blob, ok := s.(*stored.StoredBlob)
 	if !ok {
-		return nil, fmt.Errorf("repository: expected blob object %s, got %v", id, stored.Object().ObjectType())
+		return nil, fmt.Errorf("repository: expected blob object %s, got %v", id, s.Object().ObjectType())
 	}
 
 	return blob, nil
@@ -48,15 +48,15 @@
 }
 
 // ReadStoredTree reads and parses a tree object by ID.
-func (repo *Repository) ReadStoredTree(id objectid.ObjectID) (*objectstored.StoredTree, error) {
-	stored, err := repo.ReadStored(id)
+func (repo *Repository) ReadStoredTree(id objectid.ObjectID) (*stored.StoredTree, error) {
+	s, err := repo.ReadStored(id)
 	if err != nil {
 		return nil, err
 	}
 
-	tree, ok := stored.(*objectstored.StoredTree)
+	tree, ok := s.(*stored.StoredTree)
 	if !ok {
-		return nil, fmt.Errorf("repository: expected tree object %s, got %v", id, stored.Object().ObjectType())
+		return nil, fmt.Errorf("repository: expected tree object %s, got %v", id, s.Object().ObjectType())
 	}
 
 	return tree, nil
@@ -63,15 +63,15 @@
 }
 
 // ReadStoredCommit reads and parses a commit object by ID.
-func (repo *Repository) ReadStoredCommit(id objectid.ObjectID) (*objectstored.StoredCommit, error) {
-	stored, err := repo.ReadStored(id)
+func (repo *Repository) ReadStoredCommit(id objectid.ObjectID) (*stored.StoredCommit, error) {
+	s, err := repo.ReadStored(id)
 	if err != nil {
 		return nil, err
 	}
 
-	commit, ok := stored.(*objectstored.StoredCommit)
+	commit, ok := s.(*stored.StoredCommit)
 	if !ok {
-		return nil, fmt.Errorf("repository: expected commit object %s, got %v", id, stored.Object().ObjectType())
+		return nil, fmt.Errorf("repository: expected commit object %s, got %v", id, s.Object().ObjectType())
 	}
 
 	return commit, nil
@@ -78,15 +78,15 @@
 }
 
 // ReadStoredTag reads and parses a tag object by ID.
-func (repo *Repository) ReadStoredTag(id objectid.ObjectID) (*objectstored.StoredTag, error) {
-	stored, err := repo.ReadStored(id)
+func (repo *Repository) ReadStoredTag(id objectid.ObjectID) (*stored.StoredTag, error) {
+	s, err := repo.ReadStored(id)
 	if err != nil {
 		return nil, err
 	}
 
-	tag, ok := stored.(*objectstored.StoredTag)
+	tag, ok := s.(*stored.StoredTag)
 	if !ok {
-		return nil, fmt.Errorf("repository: expected tag object %s, got %v", id, stored.Object().ObjectType())
+		return nil, fmt.Errorf("repository: expected tag object %s, got %v", id, s.Object().ObjectType())
 	}
 
 	return tag, nil
--- a/repository/tree.go
+++ b/repository/tree.go
@@ -5,7 +5,7 @@
 	"fmt"
 
 	"codeberg.org/lindenii/furgit/object"
-	"codeberg.org/lindenii/furgit/objectstored"
+	"codeberg.org/lindenii/furgit/object/stored"
 )
 
 // ResolveTreeEntry resolves one path within a stored root tree.
@@ -12,7 +12,7 @@
 //
 // parts must contain at least one path segment. Intermediate segments must be
 // tree entries.
-func (repo *Repository) ResolveTreeEntry(tree *objectstored.StoredTree, parts [][]byte) (object.TreeEntry, error) {
+func (repo *Repository) ResolveTreeEntry(tree *stored.StoredTree, parts [][]byte) (object.TreeEntry, error) {
 	if tree == nil {
 		return object.TreeEntry{}, errors.New("repository: nil root tree")
 	}
--