summaryrefslogtreecommitdiff
path: root/Command/Reinject.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-04-17 18:03:39 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-04-17 18:03:39 -0400
commite9b6c350b15a93d82affadfabca18b3e95840cb1 (patch)
tree48230725260d92997b1fe58a698f57568f398475 /Command/Reinject.hs
parentc7c12e735b806eecd62048b822af2d8802671d3f (diff)
replace (Key, Backend) with Key
Only fsck and reinject and the test suite used the Backend, and they can look it up as needed from the Key. This simplifies the code and also speeds it up. There is a small behavior change here. Before, all commands would warn when acting on an annexed file with an unknown backend. Now, only fsck and reinject show that warning.
Diffstat (limited to 'Command/Reinject.hs')
-rw-r--r--Command/Reinject.hs23
1 files changed, 14 insertions, 9 deletions
diff --git a/Command/Reinject.hs b/Command/Reinject.hs
index 1609c6097..a516fe93c 100644
--- a/Command/Reinject.hs
+++ b/Command/Reinject.hs
@@ -12,6 +12,7 @@ import Command
import Logs.Location
import Annex.Content
import qualified Command.Fsck
+import qualified Backend
def :: [Command]
def = [command "reinject" (paramPair "SRC" "DEST") seek
@@ -33,16 +34,20 @@ start (src:dest:[])
next $ whenAnnexed (perform src) dest
start _ = error "specify a src file and a dest file"
-perform :: FilePath -> FilePath -> (Key, Backend) -> CommandPerform
-perform src _dest (key, backend) =
+perform :: FilePath -> FilePath -> Key -> CommandPerform
+perform src dest key = do
{- Check the content before accepting it. -}
- ifM (Command.Fsck.checkKeySizeOr reject key src
- <&&> Command.Fsck.checkBackendOr reject backend key src)
- ( do
- unlessM move $ error "mv failed!"
- next $ cleanup key
- , error "not reinjecting"
- )
+ v <- Backend.getBackend dest key
+ case v of
+ Nothing -> stop
+ Just backend ->
+ ifM (Command.Fsck.checkKeySizeOr reject key src
+ <&&> Command.Fsck.checkBackendOr reject backend key src)
+ ( do
+ unlessM move $ error "mv failed!"
+ next $ cleanup key
+ , error "not reinjecting"
+ )
where
-- the file might be on a different filesystem,
-- so mv is used rather than simply calling