-- 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.6.1


-- | 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 <a>DBException</a> type a <a>BadName</a>?
isBadNameException :: DBException -> Bool

-- | Is a given <a>DBException</a> type the general <a>DBException</a>?
isDBExceptionException :: DBException -> Bool

-- | Is a given <a>DBException</a> type a <a>MissingRPMTag</a>?
isMissingRPMTagException :: DBException -> Bool

-- | If a <a>Maybe</a> value is Nothing, throw the given exception.
--   Otherwise, return the value inside.
throwIfNothing :: Exception e => Maybe a -> e -> a

-- | If a <a>Maybe</a> 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


-- | Functions for exporting objects from the BDCS into a tar file.
module BDCS.Export.Tar

-- | A <a>Consumer</a> that writes objects (in the form of <a>Entry</a>
--   records) into a tar archive with the provided name. To convert objects
--   into an Entry, see <a>objectToTarEntry</a>.
tarSink :: MonadLoggerIO m => FilePath -> Consumer Entry m ()


-- | 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 <a>TmpFileEntry</a> records
--   or a <a>ParseError</a>.
parseConfString :: String -> Either ParseError [TmpFileEntry]

-- | Read the tmpfiles.d snippet and apply it to the output directory
setupFilesystem :: MonadLoggerIO m => FilePath -> FilePath -> m ()
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


-- | Types related to exporting.
module BDCS.Export.Types
data ExportType
ExportDirectory :: ExportType
ExportOstree :: ExportType
ExportQcow2 :: ExportType
ExportTar :: ExportType
exportTypeText :: ExportType -> Text
exportTypeFromText :: Text -> Maybe ExportType
supportedExportTypes :: [ExportType]
instance GHC.Show.Show BDCS.Export.Types.ExportType
instance GHC.Classes.Eq BDCS.Export.Types.ExportType


-- | 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 manipulating <a>URI</a>s during import.
module BDCS.Import.URI

-- | Append a path to a <a>URI</a>.
appendURI :: URI -> String -> Maybe URI

-- | Go up one directory in the <a>URI</a>. For instance: &gt; ghci&gt; let
--   uri = parseURI "file://<i>path</i>to<i>repo</i>repodata/primary.xml"
--   &gt; ghci&gt; baseURI (fromJust uri) &gt; Just
--   file://<i>path</i>to<i>repo</i>
baseURI :: URI -> Maybe URI

-- | Does a <a>URI</a> 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 <a>URI</a> 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:// <a>URI</a> to a <a>FilePath</a>. This does not check
--   that the URI is a file:// URI, assumes posix-style paths
uriToPath :: URI -> FilePath

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 <a>KeyVal</a>.
module BDCS.KeyType

-- | The <a>KeyVal</a> 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 <a>KeyType</a> into <a>Text</a>
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

module BDCS.NPM.SemVer

-- | A Semantic version, as defined by <a>http://semver.org/</a>
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. &gt;= 1.0.0. To satisfy the
--   condition, a <a>SemVer</a> must match at least one of the
--   <a>Ordering</a>s.
type SemVerRangePart = [(Ordering, SemVer)]

-- | A range of semantic versions. To satisfy the range, a <a>SemVer</a>
--   must satisfy every element of the list.
type SemVerRange = [SemVerRangePart]

-- | A set of semantic version ranges. To satisfy the set, a <a>SemVer</a>
--   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


-- | Utility functions for <a>BDCS.RPM</a>
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)


-- | Data types for working with <tt>Requirements</tt>.
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 <a>Should</a>, but looks at packages that are already installed.
ShouldIfInstalled :: ReqStrength

-- | Like <a>May</a>, 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


-- | 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 <a>runSqlite</a>, 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) -> !(Maybe Text) -> Projects
[projectsName] :: Projects -> !Text
[projectsSummary] :: Projects -> !Text
[projectsDescription] :: Projects -> !Text
[projectsHomepage] :: Projects -> !(Maybe Text)
[projectsUpstream_vcs] :: Projects -> !(Maybe 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
migrateAll :: Migration

-- | Run an SQL query, returning the first <a>Entity</a> 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)

