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  }