stack-run-auto (empty) → 0.1.0.0
raw patch · 7 files changed
+215/−0 lines, 7 filesdep +MissingHdep +asyncdep +basesetup-changed
Dependencies added: MissingH, async, base, extract-dependencies, file-modules, lens, lens-aeson, process, stack-run-auto, stm-containers, text, time, wreq
Files
- LICENSE +21/−0
- Setup.hs +2/−0
- app/Main.hs +11/−0
- app/ModulePackage.hs +11/−0
- src/StackRunAuto.hs +76/−0
- stack-run-auto.cabal +92/−0
- test/Spec.hs +2/−0
+ LICENSE view
@@ -0,0 +1,21 @@+The MIT License (MIT)++Copyright (c) 2015 Pedro Tacla Yamada++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in+all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+THE SOFTWARE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ app/Main.hs view
@@ -0,0 +1,11 @@+module Main where++import StackRunAuto+import System.Environment (getArgs)++main :: IO ()+main = do+ args <- getArgs+ case args of+ [] -> error "Usage: stack-run-auto <file>"+ (fname:_) -> run (Options fname)
+ app/ModulePackage.hs view
@@ -0,0 +1,11 @@+module Main where++import Control.Concurrent.Async+import Control.Monad (void, (>=>))+import StackRunAuto+import System.Environment++main :: IO ()+main = do+ args <- getArgs+ void $ mapConcurrently (modulePackage >=> putStrLn) args
+ src/StackRunAuto.hs view
@@ -0,0 +1,76 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+module StackRunAuto where++import Control.Concurrent.Async+import Control.Lens+import Control.Monad (forM_, void)+import Data.Aeson.Lens+import Data.List.Utils (uniq)+import Data.Monoid+import Data.String.Utils+import qualified Data.Text as Text (pack, unpack)+import Data.Time.Clock+import Development.ExtractDependencies+import Development.FileModules+import Network.Wreq (defaults, getWith, param,+ responseBody)+import System.Exit+import System.Process++data Options = Options { optsFileName :: FilePath+ }++run :: Options -> IO ()+run Options{..} = do+ modules <- fileModulesVerbose optsFileName+ packages <- mapConcurrently modulePackageVerbose modules+ allPackages <- mapConcurrently extractDependenciesVerbose (uniq packages)+ let argList = map ("--package " ++)+ (filter isValidPackage (uniq (packages ++ concat allPackages)))+ cmd = "stack runghc " ++ optsFileName ++ " " ++ join " " argList+ putStrLn cmd+ ph <- runCommand cmd+ waitForProcess ph >>= exitWith++timed :: String -> IO a -> IO a+timed msg action = do+ start <- getCurrentTime+ ret <- action+ end <- getCurrentTime+ putStrLn $ msg ++ " (" ++ show (diffUTCTime end start) ++ ")"+ return ret++isValidPackage :: String -> Bool+isValidPackage "rts" = False+isValidPackage _ = True++fileModulesVerbose :: String -> IO [String]+fileModulesVerbose optsFileName = timed "---> Parsed imports" $ do+ putStrLn $ "Parsing " ++ optsFileName+ uniq <$> fileModulesRecur optsFileName++extractDependenciesVerbose :: String -> IO [String]+extractDependenciesVerbose pkg = timed ("---> Found dependencies for " ++ pkg) $ do+ putStrLn $ "Finding dependencies for " ++ pkg ++ "..."+ extractDependencies pkg++modulePackageVerbose :: String -> IO String+modulePackageVerbose m = timed ("---> Found package for " ++ m) $ do+ putStrLn $ "Finding package for " ++ m ++ "..."+ modulePackage m++modulePackage :: String -> IO String+modulePackage m = do+ let url = "http://hayoo.fh-wedel.de/json"+ opts = defaults & param "query" .~ ["module:" <> Text.pack m]+ res <- getWith opts url+ let result = res ^.. responseBody . key "result" . values+ moduleResults = filter isModuleResult result+ case moduleResults of+ [] -> error $ "No package found for " ++ m+ (p:_) -> do+ let pkg = Text.unpack (p ^. key "resultPackage" . _String)+ return pkg+ where+ isModuleResult r = r ^. key "resultType" . _String == "module"
+ stack-run-auto.cabal view
@@ -0,0 +1,92 @@+name: stack-run-auto+version: 0.1.0.0+synopsis: Initial project template from stack+description: Please see README.md+homepage: http://github.com/yamadapc/stack-run-auto#readme+license: MIT+license-file: LICENSE+author: Pedro Tacla Yamada+maintainer: tacla.yamada@gmail.com+copyright: Copyright (c) 2015 Pedro Tacla Yamada+category: Development+build-type: Simple+cabal-version: >=1.10++library+ hs-source-dirs: src+ exposed-modules: StackRunAuto+ build-depends: base >= 4.7 && < 5+ , time+ , process+ , text+ , lens-aeson+ , lens+ , wreq+ , MissingH+ , stm-containers+ , async+ , extract-dependencies+ , file-modules+ default-language: Haskell2010++executable module-package+ hs-source-dirs: app+ main-is: ModulePackage.hs+ ghc-options: -threaded -rtsopts -with-rtsopts=-N+ build-depends: base+ , time+ , process+ , text+ , lens-aeson+ , lens+ , wreq+ , MissingH+ , stm-containers+ , async+ , extract-dependencies+ , file-modules+ , stack-run-auto+ default-language: Haskell2010++executable stack-run-auto+ hs-source-dirs: app+ main-is: Main.hs+ ghc-options: -threaded -rtsopts -with-rtsopts=-N+ build-depends: base+ , time+ , process+ , text+ , lens-aeson+ , lens+ , wreq+ , MissingH+ , stm-containers+ , async+ , extract-dependencies+ , file-modules+ , stack-run-auto+ default-language: Haskell2010++test-suite stack-run-auto-test+ type: exitcode-stdio-1.0+ hs-source-dirs: test+ main-is: Spec.hs+ build-depends: base+ , time+ , process+ , text+ , lens-aeson+ , lens+ , wreq+ , MissingH+ , stm-containers+ , async+ , extract-dependencies+ , file-modules+ , stack-run-auto+ ghc-options: -threaded -rtsopts -with-rtsopts=-N+ default-language: Haskell2010++source-repository head+ type: git+ location: https://github.com/yamadapc/stack-run-auto
+ test/Spec.hs view
@@ -0,0 +1,2 @@+main :: IO ()+main = putStrLn "Test suite not yet implemented"