2011-09-15 20:57:02 +00:00
|
|
|
{- git-annex command infrastructure
|
2010-11-02 23:04:24 +00:00
|
|
|
-
|
2015-01-21 16:50:09 +00:00
|
|
|
- Copyright 2010-2014 Joey Hess <id@joeyh.name>
|
2010-11-02 23:04:24 +00:00
|
|
|
-
|
|
|
|
- Licensed under the GNU GPL version 3 or higher.
|
|
|
|
-}
|
|
|
|
|
2011-10-30 03:48:46 +00:00
|
|
|
module Command (
|
|
|
|
command,
|
2015-07-08 16:33:27 +00:00
|
|
|
commandParser,
|
2011-11-16 04:49:09 +00:00
|
|
|
noRepo,
|
2012-09-16 00:46:38 +00:00
|
|
|
noCommit,
|
2013-07-31 00:24:27 +00:00
|
|
|
noMessages,
|
2012-01-06 02:48:59 +00:00
|
|
|
withOptions,
|
2011-10-30 03:48:46 +00:00
|
|
|
next,
|
|
|
|
stop,
|
2011-12-09 16:23:45 +00:00
|
|
|
stopUnless,
|
2011-11-11 03:35:08 +00:00
|
|
|
whenAnnexed,
|
2011-12-07 20:53:53 +00:00
|
|
|
ifAnnexed,
|
2011-10-30 03:48:46 +00:00
|
|
|
isBareRepo,
|
2011-11-11 05:52:58 +00:00
|
|
|
module ReExported
|
2011-10-30 03:48:46 +00:00
|
|
|
) where
|
2010-11-02 23:04:24 +00:00
|
|
|
|
2011-10-05 20:02:51 +00:00
|
|
|
import Common.Annex
|
2010-11-04 17:28:49 +00:00
|
|
|
import qualified Backend
|
2011-06-30 17:16:57 +00:00
|
|
|
import qualified Git
|
2011-11-11 05:52:58 +00:00
|
|
|
import Types.Command as ReExported
|
2012-01-06 02:48:59 +00:00
|
|
|
import Types.Option as ReExported
|
2014-01-26 20:25:55 +00:00
|
|
|
import CmdLine.Seek as ReExported
|
2011-11-11 05:52:58 +00:00
|
|
|
import Checks as ReExported
|
2014-01-26 20:25:55 +00:00
|
|
|
import CmdLine.Usage as ReExported
|
2014-01-29 17:44:53 +00:00
|
|
|
import CmdLine.Action as ReExported
|
2014-01-26 20:25:55 +00:00
|
|
|
import CmdLine.Option as ReExported
|
|
|
|
import CmdLine.GitAnnex.Options as ReExported
|
2010-11-02 23:04:24 +00:00
|
|
|
|
2015-07-08 16:33:27 +00:00
|
|
|
import qualified Options.Applicative as O
|
|
|
|
|
|
|
|
{- Generates a normal Command -}
|
2015-07-08 17:39:11 +00:00
|
|
|
command :: String -> String -> CommandSection -> String -> (Command -> CommandParser) -> Command
|
|
|
|
command name paramdesc section desc parser = c
|
|
|
|
where
|
|
|
|
c = Command [] Nothing commonChecks False False name paramdesc section desc (parser c)
|
2012-02-14 16:40:40 +00:00
|
|
|
|
2015-07-08 16:33:27 +00:00
|
|
|
{- Simple CommandParser generator, for when the CommandSeek wants all
|
|
|
|
- non-option parameters. -}
|
2015-07-08 17:39:11 +00:00
|
|
|
commandParser :: (CmdParams -> CommandSeek) -> Command -> CommandParser
|
|
|
|
commandParser mkseek c = mkseek <$> O.many cmdparams
|
|
|
|
where
|
|
|
|
cmdparams = O.argument O.str (O.metavar (cmdparamdesc c))
|
2015-07-08 16:33:27 +00:00
|
|
|
|
2012-09-16 00:46:38 +00:00
|
|
|
{- Indicates that a command doesn't need to commit any changes to
|
|
|
|
- the git-annex branch. -}
|
|
|
|
noCommit :: Command -> Command
|
|
|
|
noCommit c = c { cmdnocommit = True }
|
2011-11-16 04:49:09 +00:00
|
|
|
|
2013-07-31 00:24:27 +00:00
|
|
|
{- Indicates that a command should not output anything other than what
|
|
|
|
- it directly sends to stdout. (--json can override this). -}
|
|
|
|
noMessages :: Command -> Command
|
|
|
|
noMessages c = c { cmdnomessages = True }
|
|
|
|
|
2011-11-16 04:49:09 +00:00
|
|
|
{- Adds a fallback action to a command, that will be run if it's used
|
|
|
|
- outside a git repository. -}
|
2013-11-30 19:18:40 +00:00
|
|
|
noRepo :: (CmdParams -> IO ()) -> Command -> Command
|
2011-11-16 04:49:09 +00:00
|
|
|
noRepo a c = c { cmdnorepo = Just a }
|
2010-11-04 17:28:49 +00:00
|
|
|
|
2012-01-06 02:48:59 +00:00
|
|
|
{- Adds options to a command. -}
|
|
|
|
withOptions :: [Option] -> Command -> Command
|
2015-02-06 21:08:14 +00:00
|
|
|
withOptions o c = c { cmdoptions = cmdoptions c ++ o }
|
2012-01-06 02:48:59 +00:00
|
|
|
|
2011-05-15 06:02:46 +00:00
|
|
|
{- For start and perform stages to indicate what step to run next. -}
|
|
|
|
next :: a -> Annex (Maybe a)
|
|
|
|
next a = return $ Just a
|
|
|
|
|
|
|
|
{- Or to indicate nothing needs to be done. -}
|
|
|
|
stop :: Annex (Maybe a)
|
|
|
|
stop = return Nothing
|
|
|
|
|
2011-12-09 16:23:45 +00:00
|
|
|
{- Stops unless a condition is met. -}
|
|
|
|
stopUnless :: Annex Bool -> Annex (Maybe a) -> Annex (Maybe a)
|
2012-03-14 21:43:34 +00:00
|
|
|
stopUnless c a = ifM c ( a , stop )
|
2011-12-09 16:23:45 +00:00
|
|
|
|
2011-11-11 03:35:08 +00:00
|
|
|
{- Modifies an action to only act on files that are already annexed,
|
2014-04-17 22:03:39 +00:00
|
|
|
- and passes the key on to it. -}
|
|
|
|
whenAnnexed :: (FilePath -> Key -> Annex (Maybe a)) -> FilePath -> Annex (Maybe a)
|
2011-12-07 20:53:53 +00:00
|
|
|
whenAnnexed a file = ifAnnexed file (a file) (return Nothing)
|
2011-11-11 03:35:08 +00:00
|
|
|
|
2014-04-17 22:03:39 +00:00
|
|
|
ifAnnexed :: FilePath -> (Key -> Annex a) -> Annex a -> Annex a
|
2011-12-07 20:53:53 +00:00
|
|
|
ifAnnexed file yes no = maybe no yes =<< Backend.lookupFile file
|
2011-10-29 21:49:37 +00:00
|
|
|
|
2011-10-30 03:48:46 +00:00
|
|
|
isBareRepo :: Annex Bool
|
2011-11-08 19:34:10 +00:00
|
|
|
isBareRepo = fromRepo Git.repoIsLocalBare
|