shelly 1.3.0.6 → 1.3.0.7
raw patch · 2 files changed
+20/−15 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- shelly.cabal +1/−1
- src/Shelly.hs +19/−14
shelly.cabal view
@@ -1,6 +1,6 @@ Name: shelly -Version: 1.3.0.6+Version: 1.3.0.7 Synopsis: shell-like (systems) programming in Haskell Description: Shelly provides convenient systems programming in Haskell,
src/Shelly.hs view
@@ -550,14 +550,13 @@ | otherwise = lookupCache checkFile = do exists <- liftIO $ isFile fp- return $ if exists then Just fp else Nothing+ return $ toMaybe exists fp lookupPath =- pathDirs >>= findMapM (\dir -> do+ (pathDirs >>=) $ findMapM $ \dir -> do let fullFp = dir </> fp res <- liftIO $ isExecutable $ encodeString $ fullFp- return $ if res then Just fullFp else Nothing- )+ return $ toMaybe res fullFp lookupCache = do pathExecutables <- cachedPathExecutables@@ -589,11 +588,15 @@ return $ cachedExecutables +-- | Returns 'Just' if the precondition is fulfilled.+toMaybe :: Bool -> a -> Maybe a+toMaybe False _ = Nothing+toMaybe True x = Just x+ -- | A monadic findMap, taken from MissingM package findMapM :: Monad m => (a -> m (Maybe b)) -> [a] -> m (Maybe b) findMapM _ [] = return Nothing-findMapM f (x:xs) =- do+findMapM f (x:xs) = do mb <- f x if (isJust mb) then return mb@@ -652,16 +655,18 @@ -- | Set an environment variable. The environment is maintained in Sh -- internally, and is passed to any external commands to be executed. setenv :: Text -> Text -> Sh ()-setenv k v =- if k == path_env then setPath v else do- let (kStr, vStr) = (T.unpack k, T.unpack v)- wibble environment = (kStr, vStr) : filter ((/=kStr) . fst) environment- in modify $ \x -> x { sEnvironment = wibble $ sEnvironment x }+setenv k v = if k == path_env then setPath v else setenvRaw k v +setenvRaw :: Text -> Text -> Sh ()+setenvRaw k v = modify $ \x -> x { sEnvironment = wibble $ sEnvironment x }+ where+ (kStr, vStr) = (T.unpack k, T.unpack v)+ wibble environment = (kStr, vStr) : filter ((/=kStr) . fst) environment+ setPath :: Text -> Sh () setPath newPath = do modify $ \x -> x{ sPathExecutables = Nothing }- setenv path_env newPath+ setenvRaw path_env newPath path_env :: Text path_env = "PATH"@@ -679,8 +684,8 @@ get_env k = do mval <- return . fmap T.pack . lookup (T.unpack k) =<< gets sEnvironment return $ case mval of- Nothing -> Nothing- j@(Just val) -> if T.null val then Nothing else j+ Nothing -> Nothing+ Just val -> toMaybe (not $ T.null val) val -- | deprecated getenv :: Text -> Sh Text