summaryrefslogtreecommitdiffstats
path: root/modules/git/repo_tree_gogit.go
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-10-11 10:27:00 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-10-11 10:27:00 +0000
commit65aa53fc52ff15efe54df4147564828d535837f8 (patch)
tree31c51dad04fdcca80e6d3043c8bd49d2f1a51f83 /modules/git/repo_tree_gogit.go
parentInitial commit. (diff)
downloadforgejo-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.go53
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
+}