summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-02-20 16:37:04 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-02-20 17:01:24 -0400
commit3483595622432eec1df905b24faa0f3f48d507de (patch)
treeac96b72d1f3998fe715e045109adb0fce671b735
parentc8a5b1a658f23ae882ee0fb2d975eb7281e9c022 (diff)
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
-rw-r--r--CHANGELOG1
-rw-r--r--Command/Status.hs30
-rw-r--r--Git/Status.hs17
-rw-r--r--doc/git-annex-status.mdwn5
4 files changed, 39 insertions, 14 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 3b631092e..c6a4aeecd 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 <id@joeyh.name> Tue, 14 Feb 2017 15:54:25 -0400
diff --git a/Command/Status.hs b/Command/Status.hs
index 3a3bfa812..2e6b9f44a 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 4f9ad0265..778e65248 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 19bd6fab5..3a897dc24 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)