mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
9644a6f208
commit
dc833177c8
BIN
.fixme-new/log
BIN
.fixme-new/log
Binary file not shown.
|
@ -103,10 +103,14 @@ defaultTemplate = HM.fromList [ ("default", Simple (SimpleTemplate short)) ]
|
||||||
|
|
||||||
runFixmeCLI :: FixmePerks m => FixmeM m a -> m a
|
runFixmeCLI :: FixmePerks m => FixmeM m a -> m a
|
||||||
runFixmeCLI m = do
|
runFixmeCLI m = do
|
||||||
db <- newDBPipeEnv dbPipeOptsDef =<< localDBPath
|
dbPath <- localDBPath
|
||||||
git <- findGitDir
|
git <- findGitDir
|
||||||
env <- FixmeEnv db
|
env <- FixmeEnv
|
||||||
<$> newTVarIO git
|
<$> newMVar ()
|
||||||
|
<*> newTVarIO mempty
|
||||||
|
<*> newTVarIO dbPath
|
||||||
|
<*> newTVarIO Nothing
|
||||||
|
<*> newTVarIO git
|
||||||
<*> newTVarIO mempty
|
<*> newTVarIO mempty
|
||||||
<*> newTVarIO mempty
|
<*> newTVarIO mempty
|
||||||
<*> newTVarIO mempty
|
<*> newTVarIO mempty
|
||||||
|
@ -325,6 +329,9 @@ printEnv = do
|
||||||
for_ g $ \git -> do
|
for_ g $ \git -> do
|
||||||
liftIO $ print $ "fixme-git-dir" <+> dquotes (pretty git)
|
liftIO $ print $ "fixme-git-dir" <+> dquotes (pretty git)
|
||||||
|
|
||||||
|
dbPath <- asks fixmeEnvDbPath >>= readTVarIO
|
||||||
|
liftIO $ print $ "fixme-state-path" <+> dquotes (pretty dbPath)
|
||||||
|
|
||||||
(before,after) <- asks fixmeEnvCatContext >>= readTVarIO
|
(before,after) <- asks fixmeEnvCatContext >>= readTVarIO
|
||||||
|
|
||||||
liftIO $ print $ "fixme-def-context" <+> pretty before <+> pretty after
|
liftIO $ print $ "fixme-def-context" <+> pretty before <+> pretty after
|
||||||
|
@ -426,6 +433,14 @@ runForms ss = for_ ss $ \s -> do
|
||||||
ta <- asks fixmeEnvGitDir
|
ta <- asks fixmeEnvGitDir
|
||||||
atomically $ writeTVar ta (Just g)
|
atomically $ writeTVar ta (Just g)
|
||||||
|
|
||||||
|
ListVal [SymbolVal "fixme-state-path", StringLike g] -> do
|
||||||
|
p <- asks fixmeEnvDbPath
|
||||||
|
db <- asks fixmeEnvDb
|
||||||
|
atomically do
|
||||||
|
writeTVar db Nothing
|
||||||
|
writeTVar p g
|
||||||
|
evolve
|
||||||
|
|
||||||
ListVal [SymbolVal "fixme-def-context", LitIntVal a, LitIntVal b] -> do
|
ListVal [SymbolVal "fixme-def-context", LitIntVal a, LitIntVal b] -> do
|
||||||
t <- asks fixmeEnvCatContext
|
t <- asks fixmeEnvCatContext
|
||||||
atomically $ writeTVar t (fromIntegral a, fromIntegral b)
|
atomically $ writeTVar t (fromIntegral a, fromIntegral b)
|
||||||
|
|
|
@ -53,6 +53,14 @@ import Data.Fixed
|
||||||
import Data.Word (Word64)
|
import Data.Word (Word64)
|
||||||
import System.TimeIt
|
import System.TimeIt
|
||||||
|
|
||||||
|
-- TODO: runPipe-omitted
|
||||||
|
-- runPipe нигде не запускается, значит, все изменения
|
||||||
|
-- будут закоммичены в БД только по явному вызову
|
||||||
|
-- commitAll или transactional
|
||||||
|
-- это может объясняеть некоторые артефакты.
|
||||||
|
-- Но это и удобно: кажется, что можно менять БД
|
||||||
|
-- на лету бесплатно
|
||||||
|
|
||||||
|
|
||||||
pattern Operand :: forall {c} . Text -> Syntax c
|
pattern Operand :: forall {c} . Text -> Syntax c
|
||||||
pattern Operand what <- (operand -> Just what)
|
pattern Operand what <- (operand -> Just what)
|
||||||
|
@ -83,21 +91,27 @@ instance FromField HashRef where
|
||||||
fromField = fmap (fromString @HashRef) . fromField @String
|
fromField = fmap (fromString @HashRef) . fromField @String
|
||||||
|
|
||||||
evolve :: FixmePerks m => FixmeM m ()
|
evolve :: FixmePerks m => FixmeM m ()
|
||||||
evolve = do
|
evolve = withState do
|
||||||
dbpath <- localDBPath
|
|
||||||
debug $ "evolve" <+> pretty dbpath
|
|
||||||
mkdir (takeDirectory dbpath)
|
|
||||||
|
|
||||||
db <- newDBPipeEnv dbPipeOptsDef dbpath
|
|
||||||
|
|
||||||
withDB db do
|
|
||||||
createTables
|
createTables
|
||||||
|
|
||||||
withState :: forall m a . (FixmePerks m, MonadReader FixmeEnv m) => DBPipeM m a -> m a
|
withState :: forall m a . (FixmePerks m, MonadReader FixmeEnv m) => DBPipeM m a -> m a
|
||||||
withState what = do
|
withState what = do
|
||||||
db <- asks fixmeEnvDb
|
lock <- asks fixmeLock
|
||||||
withDB db what
|
db <- withMVar lock $ \_ -> do
|
||||||
|
t <- asks fixmeEnvDb
|
||||||
|
mdb <- readTVarIO t
|
||||||
|
case mdb of
|
||||||
|
Just d -> pure (Right d)
|
||||||
|
Nothing -> do
|
||||||
|
path <- asks fixmeEnvDbPath >>= readTVarIO
|
||||||
|
newDb <- try @_ @IOException (newDBPipeEnv dbPipeOptsDef path)
|
||||||
|
case newDb of
|
||||||
|
Left e -> pure (Left e)
|
||||||
|
Right db -> do
|
||||||
|
atomically $ writeTVar t (Just db)
|
||||||
|
pure $ Right db
|
||||||
|
|
||||||
|
either throwIO (`withDB` what) db
|
||||||
|
|
||||||
createTables :: FixmePerks m => DBPipeM m ()
|
createTables :: FixmePerks m => DBPipeM m ()
|
||||||
createTables = do
|
createTables = do
|
||||||
|
@ -513,7 +527,7 @@ select cast(json_patch(j.json, coalesce(s.json,{emptyObect})) as blob) as blob
|
||||||
from
|
from
|
||||||
fixmejson j join fixmeactual f on f.fixme = j.fixme
|
fixmejson j join fixmeactual f on f.fixme = j.fixme
|
||||||
join fixme f0 on f0.id = f.fixme
|
join fixme f0 on f0.id = f.fixme
|
||||||
left join s1 s on s.hash = f0.id
|
left join s1 s on s.hash = j.fixme
|
||||||
|
|
||||||
where
|
where
|
||||||
|
|
||||||
|
|
|
@ -239,9 +239,24 @@ data RenderError = RenderError String
|
||||||
class FixmeRenderTemplate a b where
|
class FixmeRenderTemplate a b where
|
||||||
render :: a -> Either RenderError b
|
render :: a -> Either RenderError b
|
||||||
|
|
||||||
|
data FixmeOpts =
|
||||||
|
FixmeOpts
|
||||||
|
{ fixmeOptNoEvolve :: Bool
|
||||||
|
}
|
||||||
|
deriving stock (Eq,Ord,Show,Data,Generic)
|
||||||
|
|
||||||
|
instance Monoid FixmeOpts where
|
||||||
|
mempty = FixmeOpts False
|
||||||
|
|
||||||
|
instance Semigroup FixmeOpts where
|
||||||
|
(<>) _ b = FixmeOpts (fixmeOptNoEvolve b)
|
||||||
|
|
||||||
data FixmeEnv =
|
data FixmeEnv =
|
||||||
FixmeEnv
|
FixmeEnv
|
||||||
{ fixmeEnvDb :: DBPipeEnv
|
{ fixmeLock :: MVar ()
|
||||||
|
, fixmeEnvOpts :: TVar FixmeOpts
|
||||||
|
, fixmeEnvDbPath :: TVar FilePath
|
||||||
|
, fixmeEnvDb :: TVar (Maybe DBPipeEnv)
|
||||||
, fixmeEnvGitDir :: TVar (Maybe FilePath)
|
, fixmeEnvGitDir :: TVar (Maybe FilePath)
|
||||||
, fixmeEnvFileMask :: TVar [FilePattern]
|
, fixmeEnvFileMask :: TVar [FilePattern]
|
||||||
, fixmeEnvTags :: TVar (HashSet FixmeTag)
|
, fixmeEnvTags :: TVar (HashSet FixmeTag)
|
||||||
|
|
Loading…
Reference in New Issue