packages feed

cabal-uninstall 0.1 → 0.1.1

raw patch · 2 files changed

+24/−6 lines, 2 files

Files

cabal-uninstall.cabal view
@@ -1,5 +1,5 @@ name:                     cabal-uninstall-version:                  0.1+version:                  0.1.1 cabal-version:            >= 1.6 stability:                alpha description:              Very simple script to delete a cabal package.
cabal-uninstall.hs view
@@ -1,12 +1,14 @@ module Main where  +import Data.List (intercalate) import System.Environment (getArgs) import System.Process (system, runInteractiveCommand) import System.Exit (ExitCode(..)) import System.IO (hGetContents, hFlush, stdout) import System.Directory (doesDirectoryExist, removeDirectoryRecursive)-import System.FilePath (takeDirectory, dropTrailingPathSeparator)+import System.FilePath (takeDirectory, dropTrailingPathSeparator, splitDirectories)+import Control.Monad.Instances ()   main :: IO ()@@ -36,8 +38,15 @@  internalErrorInfo :: String internalErrorInfo =-  "internal error: please contact Jan Christiansen (christiansen@monoid-it.de)"+  "internal error: please contact Jan Christiansen (info@monoid-it.de)" +multiplePackagesInfo :: [String] -> String+multiplePackagesInfo packages =+  "There are multiple packages you might refer to, namely\n" +    ++ "  " ++ intercalate ", " packages ++ "\n"+    ++ "please reinvoke cabal-uninstall and specify the version of the package\n"+    ++ "(for example 'cabal-uninstall parsec-3.1.3')\n."+ parseForceArg :: [String] -> Maybe Bool parseForceArg []          = Just False parseForceArg ["--force"] = Just True@@ -52,9 +61,18 @@        [] -> hGetContents herr >>= return . Left        _  -> return (packageDir (words result))  where-  packageDir ["library-dirs:", libDir] =-    Right (takeDirectory (dropTrailingPathSeparator libDir))-  packageDir _ = Left internalErrorInfo+  packageDir libDirs =+    case extractLibDirs libDirs of+         Right [packDir] -> Right packDir+         Right packDirs  -> Left (multiplePackagesInfo (map (last . splitDirectories) packDirs))+         Left  err       -> Left err++extractLibDirs :: [String] -> Either String [String]+extractLibDirs [] = Right []+extractLibDirs ("library-dirs:":libDir:libDirs) = do+    packDirs <- extractLibDirs libDirs+    return (takeDirectory (dropTrailingPathSeparator libDir):packDirs) +extractLibDirs _ = Left internalErrorInfo  removePackageDirectory :: FilePath -> IO () removePackageDirectory packageDir = do