Revert "--json-exceptions"

This reverts commit a325524454.

Turns out this was predicated on an incorrect belief that json output
didn't already sometimes lack the "key" field. Since json output already
can when `giveup` was used, it seems unncessary to add a whole new
option for this.
This commit is contained in:
Joey Hess 2023-04-25 17:37:34 -04:00
parent 7c514d717b
commit 91ba0cc7fd
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
33 changed files with 115 additions and 304 deletions

View file

@ -25,8 +25,6 @@ git-annex (10.20230408) UNRELEASED; urgency=medium
* assistant --autostop: Avoid crashing when ~/.config/git-annex/autostart * assistant --autostop: Avoid crashing when ~/.config/git-annex/autostart
lists a directory that it cannot chdir to. lists a directory that it cannot chdir to.
* Honor --force option when operating on a local git remote. * Honor --force option when operating on a local git remote.
* Added a --json-exceptions option, which makes some exceptions be output
in json.
-- Joey Hess <id@joeyh.name> Sat, 08 Apr 2023 13:57:18 -0400 -- Joey Hess <id@joeyh.name> Sat, 08 Apr 2023 13:57:18 -0400

View file

@ -445,20 +445,13 @@ jsonOptions =
<> help "include error messages in JSON" <> help "include error messages in JSON"
<> hidden <> hidden
) )
, annexFlag (setAnnexState $ Annex.setOutput (JSONOutput jsonexceptionsoptions))
( long "json-exceptions"
<> help "include exceptions in JSON"
<> hidden
)
] ]
where where
stdjsonoptions = JSONOptions stdjsonoptions = JSONOptions
{ jsonProgress = False { jsonProgress = False
, jsonErrorMessages = False , jsonErrorMessages = False
, jsonExceptions = False
} }
jsonerrormessagesoptions = stdjsonoptions { jsonErrorMessages = True } jsonerrormessagesoptions = stdjsonoptions { jsonErrorMessages = True }
jsonexceptionsoptions = stdjsonoptions { jsonExceptions = True }
jsonProgressOption :: [AnnexOption] jsonProgressOption :: [AnnexOption]
jsonProgressOption = jsonProgressOption =
@ -472,7 +465,6 @@ jsonProgressOption =
jsonoptions = JSONOptions jsonoptions = JSONOptions
{ jsonProgress = True { jsonProgress = True
, jsonErrorMessages = False , jsonErrorMessages = False
, jsonExceptions = False
} }
-- Note that a command that adds this option should wrap its seek -- Note that a command that adds this option should wrap its seek

View file

@ -568,9 +568,9 @@ workTreeItems' (AllowHidden allowhidden) ww ps = case ww of
let p' = toRawFilePath p let p' = toRawFilePath p
relf <- liftIO $ relPathCwdToFile p' relf <- liftIO $ relPathCwdToFile p'
ifM (not <$> (exists p' <||> hidden currbranch relf)) ifM (not <$> (exists p' <||> hidden currbranch relf))
( prob FileNotFound (QuotedPath (toRawFilePath p) <> " not found") ( prob (QuotedPath (toRawFilePath p) <> " not found")
, ifM (viasymlink stopattop (upFrom relf)) , ifM (viasymlink stopattop (upFrom relf))
( prob FileBeyondSymbolicLink (QuotedPath (toRawFilePath p) <> " is beyond a symbolic link") ( prob (QuotedPath (toRawFilePath p) <> " is beyond a symbolic link")
, return True , return True
) )
) )
@ -605,8 +605,8 @@ workTreeItems' (AllowHidden allowhidden) ww ps = case ww of
<$> catObjectMetaDataHidden f currbranch <$> catObjectMetaDataHidden f currbranch
| otherwise = return False | otherwise = return False
prob eid msg = do prob msg = do
showException False eid msg toplevelWarning False msg
Annex.incError Annex.incError
return False return False

View file

