diff options
| author | 2026-03-25 14:49:17 +0000 | |
|---|---|---|
| committer | 2026-03-25 15:02:22 +0000 | |
| commit | 7847657e0820af98120031f719b8ede635ad8c07 (patch) | |
| tree | 8c4439c78f72f1382edc809b49be33115847b6e7 /object/resolve | |
| parent | object: Remove type.go (diff) | |
| signature | No signature | |
object: Split each object type into its own package v0.1.108
Diffstat (limited to 'object/resolve')
| -rw-r--r-- | object/resolve/exact_blob.go | 6 | ||||
| -rw-r--r-- | object/resolve/exact_commit.go | 6 | ||||
| -rw-r--r-- | object/resolve/exact_tag.go | 6 | ||||
| -rw-r--r-- | object/resolve/exact_tree.go | 6 | ||||
| -rw-r--r-- | object/resolve/path.go | 20 | ||||
| -rw-r--r-- | object/resolve/peel_to_blob.go | 9 | ||||
| -rw-r--r-- | object/resolve/peel_to_commit.go | 9 | ||||
| -rw-r--r-- | object/resolve/peel_to_tag.go | 4 | ||||
| -rw-r--r-- | object/resolve/peel_to_tree.go | 12 | ||||
| -rw-r--r-- | object/resolve/resolver.go | 2 | ||||
| -rw-r--r-- | object/resolve/treefs.go | 4 | ||||
| -rw-r--r-- | object/resolve/treefs_entry.go | 12 | ||||
| -rw-r--r-- | object/resolve/treefs_info.go | 16 | ||||
| -rw-r--r-- | object/resolve/treefs_open.go | 4 | ||||
| -rw-r--r-- | object/resolve/treefs_readfile.go | 4 | ||||
| -rw-r--r-- | object/resolve/treefs_stat.go | 2 | ||||
| -rw-r--r-- | object/resolve/treefs_test.go | 10 |
17 files changed, 68 insertions, 64 deletions
diff --git a/object/resolve/exact_blob.go b/object/resolve/exact_blob.go index 07501513..2cd8b298 100644 --- a/object/resolve/exact_blob.go +++ b/object/resolve/exact_blob.go @@ -3,19 +3,19 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/blob" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" ) // ExactBlob reads, parses, and wraps the blob at id. -func (r *Resolver) ExactBlob(id objectid.ObjectID) (*stored.Stored[*object.Blob], error) { +func (r *Resolver) ExactBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) { parsed, err := r.parseObject(id) if err != nil { return nil, err } - blob, ok := parsed.(*object.Blob) + blob, ok := parsed.(*blob.Blob) if !ok { return nil, fmt.Errorf("object/resolve: expected blob object %s, got %v", id, parsed.ObjectType()) } diff --git a/object/resolve/exact_commit.go b/object/resolve/exact_commit.go index ba76baa2..e6b379aa 100644 --- a/object/resolve/exact_commit.go +++ b/object/resolve/exact_commit.go @@ -3,19 +3,19 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/commit" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" ) // ExactCommit reads, parses, and wraps the commit at id. -func (r *Resolver) ExactCommit(id objectid.ObjectID) (*stored.Stored[*object.Commit], error) { +func (r *Resolver) ExactCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) { parsed, err := r.parseObject(id) if err != nil { return nil, err } - commit, ok := parsed.(*object.Commit) + commit, ok := parsed.(*commit.Commit) if !ok { return nil, fmt.Errorf("object/resolve: expected commit object %s, got %v", id, parsed.ObjectType()) } diff --git a/object/resolve/exact_tag.go b/object/resolve/exact_tag.go index 26bf2b11..8c5d22c9 100644 --- a/object/resolve/exact_tag.go +++ b/object/resolve/exact_tag.go @@ -3,19 +3,19 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" + "codeberg.org/lindenii/furgit/object/tag" ) // ExactTag reads, parses, and wraps the tag at id. -func (r *Resolver) ExactTag(id objectid.ObjectID) (*stored.Stored[*object.Tag], error) { +func (r *Resolver) ExactTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) { parsed, err := r.parseObject(id) if err != nil { return nil, err } - tag, ok := parsed.(*object.Tag) + tag, ok := parsed.(*tag.Tag) if !ok { return nil, fmt.Errorf("object/resolve: expected tag object %s, got %v", id, parsed.ObjectType()) } diff --git a/object/resolve/exact_tree.go b/object/resolve/exact_tree.go index aaf40236..de58ddb1 100644 --- a/object/resolve/exact_tree.go +++ b/object/resolve/exact_tree.go @@ -3,19 +3,19 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" + "codeberg.org/lindenii/furgit/object/tree" ) // ExactTree reads, parses, and wraps the tree at id. -func (r *Resolver) ExactTree(id objectid.ObjectID) (*stored.Stored[*object.Tree], error) { +func (r *Resolver) ExactTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) { parsed, err := r.parseObject(id) if err != nil { return nil, err } - tree, ok := parsed.(*object.Tree) + tree, ok := parsed.(*tree.Tree) if !ok { return nil, fmt.Errorf("object/resolve: expected tree object %s, got %v", id, parsed.ObjectType()) } diff --git a/object/resolve/path.go b/object/resolve/path.go index 1f865403..d11f3b48 100644 --- a/object/resolve/path.go +++ b/object/resolve/path.go @@ -3,8 +3,8 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" + "codeberg.org/lindenii/furgit/object/tree" ) // PathEmptyError indicates that Path received no segments. @@ -59,24 +59,24 @@ func (err *PathNotTreeError) Error() string { // // If your entry names are valid UTF-8 and uses / solely as segment separators, // it may be convenient to use TreeFS for an io/fs.FS-like interface. -func (r *Resolver) Path(root objectid.ObjectID, parts [][]byte) (object.TreeEntry, error) { +func (r *Resolver) Path(root objectid.ObjectID, parts [][]byte) (tree.TreeEntry, error) { if len(parts) == 0 { - return object.TreeEntry{}, &PathEmptyError{} + return tree.TreeEntry{}, &PathEmptyError{} } current, err := r.PeelToTree(root) if err != nil { - return object.TreeEntry{}, err + return tree.TreeEntry{}, err } for i, part := range parts { if len(part) == 0 { - return object.TreeEntry{}, &PathSegmentEmptyError{Index: i} + return tree.TreeEntry{}, &PathSegmentEmptyError{Index: i} } entry := current.Object().Entry(part) if entry == nil { - return object.TreeEntry{}, &PathNotFoundError{ + return tree.TreeEntry{}, &PathNotFoundError{ Index: i, Name: append([]byte(nil), part...), } @@ -86,8 +86,8 @@ func (r *Resolver) Path(root objectid.ObjectID, parts [][]byte) (object.TreeEntr return *entry, nil } - if entry.Mode != object.FileModeDir { - return object.TreeEntry{}, &PathNotTreeError{ + if entry.Mode != tree.FileModeDir { + return tree.TreeEntry{}, &PathNotTreeError{ Index: i, Name: append([]byte(nil), part...), } @@ -95,9 +95,9 @@ func (r *Resolver) Path(root objectid.ObjectID, parts [][]byte) (object.TreeEntr current, err = r.ExactTree(entry.ID) if err != nil { - return object.TreeEntry{}, err + return tree.TreeEntry{}, err } } - return object.TreeEntry{}, &PathNotFoundError{Index: len(parts) - 1} + return tree.TreeEntry{}, &PathNotFoundError{Index: len(parts) - 1} } diff --git a/object/resolve/peel_to_blob.go b/object/resolve/peel_to_blob.go index 424e309f..c8aec1ad 100644 --- a/object/resolve/peel_to_blob.go +++ b/object/resolve/peel_to_blob.go @@ -3,13 +3,14 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/blob" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" + "codeberg.org/lindenii/furgit/object/tag" ) // PeelToBlob peels tags until it reaches a blob. -func (r *Resolver) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*object.Blob], error) { +func (r *Resolver) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) { for { obj, err := r.ExactObject(id) if err != nil { @@ -17,9 +18,9 @@ func (r *Resolver) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*object.Blob } switch parsed := obj.Object().(type) { - case *object.Blob: + case *blob.Blob: return stored.New(id, parsed), nil - case *object.Tag: + case *tag.Tag: id = parsed.Target default: return nil, fmt.Errorf("object/resolve: expected blob-ish object %s, got %v", id, parsed.ObjectType()) diff --git a/object/resolve/peel_to_commit.go b/object/resolve/peel_to_commit.go index 355a3055..0272dd83 100644 --- a/object/resolve/peel_to_commit.go +++ b/object/resolve/peel_to_commit.go @@ -3,13 +3,14 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/commit" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" + "codeberg.org/lindenii/furgit/object/tag" ) // PeelToCommit peels tags until it reaches a commit. -func (r *Resolver) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*object.Commit], error) { +func (r *Resolver) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) { for { obj, err := r.ExactObject(id) if err != nil { @@ -17,9 +18,9 @@ func (r *Resolver) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*object.Co } switch parsed := obj.Object().(type) { - case *object.Commit: + case *commit.Commit: return stored.New(id, parsed), nil - case *object.Tag: + case *tag.Tag: id = parsed.Target default: return nil, fmt.Errorf("object/resolve: expected commit-ish object %s, got %v", id, parsed.ObjectType()) diff --git a/object/resolve/peel_to_tag.go b/object/resolve/peel_to_tag.go index 6f61d7e1..e131f4c1 100644 --- a/object/resolve/peel_to_tag.go +++ b/object/resolve/peel_to_tag.go @@ -1,12 +1,12 @@ package resolve import ( - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" + "codeberg.org/lindenii/furgit/object/tag" ) // PeelToTag returns the tag at id without further peeling. -func (r *Resolver) PeelToTag(id objectid.ObjectID) (*stored.Stored[*object.Tag], error) { +func (r *Resolver) PeelToTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) { return r.ExactTag(id) } diff --git a/object/resolve/peel_to_tree.go b/object/resolve/peel_to_tree.go index 3b12bdd8..2f2da4d7 100644 --- a/object/resolve/peel_to_tree.go +++ b/object/resolve/peel_to_tree.go @@ -3,14 +3,16 @@ package resolve import ( "fmt" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/commit" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/stored" + "codeberg.org/lindenii/furgit/object/tag" + "codeberg.org/lindenii/furgit/object/tree" ) // PeelToTree peels tags until it reaches a tree or commit. If it reaches a // commit, it returns the commit's root tree. -func (r *Resolver) PeelToTree(id objectid.ObjectID) (*stored.Stored[*object.Tree], error) { +func (r *Resolver) PeelToTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) { for { obj, err := r.ExactObject(id) if err != nil { @@ -18,11 +20,11 @@ func (r *Resolver) PeelToTree(id objectid.ObjectID) (*stored.Stored[*object.Tree } switch parsed := obj.Object().(type) { - case *object.Tree: + case *tree.Tree: return stored.New(id, parsed), nil - case *object.Commit: + case *commit.Commit: return r.ExactTree(parsed.Tree) - case *object.Tag: + case *tag.Tag: id = parsed.Target default: return nil, fmt.Errorf("object/resolve: expected tree-ish object %s, got %v", id, parsed.ObjectType()) diff --git a/object/resolve/resolver.go b/object/resolve/resolver.go index 3e76e96a..f5e4e8c3 100644 --- a/object/resolve/resolver.go +++ b/object/resolve/resolver.go @@ -1,6 +1,6 @@ package resolve -import "codeberg.org/lindenii/furgit/object/storer" +import objectstorer "codeberg.org/lindenii/furgit/object/storer" // Resolver resolves parsed and streamed objects from an object store. // diff --git a/object/resolve/treefs.go b/object/resolve/treefs.go index de5d588a..a080d56d 100644 --- a/object/resolve/treefs.go +++ b/object/resolve/treefs.go @@ -3,8 +3,8 @@ package resolve import ( "io/fs" - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" + "codeberg.org/lindenii/furgit/object/tree" ) // TreeFS exposes one Git tree as an fs.FS. @@ -18,7 +18,7 @@ import ( type TreeFS struct { resolver *Resolver rootTree objectid.ObjectID - rootEntry *object.TreeEntry + rootEntry *tree.TreeEntry } var ( diff --git a/object/resolve/treefs_entry.go b/object/resolve/treefs_entry.go index b37ac0a0..6d23e282 100644 --- a/object/resolve/treefs_entry.go +++ b/object/resolve/treefs_entry.go @@ -5,8 +5,8 @@ import ( "fmt" "io/fs" - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" + "codeberg.org/lindenii/furgit/object/tree" ) func (treeFS *TreeFS) resolvePath(op treeFSOp, name string) (treeEntryValue, error) { @@ -17,7 +17,7 @@ func (treeFS *TreeFS) resolvePath(op treeFSOp, name string) (treeEntryValue, err if name == "." { return treeEntryValue{ name: ".", - mode: object.FileModeDir, + mode: tree.FileModeDir, treeID: treeFS.rootTree, treeEntry: treeFS.rootEntry, }, nil @@ -58,14 +58,14 @@ func (treeFS *TreeFS) pathResolveError(op treeFSOp, name string, err error) erro type treeEntryValue struct { name string - mode object.FileMode + mode tree.FileMode objectID objectid.ObjectID treeID objectid.ObjectID - treeEntry *object.TreeEntry + treeEntry *tree.TreeEntry } func (entry treeEntryValue) isDir() bool { - return entry.mode == object.FileModeDir + return entry.mode == tree.FileModeDir } func (entry treeEntryValue) blobSize(resolve *Resolver) (int64, error) { @@ -82,7 +82,7 @@ func (entry treeEntryValue) subtreeID() (objectid.ObjectID, error) { return entry.treeID, nil } - if entry.mode != object.FileModeDir { + if entry.mode != tree.FileModeDir { return objectid.ObjectID{}, fmt.Errorf("object/resolve: path %q is not a tree", entry.name) } diff --git a/object/resolve/treefs_info.go b/object/resolve/treefs_info.go index f554973d..f8eb1e9e 100644 --- a/object/resolve/treefs_info.go +++ b/object/resolve/treefs_info.go @@ -4,7 +4,7 @@ import ( "io/fs" "time" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/tree" ) type treeFSInfo struct { @@ -31,17 +31,17 @@ func (info *treeFSInfo) Info() (fs.FileInfo, error) { return info, nil } -func treeFSEntryMode(mode object.FileMode) fs.FileMode { +func treeFSEntryMode(mode tree.FileMode) fs.FileMode { switch mode { - case object.FileModeDir: + case tree.FileModeDir: return fs.ModeDir | 0o555 - case object.FileModeRegular: + case tree.FileModeRegular: return 0o444 - case object.FileModeExecutable: + case tree.FileModeExecutable: return 0o555 - case object.FileModeSymlink: + case tree.FileModeSymlink: return fs.ModeSymlink | 0o444 - case object.FileModeGitlink: + case tree.FileModeGitlink: return fs.ModeIrregular default: return fs.ModeIrregular @@ -51,7 +51,7 @@ func treeFSEntryMode(mode object.FileMode) fs.FileMode { func (treeFS *TreeFS) statEntry(entry treeEntryValue) (*treeFSInfo, error) { size := int64(0) - if entry.mode == object.FileModeRegular || entry.mode == object.FileModeExecutable || entry.mode == object.FileModeSymlink { + if entry.mode == tree.FileModeRegular || entry.mode == tree.FileModeExecutable || entry.mode == tree.FileModeSymlink { var err error size, err = entry.blobSize(treeFS.resolver) diff --git a/object/resolve/treefs_open.go b/object/resolve/treefs_open.go index c938505b..8e2b3588 100644 --- a/object/resolve/treefs_open.go +++ b/object/resolve/treefs_open.go @@ -5,7 +5,7 @@ import ( "io" "io/fs" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/tree" ) // Open opens name for reading. @@ -57,7 +57,7 @@ func (treeFS *TreeFS) Open(name string) (fs.File, error) { }, nil } - if entry.mode == object.FileModeGitlink { + if entry.mode == tree.FileModeGitlink { return nil, treeFSPathError(treeFSOpOpen, name, fmt.Errorf("object/resolve: gitlink entries are not readable as files")) } diff --git a/object/resolve/treefs_readfile.go b/object/resolve/treefs_readfile.go index e2bc1698..e1d514a3 100644 --- a/object/resolve/treefs_readfile.go +++ b/object/resolve/treefs_readfile.go @@ -4,7 +4,7 @@ import ( "fmt" "io" - "codeberg.org/lindenii/furgit/object" + "codeberg.org/lindenii/furgit/object/tree" ) // ReadFile reads the blob contents at name. @@ -20,7 +20,7 @@ func (treeFS *TreeFS) ReadFile(name string) ([]byte, error) { return nil, treeFSPathError(treeFSOpReadFile, name, fmt.Errorf("is a directory")) } - if entry.mode == object.FileModeGitlink { + if entry.mode == tree.FileModeGitlink { return nil, treeFSPathError(treeFSOpReadFile, name, fmt.Errorf("object/resolve: gitlink entries are not readable as files")) } diff --git a/object/resolve/treefs_stat.go b/object/resolve/treefs_stat.go index 044ba049..396dfbae 100644 --- a/object/resolve/treefs_stat.go +++ b/object/resolve/treefs_stat.go @@ -6,7 +6,7 @@ import "io/fs" // // TreeFS metadata reflects Git tree entry mode and blob size where applicable. // It does not represent filesystem stat metadata: ModTime is zero, ownership is -// unavailable, and Sys returns the underlying object.TreeEntry when one exists. +// unavailable, and Sys returns the underlying tree.TreeEntry when one exists. func (treeFS *TreeFS) Stat(name string) (fs.FileInfo, error) { entry, err := treeFS.resolvePath(treeFSOpStat, name) if err != nil { diff --git a/object/resolve/treefs_test.go b/object/resolve/treefs_test.go index a22e5019..0c436c0b 100644 --- a/object/resolve/treefs_test.go +++ b/object/resolve/treefs_test.go @@ -6,9 +6,9 @@ import ( "testing" "codeberg.org/lindenii/furgit/internal/testgit" - "codeberg.org/lindenii/furgit/object" objectid "codeberg.org/lindenii/furgit/object/id" "codeberg.org/lindenii/furgit/object/resolve" + "codeberg.org/lindenii/furgit/object/tree" "codeberg.org/lindenii/furgit/repository" ) @@ -71,13 +71,13 @@ func TestTreeFS(t *testing.T) { t.Fatalf("Stat(plain.txt): %v", err) } - entry, ok := info.Sys().(object.TreeEntry) + entry, ok := info.Sys().(tree.TreeEntry) if !ok { - t.Fatalf("Stat(plain.txt).Sys() type = %T, want object.TreeEntry", info.Sys()) + t.Fatalf("Stat(plain.txt).Sys() type = %T, want tree.TreeEntry", info.Sys()) } - if entry.Mode != object.FileModeRegular { - t.Fatalf("Stat(plain.txt).Sys().Mode = %o, want %o", entry.Mode, object.FileModeRegular) + if entry.Mode != tree.FileModeRegular { + t.Fatalf("Stat(plain.txt).Sys().Mode = %o, want %o", entry.Mode, tree.FileModeRegular) } subFS, err := treeFS.Sub("dir") |
