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
lists a directory that it cannot chdir to.
* 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

View file

@ -445,20 +445,13 @@ jsonOptions =
<> help "include error messages in JSON"
<> hidden
)
, annexFlag (setAnnexState $ Annex.setOutput (JSONOutput jsonexceptionsoptions))
( long "json-exceptions"
<> help "include exceptions in JSON"
<> hidden
)
]
where
stdjsonoptions = JSONOptions
{ jsonProgress = False
, jsonErrorMessages = False
, jsonExceptions = False
}
jsonerrormessagesoptions = stdjsonoptions { jsonErrorMessages = True }
jsonexceptionsoptions = stdjsonoptions { jsonExceptions = True }
jsonProgressOption :: [AnnexOption]
jsonProgressOption =
@ -472,7 +465,6 @@ jsonProgressOption =
jsonoptions = JSONOptions
{ jsonProgress = True
, jsonErrorMessages = False
, jsonExceptions = False
}
-- 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
relf <- liftIO $ relPathCwdToFile p'
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))
( prob FileBeyondSymbolicLink (QuotedPath (toRawFilePath p) <> " is beyond a symbolic link")
( prob (QuotedPath (toRawFilePath p) <> " is beyond a symbolic link")
, return True
)
)
@ -605,8 +605,8 @@ workTreeItems' (AllowHidden allowhidden) ww ps = case ww of
<$> catObjectMetaDataHidden f currbranch
| otherwise = return False
prob eid msg = do
showException False eid msg
prob msg = do
toplevelWarning False msg
Annex.incError
return False

View file

@ -27,8 +27,6 @@ module Messages (
showEndFail,
showEndResult,
endResult,
ExceptionId(..),
showException,
toplevelWarning,
warning,
earlyWarning,
@ -199,26 +197,6 @@ endResult :: Bool -> S.ByteString
endResult True = "ok"
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 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
liftIO $ outputSerialized h $ OutputError $ decodeBS $
consolewhitespacef $ quote qp msg
_ -> outputError' consolewhitespacef msg s
outputError' :: (S.ByteString -> S.ByteString) -> StringContainingQuotedPath -> MessageState -> Annex ()
outputError' consolewhitespacef msg s
| concurrentOutputEnabled s = do
_
| concurrentOutputEnabled s -> do
qp <- coreQuotePath <$> Annex.getGitConfig
concurrentMessage s True (decodeBS $ consolewhitespacef $ quote qp msg) go
| otherwise = go
| otherwise -> go
where
go = do
qp <- coreQuotePath <$> Annex.getGitConfig
@ -105,17 +102,6 @@ outputError' consolewhitespacef msg s
liftIO $ S.hPutStr stderr (consolewhitespacef $ quote qp msg)
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 = noop

View file

@ -1,6 +1,6 @@
{- 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.
-}
@ -27,7 +27,6 @@ module Messages.JSON (
ObjectMap(..),
JSONActionItem(..),
AddJSONActionItemFields(..),
exceptionObject,
) where
import Control.Applicative
@ -219,14 +218,3 @@ newtype AddJSONActionItemFields a = AddJSONActionItemFields a
instance ToJSON' a => ToJSON' (AddJSONActionItemFields a) where
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
runannex $ outputError id $ UnquotedString msg
loop st
Left (OutputException eid mfile msg) -> do
runannex $ outputException eid mfile $ UnquotedString msg
loop st
Left (JSONObject b) -> do
runannex $ withMessageState $ \s -> case outputType s of
JSONOutput _ -> liftIO $ flushed $ JSON.emit' b

View file

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

View file

@ -84,8 +84,7 @@ annexed content, and other symlinks.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -93,13 +92,8 @@ annexed content, and other symlinks.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--batch`

View file

@ -125,8 +125,7 @@ be used to get better filenames.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -134,13 +133,8 @@ be used to get better filenames.
* `--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 an url.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular url.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--backend`

View file

@ -112,11 +112,11 @@ Paths of files or directories to operate on can be specified.
* `-z`
Makes batch input be delimited by nulls instead of the usual newlines.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -124,13 +124,8 @@ Paths of files or directories to operate on can be specified.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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 key.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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 key.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--migrate-to-backend=backend`

View file

@ -102,8 +102,7 @@ so the overwritten modification is not lost.)
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -111,13 +110,8 @@ so the overwritten modification is not lost.)
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
Output the list of files in JSON format.
This is intended to be parsed by programs that use
git-annex. Each line of output is a JSON object.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--batch`

View file

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

View file

@ -103,18 +103,12 @@ better format.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--quiet`

View file

@ -126,8 +126,7 @@ be specified.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -135,13 +134,8 @@ be specified.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -211,13 +210,8 @@ link, and that symbolic link will be followed.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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 item.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular item.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--bytes`

View file

@ -26,18 +26,12 @@ can commit.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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}
* `--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`
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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -80,13 +79,8 @@ contents. Use [[git-annex-sync]](1) for that.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--json-progress`
@ -120,13 +119,8 @@ Paths of files or directories to operate on can be specified.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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 key.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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`
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.
Messages that would normally be output to standard error are included in
the JSON instead.
* Also the [[git-annex-common-options]](1) can be used.

View file

@ -53,19 +53,12 @@ repository. So, enable annex.thin with care.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* 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`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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 key.
* `--json-exceptions`
Output additional JSON objects for some exceptions that are not
associated with a particular key.
Messages that would normally be output to standard error are included in
the JSON instead.
* Also the [[git-annex-common-options]](1) can be used.

View file

@ -71,18 +71,12 @@ received from remotes.
* `--json`
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
being processed.
git-annex. Each line of output is a JSON object.
* `--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.
Messages that would normally be output to standard error are included in
the JSON instead.
* `--format=value`

View file

@ -31,7 +31,7 @@ bpoldrack makes a good point
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
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}
"""]]