cabal-nirvana 0.2 → 0.2.1
raw patch · 2 files changed
+21/−9 lines, 2 files
Files
- cabal-nirvana.cabal +2/−1
- cabal-nirvana.hs +19/−8
cabal-nirvana.cabal view
@@ -1,5 +1,5 @@ Name: cabal-nirvana-Version: 0.2+Version: 0.2.1 Synopsis: Avoid Cabal dependency hell by constraining to known good versions. Description: This tool takes a list of known compatible versions of libraries and forces them to be used. This should bypass a lot of cabal dependency hell, thereby inducing nirvana. .@@ -34,6 +34,7 @@ , directory , tar >= 0.4 && < 0.5 , bytestring+ Other-modules: Paths_cabal_nirvana Executable cabal-nirvana-generate Main-is: generate.hs
cabal-nirvana.hs view
@@ -4,7 +4,7 @@ import Data.Maybe (catMaybes) import Data.Char (isSpace) import Data.List (isPrefixOf, foldl')-import System.Exit (exitWith, ExitCode (ExitSuccess))+import System.Exit (exitWith, ExitCode (ExitSuccess), exitFailure) import System.Cmd (rawSystem) import Network.HTTP (simpleHTTP, getRequest, getResponseBody) import qualified Data.ByteString.Lazy as L@@ -13,7 +13,12 @@ import qualified Data.Map as Map import Control.Monad (unless) import Data.Maybe (fromMaybe)+import qualified Paths_cabal_nirvana+import Data.Version (showVersion) +currVersion :: String+currVersion = showVersion Paths_cabal_nirvana.version+ indexFile :: IO FilePath indexFile = do dir <- getAppUserDataDirectory "cabal"@@ -91,7 +96,7 @@ str <- simpleHTTP (getRequest url) >>= getResponseBody nirvanaFile >>= flip writeFile str where- url = fromMaybe "http://www.snoyman.com/cabal-nirvana/yesod" murl+ url = fromMaybe "http://yesodweb.github.com/nirvana" murl start :: Maybe String -> IO () start mnfp = do@@ -107,16 +112,22 @@ where go front Tar.Done = return $ front [] go _ (Tar.Fail e) = throwIO e- go front (Tar.Next e es) =- go front' es+ go front (Tar.Next e es)+ | p == "cabal-nirvana" && v /= currVersion = do+ putStrLn "Your version of cabal-nirvana is out-of-date."+ putStrLn $ "Your version: " ++ currVersion+ putStrLn $ "Latest version: " ++ v+ putStrLn "Please update by running:"+ putStrLn " cabal install cabal-nirvana"+ exitFailure+ | otherwise = go front' es where fp = Tar.entryPath e (p, fp') = break (== '/') fp v = takeWhile (/= '/') $ drop 1 fp'- front' =- if toRemove p v- then front- else front . (e:)+ front'+ | toRemove p v = front+ | otherwise = front . (e:) toRemove _ "" = False toRemove p v =