{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
-- SPDX-License-Identifier: GPL-3.0-or-later
module Main (main) where
#if !MIN_VERSION_simple_cmd_args(0,1,4)
import Control.Applicative (
many,
#if !MIN_VERSION_simple_cmd_args(0,1,3)
(<|>)
#endif
)
#endif
#if !MIN_VERSION_simple_cmd_args(0,1,7)
import Options.Applicative (eitherReader, maybeReader, ReadM)
#endif
import SimpleCmdArgs
import System.IO (BufferMode(NoBuffering), hSetBuffering, stdout)
--import Distribution.Fedora.Repoquery
import Cache
import List
import Paths_fedora_repoquery (version)
import Query
import Types
data Command = Query Release [String] | CacheSize | CacheEmpties | List
main :: IO ()
main = do
hSetBuffering stdout NoBuffering
simpleCmdArgs' (Just version) "Fedora repoquery tool"
"Tool for querying Fedora repos for packages." $
runMain
<$> (flagWith' Quiet 'q' "quiet" "Avoid output to stderr" <|> flagWith Normal Verbose 'v' "verbose" "Show stderr from dnf repoquery")
<*> (RepoSource
<$> switchWith 'K' "koji" "Use Koji buildroot"
<*> (flagLongWith' CentosDevel "centos-devel" "Use centos-stream development compose" <|>
flagLongWith CentosProd CentosTest "test" "Use centos-stream test compose [default: production]")
<*> ((Mirror <$> strOptionWith 'm' "mirror" "URL" ("Fedora mirror [default: " ++ downloadServer ++ "]")) <|>
flagWith DownloadFpo DlFpo 'D' "dl" "Use dl.fp.o"))
<*> (flagWith' Source 's' "source" "Query source repos" <|>
optionalWith (eitherReader readArch) 'a' "arch" "ARCH" "Specify arch [default: x86_64]" X86_64)
<*> switchWith 'd' "debug" "Show some debug output"
<*> (flagWith' CacheSize 'z' "cache-size" "Show total dnf repo metadata cache disksize"
<|> flagWith' CacheEmpties 'e' "cache-clean-empty" "Remove empty dnf caches"
<|> flagWith' List 'l' "list" "List Fedora versions"
<|> Query <$> argumentWith releaseM "RELEASE" <*> many (strArg "[REPOQUERY_OPTS] [PACKAGE]..."))
where
releaseM :: ReadM Release
releaseM = maybeReader readRelease
runMain :: Verbosity -> RepoSource -> Arch -> Bool -> Command -> IO ()
runMain verbose reposource arch debug command = do
case command of
CacheSize -> cacheSize
CacheEmpties -> cleanEmptyCaches
List -> listVersionsCmd verbose reposource
Query release args -> do
if null args
then showReleaseCmd debug reposource release arch
else repoqueryCmd debug verbose release reposource arch args