hackage-security-0.6.2.1: src/Hackage/Security/TUF/Layout/Cache.hs
module Hackage.Security.TUF.Layout.Cache (
-- * Cache layout
CacheLayout(..)
, cabalCacheLayout
) where
import MyPrelude
import Hackage.Security.TUF.Paths
import Hackage.Security.Util.Path
{-------------------------------------------------------------------------------
Cache layout
-------------------------------------------------------------------------------}
-- | Location of the various files we cache
--
-- Although the generic TUF algorithms do not care how we organize the cache,
-- we nonetheless specity this here because as long as there are tools which
-- access files in the cache directly we need to define the cache layout.
-- See also comments for 'defaultCacheLayout'.
data CacheLayout = CacheLayout {
-- | TUF root metadata
cacheLayoutRoot :: CachePath
-- | TUF timestamp
, cacheLayoutTimestamp :: CachePath
-- | TUF snapshot
, cacheLayoutSnapshot :: CachePath
-- | TUF mirrors list
, cacheLayoutMirrors :: CachePath
-- | Uncompressed index tarball
, cacheLayoutIndexTar :: CachePath
-- | Index to the uncompressed index tarball
, cacheLayoutIndexIdx :: CachePath
-- | Compressed index tarball
--
-- We cache both the compressed and the uncompressed tarballs, because
-- incremental updates happen through the compressed tarball, but reads
-- happen through the uncompressed one (with the help of the tarball index).
, cacheLayoutIndexTarGz :: CachePath
}
-- | The cache layout cabal-install uses
--
-- We cache the index as @<cache>/00-index.tar@; this is important because
-- `cabal-install` expects to find it there (and does not currently go through
-- the hackage-security library to get files from the index).
cabalCacheLayout :: CacheLayout
cabalCacheLayout = CacheLayout {
cacheLayoutRoot = rp $ fragment "root.json"
, cacheLayoutTimestamp = rp $ fragment "timestamp.json"
, cacheLayoutSnapshot = rp $ fragment "snapshot.json"
, cacheLayoutMirrors = rp $ fragment "mirrors.json"
, cacheLayoutIndexTar = rp $ fragment "00-index.tar"
, cacheLayoutIndexIdx = rp $ fragment "00-index.tar.idx"
, cacheLayoutIndexTarGz = rp $ fragment "00-index.tar.gz"
}
where
rp :: Path Unrooted -> CachePath
rp = rootPath