Phabricator workflow vs. GitHub

Niklas Hamb├╝chen mail at
Fri Oct 5 14:21:44 UTC 2018

> I think the article is assuming the base for `arc diff` is always the parent revision, i.e. `arc diff HEAD^`, which is how the workflow works best. Strangely I don't think the open source Phabricator is set up to do this by default so you have to actually type `arc diff HEAD^`

Perhaps that is exactly to address the problem in my example:
If you submit a patch B that depends on A, by default this patch will fail to apply against master on the Phabricator side unless you manually set up dependencies? I suppose this is why it defaults to submitting the whole master-A-B history instead?

> for now manually specifying the dependencies is not terrible.

I have found it pretty terrible:
Setting up dependencies between commits by hand is time consuming, and you can do it wrong, which easily leads to confusion.

If I do 4 refactor commits and on top a new feature that needs them, why should I have to manually click together the dependencies between those commits? The whole point of git is that it tracks that already for me in its DAG.

It gets worse if I have to react to review feedback:

Say Ben tells me in review that I should really squash commits 2 and 3 because they don't work independent of each other. Easily done with `git rebase -i` as suggested, but now I have to go and reflect what I just did in version control by manual clicking in an external tool again (and I better kick out the right Diff).

Similarly, if want to rename all occurrences of my_var to myVar across my 5 commits using rebase -i, I have to manually invoke the right arc invocation after each commit.

So I've found it a big pain to maintain a series of dependent commits with this workflow.

I can imagine this to be only painless if you have access to the tooling you said you have at facebook, that automates these things for you.

In my ideal world, it should work like this:

* Locally, a series of dependent patches goes into a git branch.
* Branches that are dependent on each other are based on each other.
* You have a tool that, if you amend a commit in a branch, can rebase all the dependent branches accordingly.
* You can tell `arc` to submit a whole branch, and it will automatically upload all dependent branches and set up the Phabricator dependency relationships for you.
* When you react to review feedback, you change your history locally, and run an `arc upload-changes`, that automatically updates all Diffs accordingly.


More information about the ghc-devs mailing list