Re: DEVEL: Help with feature implementation
From: Antonio Russo <hidden>
Date: 2021-01-19 15:09:27
On 1/18/21 6:24 PM, Junio C Hamano wrote:
Antonio Russo [off-list ref] writes:quoted
As a side note, would this list be willing to look at patches that remove the need to use revs->limited? Adding new features would be much easier if we could restrict git to use streaming algorithms for these simplifications.Do you mean you will write new implementations of operations like "--simplify-merges", "--ancestory-path" and all its friends without the need for the "limited" bit?
Yes.
Willing to look at? I do not know about others, but sure, it would make be extremely excited. You may be able to rewrite some other operations that implicitly require the limited bit into an incremental implementation, but I am skeptical that you can do "simplify-merges" in a streaming fashion in such a way that we'd dig a bit but not all the way down before making decisions on which commits should be included in the output and how their parenthood relationship should appear etc. I and Linus tried independently and we did not get that far in our attempts (note: there wasn't commit-graph back then).
Yeah, it's a big task (but, it'd be useful work, rather than doing another rewrite of my feature to make it work when revs->limited). Each of the flags (simplify-merges, ancestry-path, etc.) is its own little sub-project. I haven't thought about any one flag specifically, but the fact that two complete code paths exist right now just seem like a nightmare. I'm not necessarily interested in making the implementations faster, but rather getting rid of the duplicated code path. It's also a long-term goal, but it's nice to hear that people would be interested in it.
If you are talking about precomputed stuff like commit-graph, that may change the equation, but we'd prefer to have the system work without requiring these auxiliary data (in other words, it would be fine to use them as optimization).
No, I understand that generation numbers can only be used as an optimization (i.e., they might all be GENERATION_NUMBER_INFINITY).