Skip to content

Commit db4fa74

Browse files
committed
Revive syncFromCodeserver
1 parent a9a1296 commit db4fa74

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

unison-cli/src/Unison/Share/SyncV2.hs

+42-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module Unison.Share.SyncV2
55
( syncFromFile,
66
syncToFile,
77
syncFromCodebase,
8+
syncFromCodeserver,
89
)
910
where
1011

@@ -16,28 +17,36 @@ import Control.Monad.Except
1617
import Control.Monad.Reader (ask)
1718
import Control.Monad.ST (ST, stToIO)
1819
import Control.Monad.State
19-
import Data.Attoparsec.ByteString qualified as A
20-
import Data.Attoparsec.ByteString.Char8 qualified as A8
2120
import Data.ByteString qualified as BS
2221
import Data.ByteString.Lazy qualified as BL
23-
import Data.Conduit.Attoparsec qualified as C
2422
import Data.Conduit.List qualified as C
2523
import Data.Conduit.Zlib qualified as C
2624
import Data.Graph qualified as Graph
2725
import Data.Map qualified as Map
26+
import Data.Proxy
2827
import Data.Set qualified as Set
2928
import Data.Text.IO qualified as Text
29+
import Data.Text.Lazy qualified as Text.Lazy
30+
import Data.Text.Lazy.Encoding qualified as Text.Lazy
31+
import Network.HTTP.Client qualified as Http.Client
32+
import Network.HTTP.Types qualified as HTTP
33+
import Servant.API qualified as Servant
34+
import Servant.Client.Streaming qualified as Servant
3035
import Servant.Conduit ()
36+
import Servant.Types.SourceT qualified as Servant
3137
import System.Console.Regions qualified as Console.Regions
3238
import U.Codebase.HashTags (CausalHash)
3339
import U.Codebase.Sqlite.Queries qualified as Q
3440
import U.Codebase.Sqlite.TempEntity (TempEntity)
3541
import U.Codebase.Sqlite.V2.HashHandle (v2HashHandle)
42+
import Unison.Auth.HTTPClient qualified as Auth
3643
import Unison.Cli.Monad (Cli)
3744
import Unison.Cli.Monad qualified as Cli
3845
import Unison.Codebase qualified as Codebase
46+
import Unison.Debug qualified as Debug
3947
import Unison.Hash32 (Hash32)
4048
import Unison.Prelude
49+
import Unison.Share.API.Hash qualified as Share
4150
import Unison.Share.ExpectedHashMismatches (expectedCausalHashMismatches, expectedComponentHashMismatches)
4251
import Unison.Share.Sync.Types
4352
import Unison.Sqlite qualified as Sqlite
@@ -117,6 +126,36 @@ syncFromCodebase shouldValidate srcConn destCodebase causalHash = do
117126
streamIntoCodebase shouldValidate destCodebase header rest
118127
mapExceptT liftIO (afterSyncChecks destCodebase (causalHashToHash32 causalHash))
119128

129+
syncFromCodeserver ::
130+
Bool ->
131+
-- | The Unison Share URL.
132+
Servant.BaseUrl ->
133+
-- | The branch to download from.
134+
SyncV2.BranchRef ->
135+
-- | The hash to download.
136+
Share.HashJWT ->
137+
Set Hash32 ->
138+
-- | Callback that's given a number of entities we just downloaded.
139+
(Int -> IO ()) ->
140+
Cli (Either (SyncError SyncV2.PullError) ())
141+
syncFromCodeserver shouldValidate unisonShareUrl branchRef hashJwt knownHashes _downloadedCallback = do
142+
Cli.Env {authHTTPClient, codebase} <- ask
143+
runExceptT do
144+
let hash = Share.hashJWTHash hashJwt
145+
ExceptT $ do
146+
(Cli.runTransaction (Q.entityLocation hash)) >>= \case
147+
Just Q.EntityInMainStorage -> pure $ Right ()
148+
_ -> do
149+
Debug.debugLogM Debug.Temp $ "Kicking off sync request"
150+
Timing.time "Entity Download" $ do
151+
liftIO . C.runResourceT . runExceptT $ httpStreamEntities
152+
authHTTPClient
153+
unisonShareUrl
154+
SyncV2.DownloadEntitiesRequest {branchRef, causalHash = hashJwt, knownHashes}
155+
\header stream -> do
156+
streamIntoCodebase shouldValidate codebase header stream
157+
mapExceptT liftIO (afterSyncChecks codebase hash)
158+
120159
------------------------------------------------------------------------------------------------------------------------
121160
-- Helpers
122161
------------------------------------------------------------------------------------------------------------------------

0 commit comments

Comments
 (0)