diff options
author | Joey Hess <joey@kitenet.net> | 2011-12-12 17:38:46 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-12-12 17:38:46 -0400 |
commit | 98dfc0c9b0024c156d0fea99bf8d2355e06244a7 (patch) | |
tree | 351e6f5f430aca7b5d10e79547f4e4c537a00ab7 /Annex/BranchState.hs | |
parent | b2f934e07ad32cfe44ea1fab2ca154379f30efe8 (diff) |
split out Annex/BranchState.hs
Diffstat (limited to 'Annex/BranchState.hs')
-rw-r--r-- | Annex/BranchState.hs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/Annex/BranchState.hs b/Annex/BranchState.hs new file mode 100644 index 000000000..0950e9a96 --- /dev/null +++ b/Annex/BranchState.hs @@ -0,0 +1,56 @@ +{- git-annex branch state management + - + - Runtime state about the git-annex branch, including a small read cache. + - + - Copyright 2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module Annex.BranchState where + +import Common.Annex +import Types.BranchState +import qualified Annex + +getState :: Annex BranchState +getState = Annex.getState Annex.branchstate + +setState :: BranchState -> Annex () +setState state = Annex.changeState $ \s -> s { Annex.branchstate = state } + +setCache :: FilePath -> String -> Annex () +setCache file content = do + state <- getState + setState state { cachedFile = Just file, cachedContent = content } + +getCache :: FilePath -> Annex (Maybe String) +getCache file = getState >>= go + where + go state + | cachedFile state == Just file = + return $ Just $ cachedContent state + | otherwise = return Nothing + +invalidateCache :: Annex () +invalidateCache = do + state <- getState + setState state { cachedFile = Nothing, cachedContent = "" } + +{- Runs an action to update the branch, if it's not been updated before + - in this run of git-annex. -} +runUpdateOnce :: Annex () -> Annex () +runUpdateOnce a = unlessM (branchUpdated <$> getState) $ do + a + disableUpdate + +{- Avoids updating the branch. A useful optimisation when the branch + - is known to have not changed, or git-annex won't be relying on info + - from it. -} +disableUpdate :: Annex () +disableUpdate = Annex.changeState setupdated + where + setupdated s = s { Annex.branchstate = new } + where + new = old { branchUpdated = True } + old = Annex.branchstate s |