Re: DEVEL: Help with feature implementation
From: Antonio Russo <hidden>
Date: 2021-01-18 18:21:27
On 1/18/21 11:06 AM, Aiyee Bee wrote:
Hello everybody! I want to implement a feature in git, and I'm looking for some help. I wanted to add a history-simplification option to rev-list so that it doesn't simplify away any irrelevant commits if they have multiple relevant _children_, i.e. when they are the point where two relevant histories diverge.
I'm actually working on something that does the opposite---it ignores the fork point when drawing the graph. (I'm currently dog-fooding a partial implementation of this.)
Basically the effect I want for --show-forkpoints (named like --show-pulls): http://ix.io/2Ms6 But it seems there is no existing apparatus in the revision walker for deciding simplification on basis of *children*, am I correct? Admittedly my understanding of it is still a WIP, but I don't see anything that could help.
It's even worse than this. AFAICT, there are two code paths: one for when the git-commit-graph is enabled, and one when it is not. There's a special "revs->limited" option which lets you deal with the commits all at once, at the expense of losing all the speed improvements from the git-commit-graph efforts. Aside: I want to get rid of that alternative path. But I only have limited time.
I was hoping that simply the flag CHILD_SHOWN could be checked, but it seems that's only set on boundary commits :( This option would be pretty useful when used with some diffs, to see how much two forks have diverged. Currently if you use history simplification, the diffs for both divergent histories will be created against the last relevant commit instead of the last common ancestor, which creates pretty useless diffs with a lot of intersection between them.
Sounds neat!
Are there any viable alternative means to do this that I can explore?
I too would like to hear about suggestions for this.
Thanks! FriendlyNeighborhoodShane