Skip to content

Commit 76dd6f1

Browse files
authored
Merge pull request #15 from jfontan/repository-pool
Repository pool
2 parents ca31cf6 + 547cf22 commit 76dd6f1

File tree

11 files changed

+694
-79
lines changed

11 files changed

+694
-79
lines changed

blobs.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ package gitquery
33
import (
44
"gopkg.in/src-d/go-mysql-server.v0/sql"
55

6-
"gopkg.in/src-d/go-git.v4"
76
"gopkg.in/src-d/go-git.v4/plumbing/object"
87
)
98

109
type blobsTable struct {
11-
r *git.Repository
10+
pool *RepositoryPool
1211
}
1312

14-
func newBlobsTable(r *git.Repository) sql.Table {
15-
return &blobsTable{r: r}
13+
func newBlobsTable(pool *RepositoryPool) sql.Table {
14+
return &blobsTable{pool: pool}
1615
}
1716

1817
func (blobsTable) Resolved() bool {
@@ -39,33 +38,47 @@ func (r *blobsTable) TransformExpressionsUp(f func(sql.Expression) sql.Expressio
3938
}
4039

4140
func (r blobsTable) RowIter() (sql.RowIter, error) {
42-
bIter, err := r.r.BlobObjects()
41+
iter := &blobIter{}
42+
43+
repoIter, err := NewRowRepoIter(r.pool, iter)
4344
if err != nil {
4445
return nil, err
4546
}
46-
iter := &blobIter{i: bIter}
47-
return iter, nil
47+
48+
return repoIter, nil
4849
}
4950

5051
func (blobsTable) Children() []sql.Node {
5152
return []sql.Node{}
5253
}
5354

5455
type blobIter struct {
55-
i *object.BlobIter
56+
iter *object.BlobIter
57+
}
58+
59+
func (i *blobIter) NewIterator(repo *Repository) (RowRepoIter, error) {
60+
iter, err := repo.Repo.BlobObjects()
61+
if err != nil {
62+
return nil, err
63+
}
64+
65+
return &blobIter{iter: iter}, nil
5666
}
5767

5868
func (i *blobIter) Next() (sql.Row, error) {
59-
blob, err := i.i.Next()
69+
o, err := i.iter.Next()
6070
if err != nil {
6171
return nil, err
6272
}
6373

64-
return blobToRow(blob), nil
74+
return blobToRow(o), nil
6575
}
6676

6777
func (i *blobIter) Close() error {
68-
i.i.Close()
78+
if i.iter != nil {
79+
i.iter.Close()
80+
}
81+
6982
return nil
7083
}
7184

cmd/gitquery/query_base.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ package main
33
import (
44
"io"
55
"os"
6-
"path/filepath"
76

87
"github.com/src-d/gitquery"
98
"github.com/src-d/gitquery/internal/format"
109

11-
gogit "gopkg.in/src-d/go-git.v4"
1210
"gopkg.in/src-d/go-git.v4/utils/ioutil"
1311
sqle "gopkg.in/src-d/go-mysql-server.v0"
1412
"gopkg.in/src-d/go-mysql-server.v0/sql"
@@ -17,7 +15,7 @@ import (
1715
type cmdQueryBase struct {
1816
cmd
1917

20-
Path string `short:"p" long:"path" description:"Path where the git repository is located"`
18+
Path string `short:"p" long:"path" description:"Path where the git repositories are located, one per dir"`
2119

2220
engine *sqle.Engine
2321
name string
@@ -31,13 +29,15 @@ func (c *cmdQueryBase) buildDatabase() error {
3129
c.print("opening %q repository...\n", c.Path)
3230

3331
var err error
34-
r, err := gogit.PlainOpen(c.Path)
32+
33+
pool := gitquery.NewRepositoryPool()
34+
err = pool.AddDir(c.Path)
3535
if err != nil {
36+
println("ERR", err.Error())
3637
return err
3738
}
3839

39-
c.name = filepath.Base(filepath.Join(c.Path, ".."))
40-
c.engine.AddDatabase(gitquery.NewDatabase(c.name, r))
40+
c.engine.AddDatabase(gitquery.NewDatabase(c.name, &pool))
4141
return err
4242
}
4343

commits.go

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ package gitquery
33
import (
44
"gopkg.in/src-d/go-mysql-server.v0/sql"
55

6-
"gopkg.in/src-d/go-git.v4"
76
"gopkg.in/src-d/go-git.v4/plumbing/object"
87
)
98

109
type commitsTable struct {
11-
r *git.Repository
10+
pool *RepositoryPool
1211
}
1312

14-
func newCommitsTable(r *git.Repository) sql.Table {
15-
return &commitsTable{r: r}
13+
func newCommitsTable(pool *RepositoryPool) sql.Table {
14+
return &commitsTable{pool: pool}
1615
}
1716

1817
func (commitsTable) Resolved() bool {
@@ -45,32 +44,47 @@ func (r *commitsTable) TransformExpressionsUp(f func(sql.Expression) sql.Express
4544
}
4645

4746
func (r commitsTable) RowIter() (sql.RowIter, error) {
48-
cIter, err := r.r.CommitObjects()
47+
iter := &commitIter{}
48+
49+
repoIter, err := NewRowRepoIter(r.pool, iter)
4950
if err != nil {
5051
return nil, err
5152
}
52-
iter := &commitIter{i: cIter}
53-
return iter, nil
53+
54+
return repoIter, nil
5455
}
5556

5657
func (commitsTable) Children() []sql.Node {
5758
return []sql.Node{}
5859
}
5960

6061
type commitIter struct {
61-
i object.CommitIter
62+
iter object.CommitIter
63+
}
64+
65+
func (i *commitIter) NewIterator(repo *Repository) (RowRepoIter, error) {
66+
iter, err := repo.Repo.CommitObjects()
67+
if err != nil {
68+
return nil, err
69+
}
70+
71+
return &commitIter{iter: iter}, nil
6272
}
6373

6474
func (i *commitIter) Next() (sql.Row, error) {
65-
commit, err := i.i.Next()
75+
o, err := i.iter.Next()
6676
if err != nil {
6777
return nil, err
6878
}
69-
return commitToRow(commit), nil
79+
80+
return commitToRow(o), nil
7081
}
7182

7283
func (i *commitIter) Close() error {
73-
i.i.Close()
84+
if i.iter != nil {
85+
i.iter.Close()
86+
}
87+
7488
return nil
7589
}
7690

database.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package gitquery
22

33
import (
44
"gopkg.in/src-d/go-mysql-server.v0/sql"
5-
6-
"gopkg.in/src-d/go-git.v4"
75
)
86

97
const (
@@ -26,15 +24,15 @@ type Database struct {
2624
or sql.Table
2725
}
2826

29-
func NewDatabase(name string, r *git.Repository) sql.Database {
27+
func NewDatabase(name string, pool *RepositoryPool) sql.Database {
3028
return &Database{
3129
name: name,
32-
cr: newCommitsTable(r),
33-
rr: newReferencesTable(r),
34-
tr: newTagsTable(r),
35-
br: newBlobsTable(r),
36-
ter: newTreeEntriesTable(r),
37-
or: newObjectsTable(r),
30+
cr: newCommitsTable(pool),
31+
rr: newReferencesTable(pool),
32+
tr: newTagsTable(pool),
33+
br: newBlobsTable(pool),
34+
ter: newTreeEntriesTable(pool),
35+
or: newObjectsTable(pool),
3836
}
3937
}
4038

database_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ func getDB(require *require.Assertions, fixture *fixtures.Fixture,
6464
r, err := git.Open(s, memfs.New())
6565
require.NoError(err)
6666

67-
db := NewDatabase(name, r)
67+
pool := NewRepositoryPool()
68+
pool.Add("repo", r)
69+
70+
db := NewDatabase(name, &pool)
6871
require.NotNil(db)
6972

7073
return db

objects.go

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@ package gitquery
33
import (
44
"gopkg.in/src-d/go-mysql-server.v0/sql"
55

6-
"gopkg.in/src-d/go-git.v4"
76
"gopkg.in/src-d/go-git.v4/plumbing/object"
87
)
98

109
type objectsTable struct {
11-
r *git.Repository
10+
pool *RepositoryPool
1211
}
1312

14-
func newObjectsTable(r *git.Repository) sql.Table {
15-
return &objectsTable{r: r}
13+
func newObjectsTable(pool *RepositoryPool) sql.Table {
14+
return &objectsTable{pool: pool}
1615
}
1716

1817
func (objectsTable) Resolved() bool {
@@ -39,24 +38,35 @@ func (r *objectsTable) TransformExpressionsUp(f func(sql.Expression) sql.Express
3938
}
4039

4140
func (r objectsTable) RowIter() (sql.RowIter, error) {
42-
oIter, err := r.r.Objects()
41+
iter := &objectIter{}
42+
43+
repoIter, err := NewRowRepoIter(r.pool, iter)
4344
if err != nil {
4445
return nil, err
4546
}
46-
iter := &objectIter{i: oIter}
47-
return iter, nil
47+
48+
return repoIter, nil
4849
}
4950

5051
func (objectsTable) Children() []sql.Node {
5152
return []sql.Node{}
5253
}
5354

5455
type objectIter struct {
55-
i *object.ObjectIter
56+
iter *object.ObjectIter
57+
}
58+
59+
func (i *objectIter) NewIterator(repo *Repository) (RowRepoIter, error) {
60+
iter, err := repo.Repo.Objects()
61+
if err != nil {
62+
return nil, err
63+
}
64+
65+
return &objectIter{iter: iter}, nil
5666
}
5767

5868
func (i *objectIter) Next() (sql.Row, error) {
59-
o, err := i.i.Next()
69+
o, err := i.iter.Next()
6070
if err != nil {
6171
return nil, err
6272
}
@@ -65,10 +75,12 @@ func (i *objectIter) Next() (sql.Row, error) {
6575
}
6676

6777
func (i *objectIter) Close() error {
68-
i.i.Close()
78+
if i.iter != nil {
79+
i.iter.Close()
80+
}
81+
6982
return nil
7083
}
71-
7284
func objectToRow(o object.Object) sql.Row {
7385
return sql.NewRow(
7486
o.ID().String(),

references.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@ package gitquery
33
import (
44
"gopkg.in/src-d/go-mysql-server.v0/sql"
55

6-
"gopkg.in/src-d/go-git.v4"
76
"gopkg.in/src-d/go-git.v4/plumbing"
87
"gopkg.in/src-d/go-git.v4/plumbing/storer"
98
)
109

1110
type referencesTable struct {
12-
r *git.Repository
11+
pool *RepositoryPool
1312
}
1413

15-
func newReferencesTable(r *git.Repository) sql.Table {
16-
return &referencesTable{r: r}
14+
func newReferencesTable(pool *RepositoryPool) sql.Table {
15+
return &referencesTable{pool: pool}
1716
}
1817

1918
func (referencesTable) Resolved() bool {
@@ -46,33 +45,47 @@ func (r *referencesTable) TransformExpressionsUp(f func(sql.Expression) sql.Expr
4645
}
4746

4847
func (r referencesTable) RowIter() (sql.RowIter, error) {
49-
rIter, err := r.r.References()
48+
iter := &referenceIter{}
49+
50+
repoIter, err := NewRowRepoIter(r.pool, iter)
5051
if err != nil {
5152
return nil, err
5253
}
53-
iter := &referenceIter{i: rIter}
54-
return iter, nil
54+
55+
return repoIter, nil
5556
}
5657

5758
func (referencesTable) Children() []sql.Node {
5859
return []sql.Node{}
5960
}
6061

6162
type referenceIter struct {
62-
i storer.ReferenceIter
63+
iter storer.ReferenceIter
64+
}
65+
66+
func (i *referenceIter) NewIterator(repo *Repository) (RowRepoIter, error) {
67+
iter, err := repo.Repo.References()
68+
if err != nil {
69+
return nil, err
70+
}
71+
72+
return &referenceIter{iter: iter}, nil
6373
}
6474

6575
func (i *referenceIter) Next() (sql.Row, error) {
66-
reference, err := i.i.Next()
76+
o, err := i.iter.Next()
6777
if err != nil {
6878
return nil, err
6979
}
7080

71-
return referenceToRow(reference), nil
81+
return referenceToRow(o), nil
7282
}
7383

7484
func (i *referenceIter) Close() error {
75-
i.i.Close()
85+
if i.iter != nil {
86+
i.iter.Close()
87+
}
88+
7689
return nil
7790
}
7891

0 commit comments

Comments
 (0)