-- | This module is responsible for generating a XML representation of a Rpm. module System.Rpm.Xml ( executeRpm2Xml ) where import System.Exit import System.Process -------------------------------------------------------------------------------- type QueryTag = String type QueryTags = [QueryTag] type Xml = String -- | 'executeRpm2Xml' takes a path to an RPM package and generates an -- XML representation in the form of a string. executeRpm2Xml :: FilePath -- ^ Path to RPM Package -> IO (Maybe String) executeRpm2Xml file = do (statusCode, out, _ ) <- readProcessWithExitCode "rpm" ["-qp", "--qf", queryString queryTags, file] "" case statusCode of ExitSuccess -> return (Just $ (wrapRpmXml .tail . init) out) _ -> return Nothing -------------------------------------------------------------------------------- -- | 'queryTags' is list of the query tags we wish to extract from our -- rpm files. queryTags :: QueryTags queryTags = [ "NAME" , "BUILDHOST" , "BUILDTIME" , "DESCRIPTION" , "RELEASE" , "VERSION" , "SIZE" , "SUMMARY" , "URL" , "ARCH" , "ARCHIVESIZE"] -------------------------------------------------------------------------------- queryString :: QueryTags -> String queryString = quote . concatMap (\x -> "[%{" ++ x ++ ":xml}]") where quote :: String -> String quote xs = "\"" ++ xs ++ "\"" -------------------------------------------------------------------------------- wrapRpmXml :: Xml -> Xml wrapRpmXml xml = "" ++ xml ++ "" --------------------------------------------------------------------------------