diff --git a/CHANGELOG b/CHANGELOG index 3b631092eb..c6a4aeecd3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -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 Tue, 14 Feb 2017 15:54:25 -0400 diff --git a/Command/Status.hs b/Command/Status.hs index 3a3bfa812a..2e6b9f44ab 100644 --- a/Command/Status.hs +++ b/Command/Status.hs @@ -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 + } + +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 :: [FilePath] -> CommandStart -start locs = do - (l, cleanup) <- inRepo $ getStatus locs +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 diff --git a/Git/Status.hs b/Git/Status.hs index 4f9ad0265b..778e65248a 100644 --- a/Git/Status.hs +++ b/Git/Status.hs @@ -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 + ] diff --git a/doc/git-annex-status.mdwn b/doc/git-annex-status.mdwn index 19bd6fab5a..3a897dc24c 100644 --- a/doc/git-annex-status.mdwn +++ b/doc/git-annex-status.mdwn @@ -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)