4
4
module Unison.Cli.DownloadUtils
5
5
( downloadProjectBranchFromShare ,
6
6
downloadLooseCodeFromShare ,
7
+ SyncVersion (.. ),
7
8
)
8
9
where
9
10
10
11
import Control.Concurrent.STM (atomically )
11
12
import Control.Concurrent.STM.TVar (modifyTVar' , newTVarIO , readTVar , readTVarIO )
12
13
import Data.List.NonEmpty (pattern (:|) )
14
+ import Data.Set qualified as Set
13
15
import System.Console.Regions qualified as Console.Regions
14
16
import U.Codebase.HashTags (CausalHash )
15
17
import U.Codebase.Sqlite.Queries qualified as Queries
@@ -28,37 +30,57 @@ import Unison.Share.API.Hash qualified as Share
28
30
import Unison.Share.Codeserver qualified as Codeserver
29
31
import Unison.Share.Sync qualified as Share
30
32
import Unison.Share.Sync.Types qualified as Share
33
+ import Unison.Share.SyncV2 qualified as SyncV2
31
34
import Unison.Share.Types (codeserverBaseURL )
32
35
import Unison.Sync.Common qualified as Sync.Common
33
36
import Unison.Sync.Types qualified as Share
37
+ import Unison.SyncV2.Types qualified as SyncV2
38
+
39
+ data SyncVersion = SyncV1 | SyncV2
34
40
35
41
-- | Download a project/branch from Share.
36
42
downloadProjectBranchFromShare ::
37
43
(HasCallStack ) =>
44
+ SyncVersion ->
38
45
Share. IncludeSquashedHead ->
39
46
Share. RemoteProjectBranch ->
40
47
Cli (Either Output. ShareError CausalHash )
41
- downloadProjectBranchFromShare useSquashed branch =
48
+ downloadProjectBranchFromShare syncVersion useSquashed branch =
42
49
Cli. labelE \ done -> do
43
50
let remoteProjectBranchName = branch. branchName
44
- let repoInfo = Share. RepoInfo (into @ Text (ProjectAndBranch branch. projectName remoteProjectBranchName))
45
51
causalHashJwt <-
46
52
case (useSquashed, branch. squashedBranchHead) of
47
53
(Share. IncludeSquashedHead , Nothing ) -> done Output. ShareExpectedSquashedHead
48
54
(Share. IncludeSquashedHead , Just squashedHead) -> pure squashedHead
49
55
(Share. NoSquashedHead , _) -> pure branch. branchHead
50
56
exists <- Cli. runTransaction (Queries. causalExistsByHash32 (Share. hashJWTHash causalHashJwt))
51
57
when (not exists) do
52
- (result, numDownloaded) <-
53
- Cli. with withEntitiesDownloadedProgressCallback \ (downloadedCallback, getNumDownloaded) -> do
54
- result <- Share. downloadEntities Share. hardCodedBaseUrl repoInfo causalHashJwt downloadedCallback
55
- numDownloaded <- liftIO getNumDownloaded
56
- pure (result, numDownloaded)
57
- result & onLeft \ err0 -> do
58
- done case err0 of
59
- Share. SyncError err -> Output. ShareErrorDownloadEntities err
60
- Share. TransportError err -> Output. ShareErrorTransport err
61
- Cli. respond (Output. DownloadedEntities numDownloaded)
58
+ case syncVersion of
59
+ SyncV1 -> do
60
+ let repoInfo = Share. RepoInfo (into @ Text (ProjectAndBranch branch. projectName remoteProjectBranchName))
61
+ Cli. with withEntitiesDownloadedProgressCallback \ (downloadedCallback, getNumDownloaded) -> do
62
+ result <- Share. downloadEntities Share. hardCodedBaseUrl repoInfo causalHashJwt downloadedCallback
63
+ numDownloaded <- liftIO getNumDownloaded
64
+ result & onLeft \ err0 -> do
65
+ done case err0 of
66
+ Share. SyncError err -> Output. ShareErrorDownloadEntities err
67
+ Share. TransportError err -> Output. ShareErrorTransport err
68
+ Cli. respond (Output. DownloadedEntities numDownloaded)
69
+ SyncV2 -> do
70
+ -- Cli.with withEntitiesDownloadedProgressCallback \(downloadedCallback, getNumDownloaded) -> do
71
+ let branchRef = SyncV2. BranchRef (into @ Text (ProjectAndBranch branch. projectName remoteProjectBranchName))
72
+ -- TODO: Fill this in.
73
+ let knownHashes = Set. empty
74
+ let downloadedCallback = \ _ -> pure ()
75
+ let shouldValidate = not $ Codeserver. isCustomCodeserver Codeserver. defaultCodeserver
76
+ result <- SyncV2. syncFromCodeserver shouldValidate Share. hardCodedBaseUrl branchRef causalHashJwt knownHashes downloadedCallback
77
+ result & onLeft \ err0 -> do
78
+ done case err0 of
79
+ Share. SyncError err ->
80
+ -- TODO: Fix this
81
+ error (show err)
82
+ -- Output.ShareErrorDownloadEntities err
83
+ Share. TransportError err -> Output. ShareErrorTransport err
62
84
pure (Sync.Common. hash32ToCausalHash (Share. hashJWTHash causalHashJwt))
63
85
64
86
-- | Download loose code from Share.
0 commit comments