darcs-2.8.4: a distributed, interactive, smart revision control system

Portability | portable
Stability | experimental
Maintainer | darcs-devel@darcs.net
Safe Haskell | None

Darcs.Utils

Contents

- Monads
- User prompts
- Text
- Help
- Errors and exceptions
- Files and directories
- Tree filtering.
- Tree lookup.

Description

Various utility functions that do not belong anywhere else.

Synopsis

- 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 {
  - pPrompt :: String
  - pBasicCharacters :: [Char]
  - pAdvancedCharacters :: [Char]
  - pDefault :: Maybe Char
  - pHelp :: [Char]
  }
- 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 ExitCode

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.

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

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)

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

askEnter

Arguments

:: String | The prompt to display
-> IO () |

Ask the user to press Enter

askUser

Arguments

:: String | The prompt to display
-> IO String | The string the user entered.

Ask the user for a line of input.

askUserListItem :: String -> [String] -> IO String

`askUserListItem prompt xs` enumerates `xs` on the screen, allowing the user to choose one of the items

data PromptConfig

Constructors

PromptConfig |

Fields

pPrompt :: String
pBasicCharacters :: [Char]
pAdvancedCharacters :: [Char]

  only shown on help

pDefault :: Maybe Char
pHelp :: [Char]

promptYorn :: [Char] -> IO Bool

Prompt the user for a yes or no

promptChar :: PromptConfig -> IO Char

# Text

getViewer :: IO String

editFile :: FilePathLike p => p -> IO (ExitCode, Bool)

`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.

runEditor :: FilePath -> IO ExitCode

stripCr :: String -> String

# Help

environmentHelpEditor :: ([String], [String])

environmentHelpPager :: ([String], [String])

# Errors and exceptions

catchall :: IO a -> IO a -> IO a

clarifyErrors :: IO a -> String -> IO a

prettyException :: SomeException -> String

prettyError :: IOError -> String

addToErrorLoc :: IOException -> String -> IOException

# Files and directories

getFileStatus :: FilePath -> IO (Maybe FileStatus)

withCurrentDirectory :: FilePathLike p => p -> IO a -> IO a

withUMask :: String -> IO a -> IO a

setDarcsEncodings :: IO ()

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`.

getSystemEncoding :: IO String

isUTF8Locale :: String -> Bool

`isUTF8` checks if an encoding is UTF-8 (or ascii, since it is a subset of UTF-8).

# Tree filtering.

filterFilePaths :: [FilePath] -> AnchoredPath -> t -> Bool

Same as `filterPath`, but for ordinary `FilePath`s (as opposed to AnchoredPath).

filterPaths :: [AnchoredPath] -> AnchoredPath -> t -> Bool

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.

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