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.InitRemote
import qualified Command.EnableRemote
--import qualified Command.Expire
import qualified Command.Expire
import qualified Command.Repair
import qualified Command.Unused
import qualified Command.DropUnused
@ -178,7 +178,7 @@ cmds =
, Command.VPop.cmd
, Command.VCycle.cmd
, Command.Fix.cmd
-- , Command.Expire.cmd
, Command.Expire.cmd
, Command.Repair.cmd
, Command.Unused.cmd
, Command.DropUnused.cmd

View file

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