[[!comment format=mdwn username="joey" subject="""comment 1""" date="2016-09-08T15:32:00Z" content=""" yoh pointed out in email that reusing the special remote interface would not work with -J because it doesn't tell what key progress is being shown for. Also, note that --json -J does not currently output json; -J overrides the --json to instead use concurrent-output for progress display. The current way that json is emitted incrementally would need to be changed to be usable with -J. Is there any need for a program that is driving git-annex with --json to use -J, instead of just starting several git-annex processes? The only major benefit I can think of is the recently added better selection between multiple remotes by parallel `git annex get`. Other performance benefits between -J and multiple processes should mostly be small. To suppose --json -J, instead of a partial json object that later gets added to as the command progresses: {"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar","note":"from d1..." We'd need something like this, with each json object buffered and only output when it was complete (and output serialized so objects are written one at a time): {"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar","note":"from d1...", "inprogress":true} {"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","success":true} If we're doing that, we might as well use json for the progress info too, in between the two json objects in the example above: {"percent-progress":"25%","byte-progress":500,"key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3"} {"percent-progress":"75%","byte-progress":1500","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3"} But this is a large change to the json format, and would probably break all consumers of it. I don't like that, but also don't like the complexity of having two different varieties of json output for parallel and non-parallel modes. Hmm, if we're buffering the "command" json objects, we could keep them formatted the same as they are now, only displaying them when done. And progress objects could be inserted before: {"percent-progress":"25%","byte-progress":500,"key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar"} {"percent-progress":"75%","byte-progress":1500","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar"} {"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar","note":"from d1...","success":true} That seems a bit verbose, but I think all that info could be needed by consumers of the progress objects. Hmm, since the "command" json objects are being buffered, we could even include the currently buffered object nested inside the progress object: {"percent-progress":"25%","byte-progress":500,"action":{"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar","note":"from d1..."}} {"percent-progress":"75%","byte-progress":1500,"action":{"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar","note":"from d1..."}} {"command":"get","key":"SHA256E-s5242880--82cb4363f596cb66e7bc6e4cbfd2bfe8a8b6ac7e6d02557cc0e3944ec8faafc3","file":"bar","note":"from d1...","success":true} That's not a lot more verbose than the earlier version, and it ensures that consumers of the progress objects have all possible information available (including the name of the remote being downloaded from in the above example). """]]