Migrations in v8 (2)

Posted on December 29, 2018 in umbraco

(continuing from Migrations in v8)

In the previous post, I proposed that Alice adds a migration:


And Bob adds:


And, assuming migrations are compatible (impact different things), I proposed to merge the two branches as:

.To<AliceChanges>("state-alice-4"); // execute Bob's changes after Alice's

From("state-bob-4") // provide a way for Bob to reach the final state
.To<AliceChanges>("state-5"); // execute Alice's changes after Bob's

Both Bob and Alice would then nicely migrate to state-5 on the next run.

What's Simple?

Daniël Knippers, from our friends at Perplex, bravely emailed me back:

This seems very cumbersome to do for every merge, and fairly error prone as the new target appears in 2 places now and has to be copied by hand. I wonder if it easier when there is an API for this (apparently common) use case.

To be fair, the amount of comments I had to put in the above code fragment does probably indicate that the merge is, indeed, cumbersome. And, granted, the UmbracoPlan class already contains weird and hard-to-understand merges. Daniël suggested a few solutions, which we discussed over emails, until we came up with the following syntactic sugar:


This syntax, which has been merged into temp8 already, also supports longer chains:


It essentially takes care of everything, and creates the proper branches, to make sure that both Bob, Alice, everybody, would eventually reach state-2. The UmbracoPlan class has been simplified by using this construct, and looks way more understandable now.

What's Next?

First, I want to shout a big #h5yr at Daniël. It takes some time and energy to think through a problem and then write emails about it. But then, the beauty of a friendly, open platform shines: instead of having to endure writing convoluted code, you can actually change it!

And then... what would you further simplify?

There used to be Disqus-powered comments here. They got very little engagement, and I am not a big fan of Disqus. So, comments are gone. If you want to discuss this article, your best bet is to ping me on Mastodon.