08bf443016
* Inital routes to git refs api * Git refs API implementation * Update swagger * Fix copyright * Make swagger happy add basic test * Fix test * Fix test again :)
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package object
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"gopkg.in/src-d/go-git.v4/utils/merkletrie"
|
|
"gopkg.in/src-d/go-git.v4/utils/merkletrie/noder"
|
|
)
|
|
|
|
// The following functions transform changes types form the merkletrie
|
|
// package to changes types from this package.
|
|
|
|
func newChange(c merkletrie.Change) (*Change, error) {
|
|
ret := &Change{}
|
|
|
|
var err error
|
|
if ret.From, err = newChangeEntry(c.From); err != nil {
|
|
return nil, fmt.Errorf("From field: %s", err)
|
|
}
|
|
|
|
if ret.To, err = newChangeEntry(c.To); err != nil {
|
|
return nil, fmt.Errorf("To field: %s", err)
|
|
}
|
|
|
|
return ret, nil
|
|
}
|
|
|
|
func newChangeEntry(p noder.Path) (ChangeEntry, error) {
|
|
if p == nil {
|
|
return empty, nil
|
|
}
|
|
|
|
asTreeNoder, ok := p.Last().(*treeNoder)
|
|
if !ok {
|
|
return ChangeEntry{}, errors.New("cannot transform non-TreeNoders")
|
|
}
|
|
|
|
return ChangeEntry{
|
|
Name: p.String(),
|
|
Tree: asTreeNoder.parent,
|
|
TreeEntry: TreeEntry{
|
|
Name: asTreeNoder.name,
|
|
Mode: asTreeNoder.mode,
|
|
Hash: asTreeNoder.hash,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func newChanges(src merkletrie.Changes) (Changes, error) {
|
|
ret := make(Changes, len(src))
|
|
var err error
|
|
for i, e := range src {
|
|
ret[i], err = newChange(e)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("change #%d: %s", i, err)
|
|
}
|
|
}
|
|
|
|
return ret, nil
|
|
}
|