4183c846e3
Bumps [gopkg.in/src-d/go-git.v4](https://github.com/src-d/go-git) from 4.8.0 to 4.10.0. - [Release notes](https://github.com/src-d/go-git/releases) - [Commits](https://github.com/src-d/go-git/compare/v4.8.0...v4.10.0)
71 lines
2 KiB
Go
71 lines
2 KiB
Go
// Package filesystem is a storage backend base on filesystems
|
|
package filesystem
|
|
|
|
import (
|
|
"gopkg.in/src-d/go-git.v4/plumbing/cache"
|
|
"gopkg.in/src-d/go-git.v4/storage/filesystem/dotgit"
|
|
|
|
"gopkg.in/src-d/go-billy.v4"
|
|
)
|
|
|
|
// Storage is an implementation of git.Storer that stores data on disk in the
|
|
// standard git format (this is, the .git directory). Zero values of this type
|
|
// are not safe to use, see the NewStorage function below.
|
|
type Storage struct {
|
|
fs billy.Filesystem
|
|
dir *dotgit.DotGit
|
|
|
|
ObjectStorage
|
|
ReferenceStorage
|
|
IndexStorage
|
|
ShallowStorage
|
|
ConfigStorage
|
|
ModuleStorage
|
|
}
|
|
|
|
// Options holds configuration for the storage.
|
|
type Options struct {
|
|
// ExclusiveAccess means that the filesystem is not modified externally
|
|
// while the repo is open.
|
|
ExclusiveAccess bool
|
|
// KeepDescriptors makes the file descriptors to be reused but they will
|
|
// need to be manually closed calling Close().
|
|
KeepDescriptors bool
|
|
}
|
|
|
|
// NewStorage returns a new Storage backed by a given `fs.Filesystem` and cache.
|
|
func NewStorage(fs billy.Filesystem, cache cache.Object) *Storage {
|
|
return NewStorageWithOptions(fs, cache, Options{})
|
|
}
|
|
|
|
// NewStorageWithOptions returns a new Storage with extra options,
|
|
// backed by a given `fs.Filesystem` and cache.
|
|
func NewStorageWithOptions(fs billy.Filesystem, cache cache.Object, ops Options) *Storage {
|
|
dirOps := dotgit.Options{
|
|
ExclusiveAccess: ops.ExclusiveAccess,
|
|
KeepDescriptors: ops.KeepDescriptors,
|
|
}
|
|
dir := dotgit.NewWithOptions(fs, dirOps)
|
|
|
|
return &Storage{
|
|
fs: fs,
|
|
dir: dir,
|
|
|
|
ObjectStorage: *NewObjectStorageWithOptions(dir, cache, ops),
|
|
ReferenceStorage: ReferenceStorage{dir: dir},
|
|
IndexStorage: IndexStorage{dir: dir},
|
|
ShallowStorage: ShallowStorage{dir: dir},
|
|
ConfigStorage: ConfigStorage{dir: dir},
|
|
ModuleStorage: ModuleStorage{dir: dir},
|
|
}
|
|
}
|
|
|
|
// Filesystem returns the underlying filesystem
|
|
func (s *Storage) Filesystem() billy.Filesystem {
|
|
return s.fs
|
|
}
|
|
|
|
// Init initializes .git directory
|
|
func (s *Storage) Init() error {
|
|
return s.dir.Initialize()
|
|
}
|