started adding ShareRepo constructors

This commit is contained in:
Arya Irani 2022-05-10 17:55:12 -04:00
parent 00355fd8bd
commit fc39e2e24e
7 changed files with 39 additions and 13 deletions

View File

@ -173,6 +173,7 @@ default-extensions:
- DerivingStrategies
- DerivingVia
- DoAndIfThenElse
- DuplicateRecordFields
- FlexibleContexts
- FlexibleInstances
- GeneralizedNewtypeDeriving

View File

@ -13,24 +13,31 @@ import Unison.Prelude
data ReadRepo
= ReadRepoGit ReadGitRepo
| ReadRepoShare ShareRepo
deriving (Eq, Show)
data ReadGitRepo = ReadGitRepo {url :: Text, ref :: Maybe Text}
deriving (Eq, Show)
data WriteRepo = WriteRepoGit WriteGitRepo
newtype ShareRepo = ShareRepo {url :: Text}
deriving (Eq, Show)
data WriteGitRepo = WriteGitRepo {url' :: Text, branch :: Maybe Text}
data WriteRepo
= WriteRepoGit WriteGitRepo
| WriteRepoShare ShareRepo
deriving (Eq, Show)
data WriteGitRepo = WriteGitRepo {url :: Text, branch :: Maybe Text}
deriving (Eq, Show)
writeToRead :: WriteRepo -> ReadRepo
writeToRead = \case
WriteRepoGit repo -> ReadRepoGit (writeToReadGit repo)
WriteRepoShare repo -> ReadRepoShare repo
writeToReadGit :: WriteGitRepo -> ReadGitRepo
writeToReadGit = \case
WriteGitRepo {url', branch} -> ReadGitRepo {url = url', ref = branch}
WriteGitRepo {url, branch} -> ReadGitRepo {url = url, ref = branch}
writePathToRead :: WriteRemotePath -> ReadRemoteNamespace
writePathToRead (w, p) = (writeToRead w, Nothing, p)
@ -38,11 +45,14 @@ writePathToRead (w, p) = (writeToRead w, Nothing, p)
printReadRepo :: ReadRepo -> Text
printReadRepo = \case
ReadRepoGit ReadGitRepo {url, ref} -> url <> Monoid.fromMaybe (Text.cons ':' <$> ref)
ReadRepoShare ShareRepo {url} -> url
printWriteRepo :: WriteRepo -> Text
printWriteRepo = \case
WriteRepoGit WriteGitRepo {url', branch} -> url' <> Monoid.fromMaybe (Text.cons ':' <$> branch)
WriteRepoGit WriteGitRepo {url, branch} -> url <> Monoid.fromMaybe (Text.cons ':' <$> branch)
WriteRepoShare ShareRepo {url} -> url
-- | print remote namespace
printNamespace :: ReadRepo -> Maybe ShortBranchHash -> Path -> Text
printNamespace repo sbh path =
printReadRepo repo <> case sbh of
@ -56,6 +66,7 @@ printNamespace repo sbh path =
then mempty
else "." <> Path.toText path
-- | print remote path
printHead :: WriteRepo -> Path -> Text
printHead repo path =
printWriteRepo repo

View File

@ -863,7 +863,7 @@ pushGitBranch srcConn repo (PushGitBranchOpts setRoot _syncMode) action = Unlift
-- Commit our changes
push :: forall n. MonadIO n => Git.GitRepo -> WriteGitRepo -> Branch m -> n Bool -- withIOError needs IO
push remotePath repo@(WriteGitRepo {url' = url, branch = mayGitBranch}) newRootBranch = time "SqliteCodebase.pushGitRootBranch.push" $ do
push remotePath repo@(WriteGitRepo {url, branch = mayGitBranch}) newRootBranch = time "SqliteCodebase.pushGitRootBranch.push" $ do
-- has anything changed?
-- note: -uall recursively shows status for all files in untracked directories
-- we want this so that we see

View File

@ -178,6 +178,7 @@ library
DerivingStrategies
DerivingVia
DoAndIfThenElse
DuplicateRecordFields
FlexibleContexts
FlexibleInstances
GeneralizedNewtypeDeriving
@ -349,6 +350,7 @@ test-suite parser-typechecker-tests
DerivingStrategies
DerivingVia
DoAndIfThenElse
DuplicateRecordFields
FlexibleContexts
FlexibleInstances
GeneralizedNewtypeDeriving

View File

@ -58,7 +58,7 @@ import qualified Unison.Codebase.Editor.Output as Output
import qualified Unison.Codebase.Editor.Output.BranchDiff as OBranchDiff
import qualified Unison.Codebase.Editor.Output.DumpNamespace as Output.DN
import qualified Unison.Codebase.Editor.Propagate as Propagate
import Unison.Codebase.Editor.RemoteRepo (ReadGitRemoteNamespace, ReadRepo (ReadRepoGit), WriteGitRepo, WriteRemotePath, WriteRepo (WriteRepoGit), printNamespace, writePathToRead)
import Unison.Codebase.Editor.RemoteRepo (ReadGitRemoteNamespace, ReadRepo (ReadRepoGit), WriteGitRepo, WriteRemotePath, WriteRepo (WriteRepoGit, WriteRepoShare), printNamespace, writePathToRead)
import qualified Unison.Codebase.Editor.Slurp as Slurp
import Unison.Codebase.Editor.SlurpComponent (SlurpComponent (..))
import qualified Unison.Codebase.Editor.SlurpComponent as SC
@ -1757,10 +1757,10 @@ doPushRemoteBranch repo localPath syncMode remoteTarget = do
currentPath' <- use LoopState.currentPath
getAt (Path.resolve currentPath' localPath)
unlessError do
case repo of
WriteRepoGit repo ->
withExceptT Output.GitError $ do
case repo of
WriteRepoGit repo ->
unlessError do
withExceptT Output.GitError do
case remoteTarget of
Nothing -> do
let opts = PushGitBranchOpts {setRoot = False, syncMode}
@ -1780,6 +1780,14 @@ doPushRemoteBranch repo localPath syncMode remoteTarget = do
syncGitRemoteBranch repo opts withRemoteRoot >>= \case
Left output -> respond output
Right _branch -> respond Success
WriteRepoShare repo -> do
case remoteTarget of
Nothing ->
-- do a gist
error "don't do a gist"
Just (remotePath, pushBehavior) ->
-- let (userSegment :| pathSegments) = undefined
handlePushToUnisonShare _userSegment _pathSegments _localPath pushBehavior
where
-- Per `pushBehavior`, we are either:
--

View File

@ -52,7 +52,7 @@ writeRepo :: P WriteRepo
writeRepo = P.label "repo root for writing" $ do
uri <- parseProtocol
treeish <- P.optional treeishSuffix
pure (WriteRepoGit WriteGitRepo {url' = printProtocol uri, branch = treeish})
pure (WriteRepoGit WriteGitRepo {url = printProtocol uri, branch = treeish})
writeRepoPath :: P WriteRemotePath
writeRepoPath = P.label "generic git repo" $ do

View File

@ -2821,10 +2821,14 @@ prettyTypeName ppe r =
prettyHashQualified (PPE.typeName ppe r)
prettyReadRepo :: ReadRepo -> Pretty
prettyReadRepo (RemoteRepo.ReadRepoGit RemoteRepo.ReadGitRepo {url}) = P.blue (P.text url)
prettyReadRepo = \case
RemoteRepo.ReadRepoGit RemoteRepo.ReadGitRepo {url} -> P.blue (P.text url)
RemoteRepo.ReadRepoShare RemoteRepo.ShareRepo {url} -> P.blue (P.text url)
prettyWriteRepo :: WriteRepo -> Pretty
prettyWriteRepo (RemoteRepo.WriteRepoGit RemoteRepo.WriteGitRepo {url'}) = P.blue (P.text url')
prettyWriteRepo = \case
RemoteRepo.WriteRepoGit RemoteRepo.WriteGitRepo {url} -> P.blue (P.text url)
RemoteRepo.WriteRepoShare RemoteRepo.ShareRepo {url} -> P.blue (P.text url)
isTestOk :: Term v Ann -> Bool
isTestOk tm = case tm of