Skip to content

Commit 21c2464

Browse files
committed
Add a --keep-going flag to the mirror client
It already does this for --continuous, this lets us do it in the one-shot mode too.
1 parent 142fa13 commit 21c2464

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

MirrorClient.hs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ data MirrorOpts = MirrorOpts {
5858
dstURI :: URI,
5959
stateDir :: FilePath,
6060
selectedPkgs :: [PackageId],
61-
continuous :: Maybe Int -- if so, interval in minutes
61+
continuous :: Maybe Int, -- if so, interval in minutes
62+
keepGoing :: Bool
6263
}
6364

6465
data MirrorEnv = MirrorEnv {
@@ -182,7 +183,7 @@ cron verbosity interval action x = do
182183
mirrorOneShot :: Verbosity -> MirrorOpts -> MirrorEnv -> MirrorState -> IO ()
183184
mirrorOneShot verbosity opts env st = do
184185

185-
(merr, _) <- mirrorOnce verbosity False opts env st
186+
(merr, _) <- mirrorOnce verbosity opts env st
186187

187188
case merr of
188189
Nothing -> return ()
@@ -193,7 +194,7 @@ mirrorIteration :: Verbosity -> MirrorOpts -> MirrorEnv
193194
-> MirrorState -> IO MirrorState
194195
mirrorIteration verbosity opts env st = do
195196

196-
(merr, st') <- mirrorOnce verbosity True opts env st
197+
(merr, st') <- mirrorOnce verbosity opts { keepGoing = True } env st
197198

198199
when (st' /= st) $
199200
savePackagesState env st'
@@ -214,13 +215,13 @@ savePackagesState (MirrorEnv _ _ missingPkgsFile unmirrorablePkgsFile)
214215
writePkgProblemFile unmirrorablePkgsFile unmirrorablePkgs
215216

216217

217-
mirrorOnce :: Verbosity -> Bool -> MirrorOpts -> MirrorEnv
218+
mirrorOnce :: Verbosity -> MirrorOpts -> MirrorEnv
218219
-> MirrorState -> IO (Maybe MirrorError, MirrorState)
219-
mirrorOnce verbosity keepGoing opts
220+
mirrorOnce verbosity opts
220221
(MirrorEnv srcCacheDir dstCacheDir missingPkgsFile unmirrorablePkgsFile)
221222
st@(MirrorState missingPkgs unmirrorablePkgs) =
222223

223-
mirrorSession verbosity keepGoing st $ do
224+
mirrorSession verbosity (keepGoing opts) st $ do
224225

225226
srcIndex <- downloadIndex (srcURI opts) srcCacheDir
226227
dstIndex <- downloadIndex (dstURI opts) dstCacheDir
@@ -772,13 +773,14 @@ data MirrorFlags = MirrorFlags {
772773
flagCacheDir :: Maybe FilePath,
773774
flagContinuous:: Bool,
774775
flagInterval :: Maybe String,
776+
flagKeepGoing :: Bool,
775777
flagVerbosity :: Verbosity,
776778
flagHelp :: Bool
777779
}
778780

779781
defaultMirrorFlags :: MirrorFlags
780782
defaultMirrorFlags = MirrorFlags
781-
Nothing False Nothing normal False
783+
Nothing False Nothing False normal False
782784

783785
mirrorFlagDescrs :: [OptDescr (MirrorFlags -> MirrorFlags)]
784786
mirrorFlagDescrs =
@@ -801,6 +803,10 @@ mirrorFlagDescrs =
801803
, Option [] ["interval"]
802804
(ReqArg (\int opts -> opts { flagInterval = Just int }) "MIN")
803805
"Set the mirroring interval in minutes (default 30)"
806+
807+
, Option [] ["keep-going"]
808+
(NoArg (\opts -> opts { flagKeepGoing = True }))
809+
"Don't fail on mirroring errors, keep going."
804810
]
805811

806812
validateOpts :: [String] -> IO (Verbosity, MirrorOpts)
@@ -826,7 +832,8 @@ validateOpts args = do
826832
selectedPkgs = pkgs,
827833
continuous = if flagContinuous flags
828834
then Just interval
829-
else Nothing
835+
else Nothing,
836+
keepGoing = flagKeepGoing flags
830837
}
831838
where
832839
mpkgs = validatePackageIds pkgstrs

0 commit comments

Comments
 (0)