From a04510401683c7fde52f070c2602cc1f04604858 Mon Sep 17 00:00:00 2001 From: Aaron Lindsay Date: Mon, 11 Feb 2013 07:25:29 -0500 Subject: [PATCH] Local storage ensures its directories exist --- storage_local.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/storage_local.go b/storage_local.go index c5432ce..4edf57c 100644 --- a/storage_local.go +++ b/storage_local.go @@ -14,6 +14,17 @@ type LocalStorage struct { tmpSubdir string } +func ensureDirExists(dir string) error { + _, err := os.Lstat(dir) + if err != nil { + fi, err := os.Lstat(path.Dir(dir)) + if err != nil { return err } + err = os.Mkdir(dir, fi.Mode().Perm()) + if err != nil { return err } + } + return nil +} + func NewLocalStorage(config *conf.ConfigFile) (*LocalStorage, error) { storageDir, err := config.GetString("storage", "dir") if err != nil { @@ -23,6 +34,13 @@ func NewLocalStorage(config *conf.ConfigFile) (*LocalStorage, error) { ls := new(LocalStorage) ls.storageDir = storageDir ls.tmpSubdir = path.Join(storageDir, ".asink-tmpdir") + + //make sure the base directory and tmp subdir exist + err = ensureDirExists(ls.storageDir) + if err != nil { return nil, err} + err = ensureDirExists(ls.tmpSubdir) + if err != nil { return nil, err} + return ls, nil }