packages feed

cabal-nirvana 0.2.1 → 0.2.2

raw patch · 2 files changed

+50/−16 lines, 2 files

Files

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