-- | Run an SQL query, returning the first value from the result list. Use
--   this when you want a single index out of the database and it is
--   guaranteed not to be empty.
firstListResult :: Monad m => m [Value a] -> m a

-- | Like <a>maybe</a>, 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: &gt; create table example ( &gt; id integer
--   primary key, &gt; value text ); you could use an esqueleto query like:
--   &gt; select $ from $ example -&gt; do &gt; 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.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 Database.Persist.Class.PersistField.PersistField BDCS.DB.GroupRequirements
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupRequirements
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.PersistField.PersistField BDCS.DB.Requirements
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Requirements
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.PersistField.PersistField BDCS.DB.GroupKeyValues
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupKeyValues
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.PersistField.PersistField BDCS.DB.GroupGroups
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupGroups
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.PersistField.PersistField BDCS.DB.GroupFiles
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.GroupFiles
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.PersistField.PersistField BDCS.DB.Groups
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Groups
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.PersistField.PersistField BDCS.DB.FileKeyValues
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.FileKeyValues
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.PersistField.PersistField BDCS.DB.BuildKeyValues
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.BuildKeyValues
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.PersistField.PersistField BDCS.DB.SourceKeyValues
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.SourceKeyValues
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.PersistField.PersistField BDCS.DB.ProjectKeyValues
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.ProjectKeyValues
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.PersistField.PersistField BDCS.DB.KeyVal
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.KeyVal
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 Data.Aeson.Types.ToJSON.ToJSON BDCS.DB.KeyVal
instance Database.Persist.Class.PersistField.PersistField BDCS.DB.BuildFiles
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.BuildFiles
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.PersistField.PersistField BDCS.DB.SourceFiles
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.SourceFiles
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.PersistField.PersistField BDCS.DB.Files
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Files
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.PersistField.PersistField BDCS.DB.BuildSignatures
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.BuildSignatures
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.PersistField.PersistField BDCS.DB.Builds
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Builds
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.PersistField.PersistField BDCS.DB.Sources
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Sources
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.PersistField.PersistField BDCS.DB.Projects
instance Database.Persist.Sql.Class.PersistFieldSql BDCS.DB.Projects
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 Data.Aeson.Types.ToJSON.ToJSON BDCS.DB.Projects
instance Data.Aeson.Types.FromJSON.FromJSON BDCS.DB.Projects


-- | <a>Sources</a> record support for RPM packages.
module BDCS.RPM.Sources

-- | Return a <a>Sources</a> record.
--   
--   Can throw <a>MissingRPMTag</a>
mkSource :: [Tag] -> Key Projects -> Sources


-- | <a>BuildSignatures</a> record support for RPM packages.
module BDCS.RPM.Signatures

-- | Return a RSA <tt>BuildSignature</tt>
--   
--   Can throw <a>MissingRPMTag</a>
mkRSASignature :: [Tag] -> Key Builds -> BuildSignatures

-- | Return a SHA1 <tt>BuildSignature</tt>
--   
--   Can throw <a>MissingRPMTag</a>
mkSHASignature :: [Tag] -> Key Builds -> BuildSignatures


-- | <a>Requirements</a> record support for RPM packages.
module BDCS.RPM.Requirements

-- | Return a <a>GroupRequirements</a> record for the RPM package.
mkGroupRequirement :: Key Groups -> Key Requirements -> GroupRequirements

-- | Return a <a>Requirements</a> record for the RPM package.
mkRequirement :: ReqContext -> ReqStrength -> Text -> Requirements


-- | <a>Projects</a> record support for RPM packages.
module BDCS.RPM.Projects

-- | Return a <a>Projects</a> record for the RPM package.
mkProject :: [Tag] -> Projects


-- | <a>Files</a> record support for RPM packages.
module BDCS.RPM.Files

-- | Return a <a>Files</a> record for the RPM package.
mkFiles :: MonadIO m => [Tag] -> [(Text, Maybe ObjectDigest)] -> SqlPersistT m [Files]


-- | <a>Builds</a> record support for RPM packages.
module BDCS.RPM.Builds

