* 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>tags/v1.9.0-rc1
@@ -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 { | |||
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 | |||
} | |||
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 { |