**General**
- `libphutil/` has been removed. It is now part of Arcanist. Code which included libphutil should include arcanist instead. The `libphutil/` directory can be removed.
**Credentials and Global Flags**
- Certificates (an old credential mechanism) are no longer supported. If you have a certificate, arc will behave like you do not have any credentials. Follow the login prompts to convert your certificate into a token and things will work correctly again.
- Removed `arcanist_configuration` configuration setting. This is a legacy/FB-only option which doesn't fit into the roadmap.
- Removed `--conduit-version`. We do capability testing, now.
- Removed `--conduit-timeout`. Not clear this ever really had any callers.
- Changing config at runtime:
- Removed `--skip-arcconfig`. Unclear what this was for. FB only option because someone created an invalid file at `/home/.arcconfig`?
- Removed `--arcrc-file`. Unclear that this had any real uses. Potentially open to restoring this or similar if there's an automation/bot use for it.
- Added `--config-file`. If this option is specified, the system and user configurations are skipped. This option may be specified more than once.
- `--load-phutil-library` has been renamed to `--library`.
- `--config`, `--library`, and `--config-file` must now appear before other workflow arguments. For example, `arc --config x=y diff` is valid, but `arc diff --config x=y` is not.
**Workflow: Alias**
- `arc alias` will no longer remove redundant flags. Previously, you could define `arc draft -> arc diff --draft`, then run `arc draft --draft` (which would naively resolve to `arc diff --draft --draft`) and have your duplicate flag cleaned up. This isn't safe in the general case and deviates from the explicit approach we generally prefer elsewhere. You //can// now define aliases that resolve to other aliases, creating alias chains.
**Workflow: Diff**
- `arc diff --no-diff` (an internal workflow) has been removed.
- `arc diff --cache` (which was a passthrough for `arc lint --cache`, which has also been removed, below) has been removed.
See T2543. The flags related to previewing a diff have changed:
| Old Command | New Command |
|---|---|
| `arc diff --only` | `arc diff --only --nolint --nounit` |
| `arc diff --preview` | `arc diff --only` |
| `arc diff --plan-changes` | //None// |
| //None// | `arc diff --draft` |
Previously, `arc diff --preview` and `arc diff --only` had similar behavior: they only created a diff (not a revision). `--preview` ran lint and unit tests, while `--only` did not. The new behavior is that `--preview` has been removed, and `--only` now runs lint and unit tests. You can recreate the old `--only` with `arc alias`, as `--only --nounit --nolint` or perhaps `--only --nounit --nolint --browse`. The old `--preview` is now `--only`. This rename is because the distinction between "draft" and "only" seems more clear than the distinction between "draft" and "preview".
- The `--plan-changes` flag has been removed. This is obsolete with drafts.
- The `--draft` flag has been added. This holds a revision in the new "Draft" state indefinitely, even after builds finish. Drafts are not automatically submitted to reviewers for review. The `--draft` flag serves as a sort of more powerful version of the `--preview` and `--plan-changes` flags.
**Workflow: Lint**
- `arc.lint.engine` has been removed. Configure linters with `.arclint`.
- The internal "async lint" flag has been removed. This was an ancient, Facebook-specific flag for extensions which is obsoleted by Harbormaster.
- `arc lint --only-new` has been removed. This relied on upstream lint support which was never fully developed.
- `arc lint --cache` has been removed.
- The `arc.lint.cache` config option has been removed.
- `arc lint --only-changed` has been removed. arc now detects whether you want warnings on all lines or only changed lines by examining the other arguments (paths, `--everything`, `--lintall`, and `--rev`).
**Workflow: Unit**
- `arc.unit.engine` has been removed. Configure unit tests with `.arcunit`.
**Workflow: Help**
- The `arc help --full` flag no longer exists. `arc help` is more verbose than it was before.
**Workflow: Liberate**
- `arc liberate` now liberates all libraries under the current working directory if given no arguments.
**Events / Extensions / Developer**
- `arc diff` no longer dispatches `ArcanistEventType::TYPE_REVISION_WILLCREATEREVISION` if the server is sufficiently modern. (It no longer uses the datastructure this event received.)
- When any configuration source specifies an invalid library, we now prompt you to continue without it if stdin is a TTY. This allows you to fix config with `arc set-config --local` and similar. If stdin is not a TTY, we fatal. Previously, we would not prompt you to continue.
- `ArcanistConfiguration` no longer exists. Its hooks no longer exist, either:
- `willRunWorkflow()` no longer exists.
- `didRunWorkflow()` no longer exists.
- `didAbortWorkflow()` no longer exists.
- `getCustomArgumentsForCommand()` no longer exists.
- The `Workflow->didParseArguments()` callback no longer exists. Just do the parsing in `executeWorkflow()`.
- `ArcanistWorkflow->passedArguments` no longer exists (no callers).
- `ArcanistWorkflow->getPassedArguments()` no longer exists (no callers).
- `ArcanistWorkingCopyIdentity` is now `ArcanistWorkingCopy`.
- The `externals/includes/` directory is no longer supported.
- The `events.listeners` configuration option has been removed.