Skip to content

Commit fd71314

Browse files
authored
Merge pull request #789 from kuba--/fix-788/remotes
Don't skip repos for remotes table with more than 1 URL
2 parents 6293321 + 8d358e2 commit fd71314

File tree

5 files changed

+78
-24
lines changed

5 files changed

+78
-24
lines changed

commits_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -304,3 +304,8 @@ func TestCommitsIndexIterClosed(t *testing.T) {
304304
func TestCommitsIterClosed(t *testing.T) {
305305
testTableIterClosed(t, new(commitsTable))
306306
}
307+
308+
func TestCommitsIterators(t *testing.T) {
309+
// columns names just for debugging
310+
testTableIterators(t, new(commitsTable), []string{"commit_hash", "commit_author_email"})
311+
}

common_test.go

+36-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"testing"
1212

1313
"github.com/stretchr/testify/require"
14-
"gopkg.in/src-d/go-billy-siva.v4"
14+
sivafs "gopkg.in/src-d/go-billy-siva.v4"
1515
billy "gopkg.in/src-d/go-billy.v4"
1616
"gopkg.in/src-d/go-billy.v4/osfs"
1717
fixtures "gopkg.in/src-d/go-git-fixtures.v3"
@@ -243,6 +243,41 @@ func testTableIndexIterClosed(t *testing.T, table sql.IndexableTable) {
243243
require.True(closed.Check())
244244
}
245245

246+
func testTableIterators(t *testing.T, table sql.IndexableTable, columns []string) {
247+
t.Helper()
248+
249+
require := require.New(t)
250+
ctx, closed := setupSivaCloseRepos(t, "_testdata")
251+
252+
rows, _ := tableToRows(ctx, table)
253+
expected := len(rows)
254+
255+
iter, err := table.IndexKeyValues(ctx, columns)
256+
require.NoError(err)
257+
actual := 0
258+
for {
259+
_, i, err := iter.Next()
260+
if err != nil {
261+
require.Equal(io.EOF, err)
262+
break
263+
}
264+
for {
265+
_, _, err := i.Next()
266+
if err != nil {
267+
require.Equal(io.EOF, err)
268+
break
269+
}
270+
actual++
271+
}
272+
273+
i.Close()
274+
}
275+
iter.Close()
276+
require.True(closed.Check())
277+
278+
require.EqualValues(expected, actual)
279+
}
280+
246281
func testTableIterClosed(t *testing.T, table sql.IndexableTable) {
247282
t.Helper()
248283

references_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,8 @@ func TestReferencesIndexIterClosed(t *testing.T) {
140140
func TestReferencesIterClosed(t *testing.T) {
141141
testTableIterClosed(t, new(referencesTable))
142142
}
143+
144+
func TestReferencesIterators(t *testing.T) {
145+
// columns names just for debugging
146+
testTableIterators(t, new(referencesTable), []string{"ref_name", "commit_hash"})
147+
}

remotes.go

+29-21
Original file line numberDiff line numberDiff line change
@@ -144,28 +144,25 @@ type remotesRowIter struct {
144144
}
145145

146146
func (i *remotesRowIter) Next() (sql.Row, error) {
147-
if i.remotePos >= len(i.remotes) {
148-
return nil, io.EOF
149-
}
150-
151-
remote := i.remotes[i.remotePos]
152-
config := remote.Config()
153-
154-
if i.urlPos >= len(config.URLs) || i.urlPos >= len(config.Fetch) {
155-
i.remotePos++
147+
for {
156148
if i.remotePos >= len(i.remotes) {
157149
return nil, io.EOF
158150
}
159151

160-
remote = i.remotes[i.remotePos]
161-
config = remote.Config()
162-
i.urlPos = 0
163-
}
152+
remote := i.remotes[i.remotePos]
153+
config := remote.Config()
154+
155+
if i.urlPos >= len(config.URLs) && i.urlPos >= len(config.Fetch) {
156+
i.remotePos++
157+
i.urlPos = 0
158+
continue
159+
}
164160

165-
row := remoteToRow(i.repo.ID, config, i.urlPos)
166-
i.urlPos++
161+
row := remoteToRow(i.repo.ID, config, i.urlPos)
162+
i.urlPos++
167163

168-
return row, nil
164+
return row, nil
165+
}
169166
}
170167

171168
func (i *remotesRowIter) Close() error {
@@ -177,13 +174,23 @@ func (i *remotesRowIter) Close() error {
177174
}
178175

179176
func remoteToRow(repoID string, config *config.RemoteConfig, pos int) sql.Row {
177+
var url interface{}
178+
if pos < len(config.URLs) {
179+
url = config.URLs[pos]
180+
}
181+
182+
var fetch interface{}
183+
if pos < len(config.Fetch) {
184+
fetch = config.Fetch[pos].String()
185+
}
186+
180187
return sql.NewRow(
181188
repoID,
182189
config.Name,
183-
config.URLs[pos],
184-
config.URLs[pos],
185-
config.Fetch[pos].String(),
186-
config.Fetch[pos].String(),
190+
url,
191+
url,
192+
fetch,
193+
fetch,
187194
)
188195
}
189196

@@ -256,7 +263,8 @@ func (i *remotesKeyValueIter) Next() ([]interface{}, []byte, error) {
256263
}
257264

258265
cfg := i.remotes[i.pos].Config()
259-
if i.urlPos >= len(cfg.URLs) {
266+
if i.urlPos >= len(cfg.URLs) && i.urlPos >= len(cfg.Fetch) {
267+
i.urlPos = 0
260268
i.pos++
261269
continue
262270
}

remotes_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ func TestRemotesIndexIterClosed(t *testing.T) {
150150
testTableIndexIterClosed(t, new(remotesTable))
151151
}
152152

153-
func TestRemotesIterClosed(t *testing.T) {
154-
testTableIterClosed(t, new(remotesTable))
153+
func TestRemotesIterators(t *testing.T) {
154+
// columns names just for debugging
155+
testTableIterators(t, new(remotesTable), []string{"remote_name", "remote_push_url"})
155156
}

0 commit comments

Comments
 (0)