mirror of https://github.com/voidlizard/hbs2
wip29
This commit is contained in:
parent
c16422addc
commit
326f0a2b96
|
@ -620,22 +620,16 @@ export mref' r = connectedDo $ flip runContT pure do
|
||||||
sto <- lift getStorage
|
sto <- lift getStorage
|
||||||
|
|
||||||
reader <- ContT $ withGitCat
|
reader <- ContT $ withGitCat
|
||||||
reader2 <- ContT $ withGitCat
|
|
||||||
|
|
||||||
let commitCacheSize = 2000
|
let commitCacheSize = 2000
|
||||||
|
|
||||||
commits <- newCacheFixedHPSQ commitCacheSize
|
commits <- newCacheFixedHPSQ commitCacheSize
|
||||||
|
|
||||||
deferred <- newTQueueIO
|
|
||||||
|
|
||||||
ContT $ bracket none $ const do
|
ContT $ bracket none $ const do
|
||||||
hClose $ getStdin reader
|
hClose $ getStdin reader
|
||||||
|
|
||||||
ContT $ bracket none $ const do
|
-- ContT $ withAsync $ replicateM_ 2 $ forever do
|
||||||
hClose $ getStdin reader2
|
-- join $ atomically (readTQueue deferred)
|
||||||
|
|
||||||
ContT $ withAsync $ replicateM_ 2 $ forever do
|
|
||||||
join $ atomically (readTQueue deferred)
|
|
||||||
|
|
||||||
lift $ flip fix ExportStart $ \next -> \case
|
lift $ flip fix ExportStart $ \next -> \case
|
||||||
|
|
||||||
|
@ -725,7 +719,7 @@ export mref' r = connectedDo $ flip runContT pure do
|
||||||
pure $ HS.fromList skip'
|
pure $ HS.fromList skip'
|
||||||
|
|
||||||
r <- gitReadTree hhead
|
r <- gitReadTree hhead
|
||||||
<&> L.filter (\GitTreeEntry{..} -> not (HS.member gitEntryHash skip))
|
<&> L.filter (\GitTreeEntry{..} -> L.null parents || not (HS.member gitEntryHash skip))
|
||||||
-- <&> L.filter (\GitTreeEntry{..} -> gitEntryType /= Tree)
|
-- <&> L.filter (\GitTreeEntry{..} -> gitEntryType /= Tree)
|
||||||
<&> sortGitTreeEntries
|
<&> sortGitTreeEntries
|
||||||
|
|
||||||
|
@ -751,11 +745,11 @@ export mref' r = connectedDo $ flip runContT pure do
|
||||||
writePack sto l acc >>= atomically . writeTQueue out
|
writePack sto l acc >>= atomically . writeTQueue out
|
||||||
|
|
||||||
EWAcc i (r@GitTreeEntry{..}:rs) l acc | gitEntrySize >= Just (fromIntegral blkMax) -> do
|
EWAcc i (r@GitTreeEntry{..}:rs) l acc | gitEntrySize >= Just (fromIntegral blkMax) -> do
|
||||||
atomically $ writeTQueue deferred $ writeLargeBlob sto reader2 r >>= atomically . writeTQueue out
|
writeLargeBlob sto reader r >>= atomically . writeTQueue out
|
||||||
go (EWAcc (succ i) rs l acc)
|
go (EWAcc (succ i) rs l acc)
|
||||||
|
|
||||||
EWAcc i rs l acc | l >= blkMax -> do
|
EWAcc i rs l acc | l >= blkMax -> do
|
||||||
atomically $ writeTQueue deferred $ writePack sto l acc >>= atomically . writeTQueue out
|
writePack sto l acc >>= atomically . writeTQueue out
|
||||||
go (EWAcc (succ i) rs 0 mempty)
|
go (EWAcc (succ i) rs 0 mempty)
|
||||||
|
|
||||||
EWAcc i (e@GitTreeEntry{..}:rs) l acc -> do
|
EWAcc i (e@GitTreeEntry{..}:rs) l acc -> do
|
||||||
|
@ -767,10 +761,8 @@ export mref' r = connectedDo $ flip runContT pure do
|
||||||
let new = EGitObject gitEntryType gitEntryHash (Just e) lbs
|
let new = EGitObject gitEntryType gitEntryHash (Just e) lbs
|
||||||
go (EWAcc i rs (l + fromIntegral (LBS.length lbs)) (new : acc))
|
go (EWAcc i rs (l + fromIntegral (LBS.length lbs)) (new : acc))
|
||||||
|
|
||||||
packs <- atomically do
|
|
||||||
allDone <- isEmptyTQueue deferred
|
packs <- atomically $ STM.flushTQueue out
|
||||||
unless allDone STM.retry
|
|
||||||
STM.flushTQueue out
|
|
||||||
|
|
||||||
phashes <- catMaybes <$> withState (for parents selectCBlock)
|
phashes <- catMaybes <$> withState (for parents selectCBlock)
|
||||||
|
|
||||||
|
@ -812,11 +804,13 @@ export mref' r = connectedDo $ flip runContT pure do
|
||||||
|
|
||||||
writeLargeBlob sto reader GitTreeEntry{..} = liftIO do
|
writeLargeBlob sto reader GitTreeEntry{..} = liftIO do
|
||||||
size <- gitEntrySize & orThrow (GitReadError (show $ "expected blob" <+> pretty gitEntryHash))
|
size <- gitEntrySize & orThrow (GitReadError (show $ "expected blob" <+> pretty gitEntryHash))
|
||||||
debug $ yellow "write large object" <+> pretty gitEntryHash
|
debug $ yellow $ "write large object" <+> pretty gitEntryHash
|
||||||
let p = Builder.byteString [qc|{pretty $ Short gitEntryType} {pretty size} {pretty gitEntryHash} {gitEntryName}|]
|
let p = Builder.byteString [qc|{pretty $ Short gitEntryType} {pretty size} {pretty gitEntryHash} {gitEntryName}|]
|
||||||
<> Builder.byteString "\n"
|
<> Builder.byteString "\n"
|
||||||
& LBS.toStrict . Builder.toLazyByteString
|
& LBS.toStrict . Builder.toLazyByteString
|
||||||
|
|
||||||
|
-- liftIO $ print $ "MOTHERFUCKER1" <+> pretty gitEntryHash
|
||||||
|
|
||||||
-- TODO: check-if-work-on-large-files
|
-- TODO: check-if-work-on-large-files
|
||||||
pieces <- S.toList_ do
|
pieces <- S.toList_ do
|
||||||
|
|
||||||
|
@ -848,10 +842,15 @@ export mref' r = connectedDo $ flip runContT pure do
|
||||||
(_,Error s1 s2) -> do
|
(_,Error s1 s2) -> do
|
||||||
throwIO (CompressionError (s1 <> " " <> s2))
|
throwIO (CompressionError (s1 <> " " <> s2))
|
||||||
|
|
||||||
|
-- liftIO $ print $ "MOTHERFUCKER2" <+> pretty gitEntryHash
|
||||||
|
|
||||||
-- TODO: check-if-work-on-large-files
|
-- TODO: check-if-work-on-large-files
|
||||||
createTreeWithMetadata sto mzero mempty (LBS.fromChunks pieces)
|
createTreeWithMetadata sto mzero mempty (LBS.fromChunks pieces)
|
||||||
>>= orThrowPassIO
|
>>= orThrowPassIO
|
||||||
|
|
||||||
|
-- liftIO $ print $ "WRITTEN" <+> pretty gitEntryHash <+> pretty w
|
||||||
|
-- pure w
|
||||||
|
|
||||||
writePack sto l racc = do
|
writePack sto l racc = do
|
||||||
-- write
|
-- write
|
||||||
-- pack
|
-- pack
|
||||||
|
|
Loading…
Reference in New Issue