@@ -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
6465data MirrorEnv = MirrorEnv {
@@ -182,7 +183,7 @@ cron verbosity interval action x = do
182183mirrorOneShot :: Verbosity -> MirrorOpts -> MirrorEnv -> MirrorState -> IO ()
183184mirrorOneShot 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
194195mirrorIteration 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
779781defaultMirrorFlags :: MirrorFlags
780782defaultMirrorFlags = MirrorFlags
781- Nothing False Nothing normal False
783+ Nothing False Nothing False normal False
782784
783785mirrorFlagDescrs :: [OptDescr (MirrorFlags -> MirrorFlags )]
784786mirrorFlagDescrs =
@@ -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
806812validateOpts :: [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