summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2015-07-13 11:42:42 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2015-07-13 11:42:42 -0400
commit2228571a90fbe00b02ee1f22fab92c9e824093df (patch)
tree8de8ad7e28e5f8f393f42ae078b9c4ed5f448d13
parent93d62419262ca6ec924babe734780f7753d887a4 (diff)
converted Assistant and Watch; avoid duplicate arg parsing for no repo mode
-rw-r--r--CmdLine/GitAnnex.hs8
-rw-r--r--CmdLine/GitAnnex/Options.hs16
-rw-r--r--Command/Assistant.hs89
-rw-r--r--Command/Watch.hs25
-rw-r--r--Command/XMPPGit.hs2
-rw-r--r--debian/changelog1
6 files changed, 71 insertions, 70 deletions
diff --git a/CmdLine/GitAnnex.hs b/CmdLine/GitAnnex.hs
index ede943804..28a741b79 100644
--- a/CmdLine/GitAnnex.hs
+++ b/CmdLine/GitAnnex.hs
@@ -98,8 +98,8 @@ import qualified Command.DiffDriver
import qualified Command.Undo
import qualified Command.Version
#ifdef WITH_ASSISTANT
---import qualified Command.Watch
---import qualified Command.Assistant
+import qualified Command.Watch
+import qualified Command.Assistant
#ifdef WITH_WEBAPP
--import qualified Command.WebApp
#endif
@@ -203,8 +203,8 @@ cmds =
, Command.Undo.cmd
, Command.Version.cmd
#ifdef WITH_ASSISTANT
--- , Command.Watch.cmd
--- , Command.Assistant.cmd
+ , Command.Watch.cmd
+ , Command.Assistant.cmd
#ifdef WITH_WEBAPP
-- , Command.WebApp.cmd
#endif
diff --git a/CmdLine/GitAnnex/Options.hs b/CmdLine/GitAnnex/Options.hs
index f95a4d03e..a050f57e3 100644
--- a/CmdLine/GitAnnex/Options.hs
+++ b/CmdLine/GitAnnex/Options.hs
@@ -285,3 +285,19 @@ timeLimitOption = globalSetter Limit.addTimeLimit $ strOption
<> help "stop after the specified amount of time"
<> hidden
)
+
+data DaemonOptions = DaemonOptions
+ { foregroundDaemonOption :: Bool
+ , stopDaemonOption :: Bool
+ }
+
+parseDaemonOptions :: Parser DaemonOptions
+parseDaemonOptions = DaemonOptions
+ <$> switch
+ ( long "foreground"
+ <> help "do not daemonize"
+ )
+ <*> switch
+ ( long "stop"
+ <> help "stop daemon"
+ )
diff --git a/Command/Assistant.hs b/Command/Assistant.hs
index 08e96da07..836be7b67 100644
--- a/Command/Assistant.hs
+++ b/Command/Assistant.hs
@@ -1,6 +1,6 @@
{- git-annex assistant
-
- - Copyright 2012 Joey Hess <id@joeyh.name>
+ - Copyright 2012-2015 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU GPL version 3 or higher.
-}
@@ -17,67 +17,60 @@ import qualified Build.SysConfig
import Utility.HumanTime
import Assistant.Install
-import System.Environment
-
cmd :: Command
-cmd = dontCheck repoExists $ withOptions options $ notBareRepo $
- noRepo (withParams checkNoRepoOpts) $
+cmd = dontCheck repoExists $ notBareRepo $
+ noRepo (startNoRepo <$$> optParser) $
command "assistant" SectionCommon
"automatically sync changes"
- paramNothing (withParams seek)
-
-options :: [Option]
-options =
- [ Command.Watch.foregroundOption
- , Command.Watch.stopOption
- , autoStartOption
- , startDelayOption
- , autoStopOption
- ]
-
-autoStartOption :: Option
-autoStartOption = flagOption [] "autostart" "start in known repositories"
+ paramNothing (seek <$$> optParser)
-autoStopOption :: Option
-autoStopOption = flagOption [] "autostop" "stop in known repositories"
+data AssistantOptions = AssistantOptions
+ { daemonOptions :: DaemonOptions
+ , autoStartOption :: Bool
+ , startDelayOption :: Maybe Duration
+ , autoStopOption :: Bool
+ }
-startDelayOption :: Option
-startDelayOption = fieldOption [] "startdelay" paramNumber "delay before running startup scan"
+optParser :: CmdParamsDesc -> Parser AssistantOptions
+optParser _ = AssistantOptions
+ <$> parseDaemonOptions
+ <*> switch
+ ( long "autostart"
+ <> help "start in known repositories"
+ )
+ <*> optional (option (str >>= parseDuration)
+ ( long "startdelay" <> metavar paramNumber
+ <> help "delay before running startup scan"
+ ))
+ <*> switch
+ ( long "autostop"
+ <> help "stop in known repositories"
+ )
-seek :: CmdParams -> CommandSeek
-seek ps = do
- stopdaemon <- getOptionFlag Command.Watch.stopOption
- foreground <- getOptionFlag Command.Watch.foregroundOption
- autostart <- getOptionFlag autoStartOption
- autostop <- getOptionFlag autoStopOption
- startdelay <- getOptionField startDelayOption (pure . maybe Nothing parseDuration)
- withNothing (start foreground stopdaemon autostart autostop startdelay) ps
+seek :: AssistantOptions -> CommandSeek
+seek = commandAction . start
-start :: Bool -> Bool -> Bool -> Bool -> Maybe Duration -> CommandStart
-start foreground stopdaemon autostart autostop startdelay
- | autostart = do
- liftIO $ autoStart startdelay
+start :: AssistantOptions -> CommandStart
+start o
+ | autoStartOption o = do
+ liftIO $ autoStart o
stop
- | autostop = do
+ | autoStopOption o = do
liftIO autoStop
stop
| otherwise = do
liftIO ensureInstalled
ensureInitialized
- Command.Watch.start True foreground stopdaemon startdelay
+ Command.Watch.start True (daemonOptions o) (startDelayOption o)
-{- Run outside a git repository; support autostart and autostop mode. -}
-checkNoRepoOpts :: CmdParams -> IO ()
-checkNoRepoOpts _ = ifM (elem "--autostart" <$> getArgs)
- ( autoStart Nothing
- , ifM (elem "--autostop" <$> getArgs)
- ( autoStop
- , error "Not in a git repository."
- )
- )
+startNoRepo :: AssistantOptions -> IO ()
+startNoRepo o
+ | autoStartOption o = autoStart o
+ | autoStopOption o = autoStop
+ | otherwise = error "Not in a git repository."
-autoStart :: Maybe Duration -> IO ()
-autoStart startdelay = do
+autoStart :: AssistantOptions -> IO ()
+autoStart o = do
dirs <- liftIO readAutoStartFile
when (null dirs) $ do
f <- autoStartFile
@@ -105,7 +98,7 @@ autoStart startdelay = do
where
baseparams =
[ Param "assistant"
- , Param $ "--startdelay=" ++ fromDuration (fromMaybe (Duration 5) startdelay)
+ , Param $ "--startdelay=" ++ fromDuration (fromMaybe (Duration 5) (startDelayOption o))
]
autoStop :: IO ()
diff --git a/Command/Watch.hs b/Command/Watch.hs
index cc7356ddf..ac2f27397 100644
--- a/Command/Watch.hs
+++ b/Command/Watch.hs
@@ -13,26 +13,17 @@ import Command
import Utility.HumanTime
cmd :: Command
-cmd = notBareRepo $ withOptions [foregroundOption, stopOption] $
+cmd = notBareRepo $
command "watch" SectionCommon
"watch for changes and autocommit"
- paramNothing (withParams seek)
+ paramNothing (seek <$$> const parseDaemonOptions)
-seek :: CmdParams -> CommandSeek
-seek ps = do
- stopdaemon <- getOptionFlag stopOption
- foreground <- getOptionFlag foregroundOption
- withNothing (start False foreground stopdaemon Nothing) ps
+seek :: DaemonOptions -> CommandSeek
+seek o = commandAction $ start False o Nothing
-foregroundOption :: Option
-foregroundOption = flagOption [] "foreground" "do not daemonize"
-
-stopOption :: Option
-stopOption = flagOption [] "stop" "stop daemon"
-
-start :: Bool -> Bool -> Bool -> Maybe Duration -> CommandStart
-start assistant foreground stopdaemon startdelay = do
- if stopdaemon
+start :: Bool -> DaemonOptions -> Maybe Duration -> CommandStart
+start assistant o startdelay = do
+ if stopDaemonOption o
then stopDaemon
- else startDaemon assistant foreground startdelay Nothing Nothing Nothing -- does not return
+ else startDaemon assistant (foregroundDaemonOption o) startdelay Nothing Nothing Nothing -- does not return
stop
diff --git a/Command/XMPPGit.hs b/Command/XMPPGit.hs
index 86d8dbc11..20e7f0743 100644
--- a/Command/XMPPGit.hs
+++ b/Command/XMPPGit.hs
@@ -22,7 +22,7 @@ cmd = noCommit $ dontCheck repoExists $
seek :: CmdParams -> CommandSeek
seek = withWords start
-start :: [String] -> CommandStart
+start :: CmdParams -> CommandStart
start _ = do
liftIO gitRemoteHelper
liftIO xmppGitRelay
diff --git a/debian/changelog b/debian/changelog
index 36cde0735..71b08394a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -6,6 +6,7 @@
* Bash completion code is built-in to git-annex, and can be enabled by
running: source <(git-annex --bash-completion-script git-annex)
* version --raw now works when run outside a git repository.
+ * assistant --startdelay now works when run outside a git repository.
* dead now accepts multiple --key options.
git-annex (5.20150710) unstable; urgency=medium