@ -27,8 +27,6 @@ module Messages (
showEndFail, showEndFail,
showEndResult, showEndResult,
endResult, endResult,
ExceptionId(..),
showException,
toplevelWarning, toplevelWarning,
warning, warning,
earlyWarning, earlyWarning,
@ -199,26 +197,6 @@ endResult :: Bool -> S.ByteString
endResult True = "ok" endResult True = "ok"
endResult False = "failed" endResult False = "failed"
{- Unique ids for different exceptions. Do not change the constructors. -}
data ExceptionId
= FileNotFound
| FileBeyondSymbolicLink
deriving (Show)
{- Displays an message that is not associated with any file being
- processed. -}
showException :: Bool -> ExceptionId -> StringContainingQuotedPath -> Annex ()
showException makeway eid msg = do
when makeway $
outputMessage JSON.none id "\n"
outputException (show eid) (mentionedfile msg)
("git-annex: " <> msg <> "\n")
where
mentionedfile (QuotedPath p) = Just p
mentionedfile (a :+: b) = mentionedfile a <|> mentionedfile b
mentionedfile (UnquotedString _) = Nothing
mentionedfile (UnquotedByteString _) = Nothing
toplevelWarning :: Bool -> StringContainingQuotedPath -> Annex () toplevelWarning :: Bool -> StringContainingQuotedPath -> Annex ()
toplevelWarning makeway s = warning' makeway id ("git-annex: " <> s) toplevelWarning makeway s = warning' makeway id ("git-annex: " <> s)

View file

@ -90,14 +90,11 @@ outputError consolewhitespacef msg = withMessageState $ \s -> case (outputType s
qp <- coreQuotePath <$> Annex.getGitConfig qp <- coreQuotePath <$> Annex.getGitConfig
liftIO $ outputSerialized h $ OutputError $ decodeBS $ liftIO $ outputSerialized h $ OutputError $ decodeBS $
consolewhitespacef $ quote qp msg consolewhitespacef $ quote qp msg
_ -> outputError' consolewhitespacef msg s _
| concurrentOutputEnabled s -> do
outputError' :: (S.ByteString -> S.ByteString) -> StringContainingQuotedPath -> MessageState -> Annex () qp <- coreQuotePath <$> Annex.getGitConfig
outputError' consolewhitespacef msg s concurrentMessage s True (decodeBS $ consolewhitespacef $ quote qp msg) go
| concurrentOutputEnabled s = do | otherwise -> go
qp <- coreQuotePath <$> Annex.getGitConfig
concurrentMessage s True (decodeBS $ consolewhitespacef $ quote qp msg) go
| otherwise = go
where where
go = do go = do
qp <- coreQuotePath <$> Annex.getGitConfig qp <- coreQuotePath <$> Annex.getGitConfig
@ -105,17 +102,6 @@ outputError' consolewhitespacef msg s
liftIO $ S.hPutStr stderr (consolewhitespacef $ quote qp msg) liftIO $ S.hPutStr stderr (consolewhitespacef $ quote qp msg)
liftIO $ hFlush stderr liftIO $ hFlush stderr
outputException :: String -> Maybe RawFilePath -> StringContainingQuotedPath -> Annex ()
outputException eid mfile msg = withMessageState $ \s -> case outputType s of
(JSONOutput jsonoptions) | jsonExceptions jsonoptions ->
liftIO $ flushed $ JSON.emit $
JSON.exceptionObject eid (decodeBS (noquote msg)) mfile
(SerializedOutput h _) -> do
qp <- coreQuotePath <$> Annex.getGitConfig
liftIO $ outputSerialized h $ OutputException eid mfile $ decodeBS $
quote qp msg
_ -> outputError' id msg s
q :: Monad m => m () q :: Monad m => m ()
q = noop q = noop

View file

@ -1,6 +1,6 @@
{- git-annex command-line JSON output and input {- git-annex command-line JSON output and input
- -
- Copyright 2011-2023 Joey Hess <id@joeyh.name> - Copyright 2011-2021 Joey Hess <id@joeyh.name>
- -
- Licensed under the GNU AGPL version 3 or higher. - Licensed under the GNU AGPL version 3 or higher.
-} -}
@ -27,7 +27,6 @@ module Messages.JSON (
ObjectMap(..), ObjectMap(..),
JSONActionItem(..), JSONActionItem(..),
AddJSONActionItemFields(..), AddJSONActionItemFields(..),
exceptionObject,
) where ) where
import Control.Applicative import Control.Applicative
@ -219,14 +218,3 @@ newtype AddJSONActionItemFields a = AddJSONActionItemFields a
instance ToJSON' a => ToJSON' (AddJSONActionItemFields a) where instance ToJSON' a => ToJSON' (AddJSONActionItemFields a) where
toJSON' (AddJSONActionItemFields a) = object [ ("fields", toJSON' a) ] toJSON' (AddJSONActionItemFields a) = object [ ("fields", toJSON' a) ]
exceptionObject :: String -> String -> Maybe RawFilePath -> Object
exceptionObject eid msg mfile = case o of
Object o' -> o'
_ -> error "internal"
where
o = object
[ "exception" .= toJSON' eid
, "message" .= toJSON' msg
, "file" .= toJSON' (maybe "" decodeBS mfile)
]

View file

