assistant direct mode file add/change bookkeeping

When a file is changed in direct mode, the old content is probably lost
(at least from the local repo), and bookeeping needs to be updated to
reflect this.

Also, synthetic add events are generated at assistant startup, so
make it detect when the file has not really changed, and avoid re-adding
it.

This does add the overhead of querying the runing git cat-file for the
key that's recorded in git for the file, each time a file is added or
modified in direct mode.
This commit is contained in:
Joey Hess 2012-12-25 15:48:15 -04:00
parent 221584ec7f
commit eb40227d15
4 changed files with 39 additions and 7 deletions

View file

@ -10,6 +10,7 @@ module Annex.Content.Direct (
removeAssociatedFile,
addAssociatedFile,
goodContent,
changedFileStatus,
updateCache,
recordedCache,
compareCache,
@ -79,6 +80,12 @@ goodContent key file = do
old <- recordedCache key
compareCache file old
changedFileStatus :: Key -> FileStatus -> Annex Bool
changedFileStatus key status = do
old <- recordedCache key
let curr = toCache status
return $ curr == old
{- Gets the recorded cache for a key. -}
recordedCache :: Key -> Annex (Maybe Cache)
recordedCache key = withCacheFile key $ \cachefile ->