From: Marco Costalba Date: Wed, 04 Jul 2007 13:21:39 GMT Subject: Re: Finally implement "git log --follow" Message-ID: In-Reply-To: On 6/19/07, Linus Torvalds wrote: > > - the commit simplification isn't done. So you cannot do "--follow" > together with somethign that wants a contiguous history (like gitk) and > uses "--parents". > > This is pretty fundamental. The commit simplification is a separate > phase over the (non-linear!) commit space, and the "git log --follow" > logic is really a *different* logic over the _linear_ space (namely the > streaming "log output" space). > > Two totally different things, in other words. And not compatible. > Of course I need exactly that! Really don't want to thrash away the nice qgit graph, also in file histories, and at the same time I really like that '--follow' feature, so.... I've just started to hit the wall against the scary revision.c and friends, my goal is to find a solution (trick/hack) to get the renames also with --parents. First of all I have commented out: /* Can't prune commits with rename following: the paths change.. */ // if (!revs->diffopt.follow_renames) revs->prune_fn = try_to_simplify_commit; So I've see that with --parents set try_to_simplify_commit() does his job and when the processing arrives in diff_tree_sha1() it is already pruned, so also if the check if (opt->follow_renames && diff_might_be_rename()) is true and the following try_to_follow_renames() is called, no alternative tree is found. My idea, after have understood a little bit better how it works, is to 'resurrect' the pruned info before calling try_to_follow_renames(). To do this I was thinking of saving a pointer to some pruned tree information in try_to_simplify_commit() and in case use that pointer after in diff_tree_sha1() when needed. Nightmares??? Perhaps, I'm just starting with this difficult piece of code and probably (90%) I will give up before the end and very probably (99%) all said before is just brain dead, but...anyway I have to start from somewhere. Marco