@ -58,9 +58,6 @@ relaySerializedOutput getso sendsor meterreport runannex = go Nothing
Left (OutputError msg) -> do Left (OutputError msg) -> do
runannex $ outputError id $ UnquotedString msg runannex $ outputError id $ UnquotedString msg
loop st loop st
Left (OutputException eid mfile msg) -> do
runannex $ outputException eid mfile $ UnquotedString msg
loop st
Left (JSONObject b) -> do Left (JSONObject b) -> do
runannex $ withMessageState $ \s -> case outputType s of runannex $ withMessageState $ \s -> case outputType s of
JSONOutput _ -> liftIO $ flushed $ JSON.emit' b JSONOutput _ -> liftIO $ flushed $ JSON.emit' b

View file

@ -9,7 +9,6 @@ module Types.Messages where
import qualified Utility.Aeson as Aeson import qualified Utility.Aeson as Aeson
import Utility.Metered import Utility.Metered
import Utility.RawFilePath
import Control.Concurrent import Control.Concurrent
import System.Console.Regions (ConsoleRegion) import System.Console.Regions (ConsoleRegion)
@ -27,7 +26,6 @@ data OutputType
data JSONOptions = JSONOptions data JSONOptions = JSONOptions
{ jsonProgress :: Bool { jsonProgress :: Bool
, jsonErrorMessages :: Bool , jsonErrorMessages :: Bool
, jsonExceptions :: Bool
} }
deriving (Show) deriving (Show)
@ -35,7 +33,6 @@ adjustOutputType :: OutputType -> OutputType -> OutputType
adjustOutputType (JSONOutput old) (JSONOutput new) = JSONOutput $ JSONOptions adjustOutputType (JSONOutput old) (JSONOutput new) = JSONOutput $ JSONOptions
{ jsonProgress = jsonProgress old || jsonProgress new { jsonProgress = jsonProgress old || jsonProgress new
, jsonErrorMessages = jsonErrorMessages old || jsonErrorMessages new , jsonErrorMessages = jsonErrorMessages old || jsonErrorMessages new
, jsonExceptions = jsonExceptions old || jsonExceptions new
} }
adjustOutputType _old new = new adjustOutputType _old new = new
@ -73,7 +70,6 @@ newMessageState = do
data SerializedOutput data SerializedOutput
= OutputMessage S.ByteString = OutputMessage S.ByteString
| OutputError String | OutputError String
| OutputException String (Maybe RawFilePath) String
| BeginProgressMeter | BeginProgressMeter
| UpdateProgressMeterTotalSize TotalSize | UpdateProgressMeterTotalSize TotalSize
| UpdateProgressMeter BytesProcessed | UpdateProgressMeter BytesProcessed

View file

@ -84,8 +84,7 @@ annexed content, and other symlinks.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -93,13 +92,8 @@ annexed content, and other symlinks.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* `--batch` * `--batch`

View file

@ -125,8 +125,7 @@ be used to get better filenames.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to an url git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -134,13 +133,8 @@ be used to get better filenames.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing an url. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular url.
* `--backend` * `--backend`

View file

@ -112,11 +112,11 @@ Paths of files or directories to operate on can be specified.
* `-z` * `-z`
Makes batch input be delimited by nulls instead of the usual newlines. Makes batch input be delimited by nulls instead of the usual newlines.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -124,13 +124,8 @@ Paths of files or directories to operate on can be specified.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -126,18 +126,12 @@ Paths of files or directories to drop can be specified.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -27,19 +27,12 @@ exist; using it can easily result in data loss.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a key git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a key. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -40,18 +40,12 @@ that can be determined purely by looking at the key.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a key git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a key. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
* `--migrate-to-backend=backend` * `--migrate-to-backend=backend`

View file

@ -102,8 +102,7 @@ so the overwritten modification is not lost.)
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -111,13 +110,8 @@ so the overwritten modification is not lost.)
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -55,19 +55,15 @@ finds files in the current directory and its subdirectories.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Output the list of files in JSON format.
git-annex. Each line of output is a JSON object corresponding to a file
being processed. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* `--batch` * `--batch`

View file

@ -50,19 +50,15 @@ Outputs a list of keys known to git-annex.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Output the list of keys in JSON format.
git-annex. Each line of output is a JSON object corresponding to a key
being processed. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a key. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -103,18 +103,12 @@ better format.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* `--quiet` * `--quiet`

View file

@ -126,8 +126,7 @@ be specified.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -135,13 +134,8 @@ be specified.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -202,8 +202,7 @@ link, and that symbolic link will be followed.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -211,13 +210,8 @@ link, and that symbolic link will be followed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -24,18 +24,12 @@ for the local repository and all annexed content.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a item git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a item. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular item.
* `--bytes` * `--bytes`

View file

