Skip to content

Commit 7fcde1e

Browse files
committed
gitbase: use KeepDescriptors go-git option
Adds storer close after repository usage. Also adds ExclusiveAccess option. Signed-off-by: Javi Fontan <[email protected]>
1 parent f9368b9 commit 7fcde1e

File tree

8 files changed

+58
-2
lines changed

8 files changed

+58
-2
lines changed

blobs.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ func (i *blobRowIter) Close() error {
239239
i.iter.Close()
240240
}
241241

242+
i.repo.Close()
243+
242244
return nil
243245
}
244246

commit_blobs.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,5 +314,7 @@ func (i *commitBlobsRowIter) Close() error {
314314
return i.index.Close()
315315
}
316316

317+
i.repo.Close()
318+
317319
return nil
318320
}

commit_trees.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,5 +326,7 @@ func (i *commitTreesRowIter) Close() error {
326326
return i.index.Close()
327327
}
328328

329+
i.repo.Close()
330+
329331
return nil
330332
}

commits.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ func (i *commitIter) Close() error {
193193
i.iter.Close()
194194
}
195195

196+
i.repo.Close()
197+
196198
return nil
197199
}
198200

files.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,8 @@ func (i *filesRowIter) Close() error {
282282
i.commits.Close()
283283
}
284284

285+
i.repo.Close()
286+
285287
return nil
286288
}
287289

ref_commits.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@ func (i *refCommitsRowIter) Close() error {
353353
return i.index.Close()
354354
}
355355

356+
i.repo.Close()
357+
356358
return nil
357359
}
358360

repository_pool.go

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,47 @@ func NewRepository(id string, repo *git.Repository) *Repository {
3535
}
3636
}
3737

38+
// Close closes all opened files in the repository.
39+
func (r *Repository) Close() {
40+
if r != nil && r.Repository != nil {
41+
f, ok := r.Storer.(*filesystem.Storage)
42+
if ok {
43+
// The only type of error returned is "file already closed" and
44+
// we don't want to do anything with it.
45+
f.Close()
46+
}
47+
}
48+
}
49+
3850
// NewRepositoryFromPath creates and initializes a new Repository structure
3951
// and initializes a go-git repository
4052
func NewRepositoryFromPath(id, path string) (*Repository, error) {
41-
repo, err := git.PlainOpen(path)
53+
op := filesystem.Options{
54+
ExclusiveAccess: true,
55+
KeepDescriptors: true,
56+
}
57+
58+
var wt billy.Filesystem
59+
fs := osfs.New(path)
60+
f, err := fs.Stat(git.GitDirName)
61+
if err != nil && !os.IsNotExist(err) {
62+
return nil, err
63+
}
64+
65+
if f != nil && f.IsDir() {
66+
wt = fs
67+
fs, err = fs.Chroot(git.GitDirName)
68+
if err != nil {
69+
return nil, err
70+
}
71+
}
72+
73+
sto, err := filesystem.NewStorageWithOptions(fs, op)
74+
if err != nil {
75+
return nil, err
76+
}
77+
78+
repo, err := git.Open(sto, wt)
4279
if err != nil {
4380
return nil, err
4481
}
@@ -63,7 +100,12 @@ func NewSivaRepositoryFromPath(id, path string) (*Repository, error) {
63100
return nil, err
64101
}
65102

66-
sto, err := filesystem.NewStorage(fs)
103+
op := filesystem.Options{
104+
ExclusiveAccess: true,
105+
KeepDescriptors: true,
106+
}
107+
108+
sto, err := filesystem.NewStorageWithOptions(fs, op)
67109
if err != nil {
68110
return nil, err
69111
}

tree_entries.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ func (i *treeEntriesRowIter) Close() error {
236236
i.iter.Close()
237237
}
238238

239+
i.repo.Close()
240+
239241
return nil
240242
}
241243

0 commit comments

Comments
 (0)