Details
I am introducing Arcanist+Differential based workflow. The trivial cases are clear, but I wonder how these three cases work:
Case #1:
We start a feature branch with arc feature feature1 origin/master and do some development. Meanwhile origin/master diverges a lot. What needs to be done to safely land feature1 onto origin/master? Manually rebase / solve conflicts and do arc diff prior landing? What does Arcanist do behind the scenes?
Case #2:
What happens when you take one feature off another (arc feature feature1 origin/master, arc feature subfeature1 feature1) and then work a lot on feature1. Does Arcanist takes this into account when arc diff'ing on subfeature1? Also, what does arc land do? Does it land subfeature1 onto feature1? If not, does it allow to land subfeature1 onto origin/master prior to feature1?
Case #3:
How does Arcanist workflow looks like if we have multiple people working on parts of the same feature?
Would be great if @epriestley (or someone else who knows) could explain these cases.
Answers
Case 1: arc land merges or rebases before landing, depending on configuration. You can use --trace to see exactly what it's doing.
Case 2: arc diff does not account for this by default, but can be configured to. I use the base rule arc:amended, git:branch-unique(origin/master), which essentially means "all the changes which are only on this branch". You can always use arc which to see exactly what arc diff would do, and why.
arc land aborts if you try to arc land subfeature1 ("there are multiple open revisions on this branch").
Case 3: We don't handle this specially. The recommended approach is to split the feature into small, independent changes and make them individually, and then treat this exactly like anything else.