@ -26,18 +26,12 @@ can commit.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -119,16 +119,6 @@ the modified file.
{"command":"metadata","file":"foo","key":"...","author":["bar"],...,"note":"...","success":true} {"command":"metadata","file":"foo","key":"...","author":["bar"],...,"note":"...","success":true}
* `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that
would normally be output to the standard error when processing a file.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* `--json-error-messages` * `--json-error-messages`
Messages that would normally be output to standard error are included in Messages that would normally be output to standard error are included in

View file

@ -71,8 +71,7 @@ contents. Use [[git-annex-sync]](1) for that.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -80,13 +79,8 @@ contents. Use [[git-annex-sync]](1) for that.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -111,8 +111,7 @@ Paths of files or directories to operate on can be specified.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-progress` * `--json-progress`
@ -120,13 +119,8 @@ Paths of files or directories to operate on can be specified.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -51,19 +51,12 @@ special remote that claims it. (Usually the web special remote.)
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a key git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a key. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -24,17 +24,12 @@ modified (M), added but not committed (A), and type changed/unlocked (T).
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file. git-annex. Each line of output is a JSON object.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -53,19 +53,12 @@ repository. So, enable annex.thin with care.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -42,19 +42,12 @@ for it, because the content may still be present on the remote.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a key git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a key. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
* Also the [[git-annex-common-options]](1) can be used. * Also the [[git-annex-common-options]](1) can be used.

View file

@ -71,18 +71,12 @@ received from remotes.
* `--json` * `--json`
Enable JSON output. This is intended to be parsed by programs that use Enable JSON output. This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object corresponding to a file git-annex. Each line of output is a JSON object.
being processed.
* `--json-error-messages` * `--json-error-messages`
Adds an "error-messages" field to the JSON that contains messages that Messages that would normally be output to standard error are included in
would normally be output to the standard error when processing a file. the JSON instead.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular file.
* `--format=value` * `--format=value`

View file

@ -31,7 +31,7 @@ bpoldrack makes a good point
So eg: So eg:
{"exception":"UNIQUEID", "file":"foo", "message":"foo not found"} {"exception":"UNIQUEID", "file":"foo", "error-messages":["foo not found"]}
That seems about right to me, and it future proofs git-annex to be able to That seems about right to me, and it future proofs git-annex to be able to
report other exceptions in json output later on. report other exceptions in json output later on.

View file

@ -1,24 +0,0 @@
[[!comment format=mdwn
username="joey"
subject="""comment 5"""
date="2023-04-25T18:43:20Z"
content="""
I've implemented --json-exceptions:
joey@darkstar:~/tmp/xxx>git-annex add dne --json-exceptions
{"exception":"FileNotFound","file":"dne","message":"git-annex: dne not found\n"}
add: 1 failed
Note that when a command like `git-annex get` is run on a file that exists,
but is not checked into git, `git ls-files` still displays its own error message,
so --json-exceptions doesn't help with this:
joey@darkstar:~/tmp/xxx>touch foo
joey@darkstar:~/tmp/xxx>git-annex get foo --json-exceptions
error: pathspec 'foo' did not match any file(s) known to git
Did you forget to 'git add'?
get: 1 failed
Datalad will still have to parse the git output if it wants to know what file
it failed on in that case.
"""]]

View file

@ -0,0 +1,34 @@
[[!comment format=mdwn
username="joey"
subject="""Re: comment 6"""
date="2023-04-25T21:10:21Z"
content="""
Oh well spotted yarikoptic! I wish I had noticed your comment 2 hours ago,
but I was head down implementing --json-exceptions.
Ok, so `addurl` does `giveup "bad url"` and that does indeed result in json
output that lacks a `key` and has `"file":null` as well.
I'm sure that somewhere in `git-annex add`, it's possible for it to
`giveup` with an error too. Oh of course... a device file!
joey@darkstar:/home/joey/tmp/xxx>git-annex add --force-small null --json --json-error-messages
{"command":"add","error-messages":["git-annex: null is not a regular file"],"file":"null","input":["null"],"note":"adding content to git repository","success":false}
add: 1 failed
Other perhaps more likely cases where add can `giveup` include when it's unable
to remove all write perms due to an xattr, and probably some permissions
problems.
So, json consumers of add already have to deal with the `key` being missing.
Now, it might be that some git-annex commands don't `giveup`, so this would be
a new complication for consumers of their json. But so would adding a `giveup`
for any reason to a command, and I don't worry about that.
While I've implemented --json-exceptions, I don't like the complexity, so this new
information inclines me to rip it back out and instead handle the case of the
nonexistant file like:
{"command":"add","exception":"UNIQUEID","file":"foo","input":["foo"],"error-messages":["foo not found"],"success":false}
"""]]