Skip to content

Commit 28499ea

Browse files
committed
gitbase/repository_pool: change repository to be an interface
Also add billyRepo for billy filesystems Signed-off-by: Javi Fontan <[email protected]>
1 parent 8e3241a commit 28499ea

12 files changed

+157
-91
lines changed

blobs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ func (i *blobsKeyValueIter) Next() ([]interface{}, []byte, error) {
369369
}
370370

371371
repo := i.pool.repositories[i.repo.ID]
372-
i.idx, err = newRepositoryIndex(repo.path, repo.kind)
372+
i.idx, err = newRepositoryIndex(repo)
373373
if err != nil {
374374
return nil, nil, err
375375
}

commit_files.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ func (i *commitFilesKeyValueIter) Next() ([]interface{}, []byte, error) {
399399
}
400400

401401
repo := i.pool.repositories[i.repo.ID]
402-
i.idx, err = newRepositoryIndex(repo.path, repo.kind)
402+
i.idx, err = newRepositoryIndex(repo)
403403
if err != nil {
404404
return nil, nil, err
405405
}

commits.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ func (i *commitsKeyValueIter) Next() ([]interface{}, []byte, error) {
334334
}
335335

336336
r := i.pool.repositories[i.repo.ID]
337-
i.idx, err = newRepositoryIndex(r.path, r.kind)
337+
i.idx, err = newRepositoryIndex(r)
338338
if err != nil {
339339
return nil, nil, err
340340
}

files.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ func (i *filesKeyValueIter) Next() ([]interface{}, []byte, error) {
412412
}
413413

414414
repo := i.pool.repositories[i.repo.ID]
415-
i.idx, err = newRepositoryIndex(repo.path, repo.kind)
415+
i.idx, err = newRepositoryIndex(repo)
416416
if err != nil {
417417
return nil, nil, err
418418
}

