diff --git a/Command/MaxSize.hs b/Command/MaxSize.hs new file mode 100644 index 0000000000..19788ad3eb --- /dev/null +++ b/Command/MaxSize.hs @@ -0,0 +1,60 @@ +{- git-annex command + - + - Copyright 2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Command.MaxSize where + +import Command +import qualified Remote +import Logs.MaxSize +import Utility.SafeOutput +import Utility.DataUnits + +import qualified Data.Map as M + +cmd :: Command +cmd = noMessages $ command "maxsize" SectionSetup + "configure maximum size of repositoriy" + (paramPair paramRepository (paramOptional paramSize)) + (seek <$$> optParser) + +data MaxSizeOptions = MaxSizeOptions + { cmdparams :: CmdParams + , bytesOption :: Bool + } + +optParser :: CmdParamsDesc -> Parser MaxSizeOptions +optParser desc = MaxSizeOptions + <$> cmdParams desc + <*> switch + ( long "bytes" + <> help "display sizes in bytes" + ) + +seek :: MaxSizeOptions -> CommandSeek +seek o = case cmdparams o of + (rname:[]) -> commandAction $ do + u <- Remote.nameToUUID rname + startingCustomOutput (ActionItemOther Nothing) $ do + v <- M.lookup u <$> getMaxSizes + liftIO $ putStrLn $ safeOutput $ case v of + Just (MaxSize n) -> + if bytesOption o + then show n + else preciseSize storageUnits False n + Nothing -> "" + next $ return True + (rname:sz:[]) -> commandAction $ do + u <- Remote.nameToUUID rname + let si = SeekInput (cmdparams o) + let ai = ActionItemOther (Just (UnquotedString rname)) + startingUsualMessages "maxsize" ai si $ + case readSize dataUnits sz of + Nothing -> giveup "Unable to parse size." + Just n -> do + recordMaxSize u (MaxSize n) + next $ return True + _ -> giveup "Specify a repository."