module Debian.Repo.PackageIndex ( packageIndexName , packageIndexPath , packageIndexDir , packageIndexPathList , packageIndexDirList , packageIndexList , sourceIndexList , binaryIndexList , releaseDir , showIndexBrief , debSourceFromIndex ) where import Data.List import Debian.Repo.Types --import Debian.Release import System.FilePath(()) packageIndexName :: PackageIndex -> FilePath packageIndexName index = case packageIndexArch index of Source -> "Sources" _ -> "Packages" packageIndexPath :: PackageIndex -> FilePath packageIndexPath index = packageIndexDir index ++ "/" ++ packageIndexName index packageIndexDir :: PackageIndex -> FilePath packageIndexDir index = case packageIndexArch index of Source -> releaseDir (packageIndexRelease index) ++ "/" ++ sectionName' (packageIndexComponent index) ++ "/source" _ -> (releaseDir (packageIndexRelease index) ++ "/" ++ sectionName' (packageIndexComponent index) ++ "/binary-" ++ archName (packageIndexArch index)) releaseDir release = "dists/" ++ (releaseName' . releaseName $ release) packageIndexPathList :: Release -> [FilePath] packageIndexPathList release = map packageIndexPath . packageIndexList $ release packageIndexDirList :: Release -> [FilePath] packageIndexDirList release = map packageIndexDir . packageIndexList $ release packageIndexList :: Release -> [PackageIndex] packageIndexList release = sourceIndexList release ++ binaryIndexList release sourceIndexList :: Release -> [PackageIndex] sourceIndexList release = map componentIndex (releaseComponents release) where componentIndex component = PackageIndex { packageIndexRelease = release , packageIndexComponent = component , packageIndexArch = Source } binaryIndexList :: Release -> [PackageIndex] binaryIndexList release = concat . map componentIndexes $ (releaseComponents release) where --componentIndexes :: Section -> [PackageIndex] componentIndexes component = map archIndex (filter (/= Source) (releaseArchitectures release)) where --archIndex :: Arch -> PackageIndex archIndex arch = PackageIndex { packageIndexRelease = release , packageIndexComponent = component , packageIndexArch = arch } showIndexBrief :: PackageIndex -> String showIndexBrief index = (releaseName' . releaseName $ release) sectionName' (packageIndexComponent index) showArch (packageIndexArch index) where release = packageIndexRelease index showArch Source = "source" showArch (Binary x) = "binary-" ++ x debSourceFromIndex :: PackageIndex -> DebSource debSourceFromIndex index = DebSource {sourceType = typ, sourceUri = repoURI repo, sourceDist = Right (dist, components)} where typ = case arch of Binary _ -> Deb; Source -> DebSrc arch = packageIndexArch index dist = releaseName release components = releaseComponents release repo = releaseRepo release release = packageIndexRelease index