Well, last week I started to work on adding dry-run functionality in rebase. And as my mentor suggested that we could use IMM (In-memory merge) for implementing dry-run for rebase, so I had a meeting with my mentor Sean and it was very helpful for me. Initial patch for this dry-run functionality has been pushed-in:
But still there is some work to do in dry-run for rebase like improving output and some automation, formatter work for which I still have to discuss with my mentor. And one more suggested idea is to add –verbose mode which will show the diff of two conflicting files.
To give you some insight of IMM, we don’t actually update working directory to the destination at the time of merging a node, instead we take an overlay of working_ctx and merge that node in overlayworkingctx in-memory and see if we hit a conflict or not. If successful then we flush that resulting ctx on disk. There is still some work is going on in this In-Memory Merge implementation and I think one goal is to flush all the rebased csets at once at the end of this merge process (after we rebased all the csets in-memory).
And I think there is still more areas in IMM, I should take a look on, to get complete insight of it’s structure and working :`)
FYI, Sean is refactoring though all this IMM implementation and also aiming to remove that overlayworkingctx() and make memctx() to do all this work at one place.