summaryrefslogtreecommitdiff
path: root/Assistant
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-05-16 14:49:12 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-05-16 14:49:12 -0400
commitd7820aa98ad0fe973d0a1aae2861abdab60de7a5 (patch)
tree5699a9b4ea84ff89931247fe527e9c0f44e06215 /Assistant
parent0346651ab6ef0c53aa7e0daffd821863858081fe (diff)
assistant: Fix race in v6 mode that caused downloaded file content to sometimes not replace pointer files.
The keys database handle needs to be closed after merging, because the smudge filter, in another process, updates the database. Old cached info can be read for a while from the open database handle; closing it ensures that the info written by the smudge filter is available. This is pretty horribly ad-hoc, and it's especially nasty that the transferrer closes the database every time.
Diffstat (limited to 'Assistant')
-rw-r--r--Assistant/Threads/Merger.hs7
1 files changed, 7 insertions, 0 deletions
diff --git a/Assistant/Threads/Merger.hs b/Assistant/Threads/Merger.hs
index 521e5bda6..0080ef964 100644
--- a/Assistant/Threads/Merger.hs
+++ b/Assistant/Threads/Merger.hs
@@ -19,6 +19,7 @@ import qualified Annex.Branch
import qualified Git
import qualified Git.Branch
import qualified Command.Sync
+import qualified Database.Keys
import Annex.TaggedPush
import Remote (remoteFromUUID)
@@ -89,6 +90,12 @@ onChange file
currbranch mergeConfig
Git.Branch.AutomaticCommit
changedbranch
+ -- Merging can cause new associated files
+ -- to appear and the smudge filter will
+ -- add them to the database. To ensure that
+ -- this process sees those changes, close
+ -- the database if it was open.
+ liftAnnex $ Database.Keys.closeDb
mergecurrent _ = noop
handleDesynced = case fromTaggedBranch changedbranch of