Revive move-branch confirmations

This commit is contained in:
Chris Penner 2024-07-10 09:52:23 -07:00
parent 09ecc74ce0
commit 15431602ac
3 changed files with 16 additions and 11 deletions

View File

@ -328,8 +328,9 @@ loop e = do
(ppe, diff) <- diffHelper beforeBranch0 afterBranch0
Cli.respondNumbered (ShowDiffNamespace beforeLoc afterLoc ppe diff)
MoveBranchI src' dest' -> do
hasConfirmed <- confirmedCommand input
description <- inputDescription input
doMoveBranch description src' dest'
doMoveBranch description hasConfirmed src' dest'
SwitchBranchI path' -> do
path <- Cli.resolvePath' path'
branchExists <- Cli.branchExistsAtPath' path'
@ -566,8 +567,9 @@ loop e = do
MoveTermI src' dest' -> doMoveTerm src' dest' =<< inputDescription input
MoveTypeI src' dest' -> doMoveType src' dest' =<< inputDescription input
MoveAllI src' dest' -> do
hasConfirmed <- confirmedCommand input
desc <- inputDescription input
handleMoveAll src' dest' desc
handleMoveAll hasConfirmed src' dest' desc
DeleteI dtarget -> do
pp <- Cli.getCurrentProjectPath
let getTerms (absPath, seg) = Cli.getTermsAt (set PP.absPath_ absPath pp, seg)

View File

@ -11,9 +11,9 @@ import Unison.Codebase.Path qualified as Path
import Unison.HashQualified' qualified as HQ'
import Unison.Prelude
handleMoveAll :: Path.Path' -> Path.Path' -> Text -> Cli ()
handleMoveAll src' dest' description = do
moveBranchFunc <- moveBranchFunc src' dest'
handleMoveAll :: Bool -> Path.Path' -> Path.Path' -> Text -> Cli ()
handleMoveAll hasConfirmed src' dest' description = do
moveBranchFunc <- moveBranchFunc hasConfirmed src' dest'
moveTermTypeSteps <- case (,) <$> Path.toSplit' src' <*> Path.toSplit' dest' of
Nothing -> pure []
Just (fmap HQ'.NameOnly -> src, dest) -> do

View File

@ -12,12 +12,15 @@ import Unison.Prelude
-- | Note: Currently only allows moving within the same project-branch, should be easy to change in the future if
-- needed.
moveBranchFunc :: Path.Path' -> Path.Path' -> Cli (Maybe (Path.Absolute, Branch IO -> Branch IO))
moveBranchFunc src' dest' = do
moveBranchFunc :: Bool -> Path.Path' -> Path.Path' -> Cli (Maybe (Path.Absolute, Branch IO -> Branch IO))
moveBranchFunc hasConfirmed src' dest' = do
-- We currently only support moving within the same project branch.
srcPP@(PP.ProjectPath _proj _projBranch srcAbs) <- Cli.resolvePath' src'
PP.ProjectPath _ _ destAbs <- Cli.resolvePath' dest'
destBranchExists <- Cli.branchExistsAtPath' dest'
let isRootMove = (Path.isRoot srcAbs || Path.isRoot destAbs)
when (isRootMove && not hasConfirmed) do
Cli.returnEarly MoveRootBranchConfirmation
Cli.getMaybeBranchFromProjectPath srcPP >>= traverse \srcBranch -> do
-- We want the move to appear as a single step in the root namespace, but we need to make
-- surgical changes in both the root and the destination, so we make our modifications at the shared parent of
@ -27,16 +30,16 @@ moveBranchFunc src' dest' = do
changeRoot
& Branch.modifyAt srcLoc (const Branch.empty)
& Branch.modifyAt destLoc (const srcBranch)
if destBranchExists
if (destBranchExists && not isRootMove)
then Cli.respond (MovedOverExistingBranch dest')
else pure ()
pure (Path.Absolute changeRootPath, doMove)
-- | Moves a branch and its history from one location to another, and saves the new root
-- branch.
doMoveBranch :: Text -> Path.Path' -> Path.Path' -> Cli ()
doMoveBranch actionDescription src' dest' = do
moveBranchFunc src' dest' >>= \case
doMoveBranch :: Text -> Bool -> Path.Path' -> Path.Path' -> Cli ()
doMoveBranch actionDescription hasConfirmed src' dest' = do
moveBranchFunc hasConfirmed src' dest' >>= \case
Nothing -> Cli.respond (BranchNotFound src')
Just (absPath, func) -> do
pp <- Cli.resolvePath' (Path.AbsolutePath' absPath)