-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Tools for managing a content store of software packages -- -- This module provides a library and various tools for managing a -- content store and metadata database. These store the contents of -- software packages that make up a Linux distribution as well as a lot -- of metadata about those software packages. Tools are inclued to -- construct those stores from pre-built software and to pull files back -- out to turn into bootable images. @package bdcs @version 0.2.0 -- | Extract the version number of bdcs tools. module BDCS.Version -- | Given the name of a bdcs tool, print its version number. printVersion :: String -> IO () -- | Monad related utility functions module BDCS.Utils.Monad -- | Like concatMap, but with its arguments reversed (the list comes -- first and the function comes second) and operates in a monad. concatForM :: (Monad m, Traversable t) => t a -> (a -> m [b]) -> m [b] -- | Like concatMap but operates in a monad. concatMapM :: (Monad m, Traversable t) => (a -> m [b]) -> t a -> m [b] foldMaybeM :: Monad m => (b -> a -> m (Maybe b)) -> b -> [a] -> m b -- | Like mapMaybe but operates in a monad. mapMaybeM :: Monad m => (a -> m (Maybe b)) -> [a] -> m [b] -- | Apply a function to a monadic action. If the action is 'm Nothing', do -- nothing. Otherwise, apply the function and return the result as 'm -- (Just a)'. (>>?) :: Monad m => m (Maybe a) -> (a -> m b) -> m (Maybe b) infixl 1 >>? -- | Utility functions for Unix filesystem modes module BDCS.Utils.Mode -- | Convert a mode value into a Text file mode string -- --
--   modeAsText 0o755
--   "rwxr-xr-x"
--   
modeAsText :: Word32 -> Text -- | Filesystem related utility functions module BDCS.Utils.Filesystem -- | A version of doesPathExist that also returns True if the path exists -- and is a broken symlink. doesPathExist :: FilePath -> IO Bool -- | Functions to help with errors module BDCS.Utils.Error -- | Convert an error action into an Either This is essentially -- runExceptT generalized to MonadError errorToEither :: MonadError e m => m a -> m (Either e a) -- | Convert an error into into nothing errorToMaybe :: MonadError e m => m a -> m (Maybe a) -- | Run an ExceptT action. On error, run a supplied function to -- convert the error into some type that can be thrown with -- throwError in MonadError. On success, simply return the -- value of the action. mapError :: MonadError e' m => (e -> e') -> ExceptT e m a -> m a -- | Utility functions to help with Either values module BDCS.Utils.Either -- | Throw the passed err if the value is Nothing, otherwise return the -- value. maybeToEither :: MonadError e m => e -> Maybe a -> m a -- | Run a function on the Left error, otherwise do nothing whenLeft :: Monad m => Either e a -> (e -> m ()) -> m () -- | Run a function on the Right value, otherwise do nothing whenRight :: Monad m => Either e a -> (a -> m ()) -> m () -- | Conduit related utility functions module BDCS.Utils.Conduit -- | Wait for a single value and then call fn on it. awaitWith :: Monad m => (i -> Conduit i m o) -> Conduit i m o -- | A conduit that takes its input and returns that as its output. identityC :: Monad m => Conduit a m a -- | Convert a IsInputStream to a conduit source sourceInputStream :: (MonadResource m, IsInputStream i) => i -> Producer m ByteString -- | Data types for working with Requirements. module BDCS.ReqType -- | The type for specifying when a requirement should be enforced. data ReqContext -- | Applies when building Build :: ReqContext -- | Applies when the package is on the system Runtime :: ReqContext -- | Applies to running tests Test :: ReqContext -- | Before a package install ScriptPre :: ReqContext -- | After a package install ScriptPost :: ReqContext -- | Before a package uninstall ScriptPreUn :: ReqContext -- | After a package uninstall ScriptPostUn :: ReqContext -- | Before a package transaction ScriptPreTrans :: ReqContext -- | After a package transaction ScriptPostTrans :: ReqContext -- | Package verification script ScriptVerify :: ReqContext -- | Feature requirement, e.g. rpmlib features Feature :: ReqContext -- | The type of a requirements language - this basically maps to a -- packaging system. For now, only RPM is supported. data ReqLanguage RPM :: ReqLanguage -- | The type for specifying how strictly a requirement should be enforced. data ReqStrength -- | A requirement must be satisfied Must :: ReqStrength -- | A requirement should be satisfied, but it is not an error if it cannot -- be. Should :: ReqStrength -- | A requirement should only be satisfied at the user's option. -- Typically, automated processes will ignore this. May :: ReqStrength -- | Like Should, but looks at packages that are already installed. ShouldIfInstalled :: ReqStrength -- | Like May, but looks at packages that are already installed. MayIfInstalled :: ReqStrength instance Database.Persist.Class.PersistField.PersistField BDCS.ReqType.ReqStrength instance Database.Persist.Sql.Class.PersistFieldSql BDCS.ReqType.ReqStrength instance Database.Persist.Class.PersistField.PersistField BDCS.ReqType.ReqContext instance Database.Persist.Sql.Class.PersistFieldSql BDCS.ReqType.ReqContext instance Database.Persist.Class.PersistField.PersistField BDCS.ReqType.ReqLanguage instance Database.Persist.Sql.Class.PersistFieldSql BDCS.ReqType.ReqLanguage instance GHC.Show.Show BDCS.ReqType.ReqStrength instance GHC.Read.Read BDCS.ReqType.ReqStrength instance GHC.Classes.Eq BDCS.ReqType.ReqStrength instance GHC.Show.Show BDCS.ReqType.ReqContext instance GHC.Read.Read BDCS.ReqType.ReqContext instance GHC.Classes.Eq BDCS.ReqType.ReqContext instance GHC.Show.Show BDCS.ReqType.ReqLanguage instance GHC.Read.Read BDCS.ReqType.ReqLanguage instance GHC.Classes.Eq BDCS.ReqType.ReqLanguage -- | Utility functions for BDCS.RPM module BDCS.RPM.Utils -- | Turn an RPM filename in form of -- "NAME-[EPOCH:]VERSION-RELEASE.ARCH[.rpm] into a tuple of (name, epoch, -- version, release, and arch). splitFilename :: Text -> (Text, Maybe Text, Text, Text, Text) module BDCS.NPM.SemVer -- | A Semantic version, as defined by http://semver.org/ data SemVer SemVer :: Integer -> Integer -> Integer -> [SemVerIdentifier] -> [SemVerIdentifier] -> SemVer [major] :: SemVer -> Integer [minor] :: SemVer -> Integer [patch] :: SemVer -> Integer [preRelease] :: SemVer -> [SemVerIdentifier] [buildMeta] :: SemVer -> [SemVerIdentifier] -- | a component of a pre-release or buildmeta identifier list data SemVerIdentifier NumericIdentifier :: Integer -> SemVerIdentifier TextIdentifier :: Text -> SemVerIdentifier -- | A single version condition, e.g. >= 1.0.0. To satisfy the -- condition, a SemVer must match at least one of the -- Orderings. type SemVerRangePart = [(Ordering, SemVer)] -- | A range of semantic versions. To satisfy the range, a SemVer -- must satisfy every element of the list. type SemVerRange = [SemVerRangePart] -- | A set of semantic version ranges. To satisfy the set, a SemVer -- must satisfy at least one of the ranges in the list. type SemVerRangeSet = [SemVerRange] -- | Parse a semantic version parseSemVer :: Text -> Either ParseError SemVer -- | Parse a SemVer range set according to the npm syntax. parseSemVerRangeSet :: Text -> Either ParseError SemVerRangeSet -- | Whether a given version satisfies a given range. -- -- When the version contains pre-release tags, it only satisifes a -- SemVerRange if at least one version in the range has a matching -- major.minor.patch version number and also contains pre-release tags. satisfies :: SemVer -> SemVerRangeSet -> Bool toText :: SemVer -> Text instance GHC.Show.Show BDCS.NPM.SemVer.PartialSemVer instance GHC.Show.Show BDCS.NPM.SemVer.SemVer instance GHC.Classes.Eq BDCS.NPM.SemVer.SemVer instance GHC.Show.Show BDCS.NPM.SemVer.SemVerIdentifier instance GHC.Classes.Eq BDCS.NPM.SemVer.SemVerIdentifier instance GHC.Classes.Ord BDCS.NPM.SemVer.SemVer instance GHC.Classes.Ord BDCS.NPM.SemVer.SemVerIdentifier module BDCS.Label.Types data Label DocsLabel :: Label FontsLabel :: Label InfoPageLabel :: Label LibraryLabel :: Label LicenseLabel :: Label ManPageLabel :: Label ServiceLabel :: Label TranslationLabel :: Text -> Label labelDescriptions :: [(String, String)] instance Database.Persist.Class.PersistField.PersistField BDCS.Label.Types.Label instance Database.Persist.Sql.Class.PersistFieldSql BDCS.Label.Types.Label instance GHC.Show.Show BDCS.Label.Types.Label instance GHC.Read.Read BDCS.Label.Types.Label instance GHC.Classes.Eq BDCS.Label.Types.Label instance Data.Aeson.Types.ToJSON.ToJSON BDCS.Label.Types.Label -- | Data types for working with the key in a KeyVal. module BDCS.KeyType -- | The KeyVal record features a namespaced key, allowing multiple -- types of keys to exist and be managed in the same database. This type -- allows differentiation of the multiple kinds of keys. data KeyType -- | A key allowing only pre-defined labels to be appplied. LabelKey :: Label -> KeyType -- | Ordinary text key TextKey :: Text -> KeyType -- | Convert a KeyType into Text asText :: KeyType -> Text instance Database.Persist.Class.PersistField.PersistField BDCS.KeyType.KeyType instance Database.Persist.Sql.Class.PersistFieldSql BDCS.KeyType.KeyType instance Data.Aeson.Types.ToJSON.ToJSON BDCS.KeyType.KeyType instance GHC.Show.Show BDCS.KeyType.KeyType instance GHC.Read.Read BDCS.KeyType.KeyType instance GHC.Classes.Eq BDCS.KeyType.KeyType -- | Utilities for manipulating URIs during import. module BDCS.Import.URI -- | Append a path to a URI. appendURI :: URI -> String -> Maybe URI -- | Go up one directory in the URI. For instance: > ghci> let -- uri = parseURI "file://pathtoreporepodata/primary.xml" -- > ghci> baseURI (fromJust uri) > Just -- file://pathtorepo baseURI :: URI -> Maybe URI -- | Does a URI point to a comps.xml file? This is only really -- useful when importing RPMs from a comps file, as shipped by RPM-based -- distributions. isCompsFile :: URI -> Bool -- | Does a URI point to a primary.xml file? This is only really -- useful when importing RPMs from a repo in an RPM-based distribution. isPrimaryXMLFile :: URI -> Bool -- | Convert a URI to string with no obfuscation showURI :: URI -> String -- | Convert a file:// URI to a FilePath. This does not check -- that the URI is a file:// URI, assumes posix-style paths uriToPath :: URI -> FilePath -- | Types needed to maintain state when importing objects. module BDCS.Import.State -- | The state record. This is helpful for keeping track of various pieces -- of global data when importing objects. data ImportState ImportState :: FilePath -> ContentStore -> ImportState -- | The metadata database [stDB] :: ImportState -> FilePath -- | The opened, initialized content store [stRepo] :: ImportState -> ContentStore -- | Utilities for working with Conduits when importing. module BDCS.Import.Conduit -- | Load data from a given file: or http: URI into a -- ByteString. getFromURI :: MonadResource m => URI -> Producer m ByteString -- | If the ByteString in a Conduit is compressed, pass it -- through ungzip to uncompress it. Otherwise, pass it through without -- doing anything. We determine whether a stream is compressed by looking -- for the gzip magic bytes at the start of the stream. ungzipIfCompressed :: MonadResource m => Conduit ByteString m ByteString module BDCS.Import.Comps data CompsPkg CPMandatory :: Text -> CompsPkg CPDefault :: Text -> CompsPkg CPOptional :: Text -> CompsPkg CPUnknown :: Text -> CompsPkg CPRequires :: Text -> Text -> CompsPkg data CompsGroup CompsGroup :: Text -> Text -> [CompsPkg] -> CompsGroup loadFromURI :: URI -> ReaderT ImportState IO () instance GHC.Show.Show BDCS.Import.Comps.CompsGroup instance GHC.Show.Show BDCS.Import.Comps.CompsPkg -- | Parse a tmpfiles.d config file into TmpFileEntry records. -- -- This parser is limited, it only supports types that are needed by the -- bdcs export tool (eg. creating files and directories) -- -- Currently supported types are: -- -- f Create a new file and optionally write the arg to it. Will not -- overwrite. F Remove existing file and make a new one, optionally -- writing arg to it. d Create a new directory, only if it doesn't exist. -- e Modify an existing directory's ownership and permissions L Create a -- new symlink. Do nothing if it already exists. L+ Remove file, -- directory tree, or symlink before creating it. WARNING this will -- remove a whole directory tree. module BDCS.Export.TmpFiles -- | Record for the tmpfiles.d config file entries. For more detailed -- information on these values, see "man 5 tmpfiles.d". data TmpFileEntry TmpFileEntry :: TmpFileType -> FilePath -> Maybe Integer -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> TmpFileEntry -- | The type of file to create [tfeType] :: TmpFileEntry -> TmpFileType -- | File path [tfePath] :: TmpFileEntry -> FilePath -- | File access mode, or a default [tfeMode] :: TmpFileEntry -> Maybe Integer -- | File's owner [tfeUid] :: TmpFileEntry -> Maybe Text -- | File's group [tfeGid] :: TmpFileEntry -> Maybe Text -- | How long to keep the file before deleting [tfeAge] :: TmpFileEntry -> Maybe Text -- | Depends on the type of file [tfeArg] :: TmpFileEntry -> Maybe Text -- | Types for the tmpfiles.d config file. This is not a complete list, -- some don't make sense for an empty filesystem and are unimplemented -- NOTE Order is important, it needs to maintain at least: Directory, -- Symlink, File, etc. For more detailed information on these types, see -- "man 5 tmpfiles.d". data TmpFileType NewDirectory :: TmpFileType NewSymlink :: TmpFileType ReplaceSymlink :: TmpFileType NewFile :: TmpFileType TruncateFile :: TmpFileType ModifyDirectory :: TmpFileType Unsupported :: TmpFileType -- | Given a string, convert it into a list of TmpFileEntry records -- or a ParseError. parseConfString :: String -> Either ParseError [TmpFileEntry] -- | Read the tmpfiles.d snippet and apply it to the output directory setupFilesystem :: FilePath -> FilePath -> IO () instance GHC.Show.Show BDCS.Export.TmpFiles.TmpFileEntry instance GHC.Classes.Eq BDCS.Export.TmpFiles.TmpFileEntry instance GHC.Show.Show BDCS.Export.TmpFiles.TmpFileType instance GHC.Classes.Eq BDCS.Export.TmpFiles.TmpFileType instance GHC.Classes.Ord BDCS.Export.TmpFiles.TmpFileType instance GHC.Classes.Ord BDCS.Export.TmpFiles.TmpFileEntry -- | Miscellaneous utilities useful in exporting objects. module BDCS.Export.Utils -- | Run filesystem hacks needed to make a directory tree bootable. Any -- exporter that produces a finished image should call this function. -- Otherwise, it is not generally useful and should be avoided. The exact -- hacks required is likely to change over time. runHacks :: FilePath -> IO () -- | Run tmpfiles.d snippet on the new directory. Most exporters should -- call this function. Otherwise, it is not generally useful and should -- be avoided. runTmpfiles :: FilePath -> IO () -- | Functions for exporting objects from the BDCS into a tar file. module BDCS.Export.Tar -- | A Consumer that writes objects (in the form of Entry -- records) into a tar archive with the provided name. To convert objects -- into an Entry, see objectToTarEntry. tarSink :: MonadIO m => FilePath -> Consumer Entry m () -- | Utilities for working with database-related exceptions. module BDCS.Exceptions -- | A general purpose exception type for dealing with things that go wrong -- when working with the database. This type could grow into a more -- complex system in the future, if needed. This type is most helpful -- because runSqlite will roll back the entire transaction if an -- exception is raised. data DBException -- | A general purpose exception type, including an error message. DBException :: String -> DBException -- | A required tag was missing from the RPM being processed. The argument -- should be the name of the missing tag. MissingRPMTag :: String -> DBException -- | The name of the package is not parseable. BadName :: String -> DBException -- | Is a given DBException type a BadName? isBadNameException :: DBException -> Bool -- | Is a given DBException type the general DBException? isDBExceptionException :: DBException -> Bool -- | Is a given DBException type a MissingRPMTag? isMissingRPMTagException :: DBException -> Bool -- | If a Maybe value is Nothing, throw the given exception. -- Otherwise, return the value inside. throwIfNothing :: Exception e => Maybe a -> e -> a -- | If a Maybe value is Nothing, throw the given exception. -- Otherwise, run the provided function on the value inside and return -- the result. throwIfNothingOtherwise :: Exception e => Maybe a -> e -> (a -> b) -> b instance GHC.Classes.Eq BDCS.Exceptions.DBException instance GHC.Exception.Exception BDCS.Exceptions.DBException instance GHC.Show.Show BDCS.Exceptions.DBException -- | Manage Builds records in the database. module BDCS.Depsolve data Formula a Atom :: a -> Formula a Not :: a -> Formula a Or :: [Formula a] -> Formula a And :: [Formula a] -> Formula a data CNFLiteral a CNFOriginal :: a -> CNFLiteral a CNFSubstitute :: Int -> CNFLiteral a data CNFAtom a CNFAtom :: (CNFLiteral a) -> CNFAtom a CNFNot :: (CNFLiteral a) -> CNFAtom a type CNFFormula a = [[CNFAtom a]] type DepAssignment a = (a, Bool) formulaToCNF :: Formula a -> CNFFormula a solveCNF :: (MonadError String m, Ord a) => CNFFormula a -> m [DepAssignment a] instance GHC.Show.Show a => GHC.Show.Show (BDCS.Depsolve.CNFAtom a) instance GHC.Classes.Ord a => GHC.Classes.Ord (BDCS.Depsolve.CNFAtom a) instance GHC.Classes.Eq a => GHC.Classes.Eq (BDCS.Depsolve.CNFAtom a) instance GHC.Show.Show a => GHC.Show.Show (BDCS.Depsolve.CNFLiteral a) instance GHC.Classes.Ord a => GHC.Classes.Ord (BDCS.Depsolve.CNFLiteral a) instance GHC.Classes.Eq a => GHC.Classes.Eq (BDCS.Depsolve.CNFLiteral a) instance GHC.Show.Show a => GHC.Show.Show (BDCS.Depsolve.Formula a) instance GHC.Classes.Eq a => GHC.Classes.Eq (BDCS.Depsolve.Formula a) -- | The metadata database schema and miscellaneous database helper -- functions module BDCS.DB -- | The database schema version as implemented by this module. This must -- match the PRAGMA user_version value in schema.sql, shipped elsewhere -- in the source. schemaVersion :: Int64 -- | Return the version number stored in the database. getDbVersion :: (MonadError String m, MonadIO m) => SqlPersistT m Int64 -- | Verify that the version number stored in the database matches the -- schema version number implemented by this module. If there is a -- version mismatch, throw an error. checkDbVersion :: (MonadError String m, MonadIO m) => SqlPersistT m () -- | Like runSqlite, but first checks that the database's schema -- version matches what is expected. This prevents running against -- incompatible database versions. checkAndRunSqlite :: (MonadError String m, MonadBaseControl IO m, MonadIO m) => Text -> SqlPersistT (NoLoggingT (ResourceT m)) a -> m a data Projects Projects :: !Text -> !Text -> !Text -> !(Maybe Text) -> !Text -> Projects [projectsName] :: Projects -> !Text [projectsSummary] :: Projects -> !Text [projectsDescription] :: Projects -> !Text [projectsHomepage] :: Projects -> !(Maybe Text) [projectsUpstream_vcs] :: Projects -> !Text type ProjectsId = Key Projects data Sources Sources :: !(Key Projects) -> !Text -> !Text -> !Text -> Sources [sourcesProject_id] :: Sources -> !(Key Projects) [sourcesLicense] :: Sources -> !Text [sourcesVersion] :: Sources -> !Text [sourcesSource_ref] :: Sources -> !Text type SourcesId = Key Sources data Builds Builds :: !(Key Sources) -> !Int -> !Text -> !Text -> !UTCTime -> !ByteString -> !Text -> !Text -> Builds [buildsSource_id] :: Builds -> !(Key Sources) [buildsEpoch] :: Builds -> !Int [buildsRelease] :: Builds -> !Text [buildsArch] :: Builds -> !Text [buildsBuild_time] :: Builds -> !UTCTime [buildsChangelog] :: Builds -> !ByteString [buildsBuild_config_ref] :: Builds -> !Text [buildsBuild_env_ref] :: Builds -> !Text type BuildsId = Key Builds data BuildSignatures BuildSignatures :: !(Key Builds) -> !Text -> !ByteString -> BuildSignatures [buildSignaturesBuild_id] :: BuildSignatures -> !(Key Builds) [buildSignaturesSignature_type] :: BuildSignatures -> !Text [buildSignaturesSignature_data] :: BuildSignatures -> !ByteString type BuildSignaturesId = Key BuildSignatures data Files Files :: !Text -> !Text -> !Text -> !Int -> !(Maybe ByteString) -> !Int -> !Int -> !(Maybe Text) -> Files [filesPath] :: Files -> !Text [filesFile_user] :: Files -> !Text [filesFile_group] :: Files -> !Text [filesMtime] :: Files -> !Int [filesCs_object] :: Files -> !(Maybe ByteString) [filesMode] :: Files -> !Int [filesSize] :: Files -> !Int [filesTarget] :: Files -> !(Maybe Text) type FilesId = Key Files data SourceFiles SourceFiles :: !(Key Sources) -> !(Key Files) -> SourceFiles [sourceFilesSource_id] :: SourceFiles -> !(Key Sources) [sourceFilesFile_id] :: SourceFiles -> !(Key Files) type SourceFilesId = Key SourceFiles data BuildFiles BuildFiles :: !(Key Builds) -> !(Key Files) -> BuildFiles [buildFilesBuild_id] :: BuildFiles -> !(Key Builds) [buildFilesFile_id] :: BuildFiles -> !(Key Files) type BuildFilesId = Key BuildFiles data KeyVal KeyVal :: !KeyType -> !(Maybe Text) -> !(Maybe Text) -> KeyVal [keyValKey_value] :: KeyVal -> !KeyType [keyValVal_value] :: KeyVal -> !(Maybe Text) [keyValExt_value] :: KeyVal -> !(Maybe Text) type KeyValId = Key KeyVal data ProjectKeyValues ProjectKeyValues :: !(Key Projects) -> !(Key KeyVal) -> ProjectKeyValues [projectKeyValuesPackage_id] :: ProjectKeyValues -> !(Key Projects) [projectKeyValuesKey_val_id] :: ProjectKeyValues -> !(Key KeyVal) type ProjectKeyValuesId = Key ProjectKeyValues data SourceKeyValues SourceKeyValues :: !(Key Sources) -> !(Key KeyVal) -> SourceKeyValues [sourceKeyValuesSource_id] :: SourceKeyValues -> !(Key Sources) [sourceKeyValuesKey_val_id] :: SourceKeyValues -> !(Key KeyVal) type SourceKeyValuesId = Key SourceKeyValues data BuildKeyValues BuildKeyValues :: !(Key Builds) -> !(Key KeyVal) -> BuildKeyValues [buildKeyValuesBuild_id] :: BuildKeyValues -> !(Key Builds) [buildKeyValuesKey_val_id] :: BuildKeyValues -> !(Key KeyVal) type BuildKeyValuesId = Key BuildKeyValues data FileKeyValues FileKeyValues :: !(Key Files) -> !(Key KeyVal) -> FileKeyValues [fileKeyValuesFile_id] :: FileKeyValues -> !(Key Files) [fileKeyValuesKey_val_id] :: FileKeyValues -> !(Key KeyVal) type FileKeyValuesId = Key FileKeyValues data Groups Groups :: !Text -> !Text -> !(Maybe (Key Builds)) -> Groups [groupsName] :: Groups -> !Text [groupsGroup_type] :: Groups -> !Text [groupsBuild_id] :: Groups -> !(Maybe (Key Builds)) type GroupsId = Key Groups data GroupFiles GroupFiles :: !(Key Groups) -> !(Key Files) -> GroupFiles [groupFilesGroup_id] :: GroupFiles -> !(Key Groups) [groupFilesFile_id] :: GroupFiles -> !(Key Files) type GroupFilesId = Key GroupFiles data GroupGroups GroupGroups :: !(Key Groups) -> !(Key Groups) -> GroupGroups [groupGroupsParent_group_id] :: GroupGroups -> !(Key Groups) [groupGroupsChild_group_id] :: GroupGroups -> !(Key Groups) type GroupGroupsId = Key GroupGroups data GroupKeyValues GroupKeyValues :: !(Key Groups) -> !(Key KeyVal) -> GroupKeyValues [groupKeyValuesGroup_id] :: GroupKeyValues -> !(Key Groups) [groupKeyValuesKey_val_id] :: GroupKeyValues -> !(Key KeyVal) type GroupKeyValuesId = Key GroupKeyValues data Requirements Requirements :: !ReqLanguage -> !ReqContext -> !ReqStrength -> !Text -> Requirements [requirementsReq_language] :: Requirements -> !ReqLanguage [requirementsReq_context] :: Requirements -> !ReqContext [requirementsReq_strength] :: Requirements -> !ReqStrength [requirementsReq_expr] :: Requirements -> !Text type RequirementsId = Key Requirements data GroupRequirements GroupRequirements :: !(Key Groups) -> !(Key Requirements) -> GroupRequirements [groupRequirementsGroup_id] :: GroupRequirements -> !(Key Groups) [groupRequirementsReq_id] :: GroupRequirements -> !(Key Requirements) type GroupRequirementsId = Key GroupRequirements data Scripts Scripts :: !Text -> !Text -> !(Maybe Text) -> !(Maybe Int) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Int) -> Scripts [scriptsTy] :: Scripts -> !Text [scriptsBody] :: Scripts -> !Text [scriptsTrigger_prog] :: Scripts -> !(Maybe Text) [scriptsTrigger_index] :: Scripts -> !(Maybe Int) [scriptsTrigger_name] :: Scripts -> !(Maybe Text) [scriptsTrigger_version] :: Scripts -> !(Maybe Text) [scriptsTrigger_flags] :: Scripts -> !(Maybe Int) type ScriptsId = Key Scripts data GroupScripts GroupScripts :: !(Key Groups) -> !(Key Scripts) -> GroupScripts [groupScriptsGroup_id] :: GroupScripts -> !(Key Groups) [groupScriptsScript_id] :: GroupScripts -> !(Key Scripts) type GroupScriptsId = Key GroupScripts migrateAll :: Migration -- | Run an SQL query, returning the first Entity as a Maybe. Use -- this when you want a single row out of the database. firstEntityResult :: Monad m => m [Entity a] -> m (Maybe a) -- | Run an SQL query, returning the first key as a Maybe. Use this when -- you want a single index out of the database. firstKeyResult :: Monad m => m [Value a] -> m (Maybe a) -- | Like maybe, but for keys. If the key is nothing, return the -- default value. Otherwise, run the function on the key and return that -- value. maybeKey :: MonadIO m => m b -> (t -> m b) -> m (Maybe t) -> m b -- | Return a query fragment to match a Maybe value. If the value is -- Nothing, this is equivalent to (column is NULL) If the value is Just -- x, this is (value == column) Unlike the other Esqueleto operators, the -- right-hand value is not boxed in a Value, since we need to examine it -- in order to generate the correct SQL. -- -- e.g., with a table like: > create table example ( > id integer -- primary key, > value text ); you could use an esqueleto query like: -- > select $ from $ example -> do > where_ $ maybeVal ==? -- (example ?. ExampleValue) (==?) :: (PersistField typ, Esqueleto query expr backend) => expr (Value (Maybe typ)) -> Maybe typ -> expr (Value Bool) infix 4 ==? -- | Attempt to find a record in some table of the database. If it exists, -- return its key. If it doesn't exist, perform some other action and -- return the key given by that action. orDo :: MonadIO m => m (Maybe b) -> m b -> m b -- | Attempt to find a record in some table of the database. If it exists, -- return its key. If it doesn't exist, insert the given object and -- return its key. orInsert :: (MonadIO m, PersistEntity a, ToBackendKey SqlBackend a) => SqlPersistT m (Maybe (Key a)) -> a -> SqlPersistT m (Key a) instance GHC.Show.Show BDCS.DB.GroupScripts instance GHC.Classes.Eq BDCS.DB.GroupScripts instance GHC.Show.Show BDCS.DB.Scripts instance GHC.Classes.Eq BDCS.DB.Scripts instance GHC.Show.Show BDCS.DB.GroupRequirements instance GHC.Classes.Eq BDCS.DB.GroupRequirements instance GHC.Show.Show BDCS.DB.Requirements instance GHC.Classes.Eq BDCS.DB.Requirements instance GHC.Show.Show BDCS.DB.GroupKeyValues instance GHC.Classes.Eq BDCS.DB.GroupKeyValues instance GHC.Show.Show BDCS.DB.GroupGroups instance GHC.Classes.Eq BDCS.DB.GroupGroups instance GHC.Show.Show BDCS.DB.GroupFiles instance GHC.Classes.Eq BDCS.DB.GroupFiles instance GHC.Show.Show BDCS.DB.Groups instance GHC.Classes.Eq BDCS.DB.Groups instance GHC.Show.Show BDCS.DB.FileKeyValues instance GHC.Classes.Eq BDCS.DB.FileKeyValues instance GHC.Show.Show BDCS.DB.BuildKeyValues instance GHC.Classes.Eq BDCS.DB.BuildKeyValues instance GHC.Show.Show BDCS.DB.SourceKeyValues instance GHC.Classes.Eq BDCS.DB.SourceKeyValues instance GHC.Show.Show BDCS.DB.ProjectKeyValues instance GHC.Classes.Eq BDCS.DB.ProjectKeyValues instance GHC.Show.Show BDCS.DB.KeyVal instance GHC.Classes.Eq BDCS.DB.KeyVal instance GHC.Show.Show BDCS.DB.BuildFiles instance GHC.Classes.Eq BDCS.DB.BuildFiles instance GHC.Show.Show BDCS.DB.SourceFiles instance GHC.Classes.Eq BDCS.DB.SourceFiles instance GHC.Show.Show BDCS.DB.Files instance GHC.Classes.Eq BDCS.DB.Files instance GHC.Show.Show BDCS.DB.BuildSignatures instance GHC.Classes.Eq BDCS.DB.BuildSignatures instance GHC.Show.Show BDCS.DB.Builds instance GHC.Classes.Eq BDCS.DB.Builds instance GHC.Show.Show BDCS.DB.Sources instance GHC.Classes.Eq BDCS.DB.Sources instance GHC.Show.Show BDCS.DB.Projects instance GHC.Classes.Eq BDCS.DB.Projects instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Projects) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Sources) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Builds) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildSignatures) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Files) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceFiles) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildFiles) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.KeyVal) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.ProjectKeyValues) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.SourceKeyValues) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.BuildKeyValues) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.FileKeyValues) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Groups) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupFiles) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupGroups) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupKeyValues) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Requirements) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupRequirements) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.Scripts) instance Data.Aeson.Types.FromJSON.FromJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Data.Aeson.Types.ToJSON.ToJSON (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Database.Persist.Sql.Class.PersistFieldSql (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Database.Persist.Class.PersistField.PersistField (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Web.Internal.HttpApiData.FromHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Web.Internal.HttpApiData.ToHttpApiData (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Web.PathPieces.PathPiece (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance GHC.Classes.Ord (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance GHC.Classes.Eq (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance GHC.Read.Read (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance GHC.Show.Show (Database.Persist.Class.PersistEntity.Key BDCS.DB.GroupScripts) instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Projects instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Projects instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Sources instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Sources instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Builds instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Builds instance Database.Persist.Class.PersistField.PersistField BDCS.DB.BuildSignatures instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.BuildSignatures instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Files instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Files instance Database.Persist.Class.PersistField.PersistField BDCS.DB.SourceFiles instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.SourceFiles instance Database.Persist.Class.PersistField.PersistField BDCS.DB.BuildFiles instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.BuildFiles instance Database.Persist.Class.PersistField.PersistField BDCS.DB.KeyVal instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.KeyVal instance Database.Persist.Class.PersistField.PersistField BDCS.DB.ProjectKeyValues instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.ProjectKeyValues instance Database.Persist.Class.PersistField.PersistField BDCS.DB.SourceKeyValues instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.SourceKeyValues instance Database.Persist.Class.PersistField.PersistField BDCS.DB.BuildKeyValues instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.BuildKeyValues instance Database.Persist.Class.PersistField.PersistField BDCS.DB.FileKeyValues instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.FileKeyValues instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Groups instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Groups instance Database.Persist.Class.PersistField.PersistField BDCS.DB.GroupFiles instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupFiles instance Database.Persist.Class.PersistField.PersistField BDCS.DB.GroupGroups instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupGroups instance Database.Persist.Class.PersistField.PersistField BDCS.DB.GroupKeyValues instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupKeyValues instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Requirements instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Requirements instance Database.Persist.Class.PersistField.PersistField BDCS.DB.GroupRequirements instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupRequirements instance Database.Persist.Class.PersistField.PersistField BDCS.DB.Scripts instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Scripts instance Database.Persist.Class.PersistField.PersistField BDCS.DB.GroupScripts instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupScripts instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Projects instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Projects instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Sources instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Sources instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Builds instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Builds instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.BuildSignatures instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.BuildSignatures instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Files instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Files instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.SourceFiles instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.SourceFiles instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.BuildFiles instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.BuildFiles instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.KeyVal instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.KeyVal instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.ProjectKeyValues instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.ProjectKeyValues instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.SourceKeyValues instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.SourceKeyValues instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.BuildKeyValues instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.BuildKeyValues instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.FileKeyValues instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.FileKeyValues instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Groups instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Groups instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.GroupFiles instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.GroupFiles instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.GroupGroups instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.GroupGroups instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.GroupKeyValues instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.GroupKeyValues instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Requirements instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Requirements instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.GroupRequirements instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.GroupRequirements instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.Scripts instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.Scripts instance Database.Persist.Class.PersistEntity.PersistEntity BDCS.DB.GroupScripts instance Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend BDCS.DB.GroupScripts instance Data.Aeson.Types.ToJSON.ToJSON BDCS.DB.Projects instance Data.Aeson.Types.FromJSON.FromJSON BDCS.DB.Projects instance Data.Aeson.Types.ToJSON.ToJSON BDCS.DB.KeyVal module BDCS.Export.FSTree -- | A single node within a file system tree. The pair is a single path -- component (e.g., "c" for the node at "ab/c"), and maybe a Files -- object. Automatically created parent directories will use Nothing as -- the snd element. type FSEntry = (FilePath, Maybe Files) -- | A tree of file system entries. type FSTree = Tree FSEntry filesToTree :: MonadError String m => Sink Files m FSTree fstreeSource :: Monad m => FSTree -> Source m Files module BDCS.Files insertFiles :: MonadIO m => [Files] -> SqlPersistT m [Key Files] associateFilesWithBuild :: MonadIO m => [Key Files] -> Key Builds -> SqlPersistT m [Key BuildFiles] associateFilesWithSource :: MonadIO m => [Key Files] -> Key Sources -> SqlPersistT m [Key SourceFiles] associateFilesWithPackage :: MonadIO m => [Key Files] -> Key KeyVal -> SqlPersistT m [Key FileKeyValues] files :: MonadIO m => SqlPersistT m [Files] filesC :: (MonadResource m, MonadIO m) => Source (SqlPersistT m) Files getFile :: MonadIO m => Key Files -> SqlPersistT m (Maybe Files) getKeyValuesForFile :: MonadIO m => Text -> SqlPersistT m [KeyVal] groupIdToFiles :: MonadResource m => Key Groups -> Source (SqlPersistT m) Files groupIdToFilesC :: MonadResource m => Conduit (Key Groups) (SqlPersistT m) Files pathToGroupId :: MonadIO m => Text -> SqlPersistT m [Key Groups] sourceIdToFiles :: MonadResource m => Key Sources -> Source (SqlPersistT m) Files sourceIdToFilesC :: MonadResource m => Conduit (Key Sources) (SqlPersistT m) Files module BDCS.KeyValue findKeyValue :: MonadIO m => KeyType -> Maybe Text -> Maybe Text -> SqlPersistT m (Maybe (Key KeyVal)) formatKeyValue :: KeyVal -> Text getKeyValue :: MonadIO m => Key KeyVal -> SqlPersistT m (Maybe KeyVal) insertKeyValue :: MonadIO m => KeyType -> Maybe Text -> Maybe Text -> SqlPersistT m (Key KeyVal) keyValueListToJSON :: KeyValue t => [KeyVal] -> [t] module BDCS.GroupKeyValue getGroupsByKeyVal :: MonadIO m => Text -> KeyType -> Maybe Text -> SqlPersistT m [(Key Groups, KeyVal)] getKeyValuesForGroup :: MonadIO m => Key Groups -> Maybe KeyType -> SqlPersistT m [KeyVal] getValueForGroup :: MonadIO m => Key Groups -> KeyType -> SqlPersistT m (Maybe Text) insertGroupKeyValue :: MonadIO m => KeyType -> Text -> Maybe Text -> Key Groups -> SqlPersistT m (Key GroupKeyValues) module BDCS.Groups findGroupRequirements :: MonadIO m => Key Groups -> Key Requirements -> SqlPersistT m (Maybe (Key GroupRequirements)) findRequires :: MonadIO m => ReqLanguage -> ReqContext -> ReqStrength -> Text -> SqlPersistT m (Maybe (Key Requirements)) getRequires :: MonadIO m => Key Requirements -> SqlPersistT m (Maybe Requirements) getGroupId :: (MonadError String m, MonadIO m) => Text -> SqlPersistT m (Key Groups) getGroupIdC :: (MonadError String m, MonadIO m) => Conduit Text (SqlPersistT m) (Key Groups) getGroup :: MonadIO m => Key Groups -> SqlPersistT m (Maybe Groups) getGroupRequirements :: MonadIO m => Key GroupRequirements -> SqlPersistT m (Maybe GroupRequirements) getRequirementsForGroup :: MonadIO m => Key Groups -> ReqContext -> SqlPersistT m [Requirements] groups :: MonadIO m => SqlPersistT m [(Key Groups, Text)] groupsC :: (MonadResource m, MonadIO m) => Source (SqlPersistT m) (Key Groups, Text) groupIdToNevra :: MonadIO m => Key Groups -> SqlPersistT m (Maybe Text) nameToGroupIds :: MonadIO m => Text -> SqlPersistT m [Key Groups] nevraToGroupId :: MonadIO m => (Text, Maybe Text, Text, Text, Text) -> SqlPersistT m (Maybe (Key Groups)) -- | Collect all the dependencies for a package, but do not solve them. module BDCS.Depclose -- | Type of the depclose results - see Formula type DepFormula = Formula (Key Groups) -- | Given a path to a mddb, a list of architectures, and a list of Group -- Ids, return a formula describing the dependencies The general idea is, -- given a list of packages to depclose, convert each to a group id, and -- for each id: - gather the conflict and obsolete information, find -- matching group ids, express as Not conflict/obsolete-id - gather the -- requirement expressions, for each: * find a list of matching group ids -- * if empty, the dependency is not satisfiable * recurse on each group -- id to gather the requirements of the requirement * return the -- expression as an Or of the matching group ids - return the whole thing -- as an And [self, conflict/obsolete information, requirement -- information] -- -- Everything is run in a state with two components: a Map from groupid -- to expression to act as a cache, and a Set containing the group ids -- that are part of the current branch of the dependency tree in order to -- detect and ignore loops. depcloseGroupIds :: (MonadError String m, MonadIO m) => [Text] -> [Key Groups] -> SqlPersistT m DepFormula -- | Given a path to a mddb, a list of architectures, and a list of RPMS, -- return a formula describing the dependencies See depcloseGroupIds for -- further details depcloseNEVRAs :: (MonadError String m, MonadIO m) => [Text] -> [Text] -> SqlPersistT m DepFormula -- | Given a path to a mddb, a list of architectures, and a list of package -- names, return a formula describing the dependencies See -- depcloseGroupIds for further details depcloseNames :: (MonadError String m, MonadIO m) => [Text] -> [Text] -> SqlPersistT m DepFormula instance GHC.Classes.Ord BDCS.Depclose.ParentItem instance GHC.Classes.Eq BDCS.Depclose.ParentItem module BDCS.Label.Docs matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.Fonts matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.InfoPage matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.Library matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.License matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.ManPage matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.Service matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.Translation matches :: Files -> Bool mkLabel :: Files -> Maybe Label module BDCS.Label.Utils addLabelKey :: MonadIO m => Key Files -> Label -> Maybe Text -> Maybe Text -> SqlPersistT m (Key FileKeyValues) module BDCS.Label.FileLabels apply :: MonadIO m => [(Files, Key Files)] -> SqlPersistT m [Key FileKeyValues] module BDCS.Packages filesInPackage :: MonadIO m => Text -> SqlPersistT m [Text] findPackage :: MonadIO m => Text -> SqlPersistT m (Maybe (Key KeyVal)) insertPackageName :: MonadIO m => Text -> SqlPersistT m (Key KeyVal) module BDCS.Projects findProject :: MonadIO m => Text -> SqlPersistT m (Maybe (Key Projects)) getProject :: MonadIO m => Key Projects -> SqlPersistT m (Maybe Projects) insertProject :: MonadIO m => Projects -> SqlPersistT m (Key Projects) projects :: MonadIO m => SqlPersistT m [Projects] -- | Builds record support for RPM packages. module BDCS.RPM.Builds -- | Return a Builds record for the RPM package. -- -- Can throw MissingRPMTag mkBuild :: [Tag] -> Key Sources -> Builds -- | Files record support for RPM packages. module BDCS.RPM.Files -- | Return a Files record for the RPM package. mkFiles :: MonadIO m => [Tag] -> [(Text, Maybe ObjectDigest)] -> SqlPersistT m [Files] -- | Projects record support for RPM packages. module BDCS.RPM.Projects -- | Return a Projects record for the RPM package. mkProject :: [Tag] -> Projects -- | Requirements record support for RPM packages. module BDCS.RPM.Requirements -- | Return a GroupRequirements record for the RPM package. mkGroupRequirement :: Key Groups -> Key Requirements -> GroupRequirements -- | Return a Requirements record for the RPM package. mkRequirement :: ReqContext -> ReqStrength -> Text -> Requirements -- | Scripts record support for RPM packages. module BDCS.RPM.Scripts -- | Return a list of Scripts records mkScripts :: [Tag] -> [Scripts] -- | Return a list of trigger scripts mkTriggerScripts :: [Tag] -> [Scripts] -- | BuildSignatures record support for RPM packages. module BDCS.RPM.Signatures -- | Return a RSA BuildSignature -- -- Can throw MissingRPMTag mkRSASignature :: [Tag] -> Key Builds -> BuildSignatures -- | Return a SHA1 BuildSignature -- -- Can throw MissingRPMTag mkSHASignature :: [Tag] -> Key Builds -> BuildSignatures -- | Sources record support for RPM packages. module BDCS.RPM.Sources -- | Return a Sources record. -- -- Can throw MissingRPMTag mkSource :: [Tag] -> Key Projects -> Sources module BDCS.Requirements insertRequirement :: MonadIO m => Requirements -> SqlPersistT m (Key Requirements) insertGroupRequirement :: MonadIO m => GroupRequirements -> SqlPersistT m (Key GroupRequirements) -- | Groups record support for RPM packages. module BDCS.RPM.Groups -- | Given a list of Files and an RPM package, create a new -- Groups record and add it to the database. Note the difference -- between this function and all the others that operate on RPMs - those -- return a record, while this one creates a record, inserts it, and -- returns its key. Groups are more complicated. createGroup :: MonadIO m => [Key Files] -> [Tag] -> SqlPersistT m (Key Groups) -- | Manage Scripts records in the database. This record keeps track -- of a single script that is associated with a Groups record. A -- script is some arbitrary program that can be run at various points -- when installing, upgrading, or removing a piece of software. Not all -- packaging systems support this concept, and the BDCS only somewhat -- supports them at the moment. module BDCS.Scripts -- | Find a single script in the database, returning the key for that -- script if it exists. It is possible for multiple very similar scripts -- to exist in the same database (or even, scripts with identical bodies -- but that differ in other ways) so additional information must be -- provided. findScript :: MonadIO m => Text -> Text -> Maybe Text -> Maybe Text -> Maybe Int -> Maybe Int -> SqlPersistT m (Maybe (Key Scripts)) -- | Given a key to a Scripts record in the database, return that -- record. This function is suitable for using on the result of -- findScript. getScript :: MonadIO m => Key Scripts -> SqlPersistT m (Maybe Scripts) -- | Conditionally add a new Scripts record to the database and -- associate a Groups record with it. If the association already -- exists, it is reused in creating the association. The database key of -- the association is returned. A single group can potentially have zero -- or many Scripts associated with it. insertScript :: MonadIO m => Key Groups -> Scripts -> SqlPersistT m (Key GroupScripts) -- | Manage BuildSignatures records in the database. These are used -- for keeping track of the signatures given to a build at build time. -- Multiple signatures can be associated with a single Builds -- record. module BDCS.Signatures -- | Loop over a list of provided BuildSignatures and add them to -- the database, returning their keys in the same order as the original -- list. insertBuildSignatures :: MonadIO m => [BuildSignatures] -> SqlPersistT m [Key BuildSignatures] -- | Manage Sources records in the database. This record keeps track -- of a single software release of a single project. A single project can -- make many releases, each of which will require a separate -- Sources record. module BDCS.Sources -- | Given a version number and a key to a Projects record, find a -- matching software source in the database. If it exists, the database -- key is returned. findSource :: MonadIO m => Text -> Key Projects -> SqlPersistT m (Maybe (Key Sources)) -- | Given a key to a Sources record in the database, return that -- record. This function is suitable for using on the result of -- findSource. getSource :: MonadIO m => Key Sources -> SqlPersistT m (Maybe Sources) -- | Conditionally add a new Sources record to the database. If the -- record already exists, return its key. Otherwise, insert the record -- and return the new key. insertSource :: MonadIO m => Sources -> SqlPersistT m (Key Sources) -- | Conditionally add a new KeyVal record to the database and -- associate a Sources record with it. If the KeyVal record -- already exists, it is reused in creating the association. They -- database key of the association is returned. -- -- A single source can potentially have zero or more KeyVal paris -- associated with it. On the other hand, a single KeyVal pair can -- apply to many sources. insertSourceKeyValue :: MonadIO m => KeyType -> Text -> Maybe Text -> Key Sources -> SqlPersistT m (Key SourceKeyValues) -- | Conduit-based interface between BDCS and its underlying content store. module BDCS.CS -- | An object in the content store is either a regular file or something -- else (directory, symlink, etc.) described by the Files -- metadata. data Object -- | Some non-file object that should be accompanied by a Files -- record so its metadata can be tracked SpecialObject :: Object -- | A file object with its contents FileObject :: ByteString -> Object -- | Read Files records from a Conduit, find the object in -- the content store, and return the matching Object if found. An -- error is thrown if the object does not exist, or if there is any other -- error interacting with the content store. In addition, the -- Files object is also returned as part of the result tuple so -- its metadata can be used by downstream consumers. filesToObjectsC :: (MonadError String m, MonadIO m) => ContentStore -> Conduit Files m (Files, Object) -- | Read tuples from a Conduit and convert each into a Entry -- suitable for streaming into an archive. Metadata such as permissions -- and ownerships will be set correctly. Symlinks and other special -- non-file things will be handled correctly. This function is suitable -- as a downstream consumer of filesToObjectsC. objectToTarEntry :: (MonadError String m, MonadIO m) => Conduit (Files, Object) m Entry -- | Functions for exporting objects from the BDCS into a directory. module BDCS.Export.Directory -- | A Consumer that writes objects into a provided directory. -- Symlinks and other file-like objects will be handled properly. Only -- some metadata is currently handled. Various errors can be thrown -- depending on problems encountered when interacting with the -- filesystem. -- -- It is expected that the caller will decide whether the destination -- directory should be empty or not. This function does nothing to -- enforce that. directorySink :: (MonadError String m, MonadIO m) => FilePath -> Consumer (Files, Object) m () -- | Functions for exporting objects from the BDCS into an ostree repo. module BDCS.Export.Ostree -- | A Consumer that writes objects into a provided ostree repo. A -- very large amount of work required to make the destination a valid -- ostree repo is also done by this function - setting up symlinks and -- directories, pruning unneeded directories, installing an initrd, -- building an RPM database, and so forth. ostreeSink :: (MonadError String m, MonadIO m, MonadResource m) => FilePath -> Consumer (Files, Object) m () -- | Functions for exporting objects from the BDCS into a qcow2 image. module BDCS.Export.Qcow2 -- | A Consumer that writes objects into a temporary directory, and -- then converts that directory into a qcow2 image with virt-make-fs. qcow2Sink :: (MonadResource m, MonadIO m, MonadError String m) => FilePath -> Consumer (Files, Object) m () -- | Manage Builds records in the database. This record keeps track -- of a single build of a single software source (tarball, etc.). A -- single source can be built multiple times, each of which will require -- a separate Builds record. module BDCS.Builds -- | Create a link in the database between an existing Builds record -- and an existing KeyVal record. This is different from -- insertBuildKeyValue, which also creates the KeyVal -- record. A single build can potentially have zero or many KeyVal -- pairs associated with it. On the other hand, a single KeyVal -- pair can apply to many builds. -- -- The database key of the new link is returned. associateBuildWithPackage :: MonadIO m => Key Builds -> Key KeyVal -> SqlPersistT m (Key BuildKeyValues) -- | Find a single build of a software package in the database, returning -- the database key for that build if it exists. All arguments are -- required and must be matched for this function to return anything. -- Note that conceptually, a build is of some software source which is -- why a key to a Sources record is required. findBuild :: MonadIO m => Int -> Text -> Text -> Key Sources -> SqlPersistT m (Maybe (Key Builds)) -- | Given a key to a Builds record in the database, return that -- record. This function is suitable for using on the result of -- findBuild. getBuild :: MonadIO m => Key Builds -> SqlPersistT m (Maybe Builds) -- | Conditionally add a new Builds record to the database. If the -- record already exists, return its key. Otherwise, insert the record -- and return the new key. insertBuild :: MonadIO m => Builds -> SqlPersistT m (Key Builds) -- | Conditionally add a new KeyVal record to the database and -- associate a Builds record with it. If the KeyVal record -- already exists, it is reused in creating the association. The database -- key of the association is returned. insertBuildKeyValue :: MonadIO m => KeyType -> Text -> Maybe Text -> Key Builds -> SqlPersistT m (Key BuildKeyValues) -- | Functions for importing individual RPM packages into the database module BDCS.Import.RPM -- | A conduit consumer that takes in RPM data and stores its payload into -- the content store and its header information into the mddb. The return -- value is whether or not an import occurred. This is not the same as -- success vs. failure. On failures, a CsError will be thrown. If -- the package already exists in the database, this function will return -- False. consume :: (MonadBaseControl IO m, MonadIO m, MonadThrow m, MonadError CsError m) => ContentStore -> FilePath -> Consumer RPM m Bool -- | Load the headers from a parsed RPM into the MDDB. The return value is -- whether or not an import occurred. This is not the same as success vs. -- failure. If the package already exists in the database, this function -- will return False. loadIntoMDDB :: (MonadBaseControl IO m, MonadResource m) => RPM -> [(Text, Maybe ObjectDigest)] -> SqlPersistT m Bool -- | Fetch an RPM from a given URI and load it into the MDDB. This -- function must be run within the ReaderT monad, which should be -- given an ImportState record. This is how importing knows where -- to store the results. Errors will be printed to the screen. loadFromURI :: URI -> ReaderT ImportState IO () -- | Query the MDDB to see if the package has already been imported. If so, -- quit now to prevent it from being added to the content store a second -- time. Note that loadIntoMDDB also performs this check, but both -- of these functions are public and therefore both need to prevent -- duplicate imports. rpmExistsInMDDB :: MonadResource m => RPM -> SqlPersistT m Bool -- | Functions for importing RPM packages from a repo into the database module BDCS.Import.Repodata -- | An exception type that is thrown when there is a problem accessing a -- package repository or processing its metadata. data RepoException -- | Given the URI to a primary.xml file in some package repository, -- load all its RPMs into the MDDB. This function must be run within the -- ReaderT monad, which should be given an ImportState -- record. This is how importing knows where to store the results. If the -- repo metadata data is invalid, a RepoException will be thrown. -- Other errors will be printed to the screen. loadFromURI :: URI -> ReaderT ImportState IO () -- | Given the URI to the base of some package repository, fetch its -- repo metadata and load all its RPMs into the MDDB. This function must -- be run within the ReaderT monad, which should be given an -- ImportState record. This is how importing knows where to store -- the results. If the repo metadata data is invalid, a -- RepoException will be thrown. Other errors will be printed to -- the screen. loadRepoFromURI :: URI -> ReaderT ImportState IO () instance GHC.Show.Show BDCS.Import.Repodata.RepoException instance GHC.Exception.Exception BDCS.Import.Repodata.RepoException module BDCS.Build.NPM rebuildNPM :: (MonadBaseControl IO m, MonadIO m, MonadError String m, MonadResource m) => Key Sources -> SqlPersistT m [Key Builds] -- | Functions for importing NPM packages into the database module BDCS.Import.NPM -- | Fetch an NPM from a given URI and load it into the MDDB. This -- function must be run within the ReaderT monad, which should be -- given an ImportState record. This is how importing knows where -- to store the results. Errors will be printed to the screen. loadFromURI :: URI -> ReaderT ImportState IO () instance GHC.Show.Show BDCS.Import.NPM.PackageJSON instance GHC.Show.Show BDCS.Import.NPM.PackageDist instance Data.Aeson.Types.FromJSON.FromJSON BDCS.Import.NPM.PackageDist instance Data.Aeson.Types.FromJSON.FromJSON BDCS.Import.NPM.PackageJSON