remove optimize subcommand; use --auto instead

get, drop: Added --auto option, which decides whether to get/drop content
as needed to work toward the configured numcopies.

The problem with bundling it up in optimize was that I then found I wanted
to run an optmize that did not drop files, only got them. Considered adding
a --only-get switch to it, but that seemed wrong. Instead, let's make
existing subcommands optionally smarter.

Note that the only actual difference between drop and drop --auto is that
the latter does not even try to drop a file if it knows of not enough
copies, and does not print any error messages about files it was unable to
drop.

It might be nice to make get avoid asking git for attributes when not in
auto mode. For now it always asks for attributes.
This commit is contained in:
Joey Hess 2011-09-15 13:30:04 -04:00
parent 81984e60ac
commit 984c9fc052
13 changed files with 92 additions and 78 deletions

View file

@ -29,13 +29,15 @@ seek = [withNumCopies start]
{- Indicates a file's content is not wanted anymore, and should be removed
- if it's safe to do so. -}
start :: CommandStartAttrFile
start (file, numcopies) = isAnnexed file $ \(key, _) -> do
start (file, attr) = isAnnexed file $ \(key, _) -> do
present <- inAnnex key
if present
then do
then autoCopies key (>) numcopies $ do
showStart "drop" file
next $ perform key $ readMaybe numcopies
next $ perform key numcopies
else stop
where
numcopies = readMaybe attr
perform :: Key -> Maybe Int -> CommandPerform
perform key numcopies = do

View file

@ -13,6 +13,7 @@ import qualified Remote
import Types
import Content
import Messages
import Utility
import qualified Command.Move
command :: [Command]
@ -20,14 +21,14 @@ command = [repoCommand "get" paramPath seek
"make content of annexed files available"]
seek :: [CommandSeek]
seek = [withFilesInGit start]
seek = [withNumCopies start]
start :: CommandStartString
start file = isAnnexed file $ \(key, _) -> do
start :: CommandStartAttrFile
start (file, attr) = isAnnexed file $ \(key, _) -> do
inannex <- inAnnex key
if inannex
then stop
else do
else autoCopies key (<) numcopies $ do
showStart "get" file
from <- Annex.getState Annex.fromremote
case from of
@ -35,6 +36,8 @@ start file = isAnnexed file $ \(key, _) -> do
Just name -> do
src <- Remote.byName name
next $ Command.Move.fromPerform src False key
where
numcopies = readMaybe attr
perform :: Key -> CommandPerform
perform key = do

View file

@ -1,34 +0,0 @@
{- git-annex command
-
- Copyright 2011 Joey Hess <joey@kitenet.net>
-
- Licensed under the GNU GPL version 3 or higher.
-}
module Command.Optimize where
import Command
import Utility
import LocationLog
import Trust
import Config
import qualified Command.Get
import qualified Command.Drop
command :: [Command]
command = [repoCommand "optimize" (paramOptional $ paramRepeating paramPath) seek
"get or drop content to best use available space"]
seek :: [CommandSeek]
seek = [withNumCopies start]
start :: CommandStartAttrFile
start p@(file, attr) = notBareRepo $ isAnnexed file $ \(key, _) -> do
needed <- getNumCopies $ readMaybe attr
(_, safelocations) <- trustPartition UnTrusted =<< keyLocations key
dispatch needed (length safelocations)
where
dispatch needed present
| present < needed = Command.Get.start file
| present > needed = Command.Drop.start p
| otherwise = stop