aboutsummaryrefslogtreecommitdiff
path: root/object/tree/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'object/tree/parse.go')
-rw-r--r--object/tree/parse.go58
1 files changed, 0 insertions, 58 deletions
diff --git a/object/tree/parse.go b/object/tree/parse.go
deleted file mode 100644
index bb874828..00000000
--- a/object/tree/parse.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package tree
-
-import (
- "bytes"
- "fmt"
- "strconv"
-
- objectid "codeberg.org/lindenii/furgit/object/id"
-)
-
-// Parse decodes a tree object body into a fully materialized Tree.
-func Parse(body []byte, algo objectid.Algorithm) (*Tree, error) {
- var entries []TreeEntry
-
- i := 0
- for i < len(body) {
- space := bytes.IndexByte(body[i:], ' ')
- if space < 0 {
- return nil, fmt.Errorf("object: tree: missing mode terminator")
- }
-
- modeBytes := body[i : i+space]
- i += space + 1
-
- nul := bytes.IndexByte(body[i:], 0)
- if nul < 0 {
- return nil, fmt.Errorf("object: tree: missing name terminator")
- }
-
- nameBytes := body[i : i+nul]
- i += nul + 1
-
- idEnd := i + algo.Size()
- if idEnd > len(body) {
- return nil, fmt.Errorf("object: tree: truncated child object id")
- }
-
- id, err := objectid.FromBytes(algo, body[i:idEnd])
- if err != nil {
- return nil, err
- }
-
- i = idEnd
-
- mode, err := strconv.ParseUint(string(modeBytes), 8, 32)
- if err != nil {
- return nil, fmt.Errorf("object: tree: parse mode: %w", err)
- }
-
- entries = append(entries, TreeEntry{
- Mode: FileMode(mode),
- Name: append([]byte(nil), nameBytes...),
- ID: id,
- })
- }
-
- return &Tree{Entries: entries}, nil
-}