cabal-nirvana 0.2.1 → 0.2.2
raw patch · 2 files changed
+50/−16 lines, 2 files
Files
- cabal-nirvana.cabal +6/−5
- cabal-nirvana.hs +44/−11
cabal-nirvana.cabal view
@@ -1,5 +1,5 @@ Name: cabal-nirvana-Version: 0.2.1+Version: 0.2.2 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,15 +34,16 @@ , directory , tar >= 0.4 && < 0.5 , bytestring+ , containers Other-modules: Paths_cabal_nirvana Executable cabal-nirvana-generate Main-is: generate.hs if flag(generate) Buildable: True+ Build-depends: Cabal+ , containers+ , transformers+ , packdeps >= 0.3 && < 0.4 else Buildable: False- Build-depends: Cabal- , containers- , transformers- , packdeps >= 0.3 && < 0.4
cabal-nirvana.hs view
@@ -3,7 +3,8 @@ import Control.Applicative ((<$>)) import Data.Maybe (catMaybes) import Data.Char (isSpace)-import Data.List (isPrefixOf, foldl')+import Data.List (isPrefixOf, foldl', sort)+import Data.Ord (comparing) import System.Exit (exitWith, ExitCode (ExitSuccess), exitFailure) import System.Cmd (rawSystem) import Network.HTTP (simpleHTTP, getRequest, getResponseBody)@@ -14,7 +15,8 @@ import Control.Monad (unless) import Data.Maybe (fromMaybe) import qualified Paths_cabal_nirvana-import Data.Version (showVersion)+import Data.Version (showVersion, parseVersion)+import Text.ParserCombinators.ReadP (readP_to_S) currVersion :: String currVersion = showVersion Paths_cabal_nirvana.version@@ -54,6 +56,7 @@ [] -> do ec <- rawSystem "cabal" ["update"] unless (ec == ExitSuccess) $ exitWith ec+ checkVersion fetch Nothing start Nothing ["fetch"] -> fetch Nothing@@ -98,6 +101,43 @@ where url = fromMaybe "http://yesodweb.github.com/nirvana" murl +checkVersion :: IO ()+checkVersion = do+ ifp <- indexFile+ entries <- Tar.read <$> L.readFile ifp+ versions <- go id entries+ case reverse $ sort versions of+ [] -> return ()+ v:_+ | v == Paths_cabal_nirvana.version -> return ()+ | v < Paths_cabal_nirvana.version -> do+ putStrLn "You appear to be running an unreleased version."+ putStrLn "If not, please install the latest version from Hackage:"+ putStrLn " cabal install cabal-nirvana"+ | otherwise -> do+ putStrLn "Your version of cabal-nirvana is out-of-date."+ putStrLn $ "Your version: " ++ showVersion Paths_cabal_nirvana.version+ putStrLn $ "Latest version: " ++ showVersion v+ putStrLn "Please update by running:"+ putStrLn " cabal install cabal-nirvana"+ exitFailure+ where+ go front Tar.Done = return $ front []+ go _ (Tar.Fail e) = throwIO e+ go front (Tar.Next e es) =+ go front' es+ where+ fp = Tar.entryPath e+ (p, fp') = break (== '/') fp+ v = takeWhile (/= '/') $ drop 1 fp'++ front'+ | p == "cabal-nirvana" =+ case filter (null . snd) $ readP_to_S parseVersion v of+ (v', _):_ -> front . (v':)+ [] -> front+ | otherwise = front+ start :: Maybe String -> IO () start mnfp = do nfp <- maybe nirvanaFile return mnfp@@ -112,15 +152,8 @@ where go front Tar.Done = return $ front [] go _ (Tar.Fail e) = throwIO e- 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+ go front (Tar.Next e es) =+ go front' es where fp = Tar.entryPath e (p, fp') = break (== '/') fp