mirror of https://github.com/voidlizard/hbs2
wip, modify command
This commit is contained in:
parent
655a901040
commit
28b6b7b71d
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue