Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
ghcup-hs
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Haskell
ghcup-hs
Commits
c846e52a
Verified
Commit
c846e52a
authored
3 years ago
by
Julian Ospald
Browse files
Options
Downloads
Patches
Plain Diff
Cleanup during unpack failures as well
parent
19e7f0df
No related branches found
No related tags found
1 merge request
!200
Cleanup during unpack failures as well
Pipeline
#42134
canceled
3 years ago
Stage: checks
Stage: quick-test
Stage: test
Stage: expensive-test
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
app/ghcup/BrickMain.hs
+1
-0
1 addition, 0 deletions
app/ghcup/BrickMain.hs
app/ghcup/Main.hs
+7
-0
7 additions, 0 deletions
app/ghcup/Main.hs
lib/GHCup.hs
+16
-7
16 additions, 7 deletions
lib/GHCup.hs
lib/GHCup/Utils.hs
+28
-16
28 additions, 16 deletions
lib/GHCup/Utils.hs
with
52 additions
and
23 deletions
app/ghcup/BrickMain.hs
+
1
−
0
View file @
c846e52a
...
...
@@ -434,6 +434,7 @@ install' _ (_, ListResult {..}) = do
,
NoUpdate
,
TarDirDoesNotExist
,
FileAlreadyExistsError
,
ProcessError
]
run
(
do
...
...
This diff is collapsed.
Click to expand it.
app/ghcup/Main.hs
+
7
−
0
View file @
c846e52a
...
...
@@ -1852,6 +1852,7 @@ Report bugs at <https://gitlab.haskell.org/haskell/ghcup-hs/issues>|]
,
NextVerNotFound
,
NoToolVersionSet
,
FileAlreadyExistsError
,
ProcessError
]
let
runInstTool
mInstPlatform
action'
=
do
...
...
@@ -1953,6 +1954,12 @@ Report bugs at <https://gitlab.haskell.org/haskell/ghcup-hs/issues>|]
,
NotInstalled
,
DirNotEmpty
,
ArchiveResult
,
FileDoesNotExistError
,
HadrianNotFound
,
InvalidBuildConfig
,
ProcessError
,
CopyError
,
BuildFailed
]
let
runCompileHLS
=
...
...
This diff is collapsed.
Click to expand it.
lib/GHCup.hs
+
16
−
7
View file @
c846e52a
...
...
@@ -205,6 +205,7 @@ installGHCBindist :: ( MonadFail m
,
TarDirDoesNotExist
,
DirNotEmpty
,
ArchiveResult
,
ProcessError
]
m
()
...
...
@@ -283,6 +284,7 @@ installPackedGHC :: ( MonadMask m
,
TarDirDoesNotExist
,
DirNotEmpty
,
ArchiveResult
,
ProcessError
]
m
()
installPackedGHC
dl
msubdir
inst
ver
forceInstall
=
do
PlatformRequest
{
..
}
<-
lift
getPlatformReq
...
...
@@ -292,7 +294,7 @@ installPackedGHC dl msubdir inst ver forceInstall = do
-- unpack
tmpUnpack
<-
lift
mkGhcupTmpDir
liftE
$
unpackToDir
tmpUnpack
dl
liftE
$
cleanUpOnError
tmpUnpack
(
unpackToDir
tmpUnpack
dl
)
liftE
$
catchWarn
$
lEM
@
_
@
'
[
ProcessError
]
$
darwinNotarization
_rPlatform
tmpUnpack
-- the subdir of the archive where we do the work
...
...
@@ -402,12 +404,13 @@ installGHCBin :: ( MonadFail m
,
TarDirDoesNotExist
,
DirNotEmpty
,
ArchiveResult
,
ProcessError
]
m
()
installGHCBin
ver
isoFilepath
forceInstall
=
do
dlinfo
<-
liftE
$
getDownloadInfo
GHC
ver
installGHCBindist
dlinfo
ver
isoFilepath
forceInstall
liftE
$
installGHCBindist
dlinfo
ver
isoFilepath
forceInstall
-- | Like 'installCabalBin', except takes the 'DownloadInfo' as
...
...
@@ -472,7 +475,7 @@ installCabalBindist dlinfo ver isoFilepath forceInstall = do
-- unpack
tmpUnpack
<-
lift
withGHCupTmpDir
liftE
$
unpackToDir
tmpUnpack
dl
liftE
$
cleanUpOnError
tmpUnpack
(
unpackToDir
tmpUnpack
dl
)
liftE
$
catchWarn
$
lEM
@
_
@
'
[
ProcessError
]
$
darwinNotarization
_rPlatform
tmpUnpack
-- the subdir of the archive where we do the work
...
...
@@ -614,7 +617,7 @@ installHLSBindist dlinfo ver isoFilepath forceInstall = do
-- unpack
tmpUnpack
<-
lift
withGHCupTmpDir
liftE
$
unpackToDir
tmpUnpack
dl
liftE
$
cleanUpOnError
tmpUnpack
(
unpackToDir
tmpUnpack
dl
)
liftE
$
catchWarn
$
lEM
@
_
@
'
[
ProcessError
]
$
darwinNotarization
_rPlatform
tmpUnpack
-- the subdir of the archive where we do the work
...
...
@@ -784,7 +787,7 @@ compileHLS targetHLS ghcs jobs ov isolateDir cabalProject cabalProjectLocal patc
-- unpack
tmpUnpack
<-
lift
mkGhcupTmpDir
liftE
$
unpackToDir
tmpUnpack
dl
liftE
$
cleanUpOnError
tmpUnpack
(
unpackToDir
tmpUnpack
dl
)
liftE
$
catchWarn
$
lEM
@
_
@
'
[
ProcessError
]
$
darwinNotarization
_rPlatform
tmpUnpack
workdir
<-
maybe
(
pure
tmpUnpack
)
...
...
@@ -1001,7 +1004,7 @@ installStackBindist dlinfo ver isoFilepath forceInstall = do
-- unpack
tmpUnpack
<-
lift
withGHCupTmpDir
liftE
$
unpackToDir
tmpUnpack
dl
liftE
$
cleanUpOnError
tmpUnpack
(
unpackToDir
tmpUnpack
dl
)
liftE
$
catchWarn
$
lEM
@
_
@
'
[
ProcessError
]
$
darwinNotarization
_rPlatform
tmpUnpack
-- the subdir of the archive where we do the work
...
...
@@ -2114,6 +2117,12 @@ compileGHC :: ( MonadMask m
,
NotInstalled
,
DirNotEmpty
,
ArchiveResult
,
FileDoesNotExistError
,
HadrianNotFound
,
InvalidBuildConfig
,
ProcessError
,
CopyError
,
BuildFailed
]
m
GHCTargetVersion
...
...
@@ -2135,7 +2144,7 @@ compileGHC targetGhc ov bstrap jobs mbuildConfig patchdir aargs buildFlavour had
-- unpack
tmpUnpack
<-
lift
mkGhcupTmpDir
liftE
$
unpackToDir
tmpUnpack
dl
liftE
$
cleanUpOnError
tmpUnpack
(
unpackToDir
tmpUnpack
dl
)
liftE
$
catchWarn
$
lEM
@
_
@
'
[
ProcessError
]
$
darwinNotarization
_rPlatform
tmpUnpack
workdir
<-
maybe
(
pure
tmpUnpack
)
...
...
This diff is collapsed.
Click to expand it.
lib/GHCup/Utils.hs
+
28
−
16
View file @
c846e52a
...
...
@@ -74,7 +74,6 @@ import System.Win32.Console
import
System.Win32.File
hiding
(
copyFile
)
import
System.Win32.Types
#
endif
import
Text.PrettyPrint.HughesPJClass
hiding
(
(
<>
)
)
import
Text.Regex.Posix
import
URI.ByteString
...
...
@@ -926,11 +925,7 @@ getChangeLog dls tool (Right tag) =
--
-- 1. the build directory, depending on the KeepDirs setting
-- 2. the install destination, depending on whether the build failed
runBuildAction
::
(
Pretty
(
V
e
)
,
Show
(
V
e
)
,
PopVariant
BuildFailed
e
,
ToVariantMaybe
BuildFailed
e
,
MonadReader
env
m
runBuildAction
::
(
MonadReader
env
m
,
HasDirs
env
,
HasSettings
env
,
MonadIO
m
...
...
@@ -943,26 +938,43 @@ runBuildAction :: ( Pretty (V e)
=>
FilePath
-- ^ build directory (cleaned up depending on Settings)
->
Maybe
FilePath
-- ^ dir to *always* clean up on exception
->
Excepts
e
m
a
->
Excepts
'
[
BuildFailed
]
m
a
->
Excepts
e
m
a
runBuildAction
bdir
instdir
action
=
do
Settings
{
..
}
<-
lift
getSettings
let
exAction
=
do
forM_
instdir
$
\
dir
->
lift
$
hideError
doesNotExistErrorType
$
recyclePathForcibly
dir
hideError
doesNotExistErrorType
$
recyclePathForcibly
dir
when
(
keepDirs
==
Never
)
$
lift
$
rmBDir
bdir
$
rmBDir
bdir
v
<-
flip
onException
exAction
$
catchAllE
(
\
es
->
do
exAction
throwE
(
BuildFailed
bdir
es
)
)
action
flip
onException
(
lift
exAction
)
$
onE_
exAction
action
when
(
keepDirs
==
Never
||
keepDirs
==
Errors
)
$
lift
$
rmBDir
bdir
pure
v
-- | Clean up the given directory if the action fails,
-- depending on the Settings.
cleanUpOnError
::
(
MonadReader
env
m
,
HasDirs
env
,
HasSettings
env
,
MonadIO
m
,
MonadMask
m
,
HasLog
env
,
MonadUnliftIO
m
,
MonadFail
m
,
MonadCatch
m
)
=>
FilePath
-- ^ build directory (cleaned up depending on Settings)
->
Excepts
e
m
a
->
Excepts
e
m
a
cleanUpOnError
bdir
action
=
do
Settings
{
..
}
<-
lift
getSettings
let
exAction
=
when
(
keepDirs
==
Never
)
$
rmBDir
bdir
flip
onException
(
lift
exAction
)
$
onE_
exAction
action
-- | Remove a build directory, ignoring if it doesn't exist and gracefully
-- printing other errors without crashing.
rmBDir
::
(
MonadReader
env
m
,
HasLog
env
,
MonadUnliftIO
m
,
MonadIO
m
)
=>
FilePath
->
m
()
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment