convert Expire

This commit is contained in:
Joey Hess 2015-07-10 16:26:23 -04:00
parent decfababe9
commit 8eb0a440b9
2 changed files with 30 additions and 22 deletions

View file

@ -48,7 +48,7 @@ import qualified Command.Init
import qualified Command.Describe import qualified Command.Describe
import qualified Command.InitRemote import qualified Command.InitRemote
import qualified Command.EnableRemote import qualified Command.EnableRemote
--import qualified Command.Expire import qualified Command.Expire
import qualified Command.Repair import qualified Command.Repair
import qualified Command.Unused import qualified Command.Unused
import qualified Command.DropUnused import qualified Command.DropUnused
@ -178,7 +178,7 @@ cmds =
, Command.VPop.cmd , Command.VPop.cmd
, Command.VCycle.cmd , Command.VCycle.cmd
, Command.Fix.cmd , Command.Fix.cmd
-- , Command.Expire.cmd , Command.Expire.cmd
, Command.Repair.cmd , Command.Repair.cmd
, Command.Unused.cmd , Command.Unused.cmd
, Command.DropUnused.cmd , Command.DropUnused.cmd

View file

@ -21,30 +21,39 @@ import Data.Time.Clock.POSIX
import qualified Data.Map as M import qualified Data.Map as M
cmd :: Command cmd :: Command
cmd = withOptions [activityOption, noActOption] $ cmd = command "expire" SectionMaintenance
command "expire" SectionMaintenance "expire inactive repositories"
"expire inactive repositories" paramExpire (seek <$$> optParser)
paramExpire (withParams seek)
paramExpire :: String paramExpire :: String
paramExpire = (paramRepeating $ paramOptional paramRemote ++ ":" ++ paramTime) paramExpire = (paramRepeating $ paramOptional paramRemote ++ ":" ++ paramTime)
activityOption :: Option data ExpireOptions = ExpireOptions
activityOption = fieldOption [] "activity" "Name" "specify activity" { expireParams :: CmdParams
, activityOption :: Maybe Activity
, noActOption :: Bool
}
noActOption :: Option optParser :: CmdParamsDesc -> Parser ExpireOptions
noActOption = flagOption [] "no-act" "don't really do anything" optParser desc = ExpireOptions
<$> cmdParams desc
<*> optional (option (str >>= parseActivity)
( long "activity" <> metavar paramName
<> help "specify activity that prevents expiry"
))
<*> switch
( long "no-act"
<> help "don't really do anything"
)
seek :: CmdParams -> CommandSeek seek :: ExpireOptions -> CommandSeek
seek ps = do seek o = do
expire <- parseExpire ps expire <- parseExpire (expireParams o)
wantact <- getOptionField activityOption (pure . parseActivity) actlog <- lastActivities (activityOption o)
noact <- getOptionFlag noActOption
actlog <- lastActivities wantact
u <- getUUID u <- getUUID
us <- filter (/= u) . M.keys <$> uuidMap us <- filter (/= u) . M.keys <$> uuidMap
descs <- uuidMap descs <- uuidMap
seekActions $ pure $ map (start expire noact actlog descs) us seekActions $ pure $ map (start expire (noActOption o) actlog descs) us
start :: Expire -> Bool -> Log Activity -> M.Map UUID String -> UUID -> CommandStart start :: Expire -> Bool -> Log Activity -> M.Map UUID String -> UUID -> CommandStart
start (Expire expire) noact actlog descs u = start (Expire expire) noact actlog descs u =
@ -99,10 +108,9 @@ parseExpire ps = do
Nothing -> error $ "bad expire time: " ++ s Nothing -> error $ "bad expire time: " ++ s
Just d -> Just (now - durationToPOSIXTime d) Just d -> Just (now - durationToPOSIXTime d)
parseActivity :: Maybe String -> Maybe Activity parseActivity :: Monad m => String -> m Activity
parseActivity Nothing = Nothing parseActivity s = case readish s of
parseActivity (Just s) = case readish s of Nothing -> fail $ "Unknown activity. Choose from: " ++
Nothing -> error $ "Unknown activity. Choose from: " ++
unwords (map show [minBound..maxBound :: Activity]) unwords (map show [minBound..maxBound :: Activity])
Just v -> Just v Just v -> return v