aboutsummaryrefslogtreecommitdiff
path: root/Command/Move.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-07-20 15:22:55 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-07-20 15:23:43 -0400
commit258a3356e6461e0164441bb3a3e202cb9ef889e6 (patch)
treef198f34aaedeffb1af624f918a214527b066175a /Command/Move.hs
parente97cd57e1ac72d5a240852704ebaf92716fcad94 (diff)
--branch, stage 2
Show branch:file that is being operated on. I had to make ActionItem a type and not a type class because withKeyOptions' passed two different types of values when using the type class, and I could not get the type checker to accept that.
Diffstat (limited to 'Command/Move.hs')
-rw-r--r--Command/Move.hs34
1 files changed, 18 insertions, 16 deletions
diff --git a/Command/Move.hs b/Command/Move.hs
index 2d2a6a227..88ca4e01d 100644
--- a/Command/Move.hs
+++ b/Command/Move.hs
@@ -51,18 +51,20 @@ seek o = allowConcurrentOutput $
(moveFiles o)
start :: MoveOptions -> Bool -> FilePath -> Key -> CommandStart
-start o move = start' o move . Just
+start o move f k = start' o move afile k (mkActionItem afile)
+ where
+ afile = Just f
-startKey :: MoveOptions -> Bool -> Key -> CommandStart
+startKey :: MoveOptions -> Bool -> Key -> ActionItem -> CommandStart
startKey o move = start' o move Nothing
-start' :: MoveOptions -> Bool -> AssociatedFile -> Key -> CommandStart
-start' o move afile key =
+start' :: MoveOptions -> Bool -> AssociatedFile -> Key -> ActionItem -> CommandStart
+start' o move afile key ai =
case fromToOptions o of
- FromRemote src -> fromStart move afile key =<< getParsed src
- ToRemote dest -> toStart move afile key =<< getParsed dest
+ FromRemote src -> fromStart move afile key ai =<< getParsed src
+ ToRemote dest -> toStart move afile key ai =<< getParsed dest
-showMoveAction :: Bool -> Key -> AssociatedFile -> Annex ()
+showMoveAction :: Bool -> Key -> ActionItem -> Annex ()
showMoveAction move = showStart' (if move then "move" else "copy")
{- Moves (or copies) the content of an annexed file to a remote.
@@ -74,16 +76,16 @@ showMoveAction move = showStart' (if move then "move" else "copy")
- A file's content can be moved even if there are insufficient copies to
- allow it to be dropped.
-}
-toStart :: Bool -> AssociatedFile -> Key -> Remote -> CommandStart
-toStart move afile key dest = do
+toStart :: Bool -> AssociatedFile -> Key -> ActionItem -> Remote -> CommandStart
+toStart move afile key ai dest = do
u <- getUUID
ishere <- inAnnex key
if not ishere || u == Remote.uuid dest
then stop -- not here, so nothing to do
- else toStart' dest move afile key
+ else toStart' dest move afile key ai
-toStart' :: Remote -> Bool -> AssociatedFile -> Key -> CommandStart
-toStart' dest move afile key = do
+toStart' :: Remote -> Bool -> AssociatedFile -> Key -> ActionItem -> CommandStart
+toStart' dest move afile key ai = do
fast <- Annex.getState Annex.fast
if fast && not move && not (Remote.hasKeyCheap dest)
then ifM (expectedPresent dest key)
@@ -93,7 +95,7 @@ toStart' dest move afile key = do
else go False (Remote.hasKey dest key)
where
go fastcheck isthere = do
- showMoveAction move key afile
+ showMoveAction move key ai
next $ toPerform dest move key afile fastcheck =<< isthere
expectedPresent :: Remote -> Key -> Annex Bool
@@ -143,13 +145,13 @@ toPerform dest move key afile fastcheck isthere =
- If the current repository already has the content, it is still removed
- from the remote.
-}
-fromStart :: Bool -> AssociatedFile -> Key -> Remote -> CommandStart
-fromStart move afile key src
+fromStart :: Bool -> AssociatedFile -> Key -> ActionItem -> Remote -> CommandStart
+fromStart move afile key ai src
| move = go
| otherwise = stopUnless (not <$> inAnnex key) go
where
go = stopUnless (fromOk src key) $ do
- showMoveAction move key afile
+ showMoveAction move key ai
next $ fromPerform src move key afile
fromOk :: Remote -> Key -> Annex Bool