newtype Group to ByteString

This may speed up queries for things in groups, due to Eq and Ord being faster.
This commit is contained in:
Joey Hess 2019-01-09 15:00:43 -04:00
parent 3f7fe1d325
commit 6f66b53a30
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
10 changed files with 69 additions and 48 deletions

View file

@ -16,6 +16,7 @@ module Logs.Group (
inUnwantedGroup
) where
import qualified Data.ByteString.Lazy as L
import qualified Data.Map as M
import qualified Data.Set as S
import Data.ByteString.Builder
@ -38,9 +39,7 @@ groupChange uuid@(UUID _) modifier = do
curr <- lookupGroups uuid
c <- liftIO currentVectorClock
Annex.Branch.change groupLog $
buildLog buildGroup .
changeLog c uuid (modifier curr) .
parseLog (Just . S.fromList . words) . decodeBL
buildLog buildGroup . changeLog c uuid (modifier curr) . parseGroup
-- The changed group invalidates the preferred content cache.
Annex.changeState $ \s -> s
@ -54,7 +53,10 @@ buildGroup = go . S.toList
where
go [] = mempty
go (g:gs) = bld g <> mconcat [ charUtf8 ' ' <> bld g' | g' <- gs ]
bld = byteString . encodeBS
bld (Group g) = byteString g
parseGroup :: L.ByteString -> Log (S.Set Group)
parseGroup = parseLog (Just . S.fromList . map toGroup . words) . decodeBL
groupSet :: UUID -> S.Set Group -> Annex ()
groupSet u g = groupChange u (const g)
@ -66,9 +68,7 @@ groupMap = maybe groupMapLoad return =<< Annex.getState Annex.groupmap
{- Loads the map, updating the cache. -}
groupMapLoad :: Annex GroupMap
groupMapLoad = do
m <- makeGroupMap . simpleMap .
parseLog (Just . S.fromList . words) . decodeBL <$>
Annex.Branch.get groupLog
m <- makeGroupMap . simpleMap . parseGroup <$> Annex.Branch.get groupLog
Annex.changeState $ \s -> s { Annex.groupmap = Just m }
return m