diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-02-21 16:04:37 +0100 |
---|---|---|
committer | Máximo Cuadros <mcuadros@gmail.com> | 2017-02-21 16:04:37 +0100 |
commit | 790fbdaddc3c9a434f2ad97d9eb56db9b6c99495 (patch) | |
tree | 3ddb2f430ee3c958f0650cb7db6a9df44b1e1361 /plumbing/difftree/change_adaptor.go | |
parent | ed288b30de1ac3dcb3ce675c4b9af89eb4e6fcba (diff) | |
parent | 0b8b8da617d5a077f282e57d0300dc106a604236 (diff) | |
download | go-git-790fbdaddc3c9a434f2ad97d9eb56db9b6c99495.tar.gz |
rebase master
Diffstat (limited to 'plumbing/difftree/change_adaptor.go')
-rw-r--r-- | plumbing/difftree/change_adaptor.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/plumbing/difftree/change_adaptor.go b/plumbing/difftree/change_adaptor.go new file mode 100644 index 0000000..edc20b3 --- /dev/null +++ b/plumbing/difftree/change_adaptor.go @@ -0,0 +1,61 @@ +package difftree + +// The folowing functions transform changes types form the merkletrie +// package to changes types from this package. + +import ( + "fmt" + + "srcd.works/go-git.v4/plumbing/object" + "srcd.works/go-git.v4/utils/merkletrie" + "srcd.works/go-git.v4/utils/merkletrie/noder" +) + +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: ", err) + } + + if ret.To, err = newChangeEntry(c.To); err != nil { + return nil, fmt.Errorf("To field: ", 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{}, fmt.Errorf("cannot transform non-TreeNoders") + } + + return ChangeEntry{ + Name: p.String(), + Tree: asTreeNoder.parent, + TreeEntry: object.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", err) + } + } + + return ret, nil +} |