module Unison.Codebase.Editor.HandleInput.Cancel
  ( handleCancel,
  )
where

import U.Codebase.Sqlite.ProjectBranch (ProjectBranch (..))
import Unison.Cli.Monad (Cli)
import Unison.Cli.Monad qualified as Cli
import Unison.Cli.MonadUtils qualified as Cli
import Unison.Codebase.Editor.HandleInput.DeleteBranch (handleDeleteBranch2)
import Unison.Codebase.Editor.Output qualified as Output
import Unison.Codebase.ProjectPath (ProjectPathG (..))
import Unison.Prelude
import Unison.Project (ProjectAndBranch (..))

handleCancel :: Cli ()
handleCancel :: Cli ()
handleCancel = do
  ProjectPath
current <- Cli ProjectPath
Cli.getCurrentProjectPath

  Bool -> Cli () -> Cli ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Bool -> Bool
not (ProjectPath
current.branch.isUpdate Bool -> Bool -> Bool
|| ProjectPath
current.branch.isUpgrade Bool -> Bool -> Bool
|| ProjectPath
current.branch.isMerge)) do
    Output -> Cli ()
forall a. Output -> Cli a
Cli.returnEarly (Pretty ColorText -> Output
Output.Literal Pretty ColorText
"There's no merge, update, or upgrade in progress.")

  ProjectAndBranch Project ProjectBranch -> Cli ()
handleDeleteBranch2 (Project -> ProjectBranch -> ProjectAndBranch Project ProjectBranch
forall a b. a -> b -> ProjectAndBranch a b
ProjectAndBranch ProjectPath
current.project ProjectPath
current.branch)