git-annex/Command/VPop.hs
Joey Hess 2ba1559a8e
git style quoting for ActionItemOther
Added StringContainingQuotedPath, which is used for ActionItemOther.

In the process, checked every ActionItemOther for those containing
filenames, and made them use quoting.

Sponsored-by: Graham Spencer on Patreon
2023-04-08 16:30:01 -04:00

53 lines
1.3 KiB
Haskell

{- git-annex command
-
- Copyright 2014 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
module Command.VPop where
import Command
import qualified Git
import qualified Git.Command
import qualified Git.Ref
import Types.View
import Logs.View
import Command.View (checkoutViewBranch)
cmd :: Command
cmd = notBareRepo $
command "vpop" SectionMetaData "switch back to previous view"
paramNumber (withParams seek)
seek :: CmdParams -> CommandSeek
seek = withWords (commandAction . start)
start :: [String] -> CommandStart
start ps = go =<< currentView
where
go Nothing = giveup "Not in a view."
go (Just (v, madj)) = starting "vpop" ai si $ do
removeView v
(oldvs, vs) <- splitAt (num - 1) . filter (sameparentbranch v)
<$> recentViews
mapM_ removeView oldvs
case vs of
(oldv:_) -> next $ do
showOutput
checkoutViewBranch oldv madj
(\v' madj' -> return (branchView v' madj'))
_ -> next $ do
showOutput
inRepo $ Git.Command.runBool
[ Param "checkout"
, Param $ Git.fromRef $ Git.Ref.base $
viewParentBranch v
]
sameparentbranch a b = viewParentBranch a == viewParentBranch b
num = fromMaybe 1 $ readish =<< headMaybe ps
ai = ActionItemOther (Just $ UnquotedString $ show num)
si = SeekInput ps