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 ->
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 ->
Command.Drop.startRemote afile numcopies key r
Command.Drop.startRemote (Just afile) numcopies key r
safely a = either (const False) id <$> tryAnnex a

View file

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

View file

@ -18,18 +18,25 @@ import Annex.Content
import qualified Annex
def :: [Command]
def = [withOptions fromToOptions $ command "mirror" paramPaths seek
SectionCommon "mirror content of files to/from another repository"]
def = [withOptions (fromToOptions ++ keyOptions) $
command "mirror" paramPaths seek
SectionCommon "mirror content of files to/from another repository"]
seek :: [CommandSeek]
seek =
[ withField toOption Remote.byNameWithUUID $ \to ->
withField fromOption Remote.byNameWithUUID $ \from ->
withKeyOptions (startKey Nothing to from Nothing) $
withFilesInGit $ whenAnnexed $ start to from
]
start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
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
case (from, to) of
(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) $
error "--auto is not supported for mirror"
mirrorto r = ifM (inAnnex key)
( Command.Move.toStart r False (Just file) key
, do
numcopies <- numCopies file
Command.Drop.startRemote file numcopies key r
( Command.Move.toStart r False afile key
, Command.Drop.startRemote afile numcopies key r
)
mirrorfrom r = do
haskey <- Remote.hasKey r key
case haskey of
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)
( do
numcopies <- numCopies file
Command.Drop.startLocal file numcopies key Nothing
( Command.Drop.startLocal afile numcopies key Nothing
, stop
)

1
debian/changelog vendored
View file

@ -1,5 +1,6 @@
git-annex (5.20131231) UNRELEASED; urgency=medium
* mirror: Support --all (and --unused).
* external special remote protocol: Added GETUUID.
* Windows: Fix bug in direct mode merge code that could cause files
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
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
when possible.
when the numcopies setting allows.
Note that mirror does not sync the git repository, but only the file
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 ...]`
Downloads each url to its own file, which is added to the annex.