summaryrefslogtreecommitdiff
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
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.
-rw-r--r--Command/PreCommit.hs28
-rw-r--r--debian/changelog3
2 files changed, 26 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
diff --git a/debian/changelog b/debian/changelog
index 0e121fda2..02c4ec295 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,9 @@ git-annex (0.04) UNRELEASED; urgency=low
* Add unlock subcommand, which replaces the symlink with a copy of
the file's content in preparation of changing it.
* Add lock subcommand.
+ * 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.
* Add build dep on libghc6-testpack-dev.
* Add annex.version, which will be used to automate upgrades
between incompatable versions.