code.gitea.io/gitea@v1.19.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  func (repo *Repository) getTree(id SHA1) (*Tree, error) {
    10  	gogitTree, err := repo.gogitRepo.TreeObject(id)
    11  	if err != nil {
    12  		return nil, err
    13  	}
    14  
    15  	tree := NewTree(repo, id)
    16  	tree.gogitTree = gogitTree
    17  	return tree, nil
    18  }
    19  
    20  // GetTree find the tree object in the repository.
    21  func (repo *Repository) GetTree(idStr string) (*Tree, error) {
    22  	if len(idStr) != SHAFullLength {
    23  		res, _, err := NewCommand(repo.Ctx, "rev-parse", "--verify").AddDynamicArguments(idStr).RunStdString(&RunOpts{Dir: repo.Path})
    24  		if err != nil {
    25  			return nil, err
    26  		}
    27  		if len(res) > 0 {
    28  			idStr = res[:len(res)-1]
    29  		}
    30  	}
    31  	id, err := NewIDFromString(idStr)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	resolvedID := id
    36  	commitObject, err := repo.gogitRepo.CommitObject(id)
    37  	if err == nil {
    38  		id = SHA1(commitObject.TreeHash)
    39  	}
    40  	treeObject, err := repo.getTree(id)
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  	treeObject.ResolvedID = resolvedID
    45  	return treeObject, nil
    46  }