aboutsummaryrefslogtreecommitdiff
path: root/Annex.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-08-20 12:01:45 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-08-20 12:07:57 -0400
commit60688bf3956d6a905f55fb61e6a59f0e075e70ba (patch)
treefc2fd5fdbd53c7d459b09d6beb8507b24c71a2cf /Annex.hs
parent07505caecbf5ef89050fc701c41fea92ac569e77 (diff)
When accessing a local remote, shut down git-cat-file processes afterwards, to ensure that remotes on removable media can be unmounted. Closes: #758630
This does mean that eg, copying multiple files to a local remote will become slightly slower, since it now restarts git-cat-file after each copy. Should not be significant slowdown. The reason git-cat-file is run on the remote at all is to update its location log. In order to add an item to it, it needs to get the current content of the log. Finding a way to avoid needing to do that would be a good path to avoiding this slowdown if it does become a problem somehow. This commit was sponsored by Evan Deaubl.
Diffstat (limited to 'Annex.hs')
-rw-r--r--Annex.hs6
1 files changed, 6 insertions, 0 deletions
diff --git a/Annex.hs b/Annex.hs
index b915e852b..a04bfd1bb 100644
--- a/Annex.hs
+++ b/Annex.hs
@@ -15,6 +15,7 @@ module Annex (
eval,
getState,
changeState,
+ withState,
setFlag,
setField,
setOutput,
@@ -214,6 +215,11 @@ changeState modifier = do
mvar <- ask
liftIO $ modifyMVar_ mvar $ return . modifier
+withState :: (AnnexState -> (AnnexState, b)) -> Annex b
+withState modifier = do
+ mvar <- ask
+ liftIO $ modifyMVar mvar $ return . modifier
+
{- Sets a flag to True -}
setFlag :: String -> Annex ()
setFlag flag = changeState $ \s ->