1
// Copyright 2020 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
12
func (repo *Repository) getTree(id ObjectID) (*Tree, error) {
13
wr, rd, cancel := repo.CatFileBatch(repo.Ctx)
16
_, _ = wr.Write([]byte(id.String() + "\n"))
19
_, typ, size, err := ReadBatchLine(rd)
27
data, err := io.ReadAll(io.LimitReader(rd, size))
31
tag, err := parseTagData(id.Type(), data)
35
commit, err := tag.Commit(repo)
39
commit.Tree.ResolvedID = resolvedID
40
return &commit.Tree, nil
42
commit, err := CommitFromReader(repo, id, io.LimitReader(rd, size))
46
if _, err := rd.Discard(1); err != nil {
49
commit.Tree.ResolvedID = commit.ID
50
return &commit.Tree, nil
52
tree := NewTree(repo, id)
54
objectFormat, err := repo.GetObjectFormat()
58
tree.entries, err = catBatchParseTreeEntries(objectFormat, tree, rd, size)
62
tree.entriesParsed = true
65
if err := DiscardFull(rd, size+1); err != nil {
68
return nil, ErrNotExist{
74
// GetTree find the tree object in the repository.
75
func (repo *Repository) GetTree(idStr string) (*Tree, error) {
76
objectFormat, err := repo.GetObjectFormat()
80
if len(idStr) != objectFormat.FullLength() {
81
res, err := repo.GetRefCommitID(idStr)
89
id, err := NewIDFromString(idStr)
94
return repo.getTree(id)