mirror of https://github.com/voidlizard/hbs2
hbs2-git db bugfix
This commit is contained in:
parent
0c1e622a78
commit
343bfd6070
|
@ -5,6 +5,8 @@ import HBS2.Data.Types.Refs
|
||||||
import HBS2.Git.Types
|
import HBS2.Git.Types
|
||||||
import HBS2.Hash
|
import HBS2.Hash
|
||||||
|
|
||||||
|
import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
import Data.Function
|
import Data.Function
|
||||||
import Database.SQLite.Simple
|
import Database.SQLite.Simple
|
||||||
|
@ -22,6 +24,8 @@ import Data.Text (Text)
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
import Data.UUID.V4 qualified as UUID
|
import Data.UUID.V4 qualified as UUID
|
||||||
import Control.Monad.Catch
|
import Control.Monad.Catch
|
||||||
|
import Control.Concurrent.STM
|
||||||
|
import System.IO.Unsafe
|
||||||
|
|
||||||
instance ToField GitHash where
|
instance ToField GitHash where
|
||||||
toField h = toField (show $ pretty h)
|
toField h = toField (show $ pretty h)
|
||||||
|
@ -59,13 +63,25 @@ instance (HasRefCredentials m) => HasRefCredentials (DB m) where
|
||||||
getCredentials = lift . getCredentials
|
getCredentials = lift . getCredentials
|
||||||
setCredentials r s = lift (setCredentials r s)
|
setCredentials r s = lift (setCredentials r s)
|
||||||
|
|
||||||
|
dbConnTV :: TVar (Maybe DBEnv)
|
||||||
|
dbConnTV = unsafePerformIO $ newTVarIO Nothing
|
||||||
|
{-# NOINLINE dbConnTV #-}
|
||||||
|
|
||||||
dbEnv :: MonadIO m => FilePath -> m DBEnv
|
dbEnv :: MonadIO m => FilePath -> m DBEnv
|
||||||
dbEnv fp = do
|
dbEnv fp = do
|
||||||
|
trace "dbEnv called"
|
||||||
let dir = takeDirectory fp
|
let dir = takeDirectory fp
|
||||||
liftIO $ createDirectoryIfMissing True dir
|
liftIO $ createDirectoryIfMissing True dir
|
||||||
co <- liftIO $ open fp
|
mbDb <- liftIO $ readTVarIO dbConnTV
|
||||||
withDB co stateInit
|
|
||||||
pure co
|
case mbDb of
|
||||||
|
Nothing -> do
|
||||||
|
co <- liftIO $ open fp
|
||||||
|
liftIO $ atomically $ writeTVar dbConnTV (Just co)
|
||||||
|
withDB co stateInit
|
||||||
|
pure co
|
||||||
|
|
||||||
|
Just db -> pure db
|
||||||
|
|
||||||
withDB :: DBEnv -> DB m a -> m a
|
withDB :: DBEnv -> DB m a -> m a
|
||||||
withDB env action = runReaderT (fromDB action) env
|
withDB env action = runReaderT (fromDB action) env
|
||||||
|
|
|
@ -23,6 +23,8 @@ updateLocalState ref = do
|
||||||
|
|
||||||
db <- dbEnv dbPath
|
db <- dbEnv dbPath
|
||||||
|
|
||||||
|
withDB db stateInit
|
||||||
|
|
||||||
trace $ "updateLocalState" <+> pretty ref
|
trace $ "updateLocalState" <+> pretty ref
|
||||||
|
|
||||||
sp <- withDB db savepointNew
|
sp <- withDB db savepointNew
|
||||||
|
|
Loading…
Reference in New Issue