aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Command/Get.hs19
-rw-r--r--Command/Move.hs17
-rw-r--r--debian/changelog7
3 files changed, 26 insertions, 17 deletions
diff --git a/Command/Get.hs b/Command/Get.hs
index c4ba48312..35e25d975 100644
--- a/Command/Get.hs
+++ b/Command/Get.hs
@@ -12,6 +12,7 @@ import Command
import qualified Remote
import Annex.Content
import qualified Command.Move
+import Logs.Transfer
def :: [Command]
def = [withOptions [Command.Move.fromOption] $ command "get" paramPaths seek
@@ -25,24 +26,24 @@ start :: Maybe Remote -> FilePath -> (Key, Backend) -> CommandStart
start from file (key, _) = stopUnless (not <$> inAnnex key) $
autoCopies file key (<) $ \_numcopies ->
case from of
- Nothing -> go $ perform key
+ Nothing -> go $ perform key file
Just src ->
-- get --from = copy --from
stopUnless (Command.Move.fromOk src key) $
- go $ Command.Move.fromPerform src False key
+ go $ Command.Move.fromPerform src False key file
where
go a = do
showStart "get" file
- next a
+ next a
-perform :: Key -> CommandPerform
-perform key = stopUnless (getViaTmp key $ getKeyFile key) $
+perform :: Key -> FilePath -> CommandPerform
+perform key file = stopUnless (getViaTmp key $ getKeyFile key file) $
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 -> Annex Bool
-getKeyFile key file = dispatch =<< Remote.keyPossibilities key
+getKeyFile :: Key -> FilePath -> FilePath -> Annex Bool
+getKeyFile key file dest = dispatch =<< Remote.keyPossibilities key
where
dispatch [] = do
showNote "not available"
@@ -64,7 +65,7 @@ getKeyFile key file = dispatch =<< Remote.keyPossibilities key
| Remote.hasKeyCheap r =
either (const False) id <$> Remote.hasKey r key
| otherwise = return True
- docopy r continue = do
+ docopy r continue = download r key file $ do
showAction $ "from " ++ Remote.name r
- ifM (Remote.retrieveKeyFile r key file)
+ ifM (Remote.retrieveKeyFile r key dest)
( return True , continue)
diff --git a/Command/Move.hs b/Command/Move.hs
index 6ec7cd90a..8bba46878 100644
--- a/Command/Move.hs
+++ b/Command/Move.hs
@@ -16,6 +16,7 @@ import qualified Remote
import Annex.UUID
import qualified Option
import Logs.Presence
+import Logs.Transfer
def :: [Command]
def = [withOptions options $ command "move" paramPaths seek
@@ -68,9 +69,9 @@ toStart dest move file key = do
then stop -- not here, so nothing to do
else do
showMoveAction move file
- next $ toPerform dest move key
-toPerform :: Remote -> Bool -> Key -> CommandPerform
-toPerform dest move key = moveLock move key $ do
+ next $ toPerform dest move key file
+toPerform :: Remote -> Bool -> Key -> FilePath -> CommandPerform
+toPerform dest move key file = moveLock move key $ do
-- Checking the remote is expensive, so not done in the start step.
-- In fast mode, location tracking is assumed to be correct,
-- and an explicit check is not done, when copying. When moving,
@@ -88,7 +89,7 @@ toPerform dest move key = moveLock move key $ do
stop
Right False -> do
showAction $ "to " ++ Remote.name dest
- ok <- Remote.storeKey dest key
+ ok <- upload dest key file $ Remote.storeKey dest key
if ok
then finish
else do
@@ -118,7 +119,7 @@ fromStart src move file key
where
go = stopUnless (fromOk src key) $ do
showMoveAction move file
- next $ fromPerform src move key
+ next $ fromPerform src move key file
fromOk :: Remote -> Key -> Annex Bool
fromOk src key
| Remote.hasKeyCheap src =
@@ -129,11 +130,11 @@ fromOk src key
u <- getUUID
remotes <- Remote.keyPossibilities key
return $ u /= Remote.uuid src && elem src remotes
-fromPerform :: Remote -> Bool -> Key -> CommandPerform
-fromPerform src move key = moveLock move key $
+fromPerform :: Remote -> Bool -> Key -> FilePath -> CommandPerform
+fromPerform src move key file = moveLock move key $
ifM (inAnnex key)
( handle move True
- , do
+ , download src key file $ do
showAction $ "from " ++ Remote.name src
ok <- getViaTmp key $ Remote.retrieveKeyFile src key
handle move ok
diff --git a/debian/changelog b/debian/changelog
index 96d85da27..babd1786d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+git-annex (3.20120630) UNRELEASED; urgency=low
+
+ * get, move, copy: Now refuse to do anything when the requested file
+ transfer is already in progress by another process.
+
+ -- Joey Hess <joeyh@debian.org> Sun, 01 Jul 2012 15:04:37 -0400
+
git-annex (3.20120629) unstable; urgency=low
* cabal: Only try to use inotify on Linux.