module HackPort.GlobalFlags
( GlobalFlags(..)
, defaultGlobalFlags
, withHackPortContext
) where
import qualified Distribution.Verbosity as DV
import qualified Distribution.Simple.Setup as DSS
import qualified Distribution.Client.Config as DCC
import qualified Distribution.Client.GlobalFlags as DCG
import qualified Distribution.Client.Types as DCT
import qualified Distribution.Utils.NubList as DUN
import qualified Network.URI as NU
import System.FilePath ((</>))
import qualified Overlays
data GlobalFlags =
GlobalFlags { GlobalFlags -> Flag Bool
globalVersion :: DSS.Flag Bool
, GlobalFlags -> Flag Bool
globalNumericVersion :: DSS.Flag Bool
, GlobalFlags -> Flag (Maybe FilePath)
globalPathToOverlay :: DSS.Flag (Maybe FilePath)
, GlobalFlags -> Flag (Maybe FilePath)
globalPathToPortage :: DSS.Flag (Maybe FilePath)
}
defaultGlobalFlags :: GlobalFlags
defaultGlobalFlags :: GlobalFlags
defaultGlobalFlags =
GlobalFlags :: Flag Bool
-> Flag Bool
-> Flag (Maybe FilePath)
-> Flag (Maybe FilePath)
-> GlobalFlags
GlobalFlags { globalVersion :: Flag Bool
globalVersion = Bool -> Flag Bool
forall a. a -> Flag a
DSS.Flag Bool
False
, globalNumericVersion :: Flag Bool
globalNumericVersion = Bool -> Flag Bool
forall a. a -> Flag a
DSS.Flag Bool
False
, globalPathToOverlay :: Flag (Maybe FilePath)
globalPathToOverlay = Maybe FilePath -> Flag (Maybe FilePath)
forall a. a -> Flag a
DSS.Flag Maybe FilePath
forall a. Maybe a
Nothing
, globalPathToPortage :: Flag (Maybe FilePath)
globalPathToPortage = Maybe FilePath -> Flag (Maybe FilePath)
forall a. a -> Flag a
DSS.Flag Maybe FilePath
forall a. Maybe a
Nothing
}
defaultRemoteRepo :: DCT.RemoteRepo
defaultRemoteRepo :: RemoteRepo
defaultRemoteRepo = RemoteRepo -> RemoteRepo
DCC.addInfoForKnownRepos (RemoteRepo -> RemoteRepo) -> RemoteRepo -> RemoteRepo
forall a b. (a -> b) -> a -> b
$ (RepoName -> RemoteRepo
DCT.emptyRemoteRepo (FilePath -> RepoName
DCT.RepoName FilePath
name)) { remoteRepoURI :: URI
DCT.remoteRepoURI = URI
uri }
where
Just URI
uri = FilePath -> Maybe URI
NU.parseURI FilePath
"https://hackage.haskell.org/"
name :: FilePath
name = FilePath
"hackage.haskell.org"
withHackPortContext :: DV.Verbosity -> GlobalFlags -> (DCG.RepoContext -> IO a) -> IO a
withHackPortContext :: Verbosity -> GlobalFlags -> (RepoContext -> IO a) -> IO a
withHackPortContext Verbosity
verbosity GlobalFlags
global_flags RepoContext -> IO a
callback = do
FilePath
overlayPath <- Verbosity -> Maybe FilePath -> IO FilePath
Overlays.getOverlayPath Verbosity
verbosity (Flag (Maybe FilePath) -> Maybe FilePath
forall a. WithCallStack (Flag a -> a)
DSS.fromFlag (Flag (Maybe FilePath) -> Maybe FilePath)
-> Flag (Maybe FilePath) -> Maybe FilePath
forall a b. (a -> b) -> a -> b
$ GlobalFlags -> Flag (Maybe FilePath)
globalPathToOverlay GlobalFlags
global_flags)
let flags :: GlobalFlags
flags = GlobalFlags
DCG.defaultGlobalFlags {
globalRemoteRepos :: NubList RemoteRepo
DCG.globalRemoteRepos = [RemoteRepo] -> NubList RemoteRepo
forall a. Ord a => [a] -> NubList a
DUN.toNubList [RemoteRepo
defaultRemoteRepo]
, globalCacheDir :: Flag FilePath
DCG.globalCacheDir = FilePath -> Flag FilePath
forall a. a -> Flag a
DSS.Flag (FilePath -> Flag FilePath) -> FilePath -> Flag FilePath
forall a b. (a -> b) -> a -> b
$ FilePath
overlayPath FilePath -> FilePath -> FilePath
</> FilePath
".hackport"
}
Verbosity -> GlobalFlags -> (RepoContext -> IO a) -> IO a
forall a. Verbosity -> GlobalFlags -> (RepoContext -> IO a) -> IO a
DCG.withRepoContext Verbosity
verbosity GlobalFlags
flags RepoContext -> IO a
callback