set oneshot mode on a per-command basis
Avoids ugly (and test suite failing) hack in Command.Version
This commit is contained in:
parent
33e03d58ae
commit
90a8b38ac0
11 changed files with 19 additions and 16 deletions
|
@ -28,8 +28,8 @@ type Params = [String]
|
|||
type Flags = [Annex ()]
|
||||
|
||||
{- Runs the passed command line. -}
|
||||
dispatch :: Bool -> Params -> [Command] -> [Option] -> String -> IO Git.Repo -> IO ()
|
||||
dispatch oneshot args cmds commonoptions header getgitrepo = do
|
||||
dispatch :: Params -> [Command] -> [Option] -> String -> IO Git.Repo -> IO ()
|
||||
dispatch args cmds commonoptions header getgitrepo = do
|
||||
setupConsole
|
||||
r <- E.try getgitrepo :: IO (Either E.SomeException Git.Repo)
|
||||
case r of
|
||||
|
@ -39,7 +39,7 @@ dispatch oneshot args cmds commonoptions header getgitrepo = do
|
|||
(actions, state') <- Annex.run state $ do
|
||||
sequence_ flags
|
||||
prepCommand cmd params
|
||||
tryRun state' cmd $ [startup] ++ actions ++ [shutdown oneshot]
|
||||
tryRun state' cmd $ [startup] ++ actions ++ [shutdown $ cmdoneshot cmd]
|
||||
where
|
||||
(flags, cmd, params) = parseCmd args cmds commonoptions header
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
module Command (
|
||||
command,
|
||||
noRepo,
|
||||
oneShot,
|
||||
withOptions,
|
||||
next,
|
||||
stop,
|
||||
|
@ -39,7 +40,11 @@ import Annex.CheckAttr
|
|||
|
||||
{- Generates a normal command -}
|
||||
command :: String -> String -> [CommandSeek] -> String -> Command
|
||||
command = Command [] Nothing commonChecks
|
||||
command = Command [] Nothing commonChecks False
|
||||
|
||||
{- Makes a command run in oneshot mode. -}
|
||||
oneShot :: Command -> Command
|
||||
oneShot c = c { cmdoneshot = True }
|
||||
|
||||
{- Adds a fallback action to a command, that will be run if it's used
|
||||
- outside a git repository. -}
|
||||
|
|
|
@ -12,7 +12,7 @@ import Command
|
|||
import Annex.UUID
|
||||
|
||||
def :: [Command]
|
||||
def = [command "configlist" paramNothing seek
|
||||
def = [oneShot $ command "configlist" paramNothing seek
|
||||
"outputs relevant git configuration"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
|
|
|
@ -14,7 +14,7 @@ import Logs.Location
|
|||
import Annex.Content
|
||||
|
||||
def :: [Command]
|
||||
def = [command "dropkey" (paramRepeating paramKey) seek
|
||||
def = [oneShot $ command "dropkey" (paramRepeating paramKey) seek
|
||||
"drops annexed content for specified keys"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
|
|
|
@ -12,7 +12,7 @@ import Command
|
|||
import Annex.Content
|
||||
|
||||
def :: [Command]
|
||||
def = [command "inannex" (paramRepeating paramKey) seek
|
||||
def = [oneShot $ command "inannex" (paramRepeating paramKey) seek
|
||||
"checks if keys are present in the annex"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
|
|
|
@ -14,7 +14,7 @@ import Annex.Content
|
|||
import Utility.RsyncFile
|
||||
|
||||
def :: [Command]
|
||||
def = [command "recvkey" paramKey seek
|
||||
def = [oneShot $ command "recvkey" paramKey seek
|
||||
"runs rsync in server mode to receive content"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
|
|
|
@ -13,7 +13,7 @@ import Annex.Content
|
|||
import Utility.RsyncFile
|
||||
|
||||
def :: [Command]
|
||||
def = [command "sendkey" paramKey seek
|
||||
def = [oneShot $ command "sendkey" paramKey seek
|
||||
"runs rsync in server mode to send content"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
|
|
|
@ -11,10 +11,9 @@ import Common.Annex
|
|||
import Command
|
||||
import qualified Build.SysConfig as SysConfig
|
||||
import Annex.Version
|
||||
import CmdLine
|
||||
|
||||
def :: [Command]
|
||||
def = [noRepo showPackageVersion $ dontCheck repoExists $
|
||||
def = [oneShot $ noRepo showPackageVersion $ dontCheck repoExists $
|
||||
command "version" paramNothing seek "show version info"]
|
||||
|
||||
seek :: [CommandSeek]
|
||||
|
@ -29,9 +28,7 @@ start = do
|
|||
putStrLn $ "default repository version: " ++ defaultVersion
|
||||
putStrLn $ "supported repository versions: " ++ vs supportedVersions
|
||||
putStrLn $ "upgrade supported from repository versions: " ++ vs upgradableVersions
|
||||
-- avoid normal cleanup
|
||||
_ <- shutdown True
|
||||
liftIO exitSuccess
|
||||
stop
|
||||
where
|
||||
vs = join " "
|
||||
|
||||
|
|
|
@ -129,4 +129,4 @@ header :: String
|
|||
header = "Usage: git-annex command [option ..]"
|
||||
|
||||
run :: [String] -> IO ()
|
||||
run args = dispatch False args cmds options header Git.Construct.fromCurrent
|
||||
run args = dispatch args cmds options header Git.Construct.fromCurrent
|
||||
|
|
|
@ -36,6 +36,7 @@ data Command = Command
|
|||
{ cmdoptions :: [Option] -- command-specific options
|
||||
, cmdnorepo :: Maybe (IO ()) -- an action to run when not in a repo
|
||||
, cmdcheck :: [CommandCheck] -- check stage
|
||||
, cmdoneshot :: Bool -- don't save state after running
|
||||
, cmdname :: String
|
||||
, cmdparamdesc :: String -- description of params for usage
|
||||
, cmdseek :: [CommandSeek] -- seek stage
|
||||
|
|
|
@ -82,7 +82,7 @@ builtins = map cmdname cmds
|
|||
builtin :: String -> String -> [String] -> IO ()
|
||||
builtin cmd dir params = do
|
||||
checkNotReadOnly cmd
|
||||
dispatch True (cmd : filterparams params) cmds options header $
|
||||
dispatch (cmd : filterparams params) cmds options header $
|
||||
Git.Construct.repoAbsPath dir >>= Git.Construct.fromAbsPath
|
||||
|
||||
external :: [String] -> IO ()
|
||||
|
|
Loading…
Add table
Reference in a new issue