-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Access Hackage's package database via Data.Map -- -- This is an early and mostly undocumented release of the 2.x version of -- hackage-db that's intended mostly for experimenting with and testing -- of the new API. Porting code from 1.x to 2.x is pretty simple, but if -- you do that at this point, please expect minor details of this API to -- change in forthcoming releases. For production code, you are probably -- better off with the 1.x release for now. -- -- Check out -- https://github.com/peti/hackage-db/tree/master/example/ for a -- collection of simple example programs that demonstrate how to use this -- code. @package hackage-db @version 2.0 module Distribution.Hackage.DB.Errors data HackageDBTarball a HackageDBTarball :: FilePath -> a -> HackageDBTarball a data HackageDBPackageName a HackageDBPackageName :: PackageName -> a -> HackageDBPackageName a data HackageDBPackageVersion a HackageDBPackageVersion :: Version -> a -> HackageDBPackageVersion a newtype IncorrectTarfile IncorrectTarfile :: FormatError -> IncorrectTarfile newtype UnsupportedTarEntry UnsupportedTarEntry :: Entry -> UnsupportedTarEntry newtype InvalidMetaFile InvalidMetaFile :: String -> InvalidMetaFile newtype InvalidCabalFile InvalidCabalFile :: String -> InvalidCabalFile data InvalidRepresentationOfType InvalidRepresentationOfType :: String -> String -> InvalidRepresentationOfType data NoHackageTarballFound NoHackageTarballFound :: NoHackageTarballFound instance GHC.Show.Show Distribution.Hackage.DB.Errors.NoHackageTarballFound instance GHC.Show.Show Distribution.Hackage.DB.Errors.InvalidRepresentationOfType instance GHC.Show.Show Distribution.Hackage.DB.Errors.InvalidCabalFile instance GHC.Show.Show Distribution.Hackage.DB.Errors.InvalidMetaFile instance GHC.Show.Show Distribution.Hackage.DB.Errors.UnsupportedTarEntry instance GHC.Show.Show Distribution.Hackage.DB.Errors.IncorrectTarfile instance GHC.Show.Show a => GHC.Show.Show (Distribution.Hackage.DB.Errors.HackageDBPackageVersion a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Hackage.DB.Errors.HackageDBPackageName a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Hackage.DB.Errors.HackageDBTarball a) instance (GHC.Show.Show a, Data.Typeable.Internal.Typeable a) => GHC.Exception.Exception (Distribution.Hackage.DB.Errors.HackageDBTarball a) instance (GHC.Show.Show a, Data.Typeable.Internal.Typeable a) => GHC.Exception.Exception (Distribution.Hackage.DB.Errors.HackageDBPackageName a) instance (GHC.Show.Show a, Data.Typeable.Internal.Typeable a) => GHC.Exception.Exception (Distribution.Hackage.DB.Errors.HackageDBPackageVersion a) instance GHC.Exception.Exception Distribution.Hackage.DB.Errors.IncorrectTarfile instance GHC.Exception.Exception Distribution.Hackage.DB.Errors.UnsupportedTarEntry instance GHC.Exception.Exception Distribution.Hackage.DB.Errors.InvalidMetaFile instance GHC.Exception.Exception Distribution.Hackage.DB.Errors.InvalidCabalFile instance GHC.Exception.Exception Distribution.Hackage.DB.Errors.InvalidRepresentationOfType instance GHC.Exception.Exception Distribution.Hackage.DB.Errors.NoHackageTarballFound -- | Types and class instances for parsing the package.json files -- found in a 01-index.tar tarball from Hackage with -- Data.Aeson. These parsers mirror the exact structure of those -- files, but only a small part of it is actually of interest to anyone -- other than implementors of cabal-install. Everyone else will -- most likely prefer the functions oferred by -- Distribution.Hackage.DB.Parsed. module Distribution.Hackage.DB.MetaData -- | Parse the package.json file found in a 01-index.tar -- tarball from Hackage with Data.Aeson. This function is a -- convenience wrapper around eitherDecode that throws an -- InvalidMetaFile exception to signal failure. -- --
-- >>> :set -XOverloadedStrings
--
-- >>> parseMetaData "{\"signatures\":[],\"signed\":{\"_type\":\"Targets\",\"expires\":null,\"targets\":{\"<repo>/package/jailbreak-cabal-1.3.2.tar.gz\":{\"hashes\":{\"md5\":\"ba42b3e68323ccbeb3ac900cd68f9e90\",\"sha256\":\"212a8bbc3dfc748c4063282414a2726709d651322f3984c9989179d2352950f4\"},\"length\":2269}},\"version\":0}}"
-- MetaData {signed = SignedMetaData {version = 0, expires = Nothing, _type = "Targets", targets = fromList [("<repo>/package/jailbreak-cabal-1.3.2.tar.gz",TargetData {length = 2269, hashes = fromList [("md5","ba42b3e68323ccbeb3ac900cd68f9e90"),("sha256","212a8bbc3dfc748c4063282414a2726709d651322f3984c9989179d2352950f4")]})]}, signatures = []}
--
-- >>> parseMetaData "{}"
-- *** Exception: InvalidMetaFile "Error in $: key \"signed\" not present"
--
-- >>> parseMetaData ""
-- *** Exception: InvalidMetaFile "Error in $: not enough input"
--
parseMetaData :: ByteString -> MetaData
data MetaData
MetaData :: SignedMetaData -> [String] -> MetaData
[signed] :: MetaData -> SignedMetaData
[signatures] :: MetaData -> [String]
data SignedMetaData
SignedMetaData :: Int -> Maybe String -> String -> Map String TargetData -> SignedMetaData
[version] :: SignedMetaData -> Int
[expires] :: SignedMetaData -> Maybe String
[_type] :: SignedMetaData -> String
[targets] :: SignedMetaData -> Map String TargetData
data TargetData
TargetData :: Int -> Map String String -> TargetData
[length] :: TargetData -> Int
[hashes] :: TargetData -> Map String String
instance GHC.Generics.Generic Distribution.Hackage.DB.MetaData.MetaData
instance GHC.Show.Show Distribution.Hackage.DB.MetaData.MetaData
instance GHC.Generics.Generic Distribution.Hackage.DB.MetaData.SignedMetaData
instance GHC.Show.Show Distribution.Hackage.DB.MetaData.SignedMetaData
instance GHC.Generics.Generic Distribution.Hackage.DB.MetaData.TargetData
instance GHC.Show.Show Distribution.Hackage.DB.MetaData.TargetData
instance Data.Aeson.Types.FromJSON.FromJSON Distribution.Hackage.DB.MetaData.MetaData
instance Data.Aeson.Types.FromJSON.FromJSON Distribution.Hackage.DB.MetaData.SignedMetaData
instance Data.Aeson.Types.FromJSON.FromJSON Distribution.Hackage.DB.MetaData.TargetData
-- | Find the location of the local Hackage database that is maintained by
-- running cabal update.
module Distribution.Hackage.DB.Path
cabalStateDir :: IO FilePath
cabalTarballDir :: String -> IO FilePath
hackageTarballDir :: IO FilePath
-- | Determine the default path of the Hackage database, which typically
-- resides at
-- "$HOME/.cabal/packages/hackage.haskell.org/00-index.tar".
-- Running the command "cabal update" will keep that file
-- up-to-date.
hackageTarball :: IO FilePath
module Distribution.Hackage.DB.Utility
parseText :: Text a => String -> String -> a
-- | Convert the the EpochTime used by the tar library into
-- a standard UTCTime type.
--
-- -- \et -> toEpochTime (fromEpochTime et) == et --fromEpochTime :: EpochTime -> UTCTime -- | Convert the standard UTCTime type into the EpochTime -- used by the tar library. toEpochTime :: UTCTime -> EpochTime module Distribution.Hackage.DB.Unparsed type HackageDB = Map PackageName PackageData data PackageData PackageData :: ByteString -> Map Version VersionData -> PackageData [preferredVersions] :: PackageData -> ByteString [versions] :: PackageData -> Map Version VersionData data VersionData VersionData :: ByteString -> ByteString -> VersionData [cabalFile] :: VersionData -> ByteString [metaFile] :: VersionData -> ByteString readTarball :: Maybe UTCTime -> FilePath -> IO HackageDB parseTarball :: Maybe UTCTime -> FilePath -> ByteString -> HackageDB instance GHC.Generics.Generic Distribution.Hackage.DB.Unparsed.PackageData instance GHC.Classes.Eq Distribution.Hackage.DB.Unparsed.PackageData instance GHC.Show.Show Distribution.Hackage.DB.Unparsed.PackageData instance GHC.Generics.Generic Distribution.Hackage.DB.Unparsed.VersionData instance GHC.Classes.Eq Distribution.Hackage.DB.Unparsed.VersionData instance GHC.Show.Show Distribution.Hackage.DB.Unparsed.VersionData module Distribution.Hackage.DB.Parsed type HackageDB = Map PackageName PackageData type PackageData = Map Version VersionData data VersionData VersionData :: !GenericPackageDescription -> !(Map String String) -> VersionData [cabalFile] :: VersionData -> !GenericPackageDescription [tarballHashes] :: VersionData -> !(Map String String) readTarball :: Maybe UTCTime -> FilePath -> IO HackageDB parseTarball :: Maybe UTCTime -> FilePath -> ByteString -> HackageDB parseDB :: HackageDB -> HackageDB parsePackageData :: PackageName -> PackageData -> PackageData parseVersionData :: PackageName -> Version -> VersionData -> VersionData parseMetaData :: PackageName -> Version -> ByteString -> Map String String instance GHC.Generics.Generic Distribution.Hackage.DB.Parsed.VersionData instance GHC.Classes.Eq Distribution.Hackage.DB.Parsed.VersionData instance GHC.Show.Show Distribution.Hackage.DB.Parsed.VersionData module Distribution.Hackage.DB type HackageDB = Map PackageName PackageData type PackageData = Map Version VersionData data VersionData VersionData :: !GenericPackageDescription -> !(Map String String) -> VersionData [cabalFile] :: VersionData -> !GenericPackageDescription [tarballHashes] :: VersionData -> !(Map String String) readTarball :: Maybe UTCTime -> FilePath -> IO HackageDB parseTarball :: Maybe UTCTime -> FilePath -> ByteString -> HackageDB -- | Determine the default path of the Hackage database, which typically -- resides at -- "$HOME/.cabal/packages/hackage.haskell.org/00-index.tar". -- Running the command "cabal update" will keep that file -- up-to-date. hackageTarball :: IO FilePath