implement withGlobalOptions, and convert Find
This commit is contained in:
parent
7af0893abd
commit
5cc882a35e
6 changed files with 44 additions and 24 deletions
|
@ -31,7 +31,6 @@ import Annex.Content
|
|||
import Annex.Environment
|
||||
import Command
|
||||
import Types.Messages
|
||||
import CmdLine.GlobalSetter
|
||||
|
||||
{- Runs the passed command line. -}
|
||||
dispatch :: Bool -> CmdParams -> [Command] -> [Parser GlobalSetter] -> [(String, String)] -> IO Git.Repo -> String -> String -> IO ()
|
||||
|
|
|
@ -56,7 +56,7 @@ import qualified Command.AddUnused
|
|||
import qualified Command.Unlock
|
||||
import qualified Command.Lock
|
||||
import qualified Command.PreCommit
|
||||
--import qualified Command.Find
|
||||
import qualified Command.Find
|
||||
--import qualified Command.FindRef
|
||||
--import qualified Command.Whereis
|
||||
--import qualified Command.List
|
||||
|
@ -183,7 +183,7 @@ cmds =
|
|||
-- , Command.Unused.cmd
|
||||
-- , Command.DropUnused.cmd
|
||||
, Command.AddUnused.cmd
|
||||
-- , Command.Find.cmd
|
||||
, Command.Find.cmd
|
||||
-- , Command.FindRef.cmd
|
||||
-- , Command.Whereis.cmd
|
||||
-- , Command.List.cmd
|
||||
|
|
|
@ -200,8 +200,8 @@ fileMatchingOptions' =
|
|||
"match files smaller than a size"
|
||||
]
|
||||
|
||||
parseCombiningOptions :: Parser [GlobalSetter]
|
||||
parseCombiningOptions =
|
||||
combiningOptions :: Parser [GlobalSetter]
|
||||
combiningOptions =
|
||||
many $ longopt "not" "negate next option"
|
||||
<|> longopt "and" "both previous and next option must match"
|
||||
<|> longopt "or" "either previous or next option must match"
|
||||
|
@ -211,8 +211,8 @@ parseCombiningOptions =
|
|||
longopt o h = globalFlag (Limit.addToken o) ( long o <> help h )
|
||||
shortopt o h = globalFlag (Limit.addToken [o]) ( short o <> help h)
|
||||
|
||||
parseJsonOption :: Parser GlobalSetter
|
||||
parseJsonOption = globalFlag (Annex.setOutput JSONOutput)
|
||||
jsonOption :: Parser GlobalSetter
|
||||
jsonOption = globalFlag (Annex.setOutput JSONOutput)
|
||||
( long "json" <> short 'j'
|
||||
<> help "enable JSON output"
|
||||
)
|
||||
|
|
15
Command.hs
15
Command.hs
|
@ -13,6 +13,7 @@ module Command (
|
|||
noCommit,
|
||||
noMessages,
|
||||
withOptions,
|
||||
withGlobalOptions,
|
||||
next,
|
||||
stop,
|
||||
stopUnless,
|
||||
|
@ -33,6 +34,7 @@ import Checks as ReExported
|
|||
import CmdLine.Usage as ReExported
|
||||
import CmdLine.Action as ReExported
|
||||
import CmdLine.Option as ReExported
|
||||
import CmdLine.GlobalSetter as ReExported
|
||||
import CmdLine.GitAnnex.Options as ReExported
|
||||
import Options.Applicative as ReExported hiding (command)
|
||||
|
||||
|
@ -78,6 +80,19 @@ noRepo a c = c { cmdnorepo = Just (a (cmdparamdesc c)) }
|
|||
withOptions :: [Option] -> Command -> Command
|
||||
withOptions o c = c { cmdoptions = cmdoptions c ++ o }
|
||||
|
||||
{- Adds global options to a command's option parser, and modifies its seek
|
||||
- option to first run actions for them.
|
||||
-}
|
||||
withGlobalOptions :: [Parser GlobalSetter] -> Command -> Command
|
||||
withGlobalOptions os c = c { cmdparser = apply <$> mixin (cmdparser c) }
|
||||
where
|
||||
mixin p = (,)
|
||||
<$> p
|
||||
<*> combineGlobalSetters os
|
||||
apply (seek, globalsetters) = do
|
||||
void $ getParsed globalsetters
|
||||
seek
|
||||
|
||||
{- For start and perform stages to indicate what step to run next. -}
|
||||
next :: a -> Annex (Maybe a)
|
||||
next a = return $ Just a
|
||||
|
|
|
@ -11,7 +11,7 @@ import Common.Annex
|
|||
import Command
|
||||
import CmdLine.Batch
|
||||
import qualified Utility.Format
|
||||
import Command.Find (formatOption, getFormat, showFormatted, keyVars)
|
||||
import Command.Find (FindOptions(..), showFormatted, keyVars)
|
||||
import Types.Key
|
||||
|
||||
cmd :: Command
|
||||
|
|
|
@ -14,7 +14,6 @@ import Common.Annex
|
|||
import Command
|
||||
import Annex.Content
|
||||
import Limit
|
||||
import qualified Annex
|
||||
import qualified Utility.Format
|
||||
import Utility.DataUnits
|
||||
import Types.Key
|
||||
|
@ -22,27 +21,34 @@ import Types.Key
|
|||
cmd :: Command
|
||||
cmd = withOptions annexedMatchingOptions $ mkCommand $
|
||||
command "find" SectionQuery "lists available files"
|
||||
paramPaths (withParams seek)
|
||||
paramPaths (seek <$$> optParser)
|
||||
|
||||
mkCommand :: Command -> Command
|
||||
mkCommand = noCommit . noMessages . withOptions [formatOption, print0Option, jsonOption]
|
||||
mkCommand = noCommit . noMessages . withGlobalOptions [jsonOption]
|
||||
|
||||
formatOption :: Option
|
||||
formatOption = fieldOption [] "format" paramFormat "control format of output"
|
||||
data FindOptions = FindOptions
|
||||
{ findThese :: CmdParams
|
||||
, formatOption :: Maybe Utility.Format.Format
|
||||
}
|
||||
|
||||
getFormat :: Annex (Maybe Utility.Format.Format)
|
||||
getFormat = getOptionField formatOption $ return . fmap Utility.Format.gen
|
||||
optParser :: CmdParamsDesc -> Parser FindOptions
|
||||
optParser desc = FindOptions
|
||||
<$> cmdParams desc
|
||||
<*> optional parseFormatOption
|
||||
|
||||
print0Option :: Option
|
||||
print0Option = Option [] ["print0"] (NoArg set)
|
||||
"terminate output with null"
|
||||
where
|
||||
set = Annex.setField (optionName formatOption) "${file}\0"
|
||||
parseFormatOption :: Parser Utility.Format.Format
|
||||
parseFormatOption =
|
||||
option (Utility.Format.gen <$> str)
|
||||
( long "format" <> metavar paramFormat
|
||||
<> help "control format of output"
|
||||
)
|
||||
<|> flag' (Utility.Format.gen "${file}\0")
|
||||
( long "print0"
|
||||
<> help "output filenames terminated with nulls"
|
||||
)
|
||||
|
||||
seek :: CmdParams -> CommandSeek
|
||||
seek ps = do
|
||||
format <- getFormat
|
||||
withFilesInGit (whenAnnexed $ start format) ps
|
||||
seek :: FindOptions -> CommandSeek
|
||||
seek o = withFilesInGit (whenAnnexed $ start (formatOption o)) (findThese o)
|
||||
|
||||
start :: Maybe Utility.Format.Format -> FilePath -> Key -> CommandStart
|
||||
start format file key = do
|
||||
|
|
Loading…
Add table
Reference in a new issue