roshask-0.2: src/executable/Unregister.hs
-- |Helper to unregister all ROS-related packages known by @ghc-pkg@.
module Unregister (unregisterInteractive) where
import Control.Applicative
import Data.Char
import Data.List
import Data.Maybe
import PkgBuilder (myReadProcess, toolPaths, ToolPaths(..))
import System.Exit (ExitCode(..))
import System.IO (hFlush, stdout)
import System.Process
findROSPackages :: ToolPaths -> IO [String]
findROSPackages tools =
mapMaybe (isROS . dropWhile isSpace) . lines
<$> myReadProcess (ghcPkg tools ["list"])
where isROS s
| "ROS-" `isPrefixOf` s = Just s
| otherwise = Nothing
unregisterPackage :: ToolPaths -> String -> IO ()
unregisterPackage tools pkg =
do (_,_,_, ph) <-
createProcess (ghcPkg tools ("unregister":pkg:(forceFlag tools)))
waitForProcess ph >>= \ex -> case ex of
ExitSuccess -> return ()
ExitFailure e -> putStrLn $ "Unregistering "++pkg++" failed: "++show e
unregisterInteractive :: IO ()
unregisterInteractive =
do tools <- toolPaths
pkgs <- findROSPackages tools
if null pkgs
then putStrLn "No ROS packages to remove!"
else do putStrLn "Ready to remove the following packags:"
mapM_ (putStrLn . (" "++)) pkgs
putStr "Are you sure you want to continue (y/n)? "
hFlush stdout
s <- map toLower <$> getLine
if s == "n" || s == "no"
then putStrLn "Cancelling unregistration."
else mapM_ (unregisterPackage tools) pkgs >>
putStrLn "Unregistration complete!"