This is the first step in a pipeline like the following: autopatch (+rebase) -> build/test -> land. This was inspired after feedback on the land-bot script in D4195.
Reviewer note: I would prefer to split this script into two parts that patch and rebase separately, but this process is intertwined due to the way arcanist handles patches that build on a stack of changes.
Example:
You have two changes `A` and `B`, where `B` builds on `A` which builds on top of master (currently commit `M`):
```
M (master) <- A <- B
```
After succesful review, you land `A`. Phabricator has the state stored as such:
```
M <- A' (master)
\-- A <- B
```
The landed `A` is shown as `A'` because the hash has changed, but the contents have not.
With a clean source tree on latest master, you `arc patch Dxxx` and arcanist will fail to find
hash `A` despite `A'` being present. You add `--skip-dependencies` because you know `A'` is effectively `A`
and the patch succeeds, but it builds on latest master without prompting. This means that if someone
landed changes before you like:
```
M <- A' <- C <- B'
```
The `B'` will be the result of `arc patch`, as it will not attempt to search for the dependency `A`
which doesn't exist on your machine (and because you specified `--skip-dependencies` to get around
not finding it in the first place).
For this reason, it doesn't make sense to split the script apart, as the preparation steps for a clean arc patch
effectively trigger a rebase under circumstances similar to the above. The final `git rebase` at the end handles
the remaining cases where the dependency of the patch being applied is available (usually part of master directly).