summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Version.hs6
-rw-r--r--CmdLine/Seek.hs2
-rw-r--r--Command/PreCommit.hs15
-rw-r--r--doc/git-annex-pre-commit.mdwn8
4 files changed, 24 insertions, 7 deletions
diff --git a/Annex/Version.hs b/Annex/Version.hs
index f9b24d9c4..4c2a990fa 100644
--- a/Annex/Version.hs
+++ b/Annex/Version.hs
@@ -43,6 +43,12 @@ versionSupportsDirectMode = go <$> getVersion
go (Just "6") = False
go _ = True
+versionSupportsUnlockedPointers :: Annex Bool
+versionSupportsUnlockedPointers = go <$> getVersion
+ where
+ go (Just "6") = True
+ go _ = False
+
setVersion :: Version -> Annex ()
setVersion = setConfig versionField
diff --git a/CmdLine/Seek.hs b/CmdLine/Seek.hs
index 0b6cc1e78..48545ce04 100644
--- a/CmdLine/Seek.hs
+++ b/CmdLine/Seek.hs
@@ -115,7 +115,7 @@ withPairs a params = seekActions $ return $ map a $ pairs [] params
pairs c (x:y:xs) = pairs ((x,y):c) xs
pairs _ _ = error "expected pairs"
-withFilesToBeCommitted :: (String -> CommandStart) -> CmdParams -> CommandSeek
+withFilesToBeCommitted :: (FilePath -> CommandStart) -> CmdParams -> CommandSeek
withFilesToBeCommitted a params = seekActions $ prepFiltered a $
seekHelper LsFiles.stagedNotDeleted params
diff --git a/Command/PreCommit.hs b/Command/PreCommit.hs
index 2d62b51f3..b6f52d01c 100644
--- a/Command/PreCommit.hs
+++ b/Command/PreCommit.hs
@@ -16,7 +16,9 @@ import qualified Command.Add
import qualified Command.Fix
import Annex.Direct
import Annex.Hook
+import Annex.Link
import Annex.View
+import Annex.Version
import Annex.View.ViewedFile
import Annex.LockFile
import Logs.View
@@ -49,9 +51,14 @@ seek ps = lockPreCommitHook $ ifM isDirect
void $ liftIO cleanup
, do
-- fix symlinks to files being committed
- withFilesToBeCommitted (whenAnnexed Command.Fix.start) ps
+ flip withFilesToBeCommitted ps $ \f ->
+ maybe stop (Command.Fix.start f)
+ =<< isAnnexLink f
-- inject unlocked files into the annex
- withFilesUnlockedToBeCommitted startIndirect ps
+ -- (not needed when repo version uses
+ -- unlocked pointer files)
+ unlessM versionSupportsUnlockedPointers $
+ withFilesUnlockedToBeCommitted startInjectUnlocked ps
)
runAnnexHook preCommitAnnexHook
-- committing changes to a view updates metadata
@@ -64,8 +71,8 @@ seek ps = lockPreCommitHook $ ifM isDirect
)
-startIndirect :: FilePath -> CommandStart
-startIndirect f = next $ do
+startInjectUnlocked :: FilePath -> CommandStart
+startInjectUnlocked f = next $ do
unlessM (callCommandAction $ Command.Add.start f) $
error $ "failed to add " ++ f ++ "; canceling commit"
next $ return True
diff --git a/doc/git-annex-pre-commit.mdwn b/doc/git-annex-pre-commit.mdwn
index bc1e86e18..21e5aef68 100644
--- a/doc/git-annex-pre-commit.mdwn
+++ b/doc/git-annex-pre-commit.mdwn
@@ -12,10 +12,14 @@ This is meant to be called from git's pre-commit hook. `git annex init`
automatically creates a pre-commit hook using this.
Fixes up symlinks that are staged as part of a commit, to ensure they
-point to annexed content. Also handles injecting changes to unlocked
-files into the annex. When in a view, updates metadata to reflect changes
+point to annexed content.
+
+When in a view, updates metadata to reflect changes
made to files in the view.
+When in a repository that has not been upgraded to annex.version 6,
+also handles injecting changes to unlocked files into the annex.
+
# SEE ALSO
[[git-annex]](1)