From bec2aa81cf230028e3c757a0e64f3552caeca1b0 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Wed, 1 May 2019 17:23:00 +0200 Subject: [PATCH 1/2] Allow git.GetTree to take both commit and tree names, return full paths on entries listed through Tree.ListEntriesRecursive Signed-off-by: Filip Navara --- modules/git/repo_tree.go | 6 +++--- modules/git/tree.go | 3 ++- modules/git/tree_entry.go | 8 ++++++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/modules/git/repo_tree.go b/modules/git/repo_tree.go index 8a024fe6ac6e1..3f14c50ab9dc1 100644 --- a/modules/git/repo_tree.go +++ b/modules/git/repo_tree.go @@ -36,10 +36,10 @@ func (repo *Repository) GetTree(idStr string) (*Tree, error) { return nil, err } commitObject, err := repo.gogitRepo.CommitObject(plumbing.Hash(id)) - if err != nil { - return nil, err + if err == nil { + id = SHA1(commitObject.TreeHash) } - treeObject, err := repo.getTree(SHA1(commitObject.TreeHash)) + treeObject, err := repo.getTree(id) if err != nil { return nil, err } diff --git a/modules/git/tree.go b/modules/git/tree.go index 8f55d7a8c5d3f..d6407652972ed 100644 --- a/modules/git/tree.go +++ b/modules/git/tree.go @@ -106,7 +106,7 @@ func (t *Tree) ListEntriesRecursive() (Entries, error) { seen := map[plumbing.Hash]bool{} walker := object.NewTreeWalker(t.gogitTree, true, seen) for { - _, entry, err := walker.Next() + fullName, entry, err := walker.Next() if err == io.EOF { break } @@ -121,6 +121,7 @@ func (t *Tree) ListEntriesRecursive() (Entries, error) { ID: entry.Hash, gogitTreeEntry: &entry, ptree: t, + fullName: fullName, } entries = append(entries, convertedEntry) } diff --git a/modules/git/tree_entry.go b/modules/git/tree_entry.go index fe2fd14f971e8..6019e34487fe3 100644 --- a/modules/git/tree_entry.go +++ b/modules/git/tree_entry.go @@ -40,12 +40,16 @@ type TreeEntry struct { gogitTreeEntry *object.TreeEntry ptree *Tree - size int64 - sized bool + size int64 + sized bool + fullName string } // Name returns the name of the entry func (te *TreeEntry) Name() string { + if te.fullName != "" { + return te.fullName + } return te.gogitTreeEntry.Name } From 540e3b8259102f1db8a8cd2e647e1bc3ba00a946 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Wed, 1 May 2019 20:43:02 +0200 Subject: [PATCH 2/2] Fix the SHA returned on Git Tree APIs called with commit hash or symbolic name Signed-off-by: Filip Navara --- modules/git/repo_tree.go | 3 ++- modules/git/tree.go | 6 +++--- modules/repofiles/tree.go | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/git/repo_tree.go b/modules/git/repo_tree.go index 3f14c50ab9dc1..8bb729174428d 100644 --- a/modules/git/repo_tree.go +++ b/modules/git/repo_tree.go @@ -35,6 +35,7 @@ func (repo *Repository) GetTree(idStr string) (*Tree, error) { if err != nil { return nil, err } + resolvedID := id commitObject, err := repo.gogitRepo.CommitObject(plumbing.Hash(id)) if err == nil { id = SHA1(commitObject.TreeHash) @@ -43,6 +44,6 @@ func (repo *Repository) GetTree(idStr string) (*Tree, error) { if err != nil { return nil, err } - treeObject.CommitID = id + treeObject.ResolvedID = resolvedID return treeObject, nil } diff --git a/modules/git/tree.go b/modules/git/tree.go index d6407652972ed..6ca893cb7bb84 100644 --- a/modules/git/tree.go +++ b/modules/git/tree.go @@ -15,9 +15,9 @@ import ( // Tree represents a flat directory listing. type Tree struct { - ID SHA1 - CommitID SHA1 - repo *Repository + ID SHA1 + ResolvedID SHA1 + repo *Repository gogitTree *object.Tree diff --git a/modules/repofiles/tree.go b/modules/repofiles/tree.go index 5b4e7aeb280e5..e189fe122991a 100644 --- a/modules/repofiles/tree.go +++ b/modules/repofiles/tree.go @@ -23,7 +23,7 @@ func GetTreeBySHA(repo *models.Repository, sha string, page, perPage int, recurs } } tree := new(api.GitTreeResponse) - tree.SHA = gitTree.CommitID.String() + tree.SHA = gitTree.ResolvedID.String() tree.URL = repo.APIURL() + "/git/trees/" + tree.SHA var entries git.Entries if recursive {