rework command dispatching for add and pre-commit
Both subcommands do two different operations on different sets of files, so allowing a subcommand to perform a list of operations cleans things up.
This commit is contained in:
parent
b5ce88dd2a
commit
ce62f5abf1
6 changed files with 84 additions and 71 deletions
|
@ -9,23 +9,17 @@ module Command.Lock where
|
|||
|
||||
import Control.Monad.State (liftIO)
|
||||
import System.Directory
|
||||
import System.Posix.Files
|
||||
|
||||
import Types
|
||||
import Command
|
||||
import Messages
|
||||
import qualified Annex
|
||||
import qualified GitRepo as Git
|
||||
|
||||
{- Undo unlock -}
|
||||
start :: SubCmdStartString
|
||||
start file = do
|
||||
locked <- isLocked file
|
||||
if locked
|
||||
then return Nothing
|
||||
else do
|
||||
showStart "lock" file
|
||||
return $ Just $ perform file
|
||||
start :: SubCmdStartBackendFile
|
||||
start (file, _) = do
|
||||
showStart "lock" file
|
||||
return $ Just $ perform file
|
||||
|
||||
perform :: FilePath -> SubCmdPerform
|
||||
perform file = do
|
||||
|
@ -36,17 +30,3 @@ perform file = do
|
|||
-- checkout the symlink
|
||||
liftIO $ Git.run g ["checkout", "--", file]
|
||||
return $ Just $ return True -- no cleanup needed
|
||||
|
||||
{- Checks if a file is unlocked for edit. -}
|
||||
isLocked :: FilePath -> Annex Bool
|
||||
isLocked file = do
|
||||
-- check if it's a symlink first, as that's cheapest
|
||||
s <- liftIO $ getSymbolicLinkStatus file
|
||||
if (isSymbolicLink s)
|
||||
then return True -- Symlinked files are always locked.
|
||||
else do
|
||||
-- Not a symlink, so see if the type has changed,
|
||||
-- if so it is presumed to have been unlocked.
|
||||
g <- Annex.gitRepo
|
||||
typechanged <- liftIO $ Git.typeChangedFiles g file
|
||||
return $ not $ elem file typechanged
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue