
Several places assumed this would not happen, and when the AssociatedFile was Nothing, did nothing. As part of this, preferred content checks pass the Key around. Note that checkMatcher is sometimes now called with Just Key and Just File. It currently constructs a FileMatcher, ignoring the Key. However, if it constructed a FileKeyMatcher, which contained both, then it might be possible to speed up parts of Limit, which currently call the somewhat expensive lookupFileKey to get the Key. I have not made this optimisation yet, because I am not sure if the key is always the same. Will need some significant checking to satisfy myself that's the case..
41 lines
1.3 KiB
Haskell
41 lines
1.3 KiB
Haskell
{- git-annex command
|
|
-
|
|
- Copyright 2010 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
-}
|
|
|
|
module Command.Copy where
|
|
|
|
import Common.Annex
|
|
import Command
|
|
import GitAnnex.Options
|
|
import qualified Command.Move
|
|
import qualified Remote
|
|
import Annex.Wanted
|
|
import Config.NumCopies
|
|
|
|
def :: [Command]
|
|
def = [withOptions Command.Move.moveOptions $ command "copy" paramPaths seek
|
|
SectionCommon "copy content of files to/from another repository"]
|
|
|
|
seek :: CommandSeek
|
|
seek ps = do
|
|
to <- getOptionField toOption Remote.byNameWithUUID
|
|
from <- getOptionField fromOption Remote.byNameWithUUID
|
|
withKeyOptions
|
|
(Command.Move.startKey to from False)
|
|
(withFilesInGit $ whenAnnexed $ start to from)
|
|
ps
|
|
|
|
{- A copy is just a move that does not delete the source file.
|
|
- However, --auto mode avoids unnecessary copies, and avoids getting or
|
|
- sending non-preferred content. -}
|
|
start :: Maybe Remote -> Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
|
|
start to from file (key, backend) = stopUnless shouldCopy $
|
|
Command.Move.start to from False file (key, backend)
|
|
where
|
|
shouldCopy = checkAuto (check <||> numCopiesCheck file key (<))
|
|
check = case to of
|
|
Nothing -> wantGet False (Just key) (Just file)
|
|
Just r -> wantSend False (Just key) (Just file) (Remote.uuid r)
|