diff --git a/Command/Status.hs b/Command/Status.hs index 3fddb599d5..39d9400fbd 100644 --- a/Command/Status.hs +++ b/Command/Status.hs @@ -18,6 +18,7 @@ import qualified Types.Remote as R import qualified Remote import qualified Command.Unused import qualified Git +import qualified Annex import Command import Utility.DataUnits import Annex.Content @@ -49,14 +50,17 @@ seek = [withNothing start] {- Order is significant. Less expensive operations, and operations - that share data go together. -} -stats :: [Stat] -stats = +fast_stats :: [Stat] +fast_stats = [ supported_backends , supported_remote_types , remote_list Trusted "trusted" , remote_list SemiTrusted "semitrusted" , remote_list UnTrusted "untrusted" - , tmp_size + ] +slow_stats :: [Stat] +slow_stats = + [ tmp_size , bad_data_size , local_annex_keys , local_annex_size @@ -67,6 +71,10 @@ stats = start :: CommandStart start = do + showStart "status" "." + showWith $ liftIO $ putStrLn "" + fast <- Annex.getState Annex.fast + let stats = if fast then fast_stats else fast_stats ++ slow_stats evalStateT (mapM_ showStat stats) (StatInfo Nothing Nothing) stop @@ -80,9 +88,11 @@ showStat :: Stat -> StatState () showStat s = calc =<< s where calc (Just (desc, a)) = do - liftIO $ putStr $ desc ++ ": " - liftIO $ hFlush stdout - liftIO . putStrLn =<< a + r <- a -- run first, it may produce JSON + lift . showWith $ do + liftIO $ putStr $ desc ++ ": " + liftIO $ hFlush stdout + liftIO $ putStrLn r calc Nothing = return () supported_backends :: Stat diff --git a/Messages.hs b/Messages.hs index 6f4880e2d5..d7eabccbb2 100644 --- a/Messages.hs +++ b/Messages.hs @@ -20,6 +20,8 @@ module Messages ( warning, indent, maybeShowJSON, + showWith, + setupConsole ) where @@ -31,7 +33,7 @@ import qualified Annex import qualified Messages.JSON as JSON showStart :: String -> String -> Annex () -showStart command file = handle (JSON.start command file) $ +showStart command file = handle (JSON.start command $ Just file) $ flushed $ putStr $ command ++ " " ++ file ++ " " showNote :: String -> Annex () @@ -111,6 +113,16 @@ handle json normal = do maybeShowJSON :: JSON a => [(String, a)] -> Annex () maybeShowJSON v = handle (JSON.add v) q +{- Performs an a action (such as displaying something) only when + - not in json mode, and not quiet. -} +showWith :: Annex () -> Annex () +showWith a = do + output <- Annex.getState Annex.output + case output of + Annex.NormalOutput -> a + Annex.QuietOutput -> q + Annex.JSONOutput -> q + q :: Monad m => m () q = return () diff --git a/Messages/JSON.hs b/Messages/JSON.hs index fb95f550e8..a325ef130b 100644 --- a/Messages/JSON.hs +++ b/Messages/JSON.hs @@ -16,8 +16,12 @@ import Text.JSON import qualified Utility.JSONStream as Stream -start :: String -> String -> IO () -start command file = putStr $ Stream.start [("command", command), ("file", file)] +start :: String -> Maybe String -> IO () +start command file = + putStr $ Stream.start $ ("command", command) : filepart file + where + filepart Nothing = [] + filepart (Just f) = [("file", f)] end :: Bool -> IO () end b = putStr $ Stream.add [("success", b)] ++ Stream.end diff --git a/debian/changelog b/debian/changelog index b49967fe9f..aa52730bca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,9 @@ git-annex (3.20111112) UNRELEASED; urgency=low * Optimised union merging; now only runs git cat-file once. * status: Now displays trusted, untrusted, and semitrusted repositories separately. + * status: Fix --json mode (only the repository lists are currently + displayed) + * status: --fast is back -- Joey Hess Sat, 12 Nov 2011 14:50:21 -0400 diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn index fdd8dd1c19..35ba25115d 100644 --- a/doc/git-annex.mdwn +++ b/doc/git-annex.mdwn @@ -240,7 +240,9 @@ subdirectories). * status Displays some statistics and other information, including how much data - is in the annex. + is in the annex and a list of all known repositories. + + To only show the data that can be gathered quickly, use --fast. * map