fs_error_test.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,17 @@ func setupErrorRepos(t *testing.T) (*sql.Context, CleanupFunc) {
5858

5959
pool := NewRepositoryPool()
6060

61-
repo, err := brokenRepo(brokenPackfile, baseFS)
61+
fs, err := brokenFS(brokenPackfile, baseFS)
6262
require.NoError(err)
63-
pool.AddInitialized("packfile", repo)
63+
pool.AddBilly("packfile", fs)
6464

65-
repo, err = brokenRepo(brokenIndex, baseFS)
65+
fs, err = brokenFS(brokenIndex, baseFS)
6666
require.NoError(err)
67-
pool.AddInitialized("index", repo)
67+
pool.AddBilly("index", fs)
6868

69-
repo, err = brokenRepo(0, baseFS)
69+
fs, err = brokenFS(0, baseFS)
7070
require.NoError(err)
71-
pool.AddInitialized("ok", repo)
71+
pool.AddBilly("ok", fs)
7272

7373
session := NewSession(pool, WithSkipGitErrors(true))
7474
ctx := sql.NewContext(context.TODO(), sql.WithSession(session))
@@ -81,6 +81,25 @@ func setupErrorRepos(t *testing.T) (*sql.Context, CleanupFunc) {
8181
return ctx, cleanup
8282
}
8383

84+
func brokenFS(
85+
brokenType brokenType,
86+
fs billy.Filesystem,
87+
) (billy.Filesystem, error) {
88+
dotFS, err := fs.Chroot(".git")
89+
if err != nil {
90+
return nil, err
91+
}
92+
93+
var brokenFS billy.Filesystem
94+
if brokenType == 0 {
95+
brokenFS = dotFS
96+
} else {
97+
brokenFS = NewBrokenFS(brokenType, dotFS)
98+
}
99+
100+
return brokenFS, nil
101+
}
102+
84103
func brokenRepo(
85104
brokenType brokenType,
86105
fs billy.Filesystem,

packfiles.go

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

33
import (
44
"io"
5-
stdioutil "io/ioutil"
65
"os"
7-
"path/filepath"
86

97
errors "gopkg.in/src-d/go-errors.v1"
108
"gopkg.in/src-d/go-git.v4/plumbing/object"
@@ -13,9 +11,7 @@ import (
1311
"gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit"
1412
"gopkg.in/src-d/go-git.v4/utils/ioutil"
1513

16-
"gopkg.in/src-d/go-billy-siva.v4"
1714
billy "gopkg.in/src-d/go-billy.v4"
18-
"gopkg.in/src-d/go-billy.v4/osfs"
1915
"gopkg.in/src-d/go-git.v4/plumbing"
2016
"gopkg.in/src-d/go-git.v4/plumbing/format/idxfile"
2117
"gopkg.in/src-d/go-git.v4/plumbing/format/objfile"
@@ -26,8 +22,8 @@ type packRepository struct {
2622
packs map[plumbing.Hash]packfile.Index
2723
}
2824

29-
func repositoryPackfiles(path string, kind repoKind) (*dotgit.DotGit, []plumbing.Hash, error) {
30-
fs, err := repoFilesystem(path, kind)
25+
func repositoryPackfiles(repo repository) (*dotgit.DotGit, []plumbing.Hash, error) {
26+
fs, err := repo.FS()
3127
if err != nil {
3228
return nil, nil, err
3329
}
@@ -56,8 +52,8 @@ type repositoryIndex struct {
5652
indexes []*packfileIndex
5753
}
5854

59-
func newRepositoryIndex(path string, kind repoKind) (*repositoryIndex, error) {
60-
dot, packfiles, err := repositoryPackfiles(path, kind)
55+
func newRepositoryIndex(repo repository) (*repositoryIndex, error) {
56+
dot, packfiles, err := repositoryPackfiles(repo)
6157
if err != nil {
6258
return nil, err
6359
}
@@ -126,23 +122,6 @@ func (i *repositoryIndex) isUnpacked(hash plumbing.Hash) (bool, error) {
126122
return true, nil
127123
}
128124

129-
func repoFilesystem(path string, kind repoKind) (billy.Filesystem, error) {
130-
if kind == sivaRepo {
131-
localfs := osfs.New(filepath.Dir(path))
132-
133-
tmpDir, err := stdioutil.TempDir(os.TempDir(), "gitbase-siva")
134-
if err != nil {
135-
return nil, err
136-
}
137-
138-
tmpfs := osfs.New(tmpDir)
139-
140-
return sivafs.NewFilesystem(localfs, filepath.Base(path), tmpfs)
141-
}
142-
143-
return osfs.New(path), nil
144-
}
145-
146125
func findDotGit(fs billy.Filesystem) (billy.Filesystem, error) {
147126
fi, err := fs.Stat(".git")
148127
if err != nil && !os.IsNotExist(err) {
@@ -157,7 +136,7 @@ func findDotGit(fs billy.Filesystem) (billy.Filesystem, error) {
157136
}
158137

159138
func getUnpackedObject(repo repository, hash plumbing.Hash) (o object.Object, err error) {
160-
fs, err := repoFilesystem(repo.path, repo.kind)
139+
fs, err := repo.FS()
161140
if err != nil {
162141
return nil, err
163142
}
@@ -222,7 +201,7 @@ func newRepoObjectDecoder(
222201
repo repository,
223202
hash plumbing.Hash,
224203
) (*repoObjectDecoder, error) {
225-
fs, err := repoFilesystem(repo.path, repo.kind)
204+
fs, err := repo.FS()
226205
if err != nil {
227206
return nil, err
228207
}
@@ -251,7 +230,7 @@ func newRepoObjectDecoder(
251230
}
252231

253232
return &repoObjectDecoder{
254-
repo: repo.path,
233+
repo: repo.Path(),
255234
packfile: hash,
256235
decoder: decoder,
257236
storage: storage,

packfiles_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var testSivaFilePath = filepath.Join("_testdata", "fff7062de8474d10a67d417ccea87
1313
func TestRepositoryPackfiles(t *testing.T) {
1414
require := require.New(t)
1515

16-
fs, packfiles, err := repositoryPackfiles(testSivaFilePath, sivaRepo)
16+
fs, packfiles, err := repositoryPackfiles(sivaRepo("siva", testSivaFilePath))
1717

1818
require.NoError(err)
1919
require.Equal([]plumbing.Hash{
@@ -24,7 +24,7 @@ func TestRepositoryPackfiles(t *testing.T) {
2424
}
2525

2626
func TestRepositoryIndex(t *testing.T) {
27-
idx, err := newRepositoryIndex(testSivaFilePath, sivaRepo)
27+
idx, err := newRepositoryIndex(sivaRepo("siva", testSivaFilePath))
2828
require.NoError(t, err)
2929

3030
testCases := []struct {

repositories_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestRepositoriesTable_RowIter(t *testing.T) {
3939
pool := NewRepositoryPool()
4040

4141
for _, id := range repoIDs {
42-
pool.Add(id, "", gitRepo)
42+
pool.Add(gitRepo(id, ""))
4343
}
4444

4545
session := NewSession(pool)

0 commit comments

Comments
 (0)