stack-run-auto 0.1.1.1 → 0.1.1.2
raw patch · 4 files changed
+40/−12 lines, 4 files
Files
- app/Main.hs +21/−2
- app/ModulePackage.hs +6/−2
- src/StackRunAuto.hs +12/−7
- stack-run-auto.cabal +1/−1
app/Main.hs view
@@ -2,10 +2,29 @@ import StackRunAuto import System.Environment (getArgs)+import System.IO main :: IO () main = do args <- getArgs- case args of+ hSetBuffering stdout LineBuffering+ hSetBuffering stderr LineBuffering++ let (extras, args') = getExtras args++ case args' of [] -> error "Usage: stack-run-auto <file>"- (fname:_) -> run (Options fname)+ ("--help":_) -> hPutStrLn stderr usage+ (fname:_) -> run (Options fname extras)+ where+ usage = unlines [ "Usage: stack-run-auto [--extra <pkg>...] <file>"+ , ""+ , " --extra <pkg> Adds an extra package that couldn't be resolved"+ , ""+ ]++getExtras :: [String] -> ([String], [String])+getExtras args = go ([], args)+ where+ go (extras, "--extra":pkg:args') = go (pkg:extras, args')+ go i = i
app/ModulePackage.hs view
@@ -1,11 +1,15 @@ module Main where import Control.Concurrent.Async-import Control.Monad (void, (>=>))+import Control.Monad (forM_)+import Data.Maybe (catMaybes) import StackRunAuto import System.Environment+import System.IO main :: IO () main = do args <- getArgs- void $ mapConcurrently (modulePackage >=> putStrLn) args+ hSetBuffering stdout LineBuffering+ pkgs <- mapConcurrently modulePackage args+ forM_ (catMaybes pkgs) putStrLn
src/StackRunAuto.hs view
@@ -4,9 +4,9 @@ import Control.Concurrent.Async import Control.Lens-import Control.Monad (forM_, void) import Data.Aeson.Lens import Data.List.Utils (uniq)+import Data.Maybe (catMaybes) import Data.Monoid import Data.String.Utils import qualified Data.Text as Text (pack, unpack)@@ -16,19 +16,21 @@ import Network.Wreq (defaults, getWith, param, responseBody) import System.Exit+import System.IO (hPutStrLn, stderr) import System.Process-import System.IO (hPutStrLn, stderr) data Options = Options { optsFileName :: FilePath+ , optsExtras :: [String] } run :: Options -> IO () run Options{..} = do modules <- fileModulesVerbose optsFileName- packages <- mapConcurrently modulePackageVerbose modules+ packages <- catMaybes <$> mapConcurrently modulePackageVerbose modules allPackages <- mapConcurrently extractDependenciesVerbose (uniq packages) let argList = map ("--package " ++)- (filter isValidPackage (uniq (packages ++ concat allPackages)))+ (filter isValidPackage+ (uniq (packages ++ concat allPackages ++ optsExtras))) cmd = "stack runghc " ++ optsFileName ++ " " ++ join " " argList putStrLn cmd ph <- runCommand cmd@@ -56,12 +58,15 @@ putStrLn $ "Finding dependencies for " ++ pkg ++ "..." extractDependencies pkg -modulePackageVerbose :: String -> IO String+modulePackageVerbose :: String -> IO (Maybe String)+modulePackageVerbose "" = do+ putStrLn "Skipping parse error (empty string)..."+ return Nothing modulePackageVerbose m = timed ("---> Found package for " ++ m) $ do putStrLn $ "Finding package for " ++ m ++ "..." modulePackage m -modulePackage :: String -> IO String+modulePackage :: String -> IO (Maybe String) modulePackage m = do let url = "http://hayoo.fh-wedel.de/json" opts = defaults & param "query" .~ ["module:" <> Text.pack m]@@ -78,6 +83,6 @@ else error $ "Couldn't resolve package for " ++ m (p:_) -> do let pkg = Text.unpack (p ^. key "resultPackage" . _String)- return pkg+ return (Just pkg) where isModuleResult r = r ^. key "resultType" . _String == "module"
stack-run-auto.cabal view
@@ -1,5 +1,5 @@ name: stack-run-auto-version: 0.1.1.1+version: 0.1.1.2 synopsis: Initial project template from stack description: Please see README.md homepage: http://github.com/yamadapc/stack-run-auto#readme