code.gitea.io/gitea@v1.22.3/modules/git/repo_tree_gogit.go (about) 1 // Copyright 2015 The Gogs Authors. All rights reserved. 2 // Copyright 2019 The Gitea Authors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 5 //go:build gogit 6 7 package git 8 9 import ( 10 "errors" 11 12 "github.com/go-git/go-git/v5/plumbing" 13 ) 14 15 func (repo *Repository) getTree(id ObjectID) (*Tree, error) { 16 gogitTree, err := repo.gogitRepo.TreeObject(plumbing.Hash(id.RawValue())) 17 if err != nil { 18 if errors.Is(err, plumbing.ErrObjectNotFound) { 19 return nil, ErrNotExist{ 20 ID: id.String(), 21 } 22 } 23 return nil, err 24 } 25 26 tree := NewTree(repo, id) 27 tree.gogitTree = gogitTree 28 return tree, nil 29 } 30 31 // GetTree find the tree object in the repository. 32 func (repo *Repository) GetTree(idStr string) (*Tree, error) { 33 objectFormat, err := repo.GetObjectFormat() 34 if err != nil { 35 return nil, err 36 } 37 38 if len(idStr) != objectFormat.FullLength() { 39 res, _, err := NewCommand(repo.Ctx, "rev-parse", "--verify").AddDynamicArguments(idStr).RunStdString(&RunOpts{Dir: repo.Path}) 40 if err != nil { 41 return nil, err 42 } 43 if len(res) > 0 { 44 idStr = res[:len(res)-1] 45 } 46 } 47 id, err := NewIDFromString(idStr) 48 if err != nil { 49 return nil, err 50 } 51 resolvedID := id 52 commitObject, err := repo.gogitRepo.CommitObject(plumbing.Hash(id.RawValue())) 53 if err == nil { 54 id = ParseGogitHash(commitObject.TreeHash) 55 } 56 treeObject, err := repo.getTree(id) 57 if err != nil { 58 return nil, err 59 } 60 treeObject.ResolvedID = resolvedID 61 return treeObject, nil 62 }