module-management-0.20.2: testdata/split1-expected/Debian/Repo/Package/BinaryPackageSourceID.hs
{-# LANGUAGE PackageImports, ScopedTypeVariables, TupleSections #-}
{-# OPTIONS -fno-warn-name-shadowing #-}
module Debian.Repo.Package.BinaryPackageSourceID
( binaryPackageSourceID
) where
import qualified Data.Text as T (unpack)
import qualified Debian.Control.Text as B (fieldValue)
import Debian.Relation (BinPkgName(..))
import Debian.Repo.Types.PackageIndex (BinaryPackage(packageID, packageInfo), makeBinaryPackageID, PackageID(..), PackageIndex(PackageIndex))
import Debian.Version (parseDebianVersion)
import Text.Regex (matchRegex, mkRegex)
-- | Parse the /Source/ field of a binary package's control
-- information, this may specify a version number for the source
-- package if it differs from the version number of the binary
-- package.
binaryPackageSourceID :: PackageIndex -> BinaryPackage -> PackageID BinPkgName
binaryPackageSourceID (PackageIndex component _) package =
case maybe Nothing (matchRegex re . T.unpack) (B.fieldValue "Source" (packageInfo package)) of
Just [name, _, ""] -> makeBinaryPackageID name (packageVersion pid)
Just [name, _, version] -> makeBinaryPackageID name (parseDebianVersion version)
_ -> error "Missing Source attribute in binary package info"
where
-- sourceIndex = PackageIndex component Source
pid = packageID package
re = mkRegex "^[ ]*([^ (]*)[ ]*(\\([ ]*([^ )]*)\\))?[ ]*$"