diff options
author | 2010-11-10 14:11:19 -0400 | |
---|---|---|
committer | 2010-11-10 14:11:19 -0400 | |
commit | f5f472e8550ae438b1dc751a18cccf0efbaccd1d (patch) | |
tree | 426ccf3aa6191898d27b3f62933170a698ba89c6 /Command/Lock.hs | |
parent | 05ca2bebff521b1fa9b79014b1856b828d897b6d (diff) | |
parent | 16ba23d48de00daccbfb481dd1baca91047f8b3e (diff) |
Merge branch 'checkout'
Diffstat (limited to 'Command/Lock.hs')
-rw-r--r-- | Command/Lock.hs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Command/Lock.hs b/Command/Lock.hs new file mode 100644 index 000000000..955749e93 --- /dev/null +++ b/Command/Lock.hs @@ -0,0 +1,50 @@ +{- git-annex command + - + - Copyright 2010 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +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 + +perform :: FilePath -> SubCmdPerform +perform file = do + liftIO $ removeFile file + g <- Annex.gitRepo + -- first reset the file to drop any changes checked into the index + liftIO $ Git.run g ["reset", "-q", "--", file] + -- checkout the symlink + liftIO $ Git.run g ["checkout", "--", file] + return $ Just $ return True -- no cleanup needed + +{- Checks if a file is unlocked for edit. + - + - But, without the symlink to the annex, cannot tell for sure if the + - file was annexed before. So, check if git thinks the file's type has + - changed (from a symlink to a regular file). -} +isLocked :: FilePath -> Annex Bool +isLocked file = do + g <- Annex.gitRepo + typechanged <- liftIO $ Git.typeChangedFiles g file + s <- liftIO $ getSymbolicLinkStatus file + return $ (not $ elem file typechanged) || isSymbolicLink s |