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

Commit f51d4a8

Browse files
authored
Merge pull request #296 from ajnavarro/improvement/repository
git: Repository methods changes
2 parents 5f4169f + 0c82b41 commit f51d4a8

File tree

11 files changed

+426
-43
lines changed

11 files changed

+426
-43
lines changed

_examples/clone/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func main() {
2828
ref, err := r.Head()
2929
CheckIfError(err)
3030
// ... retrieving the commit object
31-
commit, err := r.Commit(ref.Hash())
31+
commit, err := r.CommitObject(ref.Hash())
3232
CheckIfError(err)
3333

3434
fmt.Println(commit)

_examples/log/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func main() {
3030
CheckIfError(err)
3131

3232
// ... retrieves the commit object
33-
commit, err := r.Commit(ref.Hash())
33+
commit, err := r.CommitObject(ref.Hash())
3434
CheckIfError(err)
3535

3636
// ... retrieves the commit history

_examples/open/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func main() {
2525
CheckIfError(err)
2626

2727
// ... retrieving the commit object
28-
commit, err := r.Commit(ref.Hash())
28+
commit, err := r.CommitObject(ref.Hash())
2929
CheckIfError(err)
3030

3131
// ... calculating the commit history

_examples/showcase/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func main() {
3939
CheckIfError(err)
4040

4141
// ... retrieving the commit object
42-
commit, err := r.Commit(ref.Hash())
42+
commit, err := r.CommitObject(ref.Hash())
4343
CheckIfError(err)
4444
fmt.Println(commit)
4545

blame_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func (s *BlameSuite) TestBlame(c *C) {
2626
r := s.NewRepositoryFromPackfile(fixtures.ByURL(t.repo).One())
2727

2828
exp := s.mockBlame(c, t, r)
29-
commit, err := r.Commit(plumbing.NewHash(t.rev))
29+
commit, err := r.CommitObject(plumbing.NewHash(t.rev))
3030
c.Assert(err, IsNil)
3131

3232
obt, err := Blame(commit, t.path)
@@ -36,7 +36,7 @@ func (s *BlameSuite) TestBlame(c *C) {
3636
}
3737

3838
func (s *BlameSuite) mockBlame(c *C, t blameTest, r *Repository) (blame *BlameResult) {
39-
commit, err := r.Commit(plumbing.NewHash(t.rev))
39+
commit, err := r.CommitObject(plumbing.NewHash(t.rev))
4040
c.Assert(err, IsNil, Commentf("%v: repo=%s, rev=%s", err, t.repo, t.rev))
4141

4242
f, err := commit.File(t.path)
@@ -48,7 +48,7 @@ func (s *BlameSuite) mockBlame(c *C, t blameTest, r *Repository) (blame *BlameRe
4848

4949
blamedLines := make([]*Line, 0, len(t.blames))
5050
for i := range t.blames {
51-
commit, err := r.Commit(plumbing.NewHash(t.blames[i]))
51+
commit, err := r.CommitObject(plumbing.NewHash(t.blames[i]))
5252
c.Assert(err, IsNil)
5353
l := &Line{
5454
Author: commit.Author.Email,

plumbing/storer/reference.go

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,67 @@ type ReferenceIter interface {
2828
Close()
2929
}
3030

31+
type referenceFilteredIter struct {
32+
ff func(r *plumbing.Reference) bool
33+
iter ReferenceIter
34+
}
35+
36+
// NewReferenceFilteredIter returns a reference iterator for the given reference
37+
// Iterator. This iterator will iterate only references that accomplish the
38+
// provided function.
39+
func NewReferenceFilteredIter(
40+
ff func(r *plumbing.Reference) bool, iter ReferenceIter) ReferenceIter {
41+
return &referenceFilteredIter{ff, iter}
42+
}
43+
44+
// Next returns the next reference from the iterator. If the iterator has reached
45+
// the end it will return io.EOF as an error.
46+
func (iter *referenceFilteredIter) Next() (*plumbing.Reference, error) {
47+
for {
48+
r, err := iter.iter.Next()
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
if iter.ff(r) {
54+
return r, nil
55+
}
56+
57+
continue
58+
}
59+
}
60+
61+
// ForEach call the cb function for each reference contained on this iter until
62+
// an error happens or the end of the iter is reached. If ErrStop is sent
63+
// the iteration is stopped but no error is returned. The iterator is closed.
64+
func (iter *referenceFilteredIter) ForEach(cb func(*plumbing.Reference) error) error {
65+
defer iter.Close()
66+
for {
67+
r, err := iter.Next()
68+
if err == io.EOF {
69+
break
70+
}
71+
if err != nil {
72+
return err
73+
}
74+
75+
if err := cb(r); err != nil {
76+
if err == ErrStop {
77+
break
78+
}
79+
80+
return err
81+
}
82+
}
83+
84+
return nil
85+
}
86+
87+
// Close releases any resources used by the iterator.
88+
func (iter *referenceFilteredIter) Close() {
89+
iter.iter.Close()
90+
}
91+
3192
// ReferenceSliceIter implements ReferenceIter. It iterates over a series of
3293
// references stored in a slice and yields each one in turn when Next() is
3394
// called.
@@ -41,7 +102,7 @@ type ReferenceSliceIter struct {
41102

42103
// NewReferenceSliceIter returns a reference iterator for the given slice of
43104
// objects.
44-
func NewReferenceSliceIter(series []*plumbing.Reference) *ReferenceSliceIter {
105+
func NewReferenceSliceIter(series []*plumbing.Reference) ReferenceIter {
45106
return &ReferenceSliceIter{
46107
series: series,
47108
}

plumbing/storer/reference_test.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,102 @@ func (s *ReferenceSuite) TestReferenceSliceIterForEachStop(c *C) {
8989

9090
c.Assert(count, Equals, 1)
9191
}
92+
93+
func (s *ReferenceSuite) TestReferenceFilteredIterNext(c *C) {
94+
slice := []*plumbing.Reference{
95+
plumbing.NewReferenceFromStrings("foo", "foo"),
96+
plumbing.NewReferenceFromStrings("bar", "bar"),
97+
}
98+
99+
i := NewReferenceFilteredIter(func(r *plumbing.Reference) bool {
100+
if r.Name() == "bar" {
101+
return true
102+
}
103+
104+
return false
105+
}, NewReferenceSliceIter(slice))
106+
foo, err := i.Next()
107+
c.Assert(err, IsNil)
108+
c.Assert(foo == slice[0], Equals, false)
109+
c.Assert(foo == slice[1], Equals, true)
110+
111+
empty, err := i.Next()
112+
c.Assert(err, Equals, io.EOF)
113+
c.Assert(empty, IsNil)
114+
}
115+
116+
func (s *ReferenceSuite) TestReferenceFilteredIterForEach(c *C) {
117+
slice := []*plumbing.Reference{
118+
plumbing.NewReferenceFromStrings("foo", "foo"),
119+
plumbing.NewReferenceFromStrings("bar", "bar"),
120+
}
121+
122+
i := NewReferenceFilteredIter(func(r *plumbing.Reference) bool {
123+
if r.Name() == "bar" {
124+
return true
125+
}
126+
127+
return false
128+
}, NewReferenceSliceIter(slice))
129+
var count int
130+
i.ForEach(func(r *plumbing.Reference) error {
131+
c.Assert(r == slice[1], Equals, true)
132+
count++
133+
return nil
134+
})
135+
136+
c.Assert(count, Equals, 1)
137+
}
138+
139+
func (s *ReferenceSuite) TestReferenceFilteredIterError(c *C) {
140+
slice := []*plumbing.Reference{
141+
plumbing.NewReferenceFromStrings("foo", "foo"),
142+
plumbing.NewReferenceFromStrings("bar", "bar"),
143+
}
144+
145+
i := NewReferenceFilteredIter(func(r *plumbing.Reference) bool {
146+
if r.Name() == "bar" {
147+
return true
148+
}
149+
150+
return false
151+
}, NewReferenceSliceIter(slice))
152+
var count int
153+
exampleErr := errors.New("SOME ERROR")
154+
err := i.ForEach(func(r *plumbing.Reference) error {
155+
c.Assert(r == slice[1], Equals, true)
156+
count++
157+
if count == 1 {
158+
return exampleErr
159+
}
160+
161+
return nil
162+
})
163+
164+
c.Assert(err, Equals, exampleErr)
165+
c.Assert(count, Equals, 1)
166+
}
167+
168+
func (s *ReferenceSuite) TestReferenceFilteredIterForEachStop(c *C) {
169+
slice := []*plumbing.Reference{
170+
plumbing.NewReferenceFromStrings("foo", "foo"),
171+
plumbing.NewReferenceFromStrings("bar", "bar"),
172+
}
173+
174+
i := NewReferenceFilteredIter(func(r *plumbing.Reference) bool {
175+
if r.Name() == "bar" {
176+
return true
177+
}
178+
179+
return false
180+
}, NewReferenceSliceIter(slice))
181+
182+
var count int
183+
i.ForEach(func(r *plumbing.Reference) error {
184+
c.Assert(r == slice[1], Equals, true)
185+
count++
186+
return ErrStop
187+
})
188+
189+
c.Assert(count, Equals, 1)
190+
}

references_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ func (s *ReferencesSuite) TestRevList(c *C) {
291291
for _, t := range referencesTests {
292292
r := s.NewRepositoryFromPackfile(fixtures.ByURL(t.repo).One())
293293

294-
commit, err := r.Commit(plumbing.NewHash(t.commit))
294+
commit, err := r.CommitObject(plumbing.NewHash(t.commit))
295295
c.Assert(err, IsNil)
296296

297297
revs, err := References(commit, t.path)
@@ -300,7 +300,7 @@ func (s *ReferencesSuite) TestRevList(c *C) {
300300

301301
for i := range revs {
302302
if revs[i].Hash.String() != t.revs[i] {
303-
commit, err := s.Repository.Commit(plumbing.NewHash(t.revs[i]))
303+
commit, err := s.Repository.CommitObject(plumbing.NewHash(t.revs[i]))
304304
c.Assert(err, IsNil)
305305
equiv, err := equivalent(t.path, revs[i], commit)
306306
c.Assert(err, IsNil)
@@ -358,7 +358,7 @@ func (s *ReferencesSuite) commits(c *C, repo string, hs ...string) []*object.Com
358358

359359
result := make([]*object.Commit, 0, len(hs))
360360
for _, h := range hs {
361-
commit, err := r.Commit(plumbing.NewHash(h))
361+
commit, err := r.CommitObject(plumbing.NewHash(h))
362362
c.Assert(err, IsNil)
363363

364364
result = append(result, commit)

0 commit comments

Comments
 (0)