aboutsummaryrefslogtreecommitdiff
path: root/object/resolve/treefs.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-23 06:06:53 +0000
committerGravatar Runxi Yu2026-03-23 06:06:53 +0000
commit8d555a5aae15017c3c3332605bdf4fd33e20aaa0 (patch)
tree0858e752b5a60e760cb0548e1faba87cd64ded24 /object/resolve/treefs.go
parentrefstore/files: Pretty big logical restructure ish lint fix for batch Apply (diff)
signatureNo signature
object/resolve: Add TreeFS v0.1.95
Diffstat (limited to 'object/resolve/treefs.go')
-rw-r--r--object/resolve/treefs.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/object/resolve/treefs.go b/object/resolve/treefs.go
new file mode 100644
index 00000000..eda8c7fa
--- /dev/null
+++ b/object/resolve/treefs.go
@@ -0,0 +1,30 @@
+package resolve
+
+import (
+ "io/fs"
+
+ "codeberg.org/lindenii/furgit/object"
+ "codeberg.org/lindenii/furgit/objectid"
+)
+
+// TreeFS exposes one Git tree as an fs.FS.
+//
+// TreeFS interprets names using io/fs path rules. Those rules do not match raw
+// Git tree entry naming exactly: names are UTF-8, slash-separated, and must be
+// valid fs.FS paths. Tree entries that cannot be represented under those rules
+// are not addressable through this API.
+//
+// TreeFS does not take ownership of its Resolver.
+type TreeFS struct {
+ resolver *Resolver
+ rootTree objectid.ObjectID
+ rootEntry *object.TreeEntry
+}
+
+var (
+ _ fs.FS = (*TreeFS)(nil)
+ _ fs.ReadFileFS = (*TreeFS)(nil)
+ _ fs.ReadDirFS = (*TreeFS)(nil)
+ _ fs.StatFS = (*TreeFS)(nil)
+ _ fs.SubFS = (*TreeFS)(nil)
+)