angel 0.3.3 → 0.3.4
raw patch · 5 files changed
+33/−33 lines, 5 filesdep +hspecdep +timedep −old-timedep ~base
Dependencies added: hspec, time
Dependencies removed: old-time
Dependency ranges changed: base
Files
- Angel/Config.hs +5/−20
- Angel/Files.hs +4/−3
- Angel/Log.hs +8/−6
- angel.cabal +15/−4
- test/Spec.hs +1/−0
Angel/Config.hs view
@@ -1,6 +1,5 @@ module Angel.Config where -import Data.Maybe (isJust) import Control.Exception (try, SomeException) import qualified Data.Map as M import Control.Monad (when, mapM_)@@ -45,34 +44,20 @@ checkProgram p = void $ when (exec p == Nothing) $ error $ name p ++ " does not have an 'exec' specification" modifyProg :: Program -> String -> Value -> Program-modifyProg prog "exec" (String s) | isJust (exec prog) = - error $ "redefinition of '" ++ (name prog) ++ ".exec'"- | otherwise = - prog{exec = Just (T.unpack s)}+modifyProg prog "exec" (String s) = prog{exec = Just (T.unpack s)} modifyProg prog "exec" _ = error "wrong type for field 'exec'; string required" -modifyProg prog "delay" (Number n) | isJust (delay prog) =- error $ "redefinition of '" ++ (name prog) ++ ".prog'"- | n < 0 = error "delay value must be >= 0"+modifyProg prog "delay" (Number n) | n < 0 = error "delay value must be >= 0" | otherwise = prog{delay = Just $ round n} modifyProg prog "delay" _ = error "wrong type for field 'delay'; integer" -modifyProg prog "stdout" (String s) | isJust (stdout prog) =- error $ "redefinition of '" ++ (name prog) ++ ".stdout'"- | otherwise = - prog{stdout = Just (T.unpack s)}+modifyProg prog "stdout" (String s) = prog{stdout = Just (T.unpack s)} modifyProg prog "stdout" _ = error "wrong type for field 'stdout'; string required" -modifyProg prog "stderr" (String s) | isJust (stderr prog) = - error $ "redefinition of '" ++ (name prog) ++ ".stderr'"- | otherwise =- prog{stderr = Just (T.unpack s)}+modifyProg prog "stderr" (String s) = prog{stderr = Just (T.unpack s)} modifyProg prog "stderr" _ = error "wrong type for field 'stderr'; string required" -modifyProg prog "directory" (String s) | isJust (workingDir prog) = - error $ "redefinition of '" ++ (name prog) ++ ".directory'"- | otherwise =- prog{workingDir = (Just $ T.unpack s)}+modifyProg prog "directory" (String s) = prog{workingDir = (Just $ T.unpack s)} modifyProg prog "directory" _ = error "wrong type for field 'directory'; string required" modifyProg prog n _ = prog
Angel/Files.hs view
@@ -1,5 +1,6 @@ module Angel.Files (getFile, startFileManager) where +import Control.Exception (try, SomeException) import Control.Concurrent.STM import Control.Concurrent.STM.TChan (readTChan, writeTChan, TChan, newTChan, newTChanIO) import Control.Monad (forever)@@ -13,13 +14,13 @@ fileManager :: TChan FileRequest -> IO () fileManager req = do (path, resp) <- atomically $ readTChan req- mh <- catch (openFile path AppendMode >>= \h-> return $ Just h) (\e-> return Nothing)+ mh <- try $ openFile path AppendMode case mh of- Just hand -> do+ Right hand -> do hand' <- hDuplicate hand hClose hand atomically $ writeTChan resp (Just hand')- Nothing -> atomically $ writeTChan resp Nothing+ Left (e :: SomeException) -> atomically $ writeTChan resp Nothing fileManager req getFile :: String -> GroupConfig -> IO Handle
Angel/Log.hs view
@@ -1,17 +1,19 @@ module Angel.Log where +import Data.Time.LocalTime (ZonedTime(..),+ getZonedTime)+import Data.Time.Format (formatTime)+ import Text.Printf (printf)-import System.Time (getClockTime, toCalendarTime, CalendarTime(..), formatCalendarTime) import System.Locale (defaultTimeLocale) -- |provide a clean, ISO-ish format for timestamps in logs-cleanCalendar :: CalendarTime -> String-cleanCalendar ct = formatCalendarTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" ct+cleanCalendar :: ZonedTime -> String+cleanCalendar = formatTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" -- |log a line to stdout; indented for use with partial application for -- |"local log"-type macroing logger :: String -> String -> IO () logger lname msg = do - tm <- getClockTime- ct <- toCalendarTime tm- printf "[%s] {%s} %s\n" (cleanCalendar ct) lname msg+ zt <- getZonedTime+ printf "[%s] {%s} %s\n" (cleanCalendar zt) lname msg
angel.cabal view
@@ -7,7 +7,7 @@ -- The package version. See the Haskell package versioning policy -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for -- standards guiding when and how versions should be incremented.-Version: 0.3.3+Version: 0.3.4 -- A short (one-line) description of the package. -- Synopsis: @@ -54,7 +54,7 @@ -- Extra-source-files: -- Constraint on the version of Cabal needed to build this package.-Cabal-version: >=1.6+Cabal-version: >=1.10 source-repository head@@ -75,7 +75,7 @@ Build-depends: containers >= 0.3 Build-depends: unordered-containers >= 0.1.4 Build-depends: unix >= 2.4- Build-depends: old-time+ Build-depends: time Build-depends: old-locale Build-depends: text>=0.11 @@ -92,6 +92,17 @@ -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source. -- Build-tools: - Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns+ Default-Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns+ Default-Language: Haskell2010 Ghc-Options: -threaded ++test-suite spec+ Type: exitcode-stdio-1.0+ Main-Is: Spec.hs+ Hs-Source-Dirs: ., test+ Build-Depends: base+ Build-Depends: hspec+ Build-depends: time+ Default-Extensions: OverloadedStrings,ScopedTypeVariables,BangPatterns,ViewPatterns+ Default-Language: Haskell2010
+ test/Spec.hs view
@@ -0,0 +1,1 @@+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}