aboutsummaryrefslogtreecommitdiff
path: root/Command
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-09-15 13:30:04 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-09-15 13:30:04 -0400
commit984c9fc0523bcd3bfcd7de83f4f7974daa6872bc (patch)
tree21b8ad88a6f300b98a21f6f3e4644920fa24c058 /Command
parent81984e60acb920fffc969818e63604060636aa09 (diff)
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.
Diffstat (limited to 'Command')
-rw-r--r--Command/Drop.hs8
-rw-r--r--Command/Get.hs11
-rw-r--r--Command/Optimize.hs34
3 files changed, 12 insertions, 41 deletions
diff --git a/Command/Drop.hs b/Command/Drop.hs
index 8f886f283..32cb81e80 100644
--- a/Command/Drop.hs
+++ b/Command/Drop.hs
@@ -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
diff --git a/Command/Get.hs b/Command/Get.hs
index e0436a868..1a50158e3 100644
--- a/Command/Get.hs
+++ b/Command/Get.hs
@@ -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
diff --git a/Command/Optimize.hs b/Command/Optimize.hs
deleted file mode 100644
index 1a2b2237f..000000000
--- a/Command/Optimize.hs
+++ /dev/null
@@ -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