packages feed

nemesis 2009.6.14.2 → 2009.6.14.3

raw patch · 7 files changed

+93/−10 lines, 7 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ System.Nemesis: current_namespace :: Nemesis -> [String]
+ System.Nemesis: display_name :: Task -> String
+ System.Nemesis: full_name :: Task -> String
+ System.Nemesis: namespace :: Task -> [String]
+ System.Nemesis.DSL: namespace :: String -> Unit -> Unit
- System.Nemesis: Nemesis :: Map String Task -> String -> Maybe String -> Nemesis
+ System.Nemesis: Nemesis :: Map String Task -> String -> Maybe String -> [String] -> Nemesis
- System.Nemesis: Task :: String -> IO () -> [String] -> Maybe String -> Task
+ System.Nemesis: Task :: String -> IO () -> [String] -> Maybe String -> [String] -> Task

Files

Nemesis view
@@ -8,15 +8,29 @@     , "nemesis-tmp.*"     ]   +   desc "prepare cabal dist"   task "dist" $ do     sh "cabal clean"     sh "cabal configure"     sh "cabal sdist" -  desc "start console"-  task "i" (sh "ghci -isrc src/System/Nemesis.hs")    desc "put all .hs files in manifest"   task "manifest" $ do     sh "find . | grep 'hs$' > manifest"+++  desc "start console"+  task "i" (sh "ghci -isrc src/System/Nemesis/DSL.hs")++  namespace "eat" $ do+    +    task "bread: salad" $ putStrLn "eating bread"+    task "salad: /drink/coke" $ putStrLn "nice salad"+    +  +  namespace "drink" $ do+    +    task "coke" $ putStrLn "drinking coke"+    
changelog.md view
@@ -1,3 +1,10 @@+2009.6.14.3+-----------++### Feature++* new keyword namespace+ 2009.6.14.2 ----------- 
nemesis.cabal view
@@ -1,5 +1,5 @@ Name:                 nemesis-Version:              2009.6.14.2+Version:              2009.6.14.3 Build-type:           Simple Synopsis:             a rake like task management tool Description:
readme.md view
@@ -69,6 +69,32 @@     Haskell is awesome!      +### Namespace++Suppose you have the following tasks++    namespace "eat" $ do++      task "bread: salad" $ putStrLn "eating bread"+      task "salad: /drink/coke" $ putStrLn "nice salad"+++    namespace "drink" $ do++      task "coke" $ putStrLn "drinking coke"++then++    ./.nemesis bread =>+    .nemesis: bread does not exist!+    +    ./.nemesis eat/bread =>+    drinking coke+    nice salad+    eating bread+    +    + Advance usage ------------- 
src/System/Nemesis.hs view
@@ -16,6 +16,7 @@   , action :: IO ()   , deps :: [String]   , description :: Maybe String+  , namespace :: [String]   }  data Nemesis = Nemesis@@ -23,27 +24,34 @@     tasks :: Map String Task   , target :: String   , current_desc :: Maybe String+  , current_namespace :: [String]   }   deriving (Show)  instance Default Nemesis where-  def = Nemesis empty def def+  def = Nemesis empty def def def  instance Default Task where-  def = Task def (return ()) def def+  def = Task def (return ()) def def def +full_name :: Task -> String+full_name t = (t.name : t.namespace).reverse.join "/"++display_name :: Task -> String+display_name t = (t.name : t.namespace).reverse.map (rjust 10 ' ') .join " "+ instance Show Task where   show x = case x.description of     Nothing -> title     Just s -> title ++ s     where-      title = x.name.ljust 20 ' ' ++ ": "+      title = x.display_name.rjust 34 ' ' ++ ": "  instance Eq Task where   a == b = a.name == b.name  instance Ord Task where-  compare = compare_by name+  compare = compare_by full_name  type Unit = StateT Nemesis IO () @@ -67,9 +75,16 @@ insert_task t = do   n <- get   let description = n.current_desc-      tasks' = n.tasks.insert (t.name) t {description}-     +      namespace   = n.current_namespace+      deps'       = t.deps.map (with_current namespace)+      task        = t {deps = deps', description, namespace}+      tasks'      = n.tasks.insert (task.full_name) task+   put n {tasks = tasks', current_desc = Nothing}+  where+    with_current namespace x+      | x.starts_with "/" = x.tail+      | otherwise = (x : namespace).reverse.join "/"  run_nemesis :: Nemesis -> IO () run_nemesis n = run' (n.target)
src/System/Nemesis/DSL.hs view
@@ -31,6 +31,23 @@     task' name deps = insert_task def {name, deps, action}     strip = dropWhile (== ' ') > reverse > dropWhile (== ' ') > reverse +namespace :: String -> Unit -> Unit+namespace name unit = do+  push name+  unit+  pop+  +  where+    push s = do+      n <- get+      let current_namespace' = s : n.current_namespace+      put n {current_namespace = current_namespace'}+    +    pop = do+      n <- get+      let current_namespace' = n.current_namespace.tail+      put n {current_namespace = current_namespace'}+       sh :: String -> IO () sh s = do   status <- system s
src/System/Nemesis/Util.hs view
@@ -32,11 +32,15 @@ join' :: [[a]] -> [a] join'   = concat -ljust :: Int -> a -> [a] -> [a]+ljust, rjust :: Int -> a -> [a] -> [a] ljust n x xs    | n < xs.length = xs   | otherwise     = ( n.times x ++ xs ).reverse.take n.reverse +rjust n x xs+  | n < xs.length = xs+  | otherwise     = ( xs ++ n.times x ).take n+     compare_by :: (Ord b) => (a -> b) -> a -> a -> Ordering compare_by = on compare