diff options
author | Joey Hess <joey@kitenet.net> | 2014-04-08 13:41:36 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2014-04-08 13:42:57 -0400 |
commit | 6e47a1412175cbc00f44ea8dc663ad83331cfb6d (patch) | |
tree | ecd8cec02d1a56ea38513cfb893b86504c606a3c /RemoteDaemon/Common.hs | |
parent | 4772321f6a7359f282270c48be0e73563f8d7ae6 (diff) |
cleaned up AnnexState handling in transports
Diffstat (limited to 'RemoteDaemon/Common.hs')
-rw-r--r-- | RemoteDaemon/Common.hs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/RemoteDaemon/Common.hs b/RemoteDaemon/Common.hs new file mode 100644 index 000000000..29aeb00d3 --- /dev/null +++ b/RemoteDaemon/Common.hs @@ -0,0 +1,42 @@ +{- git-remote-daemon utilities + - + - Copyright 2014 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module RemoteDaemon.Common + ( liftAnnex + , inLocalRepo + , checkNewShas + ) where + +import qualified Annex +import Common.Annex +import RemoteDaemon.Types +import qualified Git +import Annex.CatFile + +import Control.Concurrent + +-- Runs an Annex action. Long-running actions should be avoided, +-- since only one liftAnnex can be running at a time, amoung all +-- transports. +liftAnnex :: TransportHandle -> Annex a -> IO a +liftAnnex (TransportHandle _ annexstate) a = do + st <- takeMVar annexstate + (r, st') <- Annex.run st a + putMVar annexstate st' + return r + +inLocalRepo :: TransportHandle -> (Git.Repo -> IO a) -> IO a +inLocalRepo (TransportHandle g _) a = a g + +-- Check if any of the shas are actally new in the local git repo, +-- to avoid unnecessary fetching. +checkNewShas :: TransportHandle -> [Git.Sha] -> IO Bool +checkNewShas transporthandle = check + where + check [] = return True + check (r:rs) = maybe (check rs) (const $ return False) + =<< liftAnnex transporthandle (catObjectDetails r) |