warn user if current running ghcup exec is in non-standard location

This commit is contained in:
Arjun Kathuria 2021-06-26 23:58:38 +05:30
parent d166cc84a1
commit aee7fa52c3

View File

@ -1286,6 +1286,7 @@ rmStackVer ver = do
rmGhcup :: ( MonadReader AppState m rmGhcup :: ( MonadReader AppState m
, MonadIO m , MonadIO m
, MonadCatch m , MonadCatch m
, MonadLogger m
) )
=> m () => m ()
@ -1293,18 +1294,30 @@ rmGhcup = do
AppState {dirs = Dirs {binDir}} <- ask AppState {dirs = Dirs {binDir}} <- ask
let ghcupFilename = "ghcup" <> exeExt let ghcupFilename = "ghcup" <> exeExt
let ghcupFilepath = binDir </> ghcupFilename let ghcupFilepath = binDir </> ghcupFilename
currentRunningExecPath <- liftIO $ getExecutablePath
if currentRunningExecPath == ghcupFilepath
then do
#if defined(IS_WINDOWS) #if defined(IS_WINDOWS)
-- since it doesn't seem possible to delete a running exec in windows -- since it doesn't seem possible to delete a running exec in windows
-- we move it to temp dir, to be deleted at next reboot -- we move it to temp dir, to be deleted at next reboot
tempDir <- liftIO $ getTemporaryDirectory tempDir <- liftIO $ getTemporaryDirectory
let tempFilepath = tempDir </> ghcupFilename let tempFilepath = tempDir </> ghcupFilename
hideError UnsupportedOperation $ hideError UnsupportedOperation $
liftIO $ hideError NoSuchThing $ liftIO $ hideError NoSuchThing $
Win32.moveFileEx ghcupFilepath (Just tempFilepath) 1 Win32.moveFileEx ghcupFilepath (Just tempFilepath) 1
#else #else
-- delete it. -- delete it.
hideError doesNotExistErrorType $ liftIO $ rmFile ghcupFilepath hideError doesNotExistErrorType $ liftIO $ rmFile ghcupFilepath
#endif #endif
else
$logWarn $
nonStandardInstallLocationMsg currentRunningExecPath
where
nonStandardInstallLocationMsg path = T.pack $
"current ghcup is invoked from a non-standard location: \n"
<> path <>
"\n you may have to uninstall it manually."
rmTool :: ( MonadReader AppState m rmTool :: ( MonadReader AppState m
, MonadLogger m , MonadLogger m