Skip to content
This repository was archived by the owner on Sep 11, 2020. It is now read-only.

Commit 39f43b5

Browse files
authored
Merge pull request #284 from ajnavarro/improvement/move-difftree-to-object
plumbing/object: move difftree to object package
2 parents f93e571 + cb51ef3 commit 39f43b5

File tree

8 files changed

+67
-66
lines changed

8 files changed

+67
-66
lines changed

plumbing/difftree/change.go renamed to plumbing/object/change.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package difftree
1+
package object
22

33
import (
44
"bytes"
55
"fmt"
66
"strings"
77

8-
"srcd.works/go-git.v4/plumbing/object"
98
"srcd.works/go-git.v4/utils/merkletrie"
109
)
1110

@@ -39,7 +38,7 @@ func (c *Change) Action() (merkletrie.Action, error) {
3938

4039
// Files return the files before and after a change.
4140
// For insertions from will be nil. For deletions to will be nil.
42-
func (c *Change) Files() (from, to *object.File, err error) {
41+
func (c *Change) Files() (from, to *File, err error) {
4342
action, err := c.Action()
4443
if err != nil {
4544
return
@@ -84,9 +83,9 @@ type ChangeEntry struct {
8483
// Full path of the node using "/" as separator.
8584
Name string
8685
// Parent tree of the node that has changed.
87-
Tree *object.Tree
86+
Tree *Tree
8887
// The entry of the node.
89-
TreeEntry object.TreeEntry
88+
TreeEntry TreeEntry
9089
}
9190

9291
// Changes represents a collection of changes between two git trees.

plumbing/difftree/change_adaptor.go renamed to plumbing/object/change_adaptor.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
package difftree
2-
3-
// The folowing functions transform changes types form the merkletrie
4-
// package to changes types from this package.
1+
package object
52

63
import (
74
"fmt"
85

9-
"srcd.works/go-git.v4/plumbing/object"
106
"srcd.works/go-git.v4/utils/merkletrie"
117
"srcd.works/go-git.v4/utils/merkletrie/noder"
128
)
139

10+
// The folowing functions transform changes types form the merkletrie
11+
// package to changes types from this package.
12+
1413
func newChange(c merkletrie.Change) (*Change, error) {
1514
ret := &Change{}
1615

@@ -39,7 +38,7 @@ func newChangeEntry(p noder.Path) (ChangeEntry, error) {
3938
return ChangeEntry{
4039
Name: p.String(),
4140
Tree: asTreeNoder.parent,
42-
TreeEntry: object.TreeEntry{
41+
TreeEntry: TreeEntry{
4342
Name: asTreeNoder.name,
4443
Mode: asTreeNoder.mode,
4544
Hash: asTreeNoder.hash,

plumbing/difftree/change_adaptor_test.go renamed to plumbing/object/change_adaptor_test.go

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package difftree
1+
package object
22

33
import (
44
"os"
55
"sort"
66

77
"srcd.works/go-git.v4/plumbing"
8-
"srcd.works/go-git.v4/plumbing/object"
98
"srcd.works/go-git.v4/plumbing/storer"
109
"srcd.works/go-git.v4/storage/filesystem"
1110
"srcd.works/go-git.v4/utils/merkletrie"
@@ -29,16 +28,16 @@ func (s *ChangeAdaptorSuite) SetUpSuite(c *C) {
2928
s.Storer = sto
3029
}
3130

32-
func (s *ChangeAdaptorSuite) tree(c *C, h plumbing.Hash) *object.Tree {
33-
t, err := object.GetTree(s.Storer, h)
31+
func (s *ChangeAdaptorSuite) tree(c *C, h plumbing.Hash) *Tree {
32+
t, err := GetTree(s.Storer, h)
3433
c.Assert(err, IsNil)
3534
return t
3635
}
3736

3837
var _ = Suite(&ChangeAdaptorSuite{})
3938

4039
// utility function to build Noders from a tree and an tree entry.
41-
func newNoder(t *object.Tree, e object.TreeEntry) noder.Noder {
40+
func newNoder(t *Tree, e TreeEntry) noder.Noder {
4241
return &treeNoder{
4342
parent: t,
4443
name: e.Name,
@@ -52,7 +51,7 @@ func newPath(nn ...noder.Noder) noder.Path { return noder.Path(nn) }
5251

5352
func (s *ChangeAdaptorSuite) TestTreeNoderHashHasMode(c *C) {
5453
hash := plumbing.NewHash("aaaa")
55-
mode := object.FileMode
54+
mode := FileMode
5655

5756
treeNoder := &treeNoder{
5857
hash: hash,
@@ -72,8 +71,8 @@ func (s *ChangeAdaptorSuite) TestTreeNoderHashHasMode(c *C) {
7271
}
7372

7473
func (s *ChangeAdaptorSuite) TestNewChangeInsert(c *C) {
75-
tree := &object.Tree{}
76-
entry := object.TreeEntry{
74+
tree := &Tree{}
75+
entry := TreeEntry{
7776
Name: "name",
7877
Mode: os.FileMode(42),
7978
Hash: plumbing.NewHash("aaaaa"),
@@ -98,8 +97,8 @@ func (s *ChangeAdaptorSuite) TestNewChangeInsert(c *C) {
9897
}
9998

10099
func (s *ChangeAdaptorSuite) TestNewChangeDelete(c *C) {
101-
tree := &object.Tree{}
102-
entry := object.TreeEntry{
100+
tree := &Tree{}
101+
entry := TreeEntry{
103102
Name: "name",
104103
Mode: os.FileMode(42),
105104
Hash: plumbing.NewHash("aaaaa"),
@@ -124,8 +123,8 @@ func (s *ChangeAdaptorSuite) TestNewChangeDelete(c *C) {
124123
}
125124

126125
func (s *ChangeAdaptorSuite) TestNewChangeModify(c *C) {
127-
treeA := &object.Tree{}
128-
entryA := object.TreeEntry{
126+
treeA := &Tree{}
127+
entryA := TreeEntry{
129128
Name: "name",
130129
Mode: os.FileMode(42),
131130
Hash: plumbing.NewHash("aaaaa"),
@@ -134,8 +133,8 @@ func (s *ChangeAdaptorSuite) TestNewChangeModify(c *C) {
134133
expectedFrom, err := newChangeEntry(pathA)
135134
c.Assert(err, IsNil)
136135

137-
treeB := &object.Tree{}
138-
entryB := object.TreeEntry{
136+
treeB := &Tree{}
137+
entryB := TreeEntry{
139138
Name: "name",
140139
Mode: os.FileMode(42),
141140
Hash: plumbing.NewHash("bbbb"),
@@ -293,8 +292,8 @@ func (s *ChangeAdaptorSuite) TestChangeEntryFromNilIsZero(c *C) {
293292
}
294293

295294
func (s *ChangeAdaptorSuite) TestChangeEntryFromSortPath(c *C) {
296-
tree := &object.Tree{}
297-
entry := object.TreeEntry{
295+
tree := &Tree{}
296+
entry := TreeEntry{
298297
Name: "name",
299298
Mode: os.FileMode(42),
300299
Hash: plumbing.NewHash("aaaaa"),
@@ -310,15 +309,15 @@ func (s *ChangeAdaptorSuite) TestChangeEntryFromSortPath(c *C) {
310309
}
311310

312311
func (s *ChangeAdaptorSuite) TestChangeEntryFromLongPath(c *C) {
313-
treeA := &object.Tree{}
314-
entryA := object.TreeEntry{
312+
treeA := &Tree{}
313+
entryA := TreeEntry{
315314
Name: "nameA",
316315
Mode: os.FileMode(42),
317316
Hash: plumbing.NewHash("aaaa"),
318317
}
319318

320-
treeB := &object.Tree{}
321-
entryB := object.TreeEntry{
319+
treeB := &Tree{}
320+
entryB := TreeEntry{
322321
Name: "nameB",
323322
Mode: os.FileMode(24),
324323
Hash: plumbing.NewHash("bbbb"),
@@ -352,16 +351,16 @@ func (s *ChangeAdaptorSuite) TestNewChangesEmpty(c *C) {
352351
}
353352

354353
func (s *ChangeAdaptorSuite) TestNewChanges(c *C) {
355-
treeA := &object.Tree{}
356-
entryA := object.TreeEntry{Name: "nameA"}
354+
treeA := &Tree{}
355+
entryA := TreeEntry{Name: "nameA"}
357356
pathA := newPath(newNoder(treeA, entryA))
358357
changeA := merkletrie.Change{
359358
From: nil,
360359
To: pathA,
361360
}
362361

363-
treeB := &object.Tree{}
364-
entryB := object.TreeEntry{Name: "nameB"}
362+
treeB := &Tree{}
363+
entryB := TreeEntry{Name: "nameB"}
365364
pathB := newPath(newNoder(treeB, entryB))
366365
changeB := merkletrie.Change{
367366
From: pathB,

plumbing/difftree/change_test.go renamed to plumbing/object/change_test.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package difftree
1+
package object
22

33
import (
44
"os"
55
"sort"
66

77
"srcd.works/go-git.v4/plumbing"
8-
"srcd.works/go-git.v4/plumbing/object"
98
"srcd.works/go-git.v4/plumbing/storer"
109
"srcd.works/go-git.v4/storage/filesystem"
1110
"srcd.works/go-git.v4/utils/merkletrie"
@@ -29,8 +28,8 @@ func (s *ChangeSuite) SetUpSuite(c *C) {
2928
s.Storer = sto
3029
}
3130

32-
func (s *ChangeSuite) tree(c *C, h plumbing.Hash) *object.Tree {
33-
t, err := object.GetTree(s.Storer, h)
31+
func (s *ChangeSuite) tree(c *C, h plumbing.Hash) *Tree {
32+
t, err := GetTree(s.Storer, h)
3433
c.Assert(err, IsNil)
3534
return t
3635
}
@@ -58,7 +57,7 @@ func (s *ChangeSuite) TestInsert(c *C) {
5857
To: ChangeEntry{
5958
Name: path,
6059
Tree: s.tree(c, tree),
61-
TreeEntry: object.TreeEntry{
60+
TreeEntry: TreeEntry{
6261
Name: name,
6362
Mode: mode,
6463
Hash: blob,
@@ -103,7 +102,7 @@ func (s *ChangeSuite) TestDelete(c *C) {
103102
From: ChangeEntry{
104103
Name: path,
105104
Tree: s.tree(c, tree),
106-
TreeEntry: object.TreeEntry{
105+
TreeEntry: TreeEntry{
107106
Name: name,
108107
Mode: mode,
109108
Hash: blob,
@@ -153,7 +152,7 @@ func (s *ChangeSuite) TestModify(c *C) {
153152
From: ChangeEntry{
154153
Name: path,
155154
Tree: s.tree(c, fromTree),
156-
TreeEntry: object.TreeEntry{
155+
TreeEntry: TreeEntry{
157156
Name: name,
158157
Mode: mode,
159158
Hash: fromBlob,
@@ -162,7 +161,7 @@ func (s *ChangeSuite) TestModify(c *C) {
162161
To: ChangeEntry{
163162
Name: path,
164163
Tree: s.tree(c, toTree),
165-
TreeEntry: object.TreeEntry{
164+
TreeEntry: TreeEntry{
166165
Name: name,
167166
Mode: mode,
168167
Hash: toBlob,
@@ -226,7 +225,7 @@ func (s *ChangeSuite) TestErrorsFindingChildsAreDetected(c *C) {
226225
From: ChangeEntry{
227226
Name: path,
228227
Tree: s.tree(c, fromTree),
229-
TreeEntry: object.TreeEntry{
228+
TreeEntry: TreeEntry{
230229
Name: name,
231230
Mode: mode,
232231
Hash: fromBlob,
@@ -243,7 +242,7 @@ func (s *ChangeSuite) TestErrorsFindingChildsAreDetected(c *C) {
243242
To: ChangeEntry{
244243
Name: path,
245244
Tree: s.tree(c, toTree),
246-
TreeEntry: object.TreeEntry{
245+
TreeEntry: TreeEntry{
247246
Name: name,
248247
Mode: mode,
249248
Hash: toBlob,

plumbing/difftree/difftree.go renamed to plumbing/object/difftree.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
package difftree
1+
package object
22

33
import (
44
"bytes"
55
"os"
66

7-
"srcd.works/go-git.v4/plumbing/object"
87
"srcd.works/go-git.v4/utils/merkletrie"
98
"srcd.works/go-git.v4/utils/merkletrie/noder"
109
)
1110

1211
// DiffTree compares the content and mode of the blobs found via two
1312
// tree objects.
14-
func DiffTree(a, b *object.Tree) ([]*Change, error) {
13+
func DiffTree(a, b *Tree) (Changes, error) {
1514
from := newTreeNoder(a)
1615
to := newTreeNoder(b)
1716

@@ -50,8 +49,8 @@ func equivalentMode(a, b []byte) bool {
5049
}
5150

5251
var (
53-
file = modeToBytes(object.FileMode)
54-
fileDeprecated = modeToBytes(object.FileModeDeprecated)
52+
file = modeToBytes(FileMode)
53+
fileDeprecated = modeToBytes(FileModeDeprecated)
5554
// remove this by fixing plumbing.Object mode ASAP
5655
fileGoGit = modeToBytes(os.FileMode(0644))
5756
)

plumbing/difftree/difftree_test.go renamed to plumbing/object/difftree_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
package difftree
1+
package object
22

33
import (
44
"os"
55
"sort"
6-
"testing"
76

87
"srcd.works/go-git.v4/plumbing"
98
"srcd.works/go-git.v4/plumbing/format/packfile"
10-
"srcd.works/go-git.v4/plumbing/object"
119
"srcd.works/go-git.v4/plumbing/storer"
1210
"srcd.works/go-git.v4/storage/filesystem"
1311
"srcd.works/go-git.v4/storage/memory"
@@ -17,8 +15,6 @@ import (
1715
. "gopkg.in/check.v1"
1816
)
1917

20-
func Test(t *testing.T) { TestingT(t) }
21-
2218
type DiffTreeSuite struct {
2319
fixtures.Suite
2420
Storer storer.EncodedObjectStorer
@@ -36,9 +32,9 @@ func (s *DiffTreeSuite) SetUpSuite(c *C) {
3632
}
3733

3834
func (s *DiffTreeSuite) commitFromStorer(c *C, sto storer.EncodedObjectStorer,
39-
h plumbing.Hash) *object.Commit {
35+
h plumbing.Hash) *Commit {
4036

41-
commit, err := object.GetCommit(sto, h)
37+
commit, err := GetCommit(sto, h)
4238
c.Assert(err, IsNil)
4339
return commit
4440
}
@@ -328,7 +324,7 @@ func (s *DiffTreeSuite) TestDiffTree(c *C) {
328324
f := fixtures.ByURL(t.repository).One()
329325
sto := s.storageFromPackfile(f)
330326

331-
var tree1, tree2 *object.Tree
327+
var tree1, tree2 *Tree
332328
var err error
333329
if t.commit1 != "" {
334330
tree1, err = s.commitFromStorer(c, sto,
@@ -347,6 +343,12 @@ func (s *DiffTreeSuite) TestDiffTree(c *C) {
347343
obtained, err := DiffTree(tree1, tree2)
348344
c.Assert(err, IsNil,
349345
Commentf("subtest %d: unable to calculate difftree: %s", i, err))
346+
obtainedFromMethod, err := tree1.Diff(tree2)
347+
c.Assert(err, IsNil,
348+
Commentf("subtest %d: unable to calculate difftree: %s. Result calling Diff method from Tree object returns an error", i, err))
349+
350+
c.Assert(obtained, DeepEquals, obtainedFromMethod)
351+
350352
c.Assert(equalChanges(obtained, t.expected, c), Equals, true,
351353
Commentf("subtest:%d\nrepo=%s\ncommit1=%s\ncommit2=%s\nexpected=%s\nobtained=%s",
352354
i, t.repository, t.commit1, t.commit2, t.expected, obtained))

plumbing/object/tree.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,11 @@ func (t *Tree) buildMap() {
299299
}
300300
}
301301

302+
// Diff returns a list of changes between this tree and the provided one
303+
func (from *Tree) Diff(to *Tree) (Changes, error) {
304+
return DiffTree(from, to)
305+
}
306+
302307
// treeEntryIter facilitates iterating through the TreeEntry objects in a Tree.
303308
type treeEntryIter struct {
304309
t *Tree

0 commit comments

Comments
 (0)