Adds isolate install functionality to 'Cabal' tool installs

This commit is contained in:
Arjun Kathuria 2021-07-23 15:57:42 +05:30
parent 91d982c7b2
commit 4729364e99
2 changed files with 72 additions and 13 deletions

View File

@ -1649,19 +1649,27 @@ Report bugs at <https://gitlab.haskell.org/haskell/ghcup-hs/issues>|]
let installCabal InstallOptions{..} =
(case instBindist of
Nothing -> runInstTool instPlatform $ do
(v, vi) <- liftE $ fromVersion instVer Cabal
liftE $ installCabalBin (_tvVersion v)
pure vi
Just uri -> do
s' <- appState
runInstTool' s'{ settings = settings { noVerify = True}} instPlatform $ do
(v, vi) <- liftE $ fromVersion instVer Cabal
liftE $ installCabalBindist
(DownloadInfo uri Nothing "")
(_tvVersion v)
pure vi
(case isolateDir of
Just isoDir ->
runInstTool instPlatform $ do
(v, vi) <- liftE $ fromVersion instVer Cabal
let cabalVersion = (_tvVersion v)
liftE $ installCabalBinIsolated isoDir cabalVersion
pure vi
Nothing ->
case instBindist of
Nothing -> runInstTool instPlatform $ do
(v, vi) <- liftE $ fromVersion instVer Cabal
liftE $ installCabalBin (_tvVersion v)
pure vi
Just uri -> do
s' <- appState
runInstTool' s'{ settings = settings { noVerify = True}} instPlatform $ do
(v, vi) <- liftE $ fromVersion instVer Cabal
liftE $ installCabalBindist
(DownloadInfo uri Nothing "")
(_tvVersion v)
pure vi
)
>>= \case
VRight vi -> do

View File

@ -487,6 +487,57 @@ installCabal' path inst ver = do
destPath
lift $ chmod_755 destPath
-- | Installs GHC to a specified location, doesn't make any symlinks.
installCabalBinIsolated :: ( MonadMask m
, MonadCatch m
, MonadReader env m
, HasPlatformReq env
, HasGHCupInfo env
, HasDirs env
, HasSettings env
, MonadLogger m
, MonadResource m
, MonadIO m
, MonadUnliftIO m
, MonadFail m
)
=> FilePath
-> Version
-> Excepts
'[ AlreadyInstalled
, CopyError
, DigestError
, DownloadFailed
, NoDownload
, NotInstalled
, UnknownArchive
, TarDirDoesNotExist
#if !defined(TAR)
, ArchiveResult
#endif
]
m
()
installCabalBinIsolated isoDir ver = do
dlinfo <- liftE $ getDownloadInfo Cabal ver
lift $ $(logDebug) [i|Requested to install cabal version #{ver}|]
-- download (or use cached version)
dl <- liftE $ downloadCached dlinfo Nothing
PlatformRequest {_rPlatform} <- lift getPlatformReq
-- unpack
tmpUnpack <- lift withGHCupTmpDir
liftE $ unpackToDir tmpUnpack dl
void $ lift $ darwinNotarization _rPlatform tmpUnpack
-- the subdir of the archive where we do the work
workdir <- maybe (pure tmpUnpack) (liftE . intoSubdir tmpUnpack) (view dlSubdir dlinfo)
lift $ $(logInfo) [i|isolated installing Cabal to #{isoDir}|]
liftE $ installCabal' workdir isoDir ver
-- | Installs cabal into @~\/.ghcup\/bin/cabal-\<ver\>@ and
-- creates a default @cabal -> cabal-x.y.z.q@ symlink for