get rid of need to run pre-commit hook when assistant commits in direct mode

That hook updates associated file bookkeeping info for direct mode.
But, everything already called addAssociatedFile when adding/changing a
file. It only needed to also call removeAssociatedFile when deleting a file,
or a directory.

This should make bulk adds faster, by some possibly significant amount.
Bulk removals may be a little slower, since it has to use catKeyFile now
on each removed file, but will still be faster than adds.
This commit is contained in:
Joey Hess 2013-04-24 18:04:59 -04:00
parent cb575cbe91
commit ebee93a837
2 changed files with 14 additions and 11 deletions

View file

@ -157,23 +157,21 @@ commitStaged = do
case v of
Left _ -> return False
Right _ -> do
direct <- isDirect
let params = nomessage $ catMaybes
[ Just $ Param "--quiet"
{- In indirect mode, avoid running the
- usual git-annex pre-commit hook;
- watch does the same symlink fixing,
- and we don't want to deal with unlocked
- files in these commits. -}
, if direct then Nothing else Just $ Param "--no-verify"
]
{- Empty commits may be made if tree changes cancel
- each other out, etc. Git returns nonzero on those,
- so don't propigate out commit failures. -}
void $ inRepo $ catchMaybeIO .
Git.Command.runQuiet (Param "commit" : params)
Git.Command.runQuiet
(Param "commit" : nomessage params)
return True
where
params =
[ Param "--quiet"
{- Avoid running the usual pre-commit hook;
- the Watcher does the same symlink fixing,
- and direct mode bookkeeping updating. -}
, Param "--no-verify"
]
nomessage ps
| Git.Version.older "1.7.2" =
Param "-m" : Param "autocommit" : ps

View file

@ -300,6 +300,11 @@ onDel file _ = do
onDel' :: FilePath -> Annex ()
onDel' file = do
whenM isDirect $ do
mkey <- catKeyFile file
case mkey of
Nothing -> noop
Just key -> void $ removeAssociatedFile key file
Annex.Queue.addUpdateIndex =<<
inRepo (Git.UpdateIndex.unstageFile file)