diff --git a/Makefile b/Makefile index 7b58f1e..20cf7d8 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,11 @@ test: ${SISYPHUS_GO_EXECUTABLE} get -u github.com/onsi/gomega ${GOPATH}/bin/ginkgo -r --randomizeAllSpecs --randomizeSuites --failOnPending --progress +static-test: + ${SISYPHUS_GO_EXECUTABLE} get -u github.com/alecthomas/gometalinter + ${GOPATH}/bin/gometalinter --install + ${GOPATH}/bin/gometalinter --vendor --deadline=5m --disable-all --enable=gas --enable=goconst --enable=gocyclo --enable=unused --enable=interfacer --enable=lll --enable=misspell --enable=staticcheck --enable=aligncheck --enable=deadcode --enable=goimports --enable=ineffassign --enable=unconvert --enable=unparam --enable=varcheck --enable=dupl --enable=errcheck --enable=golint --enable=structcheck --enable=gosimple --enable=safesql --tests --json . > gometalinter.out + integration-test: ${SISYPHUS_GO_EXECUTABLE} build ./sisyphus run diff --git a/daemon.go b/daemon.go index 100e0d1..746f3e2 100644 --- a/daemon.go +++ b/daemon.go @@ -30,9 +30,9 @@ func (p Pidfile) savePID(process int) error { return err } - file.Sync() + err = file.Sync() - return nil + return err } // DaemonStart starts sisyphus as a backgound process @@ -43,10 +43,13 @@ func (p Pidfile) DaemonStart() error { } cmd := exec.Command(os.Args[0], "run") - cmd.Start() + err := cmd.Start() + if err != nil { + return err + } log.Printf("starting sisyphus process ID [%v]\n", cmd.Process.Pid) log.Println("sisyphus started") - err := (p).savePID(cmd.Process.Pid) + err = (p).savePID(cmd.Process.Pid) return err } @@ -77,7 +80,10 @@ func (p Pidfile) DaemonStop() error { } // remove PID file - os.Remove(string(p)) + err = os.Remove(string(p)) + if err != nil { + return err + } log.Printf("stopping sisyphus process ID [%v]\n", processID) // kill process and exit immediately diff --git a/database.go b/database.go index d488378..b6226b4 100644 --- a/database.go +++ b/database.go @@ -20,10 +20,7 @@ func OpenDB(maildir string) (db *bolt.DB, err error) { // Create DB bucket for the map of processed e-mail IDs err = db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucketIfNotExists([]byte("Processed")) - if err != nil { - return err - } - return nil + return err }) if err != nil { return db, err @@ -33,10 +30,7 @@ func OpenDB(maildir string) (db *bolt.DB, err error) { err = db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("Processed")) _, err := b.CreateBucketIfNotExists([]byte("Mails")) - if err != nil { - return err - } - return nil + return err }) if err != nil { return db, err @@ -46,10 +40,7 @@ func OpenDB(maildir string) (db *bolt.DB, err error) { err = db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("Processed")) _, err := b.CreateBucketIfNotExists([]byte("Counters")) - if err != nil { - return err - } - return nil + return err }) if err != nil { return db, err @@ -58,10 +49,7 @@ func OpenDB(maildir string) (db *bolt.DB, err error) { // Create DB bucket for word lists err = db.Update(func(tx *bolt.Tx) error { _, err := tx.CreateBucketIfNotExists([]byte("Wordlists")) - if err != nil { - return err - } - return nil + return err }) if err != nil { return db, err @@ -71,10 +59,7 @@ func OpenDB(maildir string) (db *bolt.DB, err error) { err = db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("Wordlists")) _, err := b.CreateBucketIfNotExists([]byte("Junk")) - if err != nil { - return err - } - return nil + return err }) if err != nil { return db, err @@ -84,10 +69,7 @@ func OpenDB(maildir string) (db *bolt.DB, err error) { err = db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("Wordlists")) _, err := b.CreateBucketIfNotExists([]byte("Good")) - if err != nil { - return err - } - return nil + return err }) log.Println("database loaded") diff --git a/mail.go b/mail.go index 583a308..9238952 100644 --- a/mail.go +++ b/mail.go @@ -34,17 +34,23 @@ type Mail struct { } // CreateDirs creates all the required dirs -- if not already there. -func (d Maildir) CreateDirs() { +func (d Maildir) CreateDirs() error { dir := string(d) log.Println("create missing directories for Maildir " + dir) - os.MkdirAll(dir+"/.Junk/cur", 0700) - os.MkdirAll(dir+"/new", 0700) - os.MkdirAll(dir+"/cur", 0700) + err := os.MkdirAll(dir+"/.Junk/cur", 0700) + if err != nil { + return err + } + err = os.MkdirAll(dir+"/new", 0700) + if err != nil { + return err + } + err = os.MkdirAll(dir+"/cur", 0700) - return + return err } // Index loads all mail keys from the Maildir directory for processing. @@ -167,6 +173,9 @@ func wordlist(s string) (l []string) { raw := strings.Split(s, " ") var clean []string + // use regexp compile for use in the loop that follows + regexMatcher, _ := regexp.Compile("(^[a-z]+$)") + for _, w := range raw { // no long or too short words @@ -176,7 +185,7 @@ func wordlist(s string) (l []string) { } // no numbers, special characters, etc. -- only words - match, _ := regexp.MatchString("(^[a-z]+$)", w) + match := regexMatcher.MatchString(w) if !match { continue } else {