{-# LANGUAGE DeriveDataTypeable #-}
module Error (HackPortError(..), throwEx, catchEx, hackPortShowError) where
import Data.Typeable
import Control.Exception.Extensible as EE
data HackPortError
= ArgumentError String
| ConnectionFailed String String
| PackageNotFound String
| InvalidTarballURL String String
| InvalidSignatureURL String String
| VerificationFailed String String
| DownloadFailed String String
| UnknownCompression String
| UnpackingFailed String Int
| NoCabalFound String
| String String Int
| CabalParseFailed String String
| BashNotFound
| BashError String
| NoOverlay
| MultipleOverlays [String]
| UnknownVerbosityLevel String
| InvalidServer String
deriving (Typeable
, Int -> HackPortError -> ShowS
[HackPortError] -> ShowS
HackPortError -> String
(Int -> HackPortError -> ShowS)
-> (HackPortError -> String)
-> ([HackPortError] -> ShowS)
-> Show HackPortError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HackPortError] -> ShowS
$cshowList :: [HackPortError] -> ShowS
show :: HackPortError -> String
$cshow :: HackPortError -> String
showsPrec :: Int -> HackPortError -> ShowS
$cshowsPrec :: Int -> HackPortError -> ShowS
Show
, Eq
)
instance Exception HackPortError where
throwEx :: HackPortError -> IO a
throwEx :: HackPortError -> IO a
throwEx = HackPortError -> IO a
forall a e. Exception e => e -> a
EE.throw
catchEx :: IO a -> (HackPortError -> IO a) -> IO a
catchEx :: IO a -> (HackPortError -> IO a) -> IO a
catchEx = IO a -> (HackPortError -> IO a) -> IO a
forall e a. Exception e => IO a -> (e -> IO a) -> IO a
EE.catch
hackPortShowError :: HackPortError -> String
hackPortShowError :: HackPortError -> String
hackPortShowError HackPortError
err = case HackPortError
err of
ArgumentError String
str -> String
"Argument error: "String -> ShowS
forall a. [a] -> [a] -> [a]
++String
str
ConnectionFailed String
server String
reason -> String
"Connection to hackage server '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
serverString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' failed: "String -> ShowS
forall a. [a] -> [a] -> [a]
++String
reason
PackageNotFound String
pkg -> String
"Package '"String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
pkg String -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' not found on server. Try 'hackport update'?"
InvalidTarballURL String
url String
reason -> String
"Error while downloading tarball '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
urlString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"': "String -> ShowS
forall a. [a] -> [a] -> [a]
++String
reason
InvalidSignatureURL String
url String
reason -> String
"Error while downloading signature '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
urlString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"': "String -> ShowS
forall a. [a] -> [a] -> [a]
++String
reason
VerificationFailed String
file String
signature -> String
"Error while checking signature('"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
signatureString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"') of '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
fileString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"'"
DownloadFailed String
url String
reason -> String
"Error while downloading '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
urlString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"': "String -> ShowS
forall a. [a] -> [a] -> [a]
++String
reason
UnknownCompression String
tarball -> String
"Couldn't guess compression type of '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
tarballString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"'"
UnpackingFailed String
tarball Int
code -> String
"Unpacking '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
tarballString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' failed with exit code '"String -> ShowS
forall a. [a] -> [a] -> [a]
++Int -> String
forall a. Show a => a -> String
show Int
codeString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"'"
NoCabalFound String
tarball -> String
"Tarball '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
tarballString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' doesn't contain a cabal file"
ExtractionFailed String
tarball String
file Int
code -> String
"Extracting '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
fileString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' from '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
tarballString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' failed with '"String -> ShowS
forall a. [a] -> [a] -> [a]
++Int -> String
forall a. Show a => a -> String
show Int
codeString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"'"
CabalParseFailed String
file String
reason -> String
"Error while parsing cabal file '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
fileString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"': "String -> ShowS
forall a. [a] -> [a] -> [a]
++String
reason
HackPortError
BashNotFound -> String
"The 'bash' executable was not found. It is required to figure out your portage-overlay. If you don't want to install bash, use '-p path-to-overlay'"
BashError String
str -> String
"Error while guessing your repository's location. Either set a repository 'haskell' in '/etc/portage/repos.conf' or use '-p path-to-overlay'.\nThe error was: \""String -> ShowS
forall a. [a] -> [a] -> [a]
++String
strString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"\""
MultipleOverlays [String]
overlays -> String
"You have the following overlays available: '"String -> ShowS
forall a. [a] -> [a] -> [a]
++[String] -> String
unwords [String]
overlaysString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"'. Please choose one by using 'hackport -p path-to-overlay' <command>"
HackPortError
NoOverlay -> String
"Unable to find a repository 'haskell'. Consider defining it in '/etc/portage/repos.conf' and verify '~/.hackport/repositories' (in overlay_list) or use '-p path-to-overlay'"
UnknownVerbosityLevel String
str -> String
"The verbosity level '"String -> ShowS
forall a. [a] -> [a] -> [a]
++String
strString -> ShowS
forall a. [a] -> [a] -> [a]
++String
"' is invalid. Please use debug,normal or silent"
InvalidServer String
srv -> String
"Invalid server address, could not parse: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
srv