From 3db93bc6f7b46bc322694e6658b8f559433a03c6 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 19 May 2022 22:23:10 +1000 Subject: Replacing the files with a haskell rewrite. --- src/FSD/Package.hs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/FSD/Package.hs (limited to 'src/FSD/Package.hs') diff --git a/src/FSD/Package.hs b/src/FSD/Package.hs new file mode 100644 index 0000000..8ccd852 --- /dev/null +++ b/src/FSD/Package.hs @@ -0,0 +1,61 @@ +{- +Copyright (C) 2022 Yuchen Pei. + +This file is part of fsd. + +fsd is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +fsd is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +Public License for more details. + +You should have received a copy of the GNU Affero General Public +License along with fsd. If not, see . + +-} + +{-# LANGUAGE ImportQualifiedPost #-} +{-# LANGUAGE OverloadedStrings #-} + +module FSD.Package where + +import Data.Generics +import Data.Maybe +import Data.Text (Text) +import Data.Text qualified as T +import Debian.Control +import Text.Regex.TDFA +import FSD.Types + +getTags :: Paragraph -> [Text] +getTags para = case fieldValue "Tag" para of + Nothing -> [] + Just tags -> + (T.splitOn ", " . T.pack . concat . lines) tags + +{-package version should be from Source field overriding Version field: +Package: pandoc +Source: pandoc (2.9.2.1-1) +Version: 2.9.2.1-1+b1 +-} +getPackage :: Paragraph -> Maybe Package +getPackage para = do + package <- T.pack <$> fieldValue "Package" para + let homepage = T.pack <$> fieldValue "Homepage" para + let tags = getTags para + let srcVersion = extractSrcVersion =<< fieldValue "Source" para + version <- T.pack <$> orElse srcVersion (fieldValue "Version" para) + return $ Package package version homepage (Tags tags) + where + extractSrcVersion :: String -> Maybe String + extractSrcVersion source = + case source =~ (".*\\((.*)\\)$" :: String) :: [[String]] of + [[_, version]] -> Just version + _ -> Nothing + +getPackages :: Control -> [Package] +getPackages = catMaybes . fmap getPackage . unControl -- cgit v1.2.3