@@ -20,9 +20,12 @@ import Control.Monad (foldM)
2020import Data.Either (isRight)
2121import Data.Maybe (catMaybes)
2222import Control.Exception.Base
23−import Crypto.Hash
2423import qualified Data.Text.IO as TIO
24+import Data.ByteString (ByteString)
2525import Data.Monoid
26+import qualified Crypto.Hash.SHA256 as SHA256
27+
28+type LockFileHash = ByteString
2629
2730{-
2831The "m36v1" file at the top-level of the destination directory contains the the transaction graph as a set of transaction ids referencing their parents (1 or more)
@@ -46,7 +49,7 @@ verify that the database directory is valid or bootstrap it
4649- return error or lock file handle which is already locked with a read lock
4750-}
4851
49−setupDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Either PersistenceError (Handle, Digest SHA256))
52+setupDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Either PersistenceError (Handle, LockFileHash))
5053setupDatabaseDir sync dbdir bootstrapGraph = do
5154 dbdirExists <- doesDirectoryExist dbdir
5255 m36exists <- doesFileExist (transactionLogPath dbdir)
@@ -63,7 +66,7 @@ setupDatabaseDir sync dbdir bootstrapGraph = do
6366{-
6467initialize a database directory with the graph from which to bootstrap- return lock file handle
6568-}
66−bootstrapDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Handle, Digest SHA256)
69+bootstrapDatabaseDir :: DiskSync -> FilePath -> TransactionGraph -> IO (Handle, LockFileHash)
6770bootstrapDatabaseDir sync dbdir bootstrapGraph = do
6871 createDirectory dbdir
6972 lockFileH <- openLockFile dbdir
@@ -82,7 +85,7 @@ incrementally updates an existing database directory
8285-assume that all non-head transactions have already been written because this is an incremental (and concurrent!) write method
8386--store the head names with a symlink to the transaction under "heads"
8487-}
85−transactionGraphPersist :: DiskSync -> FilePath -> TransactionGraph -> IO (Digest SHA256)
88+transactionGraphPersist :: DiskSync -> FilePath -> TransactionGraph -> IO LockFileHash
8689transactionGraphPersist sync destDirectory graph = do
8790 transactionHeadTransactionsPersist sync destDirectory graph
8891 --write graph file
@@ -155,19 +158,19 @@ readTransactionIfNecessary dbdir transId mScriptSession graphIn = do
155158 Left err -> return $ Left err
156159 Right trans' -> return $ Right $ TransactionGraph (transactionHeadsForGraph graphIn) (S.insert trans' (transactionsForGraph graphIn))
157160
158−writeGraphTransactionIdFile :: DiskSync -> FilePath -> TransactionGraph -> IO (Digest SHA256)
161+writeGraphTransactionIdFile :: DiskSync -> FilePath -> TransactionGraph -> IO LockFileHash
159162writeGraphTransactionIdFile sync destDirectory (TransactionGraph _ transSet) = writeFileSync sync graphFile uuidInfo >> pure digest
160163 where
161164 graphFile = destDirectory </> "m36v1"
162165 uuidInfo = T.intercalate "\n" graphLines
163− digest = hashWith SHA256 (encodeUtf8 uuidInfo)
166+ digest = SHA256.hash (encodeUtf8 uuidInfo)
164167 graphLines = S.toList $ S.map graphLine transSet
165168 graphLine trans = U.toText (transactionId trans) <> " " <> T.intercalate " " (S.toList (S.map U.toText $ transactionParentIds trans))
166169
167−readGraphTransactionIdFileDigest :: FilePath -> IO (Digest SHA256)
170+readGraphTransactionIdFileDigest :: FilePath -> IO LockFileHash
168171readGraphTransactionIdFileDigest dbdir = do
169172 graphTransactionIdData <- TIO.readFile (transactionLogPath dbdir)
170− pure (hashWith SHA256 (encodeUtf8 graphTransactionIdData))
173+ pure (SHA256.hash (encodeUtf8 graphTransactionIdData))
171174
172175readGraphTransactionIdFile :: FilePath -> IO (Either PersistenceError [(TransactionId, [TransactionId])])
173176readGraphTransactionIdFile dbdir = do