* Allow git.GetTree to take both commit and tree names, return full paths on entries listed through Tree.ListEntriesRecursive Signed-off-by: Filip Navara <filip.navara@gmail.com> * Fix the SHA returned on Git Tree APIs called with commit hash or symbolic name Signed-off-by: Filip Navara <filip.navara@gmail.com>
This commit is contained in:
parent
a27d5d2b23
commit
dbb0c9658c
4 changed files with 18 additions and 12 deletions
|
@ -35,14 +35,15 @@ 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)
|
||||
}
|
||||
treeObject, err := repo.getTree(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
treeObject, err := repo.getTree(SHA1(commitObject.TreeHash))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
treeObject.CommitID = id
|
||||
treeObject.ResolvedID = resolvedID
|
||||
return treeObject, nil
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Reference in a new issue