提交 b6603051 作者: Brian Tiger Chow

extract initCheckDir to dir.Writable

上级 887fbe4a
package dir
// TODO move somewhere generic
import (
"errors"
"os"
"path/filepath"
)
// Writable ensures the directory exists and is writable
func Writable(path string) error {
// Construct the path if missing
if err := os.MkdirAll(path, os.ModePerm); err != nil {
return err
}
// Check the directory is writeable
if f, err := os.Create(filepath.Join(path, "._check_writeable")); err == nil {
os.Remove(f.Name())
} else {
return errors.New("'" + path + "' is not writeable")
}
return nil
}
...@@ -6,12 +6,12 @@ import ( ...@@ -6,12 +6,12 @@ import (
"io" "io"
"os" "os"
"path" "path"
"path/filepath"
"sync" "sync"
repo "github.com/jbenet/go-ipfs/repo" repo "github.com/jbenet/go-ipfs/repo"
config "github.com/jbenet/go-ipfs/repo/config" config "github.com/jbenet/go-ipfs/repo/config"
component "github.com/jbenet/go-ipfs/repo/fsrepo/component" component "github.com/jbenet/go-ipfs/repo/fsrepo/component"
dir "github.com/jbenet/go-ipfs/repo/fsrepo/dir"
lockfile "github.com/jbenet/go-ipfs/repo/fsrepo/lock" lockfile "github.com/jbenet/go-ipfs/repo/fsrepo/lock"
opener "github.com/jbenet/go-ipfs/repo/fsrepo/opener" opener "github.com/jbenet/go-ipfs/repo/fsrepo/opener"
serialize "github.com/jbenet/go-ipfs/repo/fsrepo/serialize" serialize "github.com/jbenet/go-ipfs/repo/fsrepo/serialize"
...@@ -148,7 +148,7 @@ func (r *FSRepo) Open() error { ...@@ -148,7 +148,7 @@ func (r *FSRepo) Open() error {
// check repo path, then check all constituent parts. // check repo path, then check all constituent parts.
// TODO acquire repo lock // TODO acquire repo lock
// TODO if err := initCheckDir(logpath); err != nil { // } // TODO if err := initCheckDir(logpath); err != nil { // }
if err := initCheckDir(r.path); err != nil { if err := dir.Writable(r.path); err != nil {
return err return err
} }
...@@ -162,7 +162,7 @@ func (r *FSRepo) Open() error { ...@@ -162,7 +162,7 @@ func (r *FSRepo) Open() error {
if err != nil { if err != nil {
return debugerror.Wrap(err) return debugerror.Wrap(err)
} }
if err := initCheckDir(logpath); err != nil { if err := dir.Writable(logpath); err != nil {
return debugerror.Errorf("logs: %s", err) return debugerror.Errorf("logs: %s", err)
} }
...@@ -264,21 +264,6 @@ func isInitializedUnsynced(path string) bool { ...@@ -264,21 +264,6 @@ func isInitializedUnsynced(path string) bool {
return true return true
} }
// initCheckDir ensures the directory exists and is writable
func initCheckDir(path string) error {
// Construct the path if missing
if err := os.MkdirAll(path, os.ModePerm); err != nil {
return err
}
// Check the directory is writeable
if f, err := os.Create(filepath.Join(path, "._check_writeable")); err == nil {
os.Remove(f.Name())
} else {
return debugerror.New("'" + path + "' is not writeable")
}
return nil
}
// transitionToOpened manages the state transition to |opened|. Caller must hold // transitionToOpened manages the state transition to |opened|. Caller must hold
// the package mutex. // the package mutex.
func (r *FSRepo) transitionToOpened() error { func (r *FSRepo) transitionToOpened() error {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论