diff options
author | Joey Hess <joey@kitenet.net> | 2011-11-12 17:45:12 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-11-12 17:45:12 -0400 |
commit | 04edae6791b4eddaa77dda2407264dc4434d74b7 (patch) | |
tree | 3c42dfa812220f003b53cb47ce4ff1e73dd1f108 /Annex | |
parent | cea65b9e5bf6bcc9a9350703dbbb0951c6e00c82 (diff) |
Optimised union merging; now only runs git cat-file once.
Diffstat (limited to 'Annex')
-rw-r--r-- | Annex/Branch.hs | 5 | ||||
-rw-r--r-- | Annex/CatFile.hs | 17 |
2 files changed, 15 insertions, 7 deletions
diff --git a/Annex/Branch.hs b/Annex/Branch.hs index fad818fb0..20134003d 100644 --- a/Annex/Branch.hs +++ b/Annex/Branch.hs @@ -149,7 +149,8 @@ update = onceonly $ do - documentation advises users not to directly - modify the branch. -} - inRepo $ \g -> Git.UnionMerge.merge_index g branches + h <- catFileHandle + inRepo $ \g -> Git.UnionMerge.merge_index h g branches ff <- if dirty then return False else tryFastForwardTo refs unless ff $ inRepo $ Git.commit merge_desc fullname (nub $ fullname:refs) @@ -280,7 +281,7 @@ get' staleok file = fromcache =<< getCache file fromjournal Nothing | staleok = withIndex frombranch | otherwise = withIndexUpdate $ frombranch >>= cache - frombranch = catFile fullname file + frombranch = L.unpack <$> catFile fullname file cache content = do setCache file content return content diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs index 99cc519f5..0541f7269 100644 --- a/Annex/CatFile.hs +++ b/Annex/CatFile.hs @@ -6,18 +6,25 @@ -} module Annex.CatFile ( - catFile + catFile, + catFileHandle ) where +import qualified Data.ByteString.Lazy.Char8 as L + import Common.Annex import qualified Git.CatFile import qualified Annex -catFile :: String -> FilePath -> Annex String -catFile branch file = maybe startup go =<< Annex.getState Annex.catfilehandle +catFile :: String -> FilePath -> Annex L.ByteString +catFile branch file = do + h <- catFileHandle + liftIO $ Git.CatFile.catFile h branch file + +catFileHandle :: Annex Git.CatFile.CatFileHandle +catFileHandle = maybe startup return =<< Annex.getState Annex.catfilehandle where startup = do h <- inRepo Git.CatFile.catFileStart Annex.changeState $ \s -> s { Annex.catfilehandle = Just h } - go h - go h = liftIO $ Git.CatFile.catFile h branch file + return h |