This generates a lot of garbage, and I'm not sure every consumer of blame wants it.

I would prefer to push this to the application. If they want to track all of the line data from every revision, they should somehow copy our output on each iteration of the main blame loop. Which is yet another reason why I want the blame loop to act like an iterator, so the application can stop and inspect our "scoreboard" of lines, and snapshot something if they want to preserve it.

But if they are just blaming the current file and showing it, they don't need tracking of lines through everything. And they don't need the garbage that goes along with this method.