Hi everyone, I am trying to remove cat-file formatting part and reuse same functionality from ref-filter. I have a problem that cat-file sometimes needs to continue running even if the request is broken, while in ref-filter we invoke die() in many places everywhere during formatting process. I write this email because I want to discuss how to implement the solution better.
ref-filter has 2 functions which could be interesting for us: format_ref_array_item() and show_ref_array_item(). I guess it's a good idea to print everything in show_ref_array_item(), including all errors. In that case all current users of ref-filter will invoke show_ref_array_item() (as they did it before), and cat-file could use format_ref_array_item() and work with the result in its own logic. I tried to replace all die("...") with `return error("...")` and finally exit(), but actual problem is that we print "error:..." instead of "fatal:...", and it looks funny. The draft of the code is here: https://github.com/telezhnaya/git/commits/p2 One of the easiest solutions is to add strbuf parameter for errors to all functions that we use during formatting process, fill it in and print in show_ref_array_item() if necessary. What do you think about this idea? Another way is to change the resulting error message, print current message with "error" prefix and then print something like "fatal: could not format the output". It is easier but I am not sure that it's a good idea to change the interface. If you have another ideas - please share them with me. It is really important step to make formatting logic more general and easier to reuse. Thanks! Olga