On Mon, Jul 16, 2018 at 6:00 AM Derrick Stolee via GitGitGadget <gitgitgadget@xxxxxxxxx> wrote: > > From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > > The ref_newer method is used by 'git push' to check if a force-push is > required. This method does not use any kind of cutoff when walking, so > in the case of a force-push will walk all reachable commits. > > The is_descendant_of method already uses paint_down_to_common along with > cutoffs. By translating the ref_newer arguments into the commit and > commit_list required by is_descendant_of, we can have one fewer commit > walk and also improve our performance! > > For a copy of the Linux repository, 'test-tool reach ref_newer' presents > the following improvements with the specified input. In the case that > ref_newer returns 1, there is no improvement. The improvement is in the > second case where ref_newer returns 0. > > Input > ----- I fetched the series as advertised in the cover letter; however Junio applies the patches manually, for which there is a problem here in the patch format. Three dashes indicate the end of a commit message and below that you usually have some ephemeral information such as the stats, followed by the diffs starting with "diff --git", at least that was the case. I just tested and it applies this patch cleanly keeping the information below the three dashes intact. Cool! > A:v4.9 > B:v3.19 > > Before: 0.09 s > After: 0.09 s > > To test the negative case, add a new commit with parent v3.19, > regenerate the commit-graph, and then run with B pointing at that > commit. > > Before: 0.43 s > After: 0.09 s Nice! The code looks good, too. Thanks, Stefan