summaryrefslogtreecommitdiff
path: root/Annex/Direct.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-12-25 15:48:15 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-12-25 15:48:15 -0400
commit7a9f9fd6b81126a73a85ea7dab68260df36279b1 (patch)
tree6fc3177d163afd0e94d1624f3537fbe252d1c0f0 /Annex/Direct.hs
parent8602e201f2ac5dd9ab851e8023af080f77a9bd55 (diff)
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.
Diffstat (limited to 'Annex/Direct.hs')
-rw-r--r--Annex/Direct.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/Annex/Direct.hs b/Annex/Direct.hs
index 77a544257..e44081639 100644
--- a/Annex/Direct.hs
+++ b/Annex/Direct.hs
@@ -209,3 +209,11 @@ removeDirect k f = do
liftIO $ do
nukeFile f
void $ catchMaybeIO $ removeDirectory $ parentDir f
+
+{- Called when a direct mode file has been changed. Its old content may be
+ - lost. -}
+changedDirect :: Key -> FilePath -> Annex ()
+changedDirect oldk f = do
+ locs <- removeAssociatedFile oldk f
+ whenM (pure (null locs) <&&> not <$> inAnnex oldk) $
+ logStatus oldk InfoMissing