summaryrefslogtreecommitdiff
path: root/Command/PreCommit.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2010-11-10 13:01:17 -0400
committerGravatar Joey Hess <joey@kitenet.net>2010-11-10 13:01:17 -0400
commit361d28e1389e218c1d0baf378a740570a139f730 (patch)
tree9a48ef5a84e38df756d06218e36bff831476a0ae /Command/PreCommit.hs
parent2ab448276c90cfb588b8608c2e84ebbe88c87e57 (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/PreCommit.hs')
-rw-r--r--Command/PreCommit.hs28
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