summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-11-14 19:27:00 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-11-14 19:27:22 -0400
commitbfe38f8ff16dc6ccc32d545e6fed87817caa26cf (patch)
tree65efec376ee385efe5d538aa2453b7b925e8aee5
parent02f1d5467ad05315905b9cb90307049ababb4a63 (diff)
status --json --fast for esc
* status: Fix --json mode (only the repository lists are currently displayed) * status: --fast is back
-rw-r--r--Command/Status.hs22
-rw-r--r--Messages.hs14
-rw-r--r--Messages/JSON.hs8
-rw-r--r--debian/changelog3
-rw-r--r--doc/git-annex.mdwn4
5 files changed, 41 insertions, 10 deletions
diff --git a/Command/Status.hs b/Command/Status.hs
index 3fddb599d..39d9400fb 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 6f4880e2d..d7eabccbb 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 fb95f550e..a325ef130 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 b49967fe9..aa52730bc 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 <joeyh@debian.org> Sat, 12 Nov 2011 14:50:21 -0400
diff --git a/doc/git-annex.mdwn b/doc/git-annex.mdwn
index fdd8dd1c1..35ba25115 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