summaryrefslogtreecommitdiff
path: root/Annex/AdjustedBranch.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Annex/AdjustedBranch.hs')
-rw-r--r--Annex/AdjustedBranch.hs45
1 files changed, 33 insertions, 12 deletions
diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs
index 2baed04a0..bebb5c77c 100644
--- a/Annex/AdjustedBranch.hs
+++ b/Annex/AdjustedBranch.hs
@@ -160,21 +160,41 @@ originalBranch = fmap fromAdjustedBranch <$> inRepo Git.Branch.current
- adjusted version of a branch, changes the adjustment of the original
- branch).
-
- - Can fail, if no branch is checked out, or perhaps if staged changes
- - conflict with the adjusted branch.
+ - Can fail, if no branch is checked out, or if the adjusted branch already
+ - exists, or perhaps if staged changes conflict with the adjusted branch.
-}
-enterAdjustedBranch :: Adjustment -> Annex ()
+enterAdjustedBranch :: Adjustment -> Annex Bool
enterAdjustedBranch adj = go =<< originalBranch
where
go (Just origbranch) = do
- AdjBranch b <- preventCommits $ const $
- adjustBranch adj origbranch
- showOutput -- checkout can have output in large repos
- inRepo $ Git.Command.run
- [ Param "checkout"
- , Param $ fromRef $ Git.Ref.base b
- ]
- go Nothing = error "not on any branch!"
+ let adjbranch = adjBranch $ originalToAdjusted origbranch adj
+ ifM (inRepo $ Git.Ref.exists adjbranch)
+ ( do
+ mapM_ (warning . unwords)
+ [ [ "adjusted branch"
+ , Git.Ref.describe adjbranch
+ , "already exists."
+ ]
+ , [ "Aborting because that branch may have changes that have not yet reached"
+ , Git.Ref.describe origbranch
+ ]
+ , [ "You can check out the adjusted branch manually to enter it,"
+ , "or delete the adjusted branch and re-run this command."
+ ]
+ ]
+ return False
+ , do
+ AdjBranch b <- preventCommits $ const $
+ adjustBranch adj origbranch
+ showOutput -- checkout can have output in large repos
+ inRepo $ Git.Command.runBool
+ [ Param "checkout"
+ , Param $ fromRef $ Git.Ref.base b
+ ]
+ )
+ go Nothing = do
+ warning "not on any branch!"
+ return False
adjustToCrippledFileSystem :: Annex ()
adjustToCrippledFileSystem = do
@@ -186,7 +206,8 @@ adjustToCrippledFileSystem = do
, Param "-m"
, Param "commit before entering adjusted unlocked branch"
]
- enterAdjustedBranch UnlockAdjustment
+ unlessM (enterAdjustedBranch UnlockAdjustment) $
+ warning "Failed to enter adjusted branch!"
setBasisBranch :: BasisBranch -> Ref -> Annex ()
setBasisBranch (BasisBranch basis) new =