fbrnch-0.9: src/Prompt.hs
module Prompt (
prompt,
prompt_,
refPrompt,
conflictPrompt
) where
import Common
import Data.Char
import System.IO
-- FIXME promptNonEmpty
prompt :: String -> IO String
prompt s = do
putStr $ s ++ ": "
tty <- openFile "/dev/tty" ReadMode
inp <- hGetLine tty
putStrLn ""
return inp
prompt_ :: String -> IO ()
prompt_ = void <$> prompt
-- FIXME select ref by number
refPrompt :: [String] -> String -> IO (Maybe (Maybe String))
refPrompt commits txt = do
let commitrefs = tail $ map (head . words) commits
ref <- prompt txt
if null ref then return (Just Nothing) else
if map toLower ref == "no" then return Nothing
else if ref `elem` commitrefs
then return $ Just (Just ref)
else refPrompt commits txt
conflictPrompt :: [String] -> String -> IO (Maybe String)
conflictPrompt commits txt = do
let commitrefs = tail $ map (head . words) commits
ref <- prompt txt
if null ref then return Nothing
else if ref `elem` commitrefs
then return $ Just ref
else conflictPrompt commits txt