-- | Return a <a>Builds</a> record for the RPM package.
--   
--   Can throw MissingRPMTag
mkBuild :: [Tag] -> Key Sources -> Builds

module BDCS.Projects
findProject :: MonadIO m => Text -> SqlPersistT m (Maybe (Key Projects))
getProject :: MonadIO m => Key Projects -> SqlPersistT m (Maybe Projects)

-- | Get the projects matching a name Optionally limit the results with
--   limit and offset Also returns the total number of results, before
--   offset and limit are applied
getProjectsLike :: MonadIO m => Maybe Int64 -> Maybe Int64 -> Text -> SqlPersistT m ([Projects], Int64)

-- | Return the total number of projects
getProjectsTotal :: MonadIO m => SqlPersistT m Int64
insertProject :: MonadIO m => Projects -> SqlPersistT m (Key Projects)
projects :: MonadIO m => SqlPersistT m [Projects]

module BDCS.Label.Translation
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.Service
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.ManPage
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.License
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.Library
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.InfoPage
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.Fonts
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

module BDCS.Label.Docs
matches :: Files -> Bool
mkLabel :: Files -> Maybe Label

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.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.Label.Utils
addLabelKey :: MonadIO m => Key Files -> Label -> Maybe Text -> Maybe Text -> SqlPersistT m (Key FileKeyValues)

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)

-- | Get the groups matching a name Optionally limit the results with limit
--   and offset Also returns the total number of results, before offset and
--   limit are applied
getGroupsLike :: MonadIO m => Maybe Int64 -> Maybe Int64 -> Text -> SqlPersistT m ([(Key Groups, Text)], Int64)

-- | Return the total number of groups
getGroupsTotal :: MonadIO m => SqlPersistT m Int64
getGroupRequirements :: MonadIO m => Key GroupRequirements -> SqlPersistT m (Maybe GroupRequirements)
getRequirementsForGroup :: MonadIO m => Key Groups -> ReqContext -> ReqStrength -> 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))

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 "<i>a</i>b/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

-- | Add a <a>Files</a> object to a <a>FSTree</a>. Will optionally replace
--   existing paths, or throw an error. This function cannot replace a
--   directory with a regular file, or vice versa.
addFileToTree :: MonadError String m => Bool -> FSTree -> Files -> m FSTree
filesToTree :: MonadError String m => Sink Files m FSTree
fstreeSource :: Monad m => FSTree -> Source m Files


-- | Manage <a>Builds</a> 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 <a>Builds</a> record.
module BDCS.Builds

-- | Create a link in the database between an existing <a>Builds</a> record
--   and an existing <a>KeyVal</a> record. This is different from
--   <a>insertBuildKeyValue</a>, which also creates the <a>KeyVal</a>
--   record. A single build can potentially have zero or many <a>KeyVal</a>
--   pairs associated with it. On the other hand, a single <a>KeyVal</a>
--   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 <a>Sources</a> record is required.
findBuild :: MonadIO m => Int -> Text -> Text -> Key Sources -> SqlPersistT m (Maybe (Key Builds))

-- | Given the key to a <a>Sources</a> record, find all builds for that
--   source in the database, across all versions, arches, etc. The key for
--   each result is returned.
findBuilds :: MonadIO m => Key Sources -> SqlPersistT m [Key Builds]

-- | Given a key to a <a>Builds</a> record in the database, return that
--   record. This function is suitable for using on the result of
--   <a>findBuild</a>.
getBuild :: MonadIO m => Key Builds -> SqlPersistT m (Maybe Builds)

-- | Conditionally add a new <a>Builds</a> 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 <a>KeyVal</a> record to the database and
--   associate a <a>Builds</a> record with it. If the <a>KeyVal</a> 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)

module BDCS.Requirements
insertRequirement :: MonadIO m => Requirements -> SqlPersistT m (Key Requirements)
insertGroupRequirement :: MonadIO m => GroupRequirements -> SqlPersistT m (Key GroupRequirements)


-- | <a>Groups</a> record support for RPM packages.
module BDCS.RPM.Groups

