-- | Source files for 'B9.Artifact.Generator's. -- -- @since 0.5.62 module B9.Artifact.Readable.Source ( ArtifactSource(..) , getArtifactSourceFiles ) where import Control.Eff import Control.Eff.Extend import Control.Eff.Writer.Lazy import Control.Parallel.Strategies import Data.Data import Data.Tagged import GHC.Generics (Generic) import System.FilePath (()) import Text.Read import B9.Artifact.Content import B9.Artifact.Content.Readable import B9.Artifact.Content.StringTemplate import B9.QCUtil import Test.QuickCheck -- | Describe how input files for artifacts to build are obtained. The general -- structure of each constructor is __FromXXX__ /destination/ /source/ data ArtifactSource = FromFile FilePath SourceFile -- ^ Copy a 'B9.Artifact.Content.StringTemplate.SourceFile' -- potentially replacing variable defined in 'Let'-like -- parent elements. | FromContent FilePath Content -- ^ Create a file from some 'Content' | SetPermissions Int Int Int [ArtifactSource] -- ^ Set the unix /file permissions/ to all files generated -- by the nested list of 'ArtifactSource's. | FromDirectory FilePath [ArtifactSource] -- ^ Assume a local directory as starting point for all -- relative source files in the nested 'ArtifactSource's. | IntoDirectory FilePath [ArtifactSource] -- ^ Specify an output directory for all the files -- generated by the nested 'ArtifactSource's deriving (Read, Show, Eq, Data, Typeable, Generic) instance NFData ArtifactSource -- | Return all source files generated by an 'ArtifactSource'. getArtifactSourceFiles :: ArtifactSource -> [FilePath] getArtifactSourceFiles (FromContent f _) = [f] getArtifactSourceFiles (FromFile f _) = [f] getArtifactSourceFiles (IntoDirectory pd as) = (pd ) <$> (as >>= getArtifactSourceFiles) getArtifactSourceFiles (FromDirectory _ as) = as >>= getArtifactSourceFiles getArtifactSourceFiles (SetPermissions _ _ _ as) = as >>= getArtifactSourceFiles instance Arbitrary ArtifactSource where arbitrary = oneof [ FromFile <$> smaller arbitraryFilePath <*> smaller arbitrary , FromContent <$> smaller arbitraryFilePath <*> smaller arbitrary , SetPermissions <$> choose (0, 7) <*> choose (0, 7) <*> choose (0, 7) <*> smaller arbitrary , FromDirectory <$> smaller arbitraryFilePath <*> smaller arbitrary , IntoDirectory <$> smaller arbitraryFilePath <*> smaller arbitrary ]