wip, modify command

This commit is contained in:
Dmitry Zuikov 2024-09-09 18:05:54 +03:00
parent 655a901040
commit 28b6b7b71d
2 changed files with 32 additions and 2 deletions

View File

@ -231,9 +231,8 @@ runTop forms = do
entry $ bindMatch "fixme-attribs" $ nil_ \case
StringLikeList xs -> do
w <- fixmeWorkDir
ta <- lift $ asks fixmeEnvAttribs
atomically $ modifyTVar ta (<> HS.fromList (fmap (fromString . (</> w)) xs))
atomically $ modifyTVar ta (<> HS.fromList (fmap fromString xs))
_ -> throwIO $ BadFormException @C nil
@ -310,6 +309,14 @@ runTop forms = do
_ -> throwIO $ BadFormException @C nil
entry $ bindMatch "modify" $ nil_ \case
[ FixmeHashLike w, StringLike k, StringLike v ] -> lift do
void $ runMaybeT do
key <- lift (selectFixmeKey w) >>= toMPlus
lift $ modifyFixme key [(fromString k, fromString v)]
_ -> throwIO $ BadFormException @C nil
entry $ bindMatch "dump" $ nil_ $ \case
[ FixmeHashLike w ] -> lift $ void $ runMaybeT do
key <- lift (selectFixmeKey w) >>= toMPlus

View File

@ -5,6 +5,7 @@ module Fixme.State
, withState
, cleanupDatabase
, insertFixme
, modifyFixme
, insertScanned
, selectIsAlreadyScanned
, selectFixmeKey
@ -284,6 +285,28 @@ getFixme key = do
<&> headMay
>>= toMPlus
modifyFixme :: (FixmePerks m)
=> FixmeKey
-> [(FixmeAttrName, FixmeAttrVal)]
-> FixmeM m ()
modifyFixme o a' = do
FixmeEnv{..} <- ask
attrNames <- readTVarIO fixmeEnvAttribs
values <- readTVarIO fixmeEnvAttribValues
now <- liftIO getPOSIXTime <&> fromIntegral . round
let a = [ (k,v) | (k,v) <- a'
, k `HS.member` attrNames
, not (HM.member k values) || v `HS.member` fromMaybe mempty (HM.lookup k values)
]
let w = mempty { fixmeAttr = HM.fromList a, fixmeKey = o, fixmeTs = Just now }
withState $ insertFixme w
insertFixme :: (FixmePerks m, MonadReader FixmeEnv m) => Fixme -> DBPipeM m ()
insertFixme fme = do