-- | Given a list of <a>Files</a> and an RPM package, create a new
--   <a>Groups</a> 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 <a>BuildSignatures</a> 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 <a>Builds</a>
--   record.
module BDCS.Signatures

-- | Loop over a list of provided <a>BuildSignatures</a> 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 <a>Sources</a> 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
--   <a>Sources</a> record.
module BDCS.Sources

-- | Given a version number and a key to a <a>Projects</a> 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 <a>Projects</a> record, find all software sources for
--   that project in the database. The key for each result is returned.
findSources :: MonadIO m => Key Projects -> SqlPersistT m [Key Sources]

-- | Given a key to a <a>Sources</a> record in the database, return that
--   record. This function is suitable for using on the result of
--   <a>findSource</a>.
getSource :: MonadIO m => Key Sources -> SqlPersistT m (Maybe Sources)

-- | Conditionally add a new <a>Sources</a> 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 <a>KeyVal</a> record to the database and
--   associate a <a>Sources</a> record with it. If the <a>KeyVal</a> 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 <a>KeyVal</a> paris
--   associated with it. On the other hand, a single <a>KeyVal</a> pair can
--   apply to many sources.
insertSourceKeyValue :: MonadIO m => KeyType -> Text -> Maybe Text -> Key Sources -> SqlPersistT m (Key SourceKeyValues)


-- | 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 <a>IsInputStream</a> to a conduit source
sourceInputStream :: (MonadResource m, IsInputStream i) => i -> Producer m ByteString


-- | Utilities for working with <a>Conduit</a>s when importing.
module BDCS.Import.Conduit

-- | Load data from a given file: or http: <a>URI</a> into a
--   <a>ByteString</a>.
getFromURI :: MonadResource m => URI -> Producer m ByteString

-- | If the <a>ByteString</a> in a <a>Conduit</a> 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

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


-- | 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-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 <a>Files</a>
--   metadata.
data Object

-- | Some non-file object that should be accompanied by a <a>Files</a>
--   record so its metadata can be tracked
SpecialObject :: Object

-- | A file object with its contents
FileObject :: ByteString -> Object

-- | For a given <a>Files</a> record, find the object in the content store,
--   and return the corresponding object. This is a version of
--   <a>filesToObjectsC</a> suitable as an argument for
--   <a>awaitForever</a>.
fileToObjectC :: (MonadError String m, MonadIO m) => ContentStore -> Files -> Conduit Files m (Files, Object)

-- | Read <a>Files</a> records from a <a>Conduit</a>, find the object in
--   the content store, and return the matching <a>Object</a> 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
--   <a>Files</a> 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 <a>Conduit</a> and convert each into a <a>Entry</a>
--   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 <a>filesToObjectsC</a>.
objectToTarEntry :: (MonadError String m, MonadIO m) => Conduit (Files, Object) m Entry

module BDCS.Export.Customize
type CSOverlay = Map ByteString Object
data Customization
WriteFile :: Files -> (Maybe ByteString) -> Customization
addToOverlay :: (MonadError String m, MonadLogger m) => CSOverlay -> FSTree -> Files -> Maybe ByteString -> m (CSOverlay, FSTree)
filesToObjectsC :: (MonadError String m, MonadIO m) => CSOverlay -> ContentStore -> Conduit Files m (Files, Object)
runCustomizations :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m) => CSOverlay -> ContentStore -> FSTree -> [Customization] -> m (CSOverlay, FSTree)
instance GHC.Show.Show BDCS.Export.Customize.Customization
instance GHC.Classes.Eq BDCS.Export.Customize.Customization


-- | Functions to help with errors
module BDCS.Utils.Error

-- | Convert an error action into an Either This is essentially
--   <a>runExceptT</a> generalized to <a>MonadError</a>
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 <a>ExceptT</a> action. On error, run a supplied function to
--   convert the error into some type that can be thrown with
--   <a>throwError</a> in <a>MonadError</a>. On success, simply return the
--   value of the action.
mapError :: MonadError e' m => (e -> e') -> ExceptT e m a -> m a


-- | 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 for exporting objects from the BDCS into a directory.
module BDCS.Export.Directory

