status: Pass --ignore-submodules=when option on to git status.

Didn't make --ignore-submodules without a value be handled because I can't
see a way to make optparse-applicative parse that. I've opened a bug
requesting a way to do that:
https://github.com/pcapriotti/optparse-applicative/issues/243
This commit is contained in:
Joey Hess 2017-02-20 16:37:04 -04:00
parent a53daff32c
commit 75a15e1ad7
No known key found for this signature in database
GPG key ID: C910D9222512E3C7
4 changed files with 39 additions and 14 deletions

View file

@ -32,6 +32,7 @@ git-annex (6.20170215) UNRELEASED; urgency=medium
* When downloading in --json or --quiet mode, use curl in preference
to wget, since curl is able to display only errors to stderr, unlike
wget.
* status: Pass --ignore-submodules=when option on to git status.
-- Joey Hess <id@joeyh.name> Tue, 14 Feb 2017 15:54:25 -0400

View file

@ -20,14 +20,28 @@ cmd = notBareRepo $ noCommit $ noMessages $
withGlobalOptions [jsonOption] $
command "status" SectionCommon
"show the working tree status"
paramPaths (withParams seek)
paramPaths (seek <$$> optParser)
seek :: CmdParams -> CommandSeek
seek = withWords start
data StatusOptions = StatusOptions
{ statusFiles :: CmdParams
, ignoreSubmodules :: Maybe String
}
start :: [FilePath] -> CommandStart
start locs = do
(l, cleanup) <- inRepo $ getStatus locs
optParser :: CmdParamsDesc -> Parser StatusOptions
optParser desc = StatusOptions
<$> cmdParams desc
<*> optional (strOption
( long "ignore-submodules"
<> help "passed on to git status"
<> metavar "WHEN"
))
seek :: StatusOptions -> CommandSeek
seek o = withWords (start o) (statusFiles o)
start :: StatusOptions -> [FilePath] -> CommandStart
start o locs = do
(l, cleanup) <- inRepo $ getStatus ps locs
getstatus <- ifM isDirect
( return statusDirect
, return $ \s -> pure (Just s)
@ -35,6 +49,10 @@ start locs = do
forM_ l $ \s -> maybe noop displayStatus =<< getstatus s
void $ liftIO cleanup
stop
where
ps = case ignoreSubmodules o of
Nothing -> []
Just s -> [Param $ "--ignore-submodules="++s]
displayStatus :: Status -> Annex ()
-- renames not shown in this simplified status

View file

@ -64,13 +64,14 @@ parseStatusZ = go []
cparse '?' = Just Untracked
cparse _ = Nothing
getStatus :: [FilePath] -> Repo -> IO ([Status], IO Bool)
getStatus l r = do
(ls, cleanup) <- pipeNullSplit params r
getStatus :: [CommandParam] -> [FilePath] -> Repo -> IO ([Status], IO Bool)
getStatus ps fs r = do
(ls, cleanup) <- pipeNullSplit ps' r
return (parseStatusZ ls, cleanup)
where
params =
[ Param "status"
, Param "-uall"
, Param "-z"
] ++ map File l
ps' = concat
[ [Param "status"]
, ps
, [ Param "-uall" , Param "-z"]
, map File fs
]

View file

@ -23,6 +23,11 @@ Particularly useful in direct mode.
Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object.
* `--ignore-submodules=when`
This option is passed on to git status, see its man page for
details.
# SEE ALSO
[[git-annex]](1)