diff options
author | Joey Hess <joey@kitenet.net> | 2013-07-03 13:55:50 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-07-03 13:55:50 -0400 |
commit | 104faaf5f5f958b449d79a923cf8b0ce095a0205 (patch) | |
tree | 788d417c8a3e7b8b2f8203268a52c2eb6494ebc2 /Command/Get.hs | |
parent | e5eeb401d1743372102ec4064b6f87453fdc8597 (diff) |
--all for get, move, and copy
Diffstat (limited to 'Command/Get.hs')
-rw-r--r-- | Command/Get.hs | 50 |
1 files changed, 33 insertions, 17 deletions
diff --git a/Command/Get.hs b/Command/Get.hs index 5b6fdecfa..56dbe415f 100644 --- a/Command/Get.hs +++ b/Command/Get.hs @@ -1,6 +1,6 @@ {- git-annex command - - - Copyright 2010 Joey Hess <joey@kitenet.net> + - Copyright 2010, 2013 Joey Hess <joey@kitenet.net> - - Licensed under the GNU GPL version 3 or higher. -} @@ -14,37 +14,53 @@ import Annex.Content import qualified Command.Move import Logs.Transfer import Annex.Wanted +import GitAnnex.Options +import Types.Key +import Types.Remote def :: [Command] -def = [withOptions [Command.Move.fromOption] $ command "get" paramPaths seek +def = [withOptions getOptions $ command "get" paramPaths seek SectionCommon "make content of annexed files available"] +getOptions :: [Option] +getOptions = [allOption, Command.Move.fromOption] + seek :: [CommandSeek] -seek = [withField Command.Move.fromOption Remote.byNameWithUUID $ \from -> - withFilesInGit $ whenAnnexed $ start from] +seek = + [ withField Command.Move.fromOption Remote.byNameWithUUID $ \from -> + withAll (startAll from) $ + withFilesInGit $ whenAnnexed $ start from + ] start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart -start from file (key, _) = stopUnless (not <$> inAnnex key) $ - stopUnless (checkAuto (numCopiesCheck file key (<) <||> wantGet False (Just file))) $ do +start from file (key, _) = start' expensivecheck from key (Just file) + where + expensivecheck = checkAuto (numCopiesCheck file key (<) <||> wantGet False (Just file)) + +startAll :: Maybe Remote -> Key -> CommandStart +startAll from key = start' (return True) from key Nothing + +start' :: Annex Bool -> Maybe Remote -> Key -> AssociatedFile -> CommandStart +start' expensivecheck from key afile = stopUnless (not <$> inAnnex key) $ + stopUnless expensivecheck $ case from of - Nothing -> go $ perform key file + Nothing -> go $ perform key afile Just src -> - -- get --from = copy --from stopUnless (Command.Move.fromOk src key) $ - go $ Command.Move.fromPerform src False key file + go $ Command.Move.fromPerform src False key afile where - go a = do - showStart "get" file + go a = do + showStart "get" (fromMaybe (key2file key) afile) next a -perform :: Key -> FilePath -> CommandPerform -perform key file = stopUnless (getViaTmp key $ getKeyFile key file) $ +perform :: Key -> AssociatedFile -> CommandPerform +perform key afile = stopUnless (getViaTmp key $ getKeyFile key afile) $ next $ return True -- no cleanup needed {- Try to find a copy of the file in one of the remotes, - and copy it to here. -} -getKeyFile :: Key -> FilePath -> FilePath -> Annex Bool -getKeyFile key file dest = dispatch =<< Remote.keyPossibilities key +getKeyFile :: Key -> AssociatedFile -> FilePath -> Annex Bool +getKeyFile key afile dest = dispatch =<< Remote.keyPossibilities key where dispatch [] = do showNote "not available" @@ -69,7 +85,7 @@ getKeyFile key file dest = dispatch =<< Remote.keyPossibilities key either (const False) id <$> Remote.hasKey r key | otherwise = return True docopy r continue = do - ok <- download (Remote.uuid r) key (Just file) noRetry $ \p -> do + ok <- download (Remote.uuid r) key afile noRetry $ \p -> do showAction $ "from " ++ Remote.name r - Remote.retrieveKeyFile r key (Just file) dest p + Remote.retrieveKeyFile r key afile dest p if ok then return ok else continue |