-- | A <a>Consumer</a> 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 :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m) => FilePath -> Consumer (Files, Object) m ()


-- | Utility functions for Unix filesystem modes
module BDCS.Utils.Mode

-- | Convert a mode value into a Text file mode string
--   
--   <pre>
--   modeAsText 0o755
--   "rwxr-xr-x"
--   </pre>
modeAsText :: Word32 -> Text


-- | Monad related utility functions
module BDCS.Utils.Monad

-- | Like <a>concatMap</a>, 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 <a>concatMap</a> 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 <a>mapMaybe</a> 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 >>?

module BDCS.Label.FileLabels
apply :: MonadIO m => [(Files, Key Files)] -> SqlPersistT m [Key FileKeyValues]


-- | 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 <a>CsError</a> 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 <a>URI</a> and load it into the MDDB. This
--   function must be run within the <a>ReaderT</a> monad, which should be
--   given an <a>ImportState</a> 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 <a>loadIntoMDDB</a> 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 <a>URI</a> to a primary.xml file in some package repository,
--   load all its RPMs into the MDDB. This function must be run within the
--   <a>ReaderT</a> monad, which should be given an <a>ImportState</a>
--   record. This is how importing knows where to store the results. If the
--   repo metadata data is invalid, a <a>RepoException</a> will be thrown.
--   Other errors will be printed to the screen.
loadFromURI :: URI -> ReaderT ImportState IO ()

-- | Given the <a>URI</a> 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 <a>ReaderT</a> monad, which should be given an
--   <a>ImportState</a> record. This is how importing knows where to store
--   the results. If the repo metadata data is invalid, a
--   <a>RepoException</a> 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 <a>URI</a> and load it into the MDDB. This
--   function must be run within the <a>ReaderT</a> monad, which should be
--   given an <a>ImportState</a> 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.PackageJSON
instance Data.Aeson.Types.FromJSON.FromJSON BDCS.Import.NPM.PackageDist


-- | Manage <tt>Builds</tt> 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)


-- | Collect all the dependencies for a package, but do not solve them.
module BDCS.Depclose

-- | Type of the depclose results - see <a>Formula</a>
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


-- | Functions for running external commands with logging.
module BDCS.Utils.Process
callProcessLogged :: (MonadBaseControl IO m, MonadLoggerIO m) => String -> [String] -> m ()


-- | Extract the version number of bdcs tools.
module BDCS.Version

-- | Given the name of a bdcs tool, print its version number.
printVersion :: String -> IO ()


-- | 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.
--   
--   Any exceptions from <a>Exception</a> will be convered into
--   <a>Except</a> style exceptions, which can then be handled via
--   catchError from that module.
runHacks :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m) => FilePath -> m ()

-- | Run tmpfiles.d snippet on the new directory. Most exporters should
--   call this function. Otherwise, it is not generally useful and should
--   be avoided.
--   
--   Any exceptions from <a>Exception</a> will be convered into
--   <a>Except</a> style exceptions, which can then be handled via
--   catchError from that module.
runTmpfiles :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m) => FilePath -> m ()


-- | Functions for exporting objects from the BDCS into a qcow2 image.
module BDCS.Export.Qcow2

-- | A <a>Consumer</a> that writes objects into a temporary directory, and
--   then converts that directory into a qcow2 image with virt-make-fs.
qcow2Sink :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m, MonadResource m) => FilePath -> Consumer (Files, Object) m ()


-- | Functions for exporting objects from the BDCS into an ostree repo.
module BDCS.Export.Ostree

-- | A <a>Consumer</a> 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 :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m, MonadResource m) => FilePath -> Consumer (Files, Object) m ()


-- | Top-level function for exporting objects from the BDCS.
module BDCS.Export
export :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m, MonadResource m) => FilePath -> FilePath -> ExportType -> [Text] -> SqlPersistT m ()
exportAndCustomize :: (MonadBaseControl IO m, MonadError String m, MonadLoggerIO m, MonadResource m) => FilePath -> FilePath -> ExportType -> [Text] -> [Customization] -> SqlPersistT m ()
