refactor some boilerplate
This commit is contained in:
parent
b400984ddf
commit
56bc3e95ca
31 changed files with 93 additions and 86 deletions
10
Command.hs
10
Command.hs
|
@ -65,12 +65,22 @@ data Command = Command {
|
||||||
cmdusesrepo :: Bool
|
cmdusesrepo :: Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{- Most commands operate on files in a git repo. -}
|
||||||
repoCommand :: String -> String -> [CommandSeek] -> String -> Command
|
repoCommand :: String -> String -> [CommandSeek] -> String -> Command
|
||||||
repoCommand n p s d = Command n p s d True
|
repoCommand n p s d = Command n p s d True
|
||||||
|
|
||||||
|
{- Others can run anywhere. -}
|
||||||
standaloneCommand :: String -> String -> [CommandSeek] -> String -> Command
|
standaloneCommand :: String -> String -> [CommandSeek] -> String -> Command
|
||||||
standaloneCommand n p s d = Command n p s d False
|
standaloneCommand n p s d = Command n p s d False
|
||||||
|
|
||||||
|
{- For start and perform stages to indicate what step to run next. -}
|
||||||
|
next :: a -> Annex (Maybe a)
|
||||||
|
next a = return $ Just a
|
||||||
|
|
||||||
|
{- Or to indicate nothing needs to be done. -}
|
||||||
|
stop :: Annex (Maybe a)
|
||||||
|
stop = return Nothing
|
||||||
|
|
||||||
{- Prepares a list of actions to run to perform a command, based on
|
{- Prepares a list of actions to run to perform a command, based on
|
||||||
- the parameters passed to it. -}
|
- the parameters passed to it. -}
|
||||||
prepCommand :: Command -> [String] -> Annex [Annex Bool]
|
prepCommand :: Command -> [String] -> Annex [Annex Bool]
|
||||||
|
|
|
@ -34,19 +34,19 @@ start :: CommandStartBackendFile
|
||||||
start pair@(file, _) = notAnnexed file $ do
|
start pair@(file, _) = notAnnexed file $ do
|
||||||
s <- liftIO $ getSymbolicLinkStatus file
|
s <- liftIO $ getSymbolicLinkStatus file
|
||||||
if (isSymbolicLink s) || (not $ isRegularFile s)
|
if (isSymbolicLink s) || (not $ isRegularFile s)
|
||||||
then return Nothing
|
then stop
|
||||||
else do
|
else do
|
||||||
showStart "add" file
|
showStart "add" file
|
||||||
return $ Just $ perform pair
|
next $ perform pair
|
||||||
|
|
||||||
perform :: BackendFile -> CommandPerform
|
perform :: BackendFile -> CommandPerform
|
||||||
perform (file, backend) = do
|
perform (file, backend) = do
|
||||||
stored <- Backend.storeFileKey file backend
|
stored <- Backend.storeFileKey file backend
|
||||||
case stored of
|
case stored of
|
||||||
Nothing -> return Nothing
|
Nothing -> stop
|
||||||
Just (key, _) -> do
|
Just (key, _) -> do
|
||||||
moveAnnex key file
|
moveAnnex key file
|
||||||
return $ Just $ cleanup file key
|
next $ cleanup file key
|
||||||
|
|
||||||
cleanup :: FilePath -> Key -> CommandCleanup
|
cleanup :: FilePath -> Key -> CommandCleanup
|
||||||
cleanup file key = do
|
cleanup file key = do
|
||||||
|
|
|
@ -25,4 +25,4 @@ start = do
|
||||||
g <- Annex.gitRepo
|
g <- Annex.gitRepo
|
||||||
u <- getUUID g
|
u <- getUUID g
|
||||||
liftIO $ putStrLn $ "annex.uuid=" ++ u
|
liftIO $ putStrLn $ "annex.uuid=" ++ u
|
||||||
return Nothing
|
stop
|
||||||
|
|
|
@ -29,9 +29,9 @@ start params = notBareRepo $ do
|
||||||
|
|
||||||
showStart "describe" name
|
showStart "describe" name
|
||||||
u <- Remote.nameToUUID name
|
u <- Remote.nameToUUID name
|
||||||
return $ Just $ perform u description
|
next $ perform u description
|
||||||
|
|
||||||
perform :: UUID -> String -> CommandPerform
|
perform :: UUID -> String -> CommandPerform
|
||||||
perform u description = do
|
perform u description = do
|
||||||
describeUUID u description
|
describeUUID u description
|
||||||
return $ Just $ Command.Init.cleanup
|
next $ Command.Init.cleanup
|
||||||
|
|
|
@ -29,11 +29,11 @@ seek = [withAttrFilesInGit "annex.numcopies" start]
|
||||||
start :: CommandStartAttrFile
|
start :: CommandStartAttrFile
|
||||||
start (file, attr) = isAnnexed file $ \(key, backend) -> do
|
start (file, attr) = isAnnexed file $ \(key, backend) -> do
|
||||||
inbackend <- Backend.hasKey key
|
inbackend <- Backend.hasKey key
|
||||||
if not inbackend
|
if inbackend
|
||||||
then return Nothing
|
then do
|
||||||
else do
|
|
||||||
showStart "drop" file
|
showStart "drop" file
|
||||||
return $ Just $ perform key backend numcopies
|
next $ perform key backend numcopies
|
||||||
|
else stop
|
||||||
where
|
where
|
||||||
numcopies = readMaybe attr :: Maybe Int
|
numcopies = readMaybe attr :: Maybe Int
|
||||||
|
|
||||||
|
@ -41,8 +41,8 @@ perform :: Key -> Backend Annex -> Maybe Int -> CommandPerform
|
||||||
perform key backend numcopies = do
|
perform key backend numcopies = do
|
||||||
success <- Backend.removeKey backend key numcopies
|
success <- Backend.removeKey backend key numcopies
|
||||||
if success
|
if success
|
||||||
then return $ Just $ cleanup key
|
then next $ cleanup key
|
||||||
else return Nothing
|
else stop
|
||||||
|
|
||||||
cleanup :: Key -> CommandCleanup
|
cleanup :: Key -> CommandCleanup
|
||||||
cleanup key = do
|
cleanup key = do
|
||||||
|
|
|
@ -26,20 +26,19 @@ start key = do
|
||||||
present <- inAnnex key
|
present <- inAnnex key
|
||||||
force <- Annex.getState Annex.force
|
force <- Annex.getState Annex.force
|
||||||
if not present
|
if not present
|
||||||
then return Nothing
|
then stop
|
||||||
else if not force
|
else if not force
|
||||||
then error "dropkey is can cause data loss; use --force if you're sure you want to do this"
|
then error "dropkey is can cause data loss; use --force if you're sure you want to do this"
|
||||||
else do
|
else do
|
||||||
showStart "dropkey" (show key)
|
showStart "dropkey" (show key)
|
||||||
return $ Just $ perform key
|
next $ perform key
|
||||||
|
|
||||||
perform :: Key -> CommandPerform
|
perform :: Key -> CommandPerform
|
||||||
perform key = do
|
perform key = do
|
||||||
removeAnnex key
|
removeAnnex key
|
||||||
return $ Just $ cleanup key
|
next $ cleanup key
|
||||||
|
|
||||||
cleanup :: Key -> CommandCleanup
|
cleanup :: Key -> CommandCleanup
|
||||||
cleanup key = do
|
cleanup key = do
|
||||||
logStatus key ValueMissing
|
logStatus key ValueMissing
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -49,13 +49,13 @@ start (unused, unusedbad, unusedtmp) s = notBareRepo $ search
|
||||||
, (unusedtmp, performOther gitAnnexTmpLocation)
|
, (unusedtmp, performOther gitAnnexTmpLocation)
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
search [] = return Nothing
|
search [] = stop
|
||||||
search ((m, a):rest) = do
|
search ((m, a):rest) = do
|
||||||
case M.lookup s m of
|
case M.lookup s m of
|
||||||
Nothing -> search rest
|
Nothing -> search rest
|
||||||
Just key -> do
|
Just key -> do
|
||||||
showStart "dropunused" s
|
showStart "dropunused" s
|
||||||
return $ Just $ a key
|
next $ a key
|
||||||
|
|
||||||
perform :: Key -> CommandPerform
|
perform :: Key -> CommandPerform
|
||||||
perform key = do
|
perform key = do
|
||||||
|
@ -64,7 +64,7 @@ perform key = do
|
||||||
Just name -> do
|
Just name -> do
|
||||||
r <- Remote.byName name
|
r <- Remote.byName name
|
||||||
showNote $ "from " ++ Remote.name r ++ "..."
|
showNote $ "from " ++ Remote.name r ++ "..."
|
||||||
return $ Just $ Command.Move.fromCleanup r True key
|
next $ Command.Move.fromCleanup r True key
|
||||||
_ -> do
|
_ -> do
|
||||||
backend <- keyBackend key
|
backend <- keyBackend key
|
||||||
Command.Drop.perform key backend (Just 0) -- force drop
|
Command.Drop.perform key backend (Just 0) -- force drop
|
||||||
|
@ -75,7 +75,7 @@ performOther filespec key = do
|
||||||
let f = filespec g key
|
let f = filespec g key
|
||||||
e <- liftIO $ doesFileExist f
|
e <- liftIO $ doesFileExist f
|
||||||
when e $ liftIO $ removeFile f
|
when e $ liftIO $ removeFile f
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
|
|
||||||
readUnusedLog :: FilePath -> Annex UnusedMap
|
readUnusedLog :: FilePath -> Annex UnusedMap
|
||||||
readUnusedLog prefix = do
|
readUnusedLog prefix = do
|
||||||
|
|
|
@ -25,4 +25,4 @@ start :: CommandStartString
|
||||||
start file = isAnnexed file $ \(key, _) -> do
|
start file = isAnnexed file $ \(key, _) -> do
|
||||||
exists <- inAnnex key
|
exists <- inAnnex key
|
||||||
when exists $ liftIO $ putStrLn file
|
when exists $ liftIO $ putStrLn file
|
||||||
return Nothing
|
stop
|
||||||
|
|
|
@ -30,17 +30,17 @@ start file = isAnnexed file $ \(key, _) -> do
|
||||||
link <- calcGitLink file key
|
link <- calcGitLink file key
|
||||||
l <- liftIO $ readSymbolicLink file
|
l <- liftIO $ readSymbolicLink file
|
||||||
if link == l
|
if link == l
|
||||||
then return Nothing
|
then stop
|
||||||
else do
|
else do
|
||||||
showStart "fix" file
|
showStart "fix" file
|
||||||
return $ Just $ perform file link
|
next $ perform file link
|
||||||
|
|
||||||
perform :: FilePath -> FilePath -> CommandPerform
|
perform :: FilePath -> FilePath -> CommandPerform
|
||||||
perform file link = do
|
perform file link = do
|
||||||
liftIO $ createDirectoryIfMissing True (parentDir file)
|
liftIO $ createDirectoryIfMissing True (parentDir file)
|
||||||
liftIO $ removeFile file
|
liftIO $ removeFile file
|
||||||
liftIO $ createSymbolicLink link file
|
liftIO $ createSymbolicLink link file
|
||||||
return $ Just $ cleanup file
|
next $ cleanup file
|
||||||
|
|
||||||
cleanup :: FilePath -> CommandCleanup
|
cleanup :: FilePath -> CommandCleanup
|
||||||
cleanup file = do
|
cleanup file = do
|
||||||
|
|
|
@ -34,7 +34,7 @@ start file = notBareRepo $ do
|
||||||
unless inbackend $ error $
|
unless inbackend $ error $
|
||||||
"key ("++keyName key++") is not present in backend"
|
"key ("++keyName key++") is not present in backend"
|
||||||
showStart "fromkey" file
|
showStart "fromkey" file
|
||||||
return $ Just $ perform file
|
next $ perform file
|
||||||
|
|
||||||
perform :: FilePath -> CommandPerform
|
perform :: FilePath -> CommandPerform
|
||||||
perform file = do
|
perform file = do
|
||||||
|
@ -42,7 +42,7 @@ perform file = do
|
||||||
link <- calcGitLink file key
|
link <- calcGitLink file key
|
||||||
liftIO $ createDirectoryIfMissing True (parentDir file)
|
liftIO $ createDirectoryIfMissing True (parentDir file)
|
||||||
liftIO $ createSymbolicLink link file
|
liftIO $ createSymbolicLink link file
|
||||||
return $ Just $ cleanup file
|
next $ cleanup file
|
||||||
|
|
||||||
cleanup :: FilePath -> CommandCleanup
|
cleanup :: FilePath -> CommandCleanup
|
||||||
cleanup file = do
|
cleanup file = do
|
||||||
|
|
|
@ -31,7 +31,7 @@ seek = [withAttrFilesInGit "annex.numcopies" start]
|
||||||
start :: CommandStartAttrFile
|
start :: CommandStartAttrFile
|
||||||
start (file, attr) = notBareRepo $ isAnnexed file $ \(key, backend) -> do
|
start (file, attr) = notBareRepo $ isAnnexed file $ \(key, backend) -> do
|
||||||
showStart "fsck" file
|
showStart "fsck" file
|
||||||
return $ Just $ perform key file backend numcopies
|
next $ perform key file backend numcopies
|
||||||
where
|
where
|
||||||
numcopies = readMaybe attr :: Maybe Int
|
numcopies = readMaybe attr :: Maybe Int
|
||||||
|
|
||||||
|
@ -42,8 +42,8 @@ perform key file backend numcopies = do
|
||||||
locationlogok <- verifyLocationLog key file
|
locationlogok <- verifyLocationLog key file
|
||||||
backendok <- Backend.fsckKey backend key (Just file) numcopies
|
backendok <- Backend.fsckKey backend key (Just file) numcopies
|
||||||
if locationlogok && backendok
|
if locationlogok && backendok
|
||||||
then return $ Just $ return True
|
then next $ return True
|
||||||
else return Nothing
|
else stop
|
||||||
|
|
||||||
{- Checks that the location log reflects the current status of the key,
|
{- Checks that the location log reflects the current status of the key,
|
||||||
in this repository only. -}
|
in this repository only. -}
|
||||||
|
|
|
@ -25,15 +25,14 @@ start :: CommandStartString
|
||||||
start file = isAnnexed file $ \(key, backend) -> do
|
start file = isAnnexed file $ \(key, backend) -> do
|
||||||
inannex <- inAnnex key
|
inannex <- inAnnex key
|
||||||
if inannex
|
if inannex
|
||||||
then return Nothing
|
then stop
|
||||||
else do
|
else do
|
||||||
showStart "get" file
|
showStart "get" file
|
||||||
return $ Just $ perform key backend
|
next $ perform key backend
|
||||||
|
|
||||||
perform :: Key -> Backend Annex -> CommandPerform
|
perform :: Key -> Backend Annex -> CommandPerform
|
||||||
perform key backend = do
|
perform key backend = do
|
||||||
ok <- getViaTmp key (Backend.retrieveKeyFile backend key)
|
ok <- getViaTmp key (Backend.retrieveKeyFile backend key)
|
||||||
if ok
|
if ok
|
||||||
then return $ Just $ return True -- no cleanup needed
|
then next $ return True -- no cleanup needed
|
||||||
else return Nothing
|
else stop
|
||||||
|
|
||||||
|
|
|
@ -24,5 +24,5 @@ start :: CommandStartKey
|
||||||
start key = do
|
start key = do
|
||||||
present <- inAnnex key
|
present <- inAnnex key
|
||||||
if present
|
if present
|
||||||
then return Nothing
|
then stop
|
||||||
else liftIO $ exitFailure
|
else liftIO $ exitFailure
|
||||||
|
|
|
@ -35,7 +35,7 @@ start description = do
|
||||||
when (null description) $
|
when (null description) $
|
||||||
error "please specify a description of this repository\n"
|
error "please specify a description of this repository\n"
|
||||||
showStart "init" description
|
showStart "init" description
|
||||||
return $ Just $ perform description
|
next $ perform description
|
||||||
|
|
||||||
perform :: String -> CommandPerform
|
perform :: String -> CommandPerform
|
||||||
perform description = do
|
perform description = do
|
||||||
|
@ -48,12 +48,12 @@ perform description = do
|
||||||
"This is a bare repository, so its description cannot be committed.\n" ++
|
"This is a bare repository, so its description cannot be committed.\n" ++
|
||||||
"To record the description, run this command in a clone of this repository:\n" ++
|
"To record the description, run this command in a clone of this repository:\n" ++
|
||||||
" git annex describe " ++ show u ++ " " ++ show description ++ "\n\n"
|
" git annex describe " ++ show u ++ " " ++ show description ++ "\n\n"
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
else do
|
else do
|
||||||
describeUUID u description
|
describeUUID u description
|
||||||
liftIO $ gitAttributesWrite g
|
liftIO $ gitAttributesWrite g
|
||||||
gitPreCommitHookWrite g
|
gitPreCommitHookWrite g
|
||||||
return $ Just cleanup
|
next cleanup
|
||||||
|
|
||||||
cleanup :: CommandCleanup
|
cleanup :: CommandCleanup
|
||||||
cleanup = do
|
cleanup = do
|
||||||
|
|
|
@ -39,7 +39,7 @@ start params = notBareRepo $ do
|
||||||
t <- findType fullconfig
|
t <- findType fullconfig
|
||||||
|
|
||||||
showStart "initremote" name
|
showStart "initremote" name
|
||||||
return $ Just $ perform t u $ M.union config c
|
next $ perform t u $ M.union config c
|
||||||
|
|
||||||
where
|
where
|
||||||
ws = words params
|
ws = words params
|
||||||
|
@ -49,7 +49,7 @@ start params = notBareRepo $ do
|
||||||
perform :: RemoteClass.RemoteType Annex -> UUID -> RemoteClass.RemoteConfig -> CommandPerform
|
perform :: RemoteClass.RemoteType Annex -> UUID -> RemoteClass.RemoteConfig -> CommandPerform
|
||||||
perform t u c = do
|
perform t u c = do
|
||||||
c' <- RemoteClass.setup t u c
|
c' <- RemoteClass.setup t u c
|
||||||
return $ Just $ cleanup u c'
|
next $ cleanup u c'
|
||||||
|
|
||||||
cleanup :: UUID -> RemoteClass.RemoteConfig -> CommandCleanup
|
cleanup :: UUID -> RemoteClass.RemoteConfig -> CommandCleanup
|
||||||
cleanup u c = do
|
cleanup u c = do
|
||||||
|
|
|
@ -26,7 +26,7 @@ seek = [withFilesUnlocked start]
|
||||||
start :: CommandStartBackendFile
|
start :: CommandStartBackendFile
|
||||||
start (file, _) = do
|
start (file, _) = do
|
||||||
showStart "lock" file
|
showStart "lock" file
|
||||||
return $ Just $ perform file
|
next $ perform file
|
||||||
|
|
||||||
perform :: FilePath -> CommandPerform
|
perform :: FilePath -> CommandPerform
|
||||||
perform file = do
|
perform file = do
|
||||||
|
@ -36,4 +36,4 @@ perform file = do
|
||||||
liftIO $ Git.run g "reset" [Params "-q --", File file]
|
liftIO $ Git.run g "reset" [Params "-q --", File file]
|
||||||
-- checkout the symlink
|
-- checkout the symlink
|
||||||
liftIO $ Git.run g "checkout" [Param "--", File file]
|
liftIO $ Git.run g "checkout" [Param "--", File file]
|
||||||
return $ Just $ return True -- no cleanup needed
|
next $ return True -- no cleanup needed
|
||||||
|
|
|
@ -45,7 +45,7 @@ start = do
|
||||||
showLongNote $ "running: dot -Tx11 " ++ file
|
showLongNote $ "running: dot -Tx11 " ++ file
|
||||||
showProgress
|
showProgress
|
||||||
r <- liftIO $ boolSystem "dot" [Param "-Tx11", File file]
|
r <- liftIO $ boolSystem "dot" [Param "-Tx11", File file]
|
||||||
return $ Just $ return $ Just $ return r
|
next $ next $ return r
|
||||||
where
|
where
|
||||||
file = "map.dot"
|
file = "map.dot"
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,8 @@ start (file, b) = isAnnexed file $ \(key, oldbackend) -> do
|
||||||
if (newbackend /= oldbackend || upgradable) && exists
|
if (newbackend /= oldbackend || upgradable) && exists
|
||||||
then do
|
then do
|
||||||
showStart "migrate" file
|
showStart "migrate" file
|
||||||
return $ Just $ perform file key newbackend
|
next $ perform file key newbackend
|
||||||
else
|
else stop
|
||||||
return Nothing
|
|
||||||
where
|
where
|
||||||
choosebackend Nothing = do
|
choosebackend Nothing = do
|
||||||
backends <- Backend.list
|
backends <- Backend.list
|
||||||
|
@ -55,7 +54,7 @@ perform file oldkey newbackend = do
|
||||||
let src = gitAnnexLocation g oldkey
|
let src = gitAnnexLocation g oldkey
|
||||||
stored <- Backend.storeFileKey src $ Just newbackend
|
stored <- Backend.storeFileKey src $ Just newbackend
|
||||||
case stored of
|
case stored of
|
||||||
Nothing -> return Nothing
|
Nothing -> stop
|
||||||
Just (newkey, _) -> do
|
Just (newkey, _) -> do
|
||||||
ok <- getViaTmpUnchecked newkey $ \t -> do
|
ok <- getViaTmpUnchecked newkey $ \t -> do
|
||||||
-- Make a hard link to the old backend's
|
-- Make a hard link to the old backend's
|
||||||
|
@ -68,5 +67,5 @@ perform file oldkey newbackend = do
|
||||||
then do
|
then do
|
||||||
-- Update symlink to use the new key.
|
-- Update symlink to use the new key.
|
||||||
liftIO $ removeFile file
|
liftIO $ removeFile file
|
||||||
return $ Just $ Command.Add.cleanup file newkey
|
next $ Command.Add.cleanup file newkey
|
||||||
else return Nothing
|
else stop
|
||||||
|
|
|
@ -73,10 +73,10 @@ toStart dest move file = isAnnexed file $ \(key, _) -> do
|
||||||
u <- getUUID g
|
u <- getUUID g
|
||||||
ishere <- inAnnex key
|
ishere <- inAnnex key
|
||||||
if not ishere || u == Remote.uuid dest
|
if not ishere || u == Remote.uuid dest
|
||||||
then return Nothing -- not here, so nothing to do
|
then stop -- not here, so nothing to do
|
||||||
else do
|
else do
|
||||||
showAction move file
|
showAction move file
|
||||||
return $ Just $ toPerform dest move key
|
next $ toPerform dest move key
|
||||||
toPerform :: Remote.Remote Annex -> Bool -> Key -> CommandPerform
|
toPerform :: Remote.Remote Annex -> Bool -> Key -> CommandPerform
|
||||||
toPerform dest move key = do
|
toPerform dest move key = do
|
||||||
-- Checking the remote is expensive, so not done in the start step.
|
-- Checking the remote is expensive, so not done in the start step.
|
||||||
|
@ -92,14 +92,14 @@ toPerform dest move key = do
|
||||||
case isthere of
|
case isthere of
|
||||||
Left err -> do
|
Left err -> do
|
||||||
showNote $ show err
|
showNote $ show err
|
||||||
return Nothing
|
stop
|
||||||
Right False -> do
|
Right False -> do
|
||||||
showNote $ "to " ++ Remote.name dest ++ "..."
|
showNote $ "to " ++ Remote.name dest ++ "..."
|
||||||
ok <- Remote.storeKey dest key
|
ok <- Remote.storeKey dest key
|
||||||
if ok
|
if ok
|
||||||
then return $ Just $ toCleanup dest move key
|
then next $ toCleanup dest move key
|
||||||
else return Nothing -- failed
|
else stop -- failed
|
||||||
Right True -> return $ Just $ toCleanup dest move key
|
Right True -> next $ toCleanup dest move key
|
||||||
toCleanup :: Remote.Remote Annex -> Bool -> Key -> CommandCleanup
|
toCleanup :: Remote.Remote Annex -> Bool -> Key -> CommandCleanup
|
||||||
toCleanup dest move key = do
|
toCleanup dest move key = do
|
||||||
remoteHasKey dest key True
|
remoteHasKey dest key True
|
||||||
|
@ -119,21 +119,21 @@ fromStart src move file = isAnnexed file $ \(key, _) -> do
|
||||||
u <- getUUID g
|
u <- getUUID g
|
||||||
(remotes, _) <- Remote.keyPossibilities key
|
(remotes, _) <- Remote.keyPossibilities key
|
||||||
if (u == Remote.uuid src) || (null $ filter (== src) remotes)
|
if (u == Remote.uuid src) || (null $ filter (== src) remotes)
|
||||||
then return Nothing
|
then stop
|
||||||
else do
|
else do
|
||||||
showAction move file
|
showAction move file
|
||||||
return $ Just $ fromPerform src move key
|
next $ fromPerform src move key
|
||||||
fromPerform :: Remote.Remote Annex -> Bool -> Key -> CommandPerform
|
fromPerform :: Remote.Remote Annex -> Bool -> Key -> CommandPerform
|
||||||
fromPerform src move key = do
|
fromPerform src move key = do
|
||||||
ishere <- inAnnex key
|
ishere <- inAnnex key
|
||||||
if ishere
|
if ishere
|
||||||
then return $ Just $ fromCleanup src move key
|
then next $ fromCleanup src move key
|
||||||
else do
|
else do
|
||||||
showNote $ "from " ++ Remote.name src ++ "..."
|
showNote $ "from " ++ Remote.name src ++ "..."
|
||||||
ok <- getViaTmp key $ Remote.retrieveKeyFile src key
|
ok <- getViaTmp key $ Remote.retrieveKeyFile src key
|
||||||
if ok
|
if ok
|
||||||
then return $ Just $ fromCleanup src move key
|
then next $ fromCleanup src move key
|
||||||
else return Nothing -- fail
|
else stop -- fail
|
||||||
fromCleanup :: Remote.Remote Annex -> Bool -> Key -> CommandCleanup
|
fromCleanup :: Remote.Remote Annex -> Bool -> Key -> CommandCleanup
|
||||||
fromCleanup src True key = do
|
fromCleanup src True key = do
|
||||||
ok <- Remote.removeKey src key
|
ok <- Remote.removeKey src key
|
||||||
|
|
|
@ -27,13 +27,13 @@ seek = [withFilesToBeCommitted Command.Fix.start,
|
||||||
withFilesUnlockedToBeCommitted start]
|
withFilesUnlockedToBeCommitted start]
|
||||||
|
|
||||||
start :: CommandStartBackendFile
|
start :: CommandStartBackendFile
|
||||||
start pair = return $ Just $ perform pair
|
start pair = next $ perform pair
|
||||||
|
|
||||||
perform :: BackendFile -> CommandPerform
|
perform :: BackendFile -> CommandPerform
|
||||||
perform pair@(file, _) = do
|
perform pair@(file, _) = do
|
||||||
ok <- doCommand $ Command.Add.start pair
|
ok <- doCommand $ Command.Add.start pair
|
||||||
if ok
|
if ok
|
||||||
then return $ Just $ cleanup file
|
then next $ cleanup file
|
||||||
else error $ "failed to add " ++ file ++ "; canceling commit"
|
else error $ "failed to add " ++ file ++ "; canceling commit"
|
||||||
|
|
||||||
cleanup :: FilePath -> CommandCleanup
|
cleanup :: FilePath -> CommandCleanup
|
||||||
|
|
|
@ -24,9 +24,9 @@ start :: CommandStartString
|
||||||
start name = notBareRepo $ do
|
start name = notBareRepo $ do
|
||||||
showStart "semitrust" name
|
showStart "semitrust" name
|
||||||
u <- Remote.nameToUUID name
|
u <- Remote.nameToUUID name
|
||||||
return $ Just $ perform u
|
next $ perform u
|
||||||
|
|
||||||
perform :: UUID -> CommandPerform
|
perform :: UUID -> CommandPerform
|
||||||
perform uuid = do
|
perform uuid = do
|
||||||
trustSet uuid SemiTrusted
|
trustSet uuid SemiTrusted
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
|
|
|
@ -26,7 +26,7 @@ seek = [withTempFile start]
|
||||||
start :: CommandStartString
|
start :: CommandStartString
|
||||||
start file = do
|
start file = do
|
||||||
showStart "setkey" file
|
showStart "setkey" file
|
||||||
return $ Just $ perform file
|
next $ perform file
|
||||||
|
|
||||||
perform :: FilePath -> CommandPerform
|
perform :: FilePath -> CommandPerform
|
||||||
perform file = do
|
perform file = do
|
||||||
|
@ -40,7 +40,7 @@ perform file = do
|
||||||
boolSystem "mv" [File file, File dest]
|
boolSystem "mv" [File file, File dest]
|
||||||
else return True
|
else return True
|
||||||
if ok
|
if ok
|
||||||
then return $ Just $ cleanup
|
then next cleanup
|
||||||
else error "mv failed!"
|
else error "mv failed!"
|
||||||
|
|
||||||
cleanup :: CommandCleanup
|
cleanup :: CommandCleanup
|
||||||
|
|
|
@ -24,9 +24,9 @@ start :: CommandStartString
|
||||||
start name = notBareRepo $ do
|
start name = notBareRepo $ do
|
||||||
showStart "trust" name
|
showStart "trust" name
|
||||||
u <- Remote.nameToUUID name
|
u <- Remote.nameToUUID name
|
||||||
return $ Just $ perform u
|
next $ perform u
|
||||||
|
|
||||||
perform :: UUID -> CommandPerform
|
perform :: UUID -> CommandPerform
|
||||||
perform uuid = do
|
perform uuid = do
|
||||||
trustSet uuid Trusted
|
trustSet uuid Trusted
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
|
|
|
@ -43,16 +43,16 @@ start file = isAnnexed file $ \(key, backend) -> do
|
||||||
Annex.changeState $ \s -> s { Annex.force = True }
|
Annex.changeState $ \s -> s { Annex.force = True }
|
||||||
|
|
||||||
showStart "unannex" file
|
showStart "unannex" file
|
||||||
return $ Just $ perform file key backend
|
next $ perform file key backend
|
||||||
else return Nothing
|
else stop
|
||||||
|
|
||||||
perform :: FilePath -> Key -> Backend Annex -> CommandPerform
|
perform :: FilePath -> Key -> Backend Annex -> CommandPerform
|
||||||
perform file key backend = do
|
perform file key backend = do
|
||||||
-- force backend to always remove
|
-- force backend to always remove
|
||||||
ok <- Backend.removeKey backend key (Just 0)
|
ok <- Backend.removeKey backend key (Just 0)
|
||||||
if ok
|
if ok
|
||||||
then return $ Just $ cleanup file key
|
then next $ cleanup file key
|
||||||
else return Nothing
|
else stop
|
||||||
|
|
||||||
cleanup :: FilePath -> Key -> CommandCleanup
|
cleanup :: FilePath -> Key -> CommandCleanup
|
||||||
cleanup file key = do
|
cleanup file key = do
|
||||||
|
|
|
@ -30,7 +30,7 @@ seek = [withFilesInGit Command.Unannex.start, withNothing start]
|
||||||
start :: CommandStartNothing
|
start :: CommandStartNothing
|
||||||
start = do
|
start = do
|
||||||
showStart "uninit" ""
|
showStart "uninit" ""
|
||||||
return $ Just $ perform
|
next perform
|
||||||
|
|
||||||
perform :: CommandPerform
|
perform :: CommandPerform
|
||||||
perform = do
|
perform = do
|
||||||
|
@ -39,7 +39,7 @@ perform = do
|
||||||
gitPreCommitHookUnWrite g
|
gitPreCommitHookUnWrite g
|
||||||
liftIO $ gitAttributesUnWrite g
|
liftIO $ gitAttributesUnWrite g
|
||||||
|
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
|
|
||||||
gitPreCommitHookUnWrite :: Git.Repo -> Annex ()
|
gitPreCommitHookUnWrite :: Git.Repo -> Annex ()
|
||||||
gitPreCommitHookUnWrite repo = do
|
gitPreCommitHookUnWrite repo = do
|
||||||
|
|
|
@ -34,7 +34,7 @@ seek = [withFilesInGit start]
|
||||||
start :: CommandStartString
|
start :: CommandStartString
|
||||||
start file = isAnnexed file $ \(key, _) -> do
|
start file = isAnnexed file $ \(key, _) -> do
|
||||||
showStart "unlock" file
|
showStart "unlock" file
|
||||||
return $ Just $ perform file key
|
next $ perform file key
|
||||||
|
|
||||||
perform :: FilePath -> Key -> CommandPerform
|
perform :: FilePath -> Key -> CommandPerform
|
||||||
perform dest key = do
|
perform dest key = do
|
||||||
|
@ -52,5 +52,5 @@ perform dest key = do
|
||||||
if ok
|
if ok
|
||||||
then do
|
then do
|
||||||
liftIO $ allowWrite dest
|
liftIO $ allowWrite dest
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
else error "copy failed!"
|
else error "copy failed!"
|
||||||
|
|
|
@ -24,9 +24,9 @@ start :: CommandStartString
|
||||||
start name = notBareRepo $ do
|
start name = notBareRepo $ do
|
||||||
showStart "untrust" name
|
showStart "untrust" name
|
||||||
u <- Remote.nameToUUID name
|
u <- Remote.nameToUUID name
|
||||||
return $ Just $ perform u
|
next $ perform u
|
||||||
|
|
||||||
perform :: UUID -> CommandPerform
|
perform :: UUID -> CommandPerform
|
||||||
perform uuid = do
|
perform uuid = do
|
||||||
trustSet uuid UnTrusted
|
trustSet uuid UnTrusted
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
|
|
|
@ -37,7 +37,7 @@ seek = [withNothing start]
|
||||||
start :: CommandStartNothing
|
start :: CommandStartNothing
|
||||||
start = notBareRepo $ do
|
start = notBareRepo $ do
|
||||||
showStart "unused" ""
|
showStart "unused" ""
|
||||||
return $ Just perform
|
next perform
|
||||||
|
|
||||||
perform :: CommandPerform
|
perform :: CommandPerform
|
||||||
perform = do
|
perform = do
|
||||||
|
@ -47,7 +47,7 @@ perform = do
|
||||||
r <- Remote.byName name
|
r <- Remote.byName name
|
||||||
checkRemoteUnused r
|
checkRemoteUnused r
|
||||||
_ -> checkUnused
|
_ -> checkUnused
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
|
|
||||||
checkUnused :: Annex ()
|
checkUnused :: Annex ()
|
||||||
checkUnused = do
|
checkUnused = do
|
||||||
|
|
|
@ -24,4 +24,4 @@ start = do
|
||||||
showStart "upgrade" ""
|
showStart "upgrade" ""
|
||||||
r <- upgrade
|
r <- upgrade
|
||||||
checkVersion
|
checkVersion
|
||||||
return $ Just $ return $ Just $ return r
|
next $ next $ return r
|
||||||
|
|
|
@ -28,6 +28,6 @@ start = do
|
||||||
liftIO $ putStrLn $ "default repository version: " ++ defaultVersion
|
liftIO $ putStrLn $ "default repository version: " ++ defaultVersion
|
||||||
liftIO $ putStrLn $ "supported repository versions: " ++ vs supportedVersions
|
liftIO $ putStrLn $ "supported repository versions: " ++ vs supportedVersions
|
||||||
liftIO $ putStrLn $ "upgrade supported from repository versions: " ++ vs upgradableVersions
|
liftIO $ putStrLn $ "upgrade supported from repository versions: " ++ vs upgradableVersions
|
||||||
return Nothing
|
stop
|
||||||
where
|
where
|
||||||
vs l = join " " l
|
vs l = join " " l
|
||||||
|
|
|
@ -26,7 +26,7 @@ seek = [withFilesInGit start]
|
||||||
start :: CommandStartString
|
start :: CommandStartString
|
||||||
start file = isAnnexed file $ \(key, _) -> do
|
start file = isAnnexed file $ \(key, _) -> do
|
||||||
showStart "whereis" file
|
showStart "whereis" file
|
||||||
return $ Just $ perform key
|
next $ perform key
|
||||||
|
|
||||||
perform :: Key -> CommandPerform
|
perform :: Key -> CommandPerform
|
||||||
perform key = do
|
perform key = do
|
||||||
|
@ -35,12 +35,12 @@ perform key = do
|
||||||
let num = length uuids
|
let num = length uuids
|
||||||
showNote $ show num ++ " " ++ copiesplural num
|
showNote $ show num ++ " " ++ copiesplural num
|
||||||
if null $ uuids
|
if null $ uuids
|
||||||
then return Nothing
|
then stop
|
||||||
else do
|
else do
|
||||||
pp <- prettyPrintUUIDs uuids
|
pp <- prettyPrintUUIDs uuids
|
||||||
showLongNote $ pp
|
showLongNote $ pp
|
||||||
showProgress
|
showProgress
|
||||||
return $ Just $ return True
|
next $ return True
|
||||||
where
|
where
|
||||||
copiesplural 1 = "copy"
|
copiesplural 1 = "copy"
|
||||||
copiesplural _ = "copies"
|
copiesplural _ = "copies"
|
||||||
|
|
Loading…
Reference in a new issue