Portability | portable |
---|---|
Stability | experimental |
Maintainer | darcs-devel@darcs.net |
Safe Haskell | Safe-Infered |
Various utility functions that do not belong anywhere else.
- ortryrunning :: IO ExitCode -> IO ExitCode -> IO ExitCode
- nubsort :: Ord a => [a] -> [a]
- breakCommand :: String -> (String, [String])
- showHexLen :: (Integral a, Show a) => Int -> a -> String
- maybeGetEnv :: String -> IO (Maybe String)
- formatPath :: String -> String
- firstJustIO :: [IO (Maybe a)] -> IO (Maybe a)
- askEnter :: String -> IO ()
- askUser :: String -> IO String
- askUserListItem :: String -> [String] -> IO String
- data PromptConfig = PromptConfig {}
- promptYorn :: [Char] -> IO Bool
- promptChar :: PromptConfig -> IO Char
- getViewer :: IO String
- editFile :: FilePathLike p => p -> IO (ExitCode, Bool)
- runEditor :: FilePath -> IO ExitCode
- stripCr :: String -> String
- environmentHelpEditor :: ([String], [String])
- environmentHelpPager :: ([String], [String])
- catchall :: IO a -> IO a -> IO a
- clarifyErrors :: IO a -> String -> IO a
- prettyException :: SomeException -> String
- prettyError :: IOError -> String
- addToErrorLoc :: IOException -> String -> IOException
- getFileStatus :: FilePath -> IO (Maybe FileStatus)
- withCurrentDirectory :: FilePathLike p => p -> IO a -> IO a
- withUMask :: String -> IO a -> IO a
- setDarcsEncodings :: IO ()
- getSystemEncoding :: IO String
- isUTF8Locale :: String -> Bool
- filterFilePaths :: [FilePath] -> AnchoredPath -> t -> Bool
- filterPaths :: [AnchoredPath] -> AnchoredPath -> t -> Bool
- treeHas :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m Bool
- treeHasDir :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m Bool
- treeHasFile :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m Bool
- treeHasAnycase :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m Bool
Documentation
ortryrunning :: IO ExitCode -> IO ExitCode -> IO ExitCodeSource
Given two shell commands as arguments, execute the former. The latter is then executed if the former failed because the executable wasn't found (code 127), wasn't executable (code 126) or some other exception occurred. Other failures (such as the user holding ^C) do not cause the second command to be tried.
breakCommand :: String -> (String, [String])Source
formatPath :: String -> StringSource
Format a path for screen output, so that the user sees where the path begins and ends. Could (should?) also warn about unprintable characters here.
Monads
firstJustIO :: [IO (Maybe a)] -> IO (Maybe a)Source
The firstJustIO is a slight modification to firstJustM: the entries in the list must be IO monad operations and the firstJustIO will silently turn any monad call that throws an exception into Nothing, basically causing it to be ignored.
User prompts
Ask the user for a line of input.
askUserListItem :: String -> [String] -> IO StringSource
askUserListItem prompt xs
enumerates xs
on the screen, allowing
the user to choose one of the items
promptYorn :: [Char] -> IO BoolSource
Prompt the user for a yes or no
promptChar :: PromptConfig -> IO CharSource
Text
editFile :: FilePathLike p => p -> IO (ExitCode, Bool)Source
editFile f
lets the user edit a file which could but does not need to
already exist. This function returns the exit code from the text editor and a
flag indicating if the user made any changes.
Help
environmentHelpEditor :: ([String], [String])Source
environmentHelpPager :: ([String], [String])Source
Errors and exceptions
clarifyErrors :: IO a -> String -> IO aSource
prettyError :: IOError -> StringSource
addToErrorLoc :: IOException -> String -> IOExceptionSource
Files and directories
getFileStatus :: FilePath -> IO (Maybe FileStatus)Source
withCurrentDirectory :: FilePathLike p => p -> IO a -> IO aSource
setDarcsEncodings :: IO ()Source
In some environments, darcs requires that certain global GHC library variables that control the encoding used in internal translations are set to specific values.
setDarcsEncoding
enforces those settings, and should be called before the
first time any darcs operation is run, and again if anything else might have
set those encodings to different values.
Note that it isn't thread-safe and has a global effect on your program.
The current behaviour of this function is as follows, though this may change in future:
Encodings are only set on GHC 7.4 and up, on any non-Windows platform.
Two encodings are set, both to GHC.IO.Encoding.char8
:
GHC.IO.Encoding.setFileSystemEncoding
and GHC.IO.Encoding.setForeignEncoding
.
isUTF8Locale :: String -> BoolSource
isUTF8
checks if an encoding is UTF-8 (or ascii, since it is a
subset of UTF-8).
Tree filtering.
filterFilePaths :: [FilePath] -> AnchoredPath -> t -> BoolSource
Same as filterPath
, but for ordinary FilePath
s (as opposed to
AnchoredPath).
filterPaths :: [AnchoredPath] -> AnchoredPath -> t -> BoolSource
Construct a filter from a list of AnchoredPaths, that will accept any path that is either a parent or a child of any of the listed paths, and discard everything else.
Tree lookup.
treeHasDir :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m BoolSource
treeHasFile :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m BoolSource
treeHasAnycase :: (MonadError e m, Functor m, Monad m) => Tree m -> FilePath -> m BoolSource