module Unison.Codebase.Editor.HandleInput.ProjectRename
( handleProjectRename,
)
where
import U.Codebase.Sqlite.Project (Project (..))
import U.Codebase.Sqlite.Queries qualified as Queries
import Unison.Cli.Monad (Cli)
import Unison.Cli.Monad qualified as Cli
import Unison.Cli.MonadUtils qualified as Cli
import Unison.Codebase.Editor.Output qualified as Output
import Unison.Prelude
import Unison.Project (ProjectAndBranch (..), ProjectName)
handleProjectRename :: ProjectName -> Cli ()
handleProjectRename :: ProjectName -> Cli ()
handleProjectRename ProjectName
newName = do
ProjectAndBranch project _branch <- Cli (ProjectAndBranch Project ProjectBranch)
Cli.getCurrentProjectAndBranch
let oldName = Project
project.name
when (oldName /= newName) do
Cli.runTransactionWithRollback \forall void. Output -> Transaction void
rollback -> do
ProjectName -> Transaction (Maybe Project)
Queries.loadProjectByName ProjectName
newName Transaction (Maybe Project)
-> (Maybe Project -> Transaction ()) -> Transaction ()
forall a b. Transaction a -> (a -> Transaction b) -> Transaction b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Just Project
_ -> Output -> Transaction ()
forall void. Output -> Transaction void
rollback (ProjectName -> Output
Output.ProjectNameAlreadyExists ProjectName
newName)
Maybe Project
Nothing -> ProjectId -> ProjectName -> Transaction ()
Queries.renameProject Project
project.projectId ProjectName
newName
Cli.respond (Output.RenamedProject oldName newName)