Просмотр исходного кода

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 <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
Filip Navara 5 лет назад
Родитель
Сommit
dbb0c9658c
4 измененных файлов: 17 добавлений и 11 удалений
  1. 5
    4
      modules/git/repo_tree.go
  2. 5
    4
      modules/git/tree.go
  3. 6
    2
      modules/git/tree_entry.go
  4. 1
    1
      modules/repofiles/tree.go

+ 5
- 4
modules/git/repo_tree.go Просмотреть файл

@@ -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
}

+ 5
- 4
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

@@ -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)
}

+ 6
- 2
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
}


+ 1
- 1
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 {

Загрузка…
Отмена
Сохранить