From affc06dec90529073b5a3b76291b953232f034d9 Mon Sep 17 00:00:00 2001 From: Antonio Jesus Navarro Perez Date: Wed, 22 Feb 2017 15:49:37 +0100 Subject: plumbing/object: move difftree to object package - To avoid ciclic dependency errors, we move all the difftree files to object package. - Added Diff method to Tree object. --- plumbing/object/change_adaptor.go | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 plumbing/object/change_adaptor.go (limited to 'plumbing/object/change_adaptor.go') diff --git a/plumbing/object/change_adaptor.go b/plumbing/object/change_adaptor.go new file mode 100644 index 0000000..e97fd93 --- /dev/null +++ b/plumbing/object/change_adaptor.go @@ -0,0 +1,60 @@ +package object + +import ( + "fmt" + + "srcd.works/go-git.v4/utils/merkletrie" + "srcd.works/go-git.v4/utils/merkletrie/noder" +) + +// The folowing 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: ", 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: 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 +} -- cgit