@@ -26,6 +26,7 @@ import Data.Conduit.Zlib qualified as C
26
26
import Data.Graph qualified as Graph
27
27
import Data.Map qualified as Map
28
28
import Data.Set qualified as Set
29
+ import Data.Text.IO qualified as Text
29
30
import Servant.Conduit ()
30
31
import System.Console.Regions qualified as Console.Regions
31
32
import U.Codebase.HashTags (CausalHash )
@@ -217,7 +218,9 @@ withEntityStream ::
217
218
(Int -> Stream () SyncV2. DownloadEntitiesChunk -> m r ) ->
218
219
m r
219
220
withEntityStream conn rootHash mayBranchRef callback = do
220
- entities <- liftIO $ Sqlite. runTransaction conn (depsForCausal rootHash)
221
+ entities <- liftIO $ withEntityLoadingCallback $ \ counter -> do
222
+ Sqlite. runTransaction conn (depsForCausal rootHash counter)
223
+ liftIO $ Text. hPutStrLn IO. stderr $ " Finished loading entities, writing sync-file."
221
224
let totalEntities = fromIntegral $ Map. size entities
222
225
let initialChunk =
223
226
SyncV2. InitialC
@@ -256,8 +259,8 @@ syncToFile codebase rootHash mayBranchRef destFilePath = do
256
259
C. runConduit $ stream C. .| countC C. .| C. map (BL. toStrict . CBOR. serialise) C. .| C. transPipe liftIO C. gzip C. .| C. sinkFile destFilePath
257
260
258
261
-- | Collect all dependencies of a given causal hash.
259
- depsForCausal :: CausalHash -> Sqlite. Transaction (Map Hash32 (Sync. Entity Text Hash32 Hash32 ))
260
- depsForCausal causalHash = do
262
+ depsForCausal :: CausalHash -> ( Int -> IO () ) -> Sqlite. Transaction (Map Hash32 (Sync. Entity Text Hash32 Hash32 ))
263
+ depsForCausal causalHash counter = do
261
264
flip execStateT mempty $ expandEntities (causalHashToHash32 causalHash)
262
265
where
263
266
expandEntities :: Hash32 -> ((StateT (Map Hash32 (Sync. Entity Text Hash32 Hash32 )) Sqlite. Transaction )) ()
@@ -267,6 +270,7 @@ depsForCausal causalHash = do
267
270
False -> do
268
271
entity <- lift $ Sync. expectEntity hash32
269
272
modify (Map. insert hash32 entity)
273
+ lift . Sqlite. unsafeIO $ counter 1
270
274
traverseOf_ Sync. entityHashes_ expandEntities entity
271
275
272
276
-- | Gets the framed chunks from a NetString framed stream.
@@ -374,3 +378,18 @@ withStreamProgressCallback total action = do
374
378
toIO $ action $ C. awaitForever \ i -> do
375
379
liftIO $ IO. atomically (IO. modifyTVar' entitiesDownloadedVar (+ 1 ))
376
380
C. yield i
381
+
382
+ withEntityLoadingCallback :: (MonadUnliftIO m ) => ((Int -> m () ) -> m a ) -> m a
383
+ withEntityLoadingCallback action = do
384
+ counterVar <- IO. newTVarIO (0 :: Int )
385
+ IO. withRunInIO \ toIO -> do
386
+ Console.Regions. displayConsoleRegions do
387
+ Console.Regions. withConsoleRegion Console.Regions. Linear \ region -> do
388
+ Console.Regions. setConsoleRegion region do
389
+ processed <- IO. readTVar counterVar
390
+ pure $
391
+ " \n Loading "
392
+ <> tShow processed
393
+ <> " entities...\n\n "
394
+ toIO $ action $ \ i -> do
395
+ liftIO $ IO. atomically (IO. modifyTVar' counterVar (+ i))
0 commit comments