mirror: Support --all (and --unused).

This commit is contained in:
Joey Hess 2014-01-01 17:39:33 -04:00
parent ba20e5a7f4
commit 079f463d51
5 changed files with 32 additions and 22 deletions

View file

@ -102,10 +102,10 @@ handleDropsFrom locs rs reason fromhere key (Just afile) knownpresentremote = do
) )
dropl fs n = checkdrop fs n Nothing $ \numcopies -> dropl fs n = checkdrop fs n Nothing $ \numcopies ->
Command.Drop.startLocal afile numcopies key knownpresentremote Command.Drop.startLocal (Just afile) numcopies key knownpresentremote
dropr fs r n = checkdrop fs n (Just $ Remote.uuid r) $ \numcopies -> dropr fs r n = checkdrop fs n (Just $ Remote.uuid r) $ \numcopies ->
Command.Drop.startRemote afile numcopies key r Command.Drop.startRemote (Just afile) numcopies key r
safely a = either (const False) id <$> tryAnnex a safely a = either (const False) id <$> tryAnnex a

View file

@ -18,6 +18,7 @@ import Annex.Content
import Config import Config
import qualified Option import qualified Option
import Annex.Wanted import Annex.Wanted
import Types.Key
def :: [Command] def :: [Command]
def = [withOptions [fromOption] $ command "drop" paramPaths seek def = [withOptions [fromOption] $ command "drop" paramPaths seek
@ -34,21 +35,21 @@ start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
start from file (key, _) = checkDropAuto from file key $ \numcopies -> start from file (key, _) = checkDropAuto from file key $ \numcopies ->
stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just file)) $ stopUnless (checkAuto $ wantDrop False (Remote.uuid <$> from) (Just file)) $
case from of case from of
Nothing -> startLocal file numcopies key Nothing Nothing -> startLocal (Just file) numcopies key Nothing
Just remote -> do Just remote -> do
u <- getUUID u <- getUUID
if Remote.uuid remote == u if Remote.uuid remote == u
then startLocal file numcopies key Nothing then startLocal (Just file) numcopies key Nothing
else startRemote file numcopies key remote else startRemote (Just file) numcopies key remote
startLocal :: FilePath -> Maybe Int -> Key -> Maybe Remote -> CommandStart startLocal :: AssociatedFile -> Maybe Int -> Key -> Maybe Remote -> CommandStart
startLocal file numcopies key knownpresentremote = stopUnless (inAnnex key) $ do startLocal afile numcopies key knownpresentremote = stopUnless (inAnnex key) $ do
showStart "drop" file showStart "drop" (fromMaybe (key2file key) afile)
next $ performLocal key numcopies knownpresentremote next $ performLocal key numcopies knownpresentremote
startRemote :: FilePath -> Maybe Int -> Key -> Remote -> CommandStart startRemote :: AssociatedFile -> Maybe Int -> Key -> Remote -> CommandStart
startRemote file numcopies key remote = do startRemote afile numcopies key remote = do
showStart ("drop " ++ Remote.name remote) file showStart ("drop " ++ Remote.name remote) (fromMaybe (key2file key) afile)
next $ performRemote key numcopies remote next $ performRemote key numcopies remote
performLocal :: Key -> Maybe Int -> Maybe Remote -> CommandPerform performLocal :: Key -> Maybe Int -> Maybe Remote -> CommandPerform

View file

@ -18,18 +18,25 @@ import Annex.Content
import qualified Annex import qualified Annex
def :: [Command] def :: [Command]
def = [withOptions fromToOptions $ command "mirror" paramPaths seek def = [withOptions (fromToOptions ++ keyOptions) $
command "mirror" paramPaths seek
SectionCommon "mirror content of files to/from another repository"] SectionCommon "mirror content of files to/from another repository"]
seek :: [CommandSeek] seek :: [CommandSeek]
seek = seek =
[ withField toOption Remote.byNameWithUUID $ \to -> [ withField toOption Remote.byNameWithUUID $ \to ->
withField fromOption Remote.byNameWithUUID $ \from -> withField fromOption Remote.byNameWithUUID $ \from ->
withKeyOptions (startKey Nothing to from Nothing) $
withFilesInGit $ whenAnnexed $ start to from withFilesInGit $ whenAnnexed $ start to from
] ]
start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
start to from file (key, _backend) = do start to from file (key, _backend) = do
numcopies <- numCopies file
startKey numcopies to from (Just file) key
startKey :: Maybe Int -> Maybe Remote -> Maybe Remote -> Maybe FilePath -> Key -> CommandStart
startKey numcopies to from afile key = do
noAuto noAuto
case (from, to) of case (from, to) of
(Nothing, Nothing) -> error "specify either --from or --to" (Nothing, Nothing) -> error "specify either --from or --to"
@ -40,19 +47,15 @@ start to from file (key, _backend) = do
noAuto = whenM (Annex.getState Annex.auto) $ noAuto = whenM (Annex.getState Annex.auto) $
error "--auto is not supported for mirror" error "--auto is not supported for mirror"
mirrorto r = ifM (inAnnex key) mirrorto r = ifM (inAnnex key)
( Command.Move.toStart r False (Just file) key ( Command.Move.toStart r False afile key
, do , Command.Drop.startRemote afile numcopies key r
numcopies <- numCopies file
Command.Drop.startRemote file numcopies key r
) )
mirrorfrom r = do mirrorfrom r = do
haskey <- Remote.hasKey r key haskey <- Remote.hasKey r key
case haskey of case haskey of
Left _ -> stop Left _ -> stop
Right True -> Command.Get.start' (return True) Nothing key (Just file) Right True -> Command.Get.start' (return True) Nothing key afile
Right False -> ifM (inAnnex key) Right False -> ifM (inAnnex key)
( do ( Command.Drop.startLocal afile numcopies key Nothing
numcopies <- numCopies file
Command.Drop.startLocal file numcopies key Nothing
, stop , stop
) )

1
debian/changelog vendored
View file

@ -1,5 +1,6 @@
git-annex (5.20131231) UNRELEASED; urgency=medium git-annex (5.20131231) UNRELEASED; urgency=medium
* mirror: Support --all (and --unused).
* external special remote protocol: Added GETUUID. * external special remote protocol: Added GETUUID.
* Windows: Fix bug in direct mode merge code that could cause files * Windows: Fix bug in direct mode merge code that could cause files
in subdirectories to go missing. in subdirectories to go missing.

View file

@ -181,11 +181,16 @@ subdirectories).
repository. If a file's content is present in the source repository, it is repository. If a file's content is present in the source repository, it is
copied to the destination repository. If a file's content is not present in copied to the destination repository. If a file's content is not present in
the source repository, it will be dropped from the destination repository the source repository, it will be dropped from the destination repository
when possible. when the numcopies setting allows.
Note that mirror does not sync the git repository, but only the file Note that mirror does not sync the git repository, but only the file
contents. contents.
Also, --all may be specified to mirror all objects stored in the git
annex, not only objects used by currently existing files. However, this
bypasses checking the .gitattributes annex.numcopies setting when
dropping files.
* `addurl [url ...]` * `addurl [url ...]`
Downloads each url to its own file, which is added to the annex. Downloads each url to its own file, which is added to the annex.