module Language.PureScript.Publish.Utils where
import Prelude.Compat
import Data.Either (partitionEithers)
import Data.List
import System.Directory
import System.Exit (exitFailure)
import System.FilePath (pathSeparator)
import System.IO (hPutStrLn, stderr)
import qualified System.FilePath.Glob as Glob
globRelative :: Glob.Pattern -> IO [FilePath]
globRelative pat = do
currentDir <- getCurrentDirectory
filesAbsolute <- Glob.globDir1 pat currentDir
let prefix = currentDir ++ [pathSeparator]
let (fails, paths) = partitionEithers . map (stripPrefix' prefix) $ filesAbsolute
if null fails
then return paths
else do
let p = hPutStrLn stderr
p "Internal error in Language.PureScript.Publish.Utils.globRelative"
p "Unmatched files:"
mapM_ p fails
exitFailure
where
stripPrefix' prefix dir =
maybe (Left dir) Right $ stripPrefix prefix dir
purescriptSourceFiles :: Glob.Pattern
purescriptSourceFiles = Glob.compile "src/**/*.purs"
purescriptDepsFiles :: Glob.Pattern
purescriptDepsFiles = Glob.compile "bower_components/*/src/**/*.purs"