find --json

This commit is contained in:
Joey Hess 2011-12-22 22:03:18 -04:00
parent 7227dd8f21
commit fdf02986cf
4 changed files with 28 additions and 10 deletions

View file

@ -28,15 +28,17 @@ start :: FilePath -> (Key, Backend Annex) -> CommandStart
start file (key, _) = do
-- only files inAnnex are shown, unless the user has requested
-- others via a limit
whenM (liftM2 (||) (inAnnex key) limited) $ do
f <- Annex.getState Annex.format
case f of
Nothing -> liftIO $ putStrLn file
Just formatter -> liftIO $ putStr $
Utility.Format.format formatter vars
whenM (liftM2 (||) (inAnnex key) limited) $
unlessM (showFullJSON vars) $ do
f <- Annex.getState Annex.format
case f of
Nothing -> liftIO $ putStrLn file
Just formatter -> liftIO $ putStr $
Utility.Format.format formatter $
M.fromList vars
stop
where
vars = M.fromList
vars =
[ ("file", file)
, ("key", show key)
, ("backend", keyBackendName key)

View file

@ -20,6 +20,7 @@ module Messages (
warning,
indent,
maybeShowJSON,
showFullJSON,
showCustom,
showHeader,
showRaw,
@ -90,10 +91,17 @@ warning' w = do
indent :: String -> String
indent = join "\n" . map (\l -> " " ++ l) . lines
{- Shows a JSON value only when in json mode. -}
{- Shows a JSON fragment only when in json mode. -}
maybeShowJSON :: JSON a => [(String, a)] -> Annex ()
maybeShowJSON v = handle (JSON.add v) q
{- Shows a complete JSON value, only when in json mode. -}
showFullJSON :: JSON a => [(String, a)] -> Annex Bool
showFullJSON v = Annex.getState Annex.output >>= liftIO . go
where
go Annex.JSONOutput = JSON.complete v >> return True
go _ = return False
{- Performs an action that outputs nonstandard/customized output, and
- in JSON mode wraps its output in JSON.start and JSON.end, so it's
- a complete JSON document.

View file

@ -9,7 +9,8 @@ module Messages.JSON (
start,
end,
note,
add
add,
complete
) where
import Text.JSON
@ -31,3 +32,9 @@ note s = add [("note", s)]
add :: JSON a => [(String, a)] -> IO ()
add v = putStr $ Stream.add v
complete :: JSON a => [(String, a)] -> IO ()
complete v = putStr $ concat
[ Stream.start v
, Stream.end
]

3
debian/changelog vendored
View file

@ -10,8 +10,9 @@ git-annex (3.20111212) UNRELEASED; urgency=low
* Add --include, which is the same as --not --exclude.
* Can now be built with older git versions (before 1.7.7); the resulting
binary should only be used with old git.
* Format strings can be specified using the new --find option, to control
* Format strings can be specified using the new --format option, to control
what is output by git annex find.
* Support git annex find --json
-- Joey Hess <joeyh@debian.org> Mon, 12 Dec 2011 01:57:49 -0400