avoid pre-commit hook messing up new-style unlocked files in v6 repo

This commit is contained in:
Joey Hess 2015-12-09 15:18:25 -04:00
parent 05b598a057
commit 751120c171
Failed to extract signature
4 changed files with 24 additions and 7 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)