diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-10-11 10:27:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-10-11 10:27:00 +0000 |
commit | 65aa53fc52ff15efe54df4147564828d535837f8 (patch) | |
tree | 31c51dad04fdcca80e6d3043c8bd49d2f1a51f83 /modules/git/repo_tree_gogit.go | |
parent | Initial commit. (diff) | |
download | forgejo-65aa53fc52ff15efe54df4147564828d535837f8.tar.xz forgejo-65aa53fc52ff15efe54df4147564828d535837f8.zip |
Adding upstream version 8.0.3.HEADupstream/8.0.3upstreamdebian
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'modules/git/repo_tree_gogit.go')
-rw-r--r-- | modules/git/repo_tree_gogit.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/modules/git/repo_tree_gogit.go b/modules/git/repo_tree_gogit.go new file mode 100644 index 00000000..dc97ce13 --- /dev/null +++ b/modules/git/repo_tree_gogit.go @@ -0,0 +1,53 @@ +// Copyright 2015 The Gogs Authors. All rights reserved. +// Copyright 2019 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +//go:build gogit + +package git + +import "github.com/go-git/go-git/v5/plumbing" + +func (repo *Repository) getTree(id ObjectID) (*Tree, error) { + gogitTree, err := repo.gogitRepo.TreeObject(plumbing.Hash(id.RawValue())) + if err != nil { + return nil, err + } + + tree := NewTree(repo, id) + tree.gogitTree = gogitTree + return tree, nil +} + +// GetTree find the tree object in the repository. +func (repo *Repository) GetTree(idStr string) (*Tree, error) { + objectFormat, err := repo.GetObjectFormat() + if err != nil { + return nil, err + } + + if len(idStr) != objectFormat.FullLength() { + res, _, err := NewCommand(repo.Ctx, "rev-parse", "--verify").AddDynamicArguments(idStr).RunStdString(&RunOpts{Dir: repo.Path}) + if err != nil { + return nil, err + } + if len(res) > 0 { + idStr = res[:len(res)-1] + } + } + id, err := NewIDFromString(idStr) + if err != nil { + return nil, err + } + resolvedID := id + commitObject, err := repo.gogitRepo.CommitObject(plumbing.Hash(id.RawValue())) + if err == nil { + id = ParseGogitHash(commitObject.TreeHash) + } + treeObject, err := repo.getTree(id) + if err != nil { + return nil, err + } + treeObject.ResolvedID = resolvedID + return treeObject, nil +} |