(IMPORTANT) The `master` branch of "Arcanist" is currently more unstable than usual. This task describes ongoing changes in `master`. You can switch to `stable` until the dust settles if these changes are impacting your workflow.
**The minimum PHP version required to run Arcanist is now PHP 5.5**, which was released seven years ago in 2013. Requiring this version of PHP allows Arcanist to use a few new language features, including: traits; `yield`; and `finally`. See T11968 for some details.
**libphutil is no longer required.** All the code in "libphutil/" which Arcanist requires has been merged into "arcanist/". "libphutil/" is now an empty repository with a README file. See T13395 for discussion. You can safely delete the "libphutil/" directory if it is empty and everything is working for you.
These flags to common `arc` workflows have been removed:
| **arc diff** | `--plan-changes` | {icon times color=red} Removed, see T13010. Try `--draft`.
|---|
| | `--preview` | {icon times color=red} Removed, see T13010. Try `--draft`.
| | `--no-diff` | {icon times color=red} Removed, see T13010. Legacy flag.
| | `--cache` | {icon times color=red} Removed, see T13010. Legacy flag.
| **arc lint** | `--only-changed` | {icon times color=red} Removed. Try "warning" severity.
|---|
| | `--only-new` | {icon times color=red} Removed. Almost never worked correctly.
| | `--cache` | {icon times color=red} Removed. Legacy flag.
---
These minor behaviors have also changed:
**Configuration**
- The `arc.lint.cache` configuration setting has been removed.
**CLI/Scripting Behaviors**
- `arc` no longer exits with error code 77 to indicate invalid flags.
- Configuration flags must now be specified before workflows. For example, `arc --config x=y diff` is valid, but `arc diff --config x=y` is not valid.
- When stdout is not a TTY (usually, this means you're running `arc` in a script/non-interactive environment), command line flags must now be explicitly terminated with `--` (the "end of flags" argument), even if there are no flags, or no arguments, or the command you are executing can not take flags or arguments or is otherwise completely unambiguous. This makes it more difficult to write unsafe code. See T12961 for rationale.
Here's how to terminate flags with `--` for various argument lists:
| Unsafe Command | Properly Terminated Command |
|---|---|
| `arc diff` | `arc diff --` |
| `arc browse file.txt` | `arc browse -- file.txt` |
| `arc diff --draft` | `arc diff --draft --` |
| `arc lint --output xml example.js` | `arc lint --output xml -- example.js` |
**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.
- `arc alias` can only resolve "modern" workflows as alias targets, not "classic" workflows. All upstream workflows should become "modern" workflows soon, but they aren't all modern at time of writing.
- You //can// now define aliases that resolve to other aliases, creating alias chains. Exceptionally useful! Thousands of users have demanded this feature!
- `alias` is now a global workflow for any toolset.
**Workflow: Help**
- The `arc help --full` flag no longer exists. `arc help` is more verbose than it was before.
- Only modern workflows (not "classic" workflows) are currently
- `help` is now a global workflow for any toolset.
**Workflow: Liberate**
- `arc liberate` now liberates all libraries under the current working directory if given no arguments.
- The flags `--library-name`, `--force-update`, `--remap`, and `--verify` no longer exist.
- The flag `--upgrade` no longer exists. v1 libraries can no longer be upgraded to v2. If you have a library which is 5+ years old, remove all the `__init__.php` files and then just do a clean liberate on it.
- The flag `--all` has been renamed to `--clean` (like `make clean`), for consistency with other commands and to disambiguate the new default behavior of rebuilding all libraries in subdirectories.
**.arcrc**
- The internal format of this file has changed, and it will now be written with keys at top level (instead of inside a "config" key). The old format will still be read. This only impacts you if you're manually reading `.arcrc` files, which you probably should not be.