Hi Derrick, On Tue, Nov 3, 2020 at 8:36 AM Elijah Newren <newren@xxxxxxxxx> wrote: > > On Tue, Nov 3, 2020 at 6:50 AM Derrick Stolee <stolee@xxxxxxxxx> wrote: > > > > On 11/2/2020 3:43 PM, Elijah Newren wrote: > > > This series depends on a merge of en/strmap (after updating to v3) and > > > en/merge-ort-api-null-impl. > > > > > > As promised, here's the update of the series due to the strmap > > > updates...and two other tiny updates. > > > > Hi Elijah, > > > > I'm sorry that I've been unavailable to read and review your series > > on this topic. I'm very excited about the opportunities here, and I > > wanted to take your topic and merge it with our microsoft/git fork > > so I could test the performance in a Scalar-enabled monorepo. My > > branch is available in my fork [1] > > > > [1] https://github.com/derrickstolee/git/tree/merge-ort-vfs > > > > However, I'm unable to discover how to trigger your ort strategy, > > even for a simple rebase. Perhaps you could supply a recommended > > command for testing? > > > > Thanks, > > -Stolee > > If you want to test performance, you shouldn't test this particular > submission, you should test the end result which exists as the 'ort' > branch of my repo. It actually passes all the tests rather than just > trivial cherry-picks and rebases, and has lots (and lots) of > performance work that hasn't even begun at the point of the > 'ort-basics' branch. (However, it also contains some unrelated memory > cleanup in revision.c, chdir-notify.c, and a number of other places > because I was annoyed that a rebase wouldn't run valgrind-free and > made it harder to spot my memory leaks. And the day I went hunting > those memory "leaks", I went and grabbed some unrelated memory leaks > too. If it causes you merge conflicts, let me know and I'll try to > create a branch for you that hash the minimal changes outside of > merge-ort*.[ch] and diffcore*.[ch]) > > All that said, for testing either branch you just need to first set > pull.twohead=ort in your git config (see > https://lore.kernel.org/git/61217a83bd7ff0ce9016eb4df9ded4fdf29a506c.1604360734.git.gitgitgadget@xxxxxxxxx/), > or, if running regression tests, set GIT_TEST_MERGE_ALGORITHM=ort. I probably also should have mentioned that merge-ort does not (yet?) heed merge.renames configuration setting; it always detects renames. I know you run with merge.renames=false, so you won't quite get an apples-to-apples comparison. However, part of my point was I wanted to make renames fast enough that they could be left turned on, even for the large scale repos, so I'm very interested in your experience. If you need an escape hatch, though, just put a "return 1" at the top of detect_and_process_renames() to turn it off. Oh, and I went through and re-merged all the merge commits in the linux kernel and found a bug in merge-ort while doing that (causing it to die, not to merge badly). I'm kind of surprised that none of my testcases triggered that failure earlier; if you're testing it out, you might want to update to get the fix (commit 067e5c1a38, "merge-ort: fix bug with cached_target_names not being initialized in redos", 2020-11-06).