Skip to content

Commit dbb0c96

Browse files
filipnavaratechknowlogick
authored andcommitted
Fix #6813: Allow git.GetTree to take both commit and tree names (#6816)
* Allow git.GetTree to take both commit and tree names, return full paths on entries listed through Tree.ListEntriesRecursive Signed-off-by: Filip Navara <[email protected]> * Fix the SHA returned on Git Tree APIs called with commit hash or symbolic name Signed-off-by: Filip Navara <[email protected]>
1 parent a27d5d2 commit dbb0c96

File tree

4 files changed

+17
-11
lines changed

4 files changed

+17
-11
lines changed

modules/git/repo_tree.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,15 @@ func (repo *Repository) GetTree(idStr string) (*Tree, error) {
3535
if err != nil {
3636
return nil, err
3737
}
38+
resolvedID := id
3839
commitObject, err := repo.gogitRepo.CommitObject(plumbing.Hash(id))
39-
if err != nil {
40-
return nil, err
40+
if err == nil {
41+
id = SHA1(commitObject.TreeHash)
4142
}
42-
treeObject, err := repo.getTree(SHA1(commitObject.TreeHash))
43+
treeObject, err := repo.getTree(id)
4344
if err != nil {
4445
return nil, err
4546
}
46-
treeObject.CommitID = id
47+
treeObject.ResolvedID = resolvedID
4748
return treeObject, nil
4849
}

modules/git/tree.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ import (
1515

1616
// Tree represents a flat directory listing.
1717
type Tree struct {
18-
ID SHA1
19-
CommitID SHA1
20-
repo *Repository
18+
ID SHA1
19+
ResolvedID SHA1
20+
repo *Repository
2121

2222
gogitTree *object.Tree
2323

@@ -106,7 +106,7 @@ func (t *Tree) ListEntriesRecursive() (Entries, error) {
106106
seen := map[plumbing.Hash]bool{}
107107
walker := object.NewTreeWalker(t.gogitTree, true, seen)
108108
for {
109-
_, entry, err := walker.Next()
109+
fullName, entry, err := walker.Next()
110110
if err == io.EOF {
111111
break
112112
}
@@ -121,6 +121,7 @@ func (t *Tree) ListEntriesRecursive() (Entries, error) {
121121
ID: entry.Hash,
122122
gogitTreeEntry: &entry,
123123
ptree: t,
124+
fullName: fullName,
124125
}
125126
entries = append(entries, convertedEntry)
126127
}

modules/git/tree_entry.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,16 @@ type TreeEntry struct {
4040
gogitTreeEntry *object.TreeEntry
4141
ptree *Tree
4242

43-
size int64
44-
sized bool
43+
size int64
44+
sized bool
45+
fullName string
4546
}
4647

4748
// Name returns the name of the entry
4849
func (te *TreeEntry) Name() string {
50+
if te.fullName != "" {
51+
return te.fullName
52+
}
4953
return te.gogitTreeEntry.Name
5054
}
5155

modules/repofiles/tree.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func GetTreeBySHA(repo *models.Repository, sha string, page, perPage int, recurs
2323
}
2424
}
2525
tree := new(api.GitTreeResponse)
26-
tree.SHA = gitTree.CommitID.String()
26+
tree.SHA = gitTree.ResolvedID.String()
2727
tree.URL = repo.APIURL() + "/git/trees/" + tree.SHA
2828
var entries git.Entries
2929
if recursive {

0 commit comments

Comments
 (0)