When you check several files and the fsck fails, you get confusing output:

O fsck test1 (checksum...) 
E  Only 1 of 2 trustworthy copies of test1 exist.
E  Back it up with git-annex copy.
O
O failed
O fsck test2 (checksum...) 
E  Only 1 of 2 trustworthy copies of test2 exist.
E  Back it up with git-annex copy.
O 
O failed

The newline is in the wrong place and confuses the user. It should be printed after "failed".

This is a consequence of part of the output being printed to stderr, and part to stdout. I've marked the lines above with E and O.

Normally a "failed" is preceeded by a message output to stdout desribing the problem; such a message will not be "\n" terminated, so a newline is always displayed before "failed". In this case, since the message is sent to stderr, it is newline terminated.

Fixing this properly would involve storing state, or rethinking when git-annex displays newlines (and I rather like its behavior otherwise).

A related problem occurs if an error message is unexpetedly printed. Dummying up an example:

O get test1 (from foo...) E git-annex: failed to run ssh failed

--Joey

Well, I fixed this in all cases except a thrown non-IO error (last example aboce), which output is printed by haskell's runtime. I'd have to add a second error handler to handle those, and it's not clear what it would do. Often an error will occur before anything else is printed, and then the current behavior is right; if something has been printed it would be nice to have a newline before the error, but by the time the error is caught we'd be out of the annex monad and not really have any way to know if something has been printed. I think my fix is good enough done --Joey

Comments on this page are closed.