diff options
author | Joey Hess <joey@kitenet.net> | 2010-11-10 13:01:17 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-11-10 13:01:17 -0400 |
commit | 361d28e1389e218c1d0baf378a740570a139f730 (patch) | |
tree | 9a48ef5a84e38df756d06218e36bff831476a0ae /Command | |
parent | 2ab448276c90cfb588b8608c2e84ebbe88c87e57 (diff) |
Unlocked files will now automatically be added back into the annex when committed (and the updated symlink committed), by some magic in the pre-commit hook.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/PreCommit.hs | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/Command/PreCommit.hs b/Command/PreCommit.hs index 2128f207d..117546359 100644 --- a/Command/PreCommit.hs +++ b/Command/PreCommit.hs @@ -7,16 +7,34 @@ module Command.PreCommit where +import Control.Monad.State (liftIO) +import Control.Monad (when, unless) + import Command +import qualified Annex +import qualified Backend +import qualified GitRepo as Git import qualified Command.Fix +import qualified Command.Lock +import qualified Command.Add {- Run by git pre-commit hook. -} start :: SubCmdStartString start file = do - -- If a file is unlocked for edit, inject its content into the - -- annex, and replace it with a symlink to the content. Git will - -- then commit that. - error "TODO" + -- If a file is unlocked for edit, add its new content to the + -- annex, -} + locked <- Command.Lock.isLocked file + when (not locked) $ do + pairs <- Backend.chooseBackends [file] + ok <- doSubCmd $ Command.Add.start $ pairs !! 0 + unless (ok) $ do + error $ "failed to add " ++ file ++ "; canceling commit" + -- git commit will have staged the file's content; + -- drop that and stage the symlink + g <- Annex.gitRepo + liftIO $ Git.run g ["reset", "-q", "--", file] + liftIO $ Git.run g ["add", "--", file] - -- fix symlinks + -- Fix symlinks as they are committed, this ensures the + -- relative links are not broken when moved around. Command.Fix.start file |