86 lines
1.7 KiB
Go
86 lines
1.7 KiB
Go
package localstorage
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/git-lfs/git-lfs/config"
|
|
"github.com/git-lfs/git-lfs/errors"
|
|
)
|
|
|
|
const (
|
|
tempDirPerms = 0755
|
|
localMediaDirPerms = 0755
|
|
localLogDirPerms = 0755
|
|
)
|
|
|
|
var (
|
|
objects *LocalStorage
|
|
notInRepoErr = errors.New("not in a repository")
|
|
TempDir = filepath.Join(os.TempDir(), "git-lfs")
|
|
checkedTempDir string
|
|
)
|
|
|
|
func Objects() *LocalStorage {
|
|
return objects
|
|
}
|
|
|
|
func InitStorage(cfg *config.Configuration) error {
|
|
if len(cfg.LocalGitStorageDir()) == 0 || len(cfg.LocalGitDir()) == 0 {
|
|
return notInRepoErr
|
|
}
|
|
|
|
storCfg := NewConfig(cfg)
|
|
TempDir = filepath.Join(storCfg.LfsStorageDir, "tmp") // temp files per worktree
|
|
objs, err := NewStorage(
|
|
filepath.Join(storCfg.LfsStorageDir, "objects"),
|
|
filepath.Join(TempDir, "objects"),
|
|
)
|
|
|
|
if err != nil {
|
|
return errors.Wrap(err, "init LocalStorage")
|
|
}
|
|
|
|
objects = objs
|
|
cfg.SetLocalLogDir(filepath.Join(objs.RootDir, "logs"))
|
|
if err := os.MkdirAll(cfg.LocalLogDir(), localLogDirPerms); err != nil {
|
|
return errors.Wrap(err, "create log dir")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func InitStorageOrFail(cfg *config.Configuration) {
|
|
if err := InitStorage(cfg); err != nil {
|
|
if err == notInRepoErr {
|
|
return
|
|
}
|
|
|
|
fmt.Fprintf(os.Stderr, "ERROR: %s\n", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func ResolveDirs(cfg *config.Configuration) {
|
|
cfg.ResolveGitBasicDirs()
|
|
InitStorageOrFail(cfg)
|
|
}
|
|
|
|
func TempFile(prefix string) (*os.File, error) {
|
|
if checkedTempDir != TempDir {
|
|
if err := os.MkdirAll(TempDir, tempDirPerms); err != nil {
|
|
return nil, err
|
|
}
|
|
checkedTempDir = TempDir
|
|
}
|
|
|
|
return ioutil.TempFile(TempDir, prefix)
|
|
}
|
|
|
|
func ResetTempDir() error {
|
|
checkedTempDir = ""
|
|
return os.RemoveAll(TempDir)
|
|
}
|