From: Sergey Matveev Date: Thu, 9 Sep 2021 14:34:17 +0000 (+0300) Subject: ensureDir helper X-Git-Tag: v7.7.0^2~2 X-Git-Url: http://www.git.cypherpunks.ru/?p=nncp.git;a=commitdiff_plain;h=e181d969028a017c6ac513ea49e8abc2fc2d8cf1 ensureDir helper --- diff --git a/src/ctx.go b/src/ctx.go index 9f18563..b1b590b 100644 --- a/src/ctx.go +++ b/src/ctx.go @@ -69,27 +69,29 @@ func (ctx *Ctx) FindNode(id string) (*Node, error) { return node, nil } +func ensureDir(p string) error { + fi, err := os.Stat(p) + if err == nil { + if fi.IsDir() { + return nil + } + return fmt.Errorf("%s: is not a directory", p) + } + if !os.IsNotExist(err) { + return err + } + return os.MkdirAll(p, os.FileMode(0777)) +} + func (ctx *Ctx) ensureRxDir(nodeId *NodeId) error { dirPath := filepath.Join(ctx.Spool, nodeId.String(), string(TRx)) - logMsg := func(les LEs) string { - return fmt.Sprintf("Ensuring directory %s existence", dirPath) - } - fd, err := os.Open(dirPath) + err := ensureDir(dirPath) if err != nil { - if !os.IsNotExist(err) { - return err - } - if err := os.MkdirAll(dirPath, os.FileMode(0777)); err != nil { - ctx.LogE("dir-ensure-mkdir", LEs{{"Dir", dirPath}}, err, logMsg) - return err - } - fd, err = os.Open(dirPath) - if err != nil { - ctx.LogE("dir-ensure-open", LEs{{"Dir", dirPath}}, err, logMsg) - return err - } + ctx.LogE("dir-ensure-mkdir", LEs{{"Dir", dirPath}}, err, func(les LEs) string { + return fmt.Sprintf("Ensuring directory %s existence", dirPath) + }) } - return fd.Close() + return err } func CtxFromCmdline( diff --git a/src/dirwatch.go b/src/dirwatch.go index 69a200b..85aaa51 100644 --- a/src/dirwatch.go +++ b/src/dirwatch.go @@ -22,7 +22,6 @@ package nncp import ( "fmt" - "os" "time" "github.com/fsnotify/fsnotify" @@ -39,21 +38,14 @@ func (ctx *Ctx) NewDirWatcher(dir string, d time.Duration) (*DirWatcher, error) if err != nil { return nil, err } + err = ensureDir(dir) + if err != nil { + return nil, err + } err = w.Add(dir) if err != nil { - if !os.IsNotExist(err) { - w.Close() - return nil, err - } - if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil { - w.Close() - return nil, err - } - err = w.Add(dir) - if err != nil { - w.Close() - return nil, err - } + w.Close() + return nil, err } dw := DirWatcher{ w: w, diff --git a/src/tmp.go b/src/tmp.go index 6d1e49c..163acb3 100644 --- a/src/tmp.go +++ b/src/tmp.go @@ -37,13 +37,8 @@ func TempFile(dir, prefix string) (*os.File, error) { func (ctx *Ctx) NewTmpFile() (*os.File, error) { jobsPath := filepath.Join(ctx.Spool, "tmp") - if _, err := os.Stat(jobsPath); err != nil { - if !os.IsNotExist(err) { - return nil, err - } - if err := os.MkdirAll(jobsPath, os.FileMode(0777)); err != nil { - return nil, err - } + if err := ensureDir(jobsPath); err != nil { + return nil, err } fd, err := TempFile(jobsPath, "") if err == nil { @@ -100,13 +95,8 @@ func (tmp *TmpFileWHash) Checksum() string { func (tmp *TmpFileWHash) Commit(dir string) error { var err error - if _, err = os.Stat(dir); err != nil { - if !os.IsNotExist(err) { - return err - } - if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil { - return err - } + if err = ensureDir(dir); err != nil { + return err } if err = tmp.W.Flush(); err != nil { tmp.Fd.Close() diff --git a/src/tx.go b/src/tx.go index 95801d5..2b166d1 100644 --- a/src/tx.go +++ b/src/tx.go @@ -257,15 +257,9 @@ func (ctx *Ctx) Tx( msgHash, ) } - if _, err = os.Stat(seenDir); err != nil { - if !os.IsNotExist(err) { - ctx.LogE("tx-mkdir", les, err, logMsg) - return lastNode, err - } - if err = os.MkdirAll(seenDir, os.FileMode(0777)); err != nil { - ctx.LogE("tx-mkdir", les, err, logMsg) - return lastNode, err - } + if err = ensureDir(seenDir); err != nil { + ctx.LogE("tx-mkdir", les, err, logMsg) + return lastNode, err } if fd, err := os.Create(seenPath); err == nil { fd.Close()