{- git-annex command - - Copyright 2010 Joey Hess - - Licensed under the GNU GPL version 3 or higher. -} module Command.Unlock where import Control.Monad.State (liftIO) import System.Directory import Command import qualified Annex import Types import Messages import Locations import Utility import Core seek :: [SubCmdSeek] seek = [withFilesInGit start] {- The unlock subcommand replaces the symlink with a copy of the file's - content. -} start :: SubCmdStartString start file = isAnnexed file $ \(key, _) -> do showStart "unlock" file return $ Just $ perform file key perform :: FilePath -> Key -> SubCmdPerform perform dest key = do g <- Annex.gitRepo let src = annexLocation g key liftIO $ removeFile dest showNote "copying..." ok <- liftIO $ boolSystem "cp" ["-p", src, dest] if ok then do liftIO $ allowWrite dest return $ Just $ return True else error "cp failed!"