Page MenuHomePhabricator

Arcanist Wilds Patch Notes (Ongoing)
Closed, ResolvedPublic



  • libphutil/ has been removed. It is now part of Arcanist. Code which included libphutil should include arcanist instead. The libphutil/ directory can be removed.
  • arc no longer exits with error code 77 to indicate invalid flags (this was arbitrary). See "Command Line Exit Codes".

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.
  • Removed --conduit-uri. Instead, use --config phabricator.uri=....
  • Removed --conduit-token. This might come back in some form (?), but you can use --config-file and point at a file with a "hosts" specification as a workaround. This may be broadly more convenient and easier to manage/deploy/version control.


  • The http.basicauth.user and http.basicauth.pass configuration options are no longer supported. These served a very niche use case. If you're a customer and need this, we can provide some similar capability via PhutilHTTPEngineExtension; file a support request.
  • The https.blindly-trust-domains configuration option is no longer supported. It's 2018, legitimate SSL is completely free now, and you should configure it properly. If you "need" this, you can implement it via PhutilHTTPEngineExtension.

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 CommandNew Command
arc diff --onlyarc diff --only --nolint --nounit
arc diff --previewarc diff --only
arc diff --plan-changesNone
Nonearc 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.
  • 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, or give me a copy of the library and a bottle of scotch and I'll do it for you.
  • 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.

Workflow: Shell Complete

  • arc shell-complete now installs itself.
  • You should edit anywhere you stuck the old source path/to/arcanist/.../ line (like ~/.profile) and remove it. Then, run arc shell-complete to install the updated hook.
  • The behavior of completion has changed somewhat, but probably not in any meaningful ways.
  • Support for ZSH has been removed. This was contributed and I wasn't able to figure out how to make it work on master, so I suspect it may never have worked for more than one person in 2012. I'm open to restoring support if you're a ZSH wizard and can convince me that your implementation is correct and supportable, and it works out of the box for me by magic. See for the heady days of an upstream with low contribution barriers.

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.

Event Timeline

epriestley triaged this task as Normal priority.Sep 14 2018, 7:13 PM
epriestley created this task.

As a note, we make quite a bit of use of --arcrc-file currently to "handle" multiple people working as root on dev VMs, but we can probably migrate that over to --conduit-token anyway (although we're a way off hitting this, because as much as I want drafts, other people consider T4678: Support changelist-based SVN workflows in Arcanist and Differential critical and we're on a fork because of that.)

EDIT: Woo, thanks for --config-file.

Also, damn, I've used libphutil for so many things - ExecFuture and HTTPSFuture are just by far the best thing out there for async work. Time to make libphutillite :)

Also, damn, I've used libphutil for so many things - ExecFuture and HTTPSFuture are just by far the best thing out there for async work.

You'll be able to include arcanist/scripts/init/init-library.php or similar and get a similar outcome (ExecFuture, HTTPSFuture, etc), you'll just have a few more files on disk now and deploy arcanist/ instead of libphutil/.

wilds and experimental have mostly collapsed together into master, and this is survived by T13488.

(Not all of the changes described above have made it in yet (new lint and unit stuff, in particular) but the vast majority have, and T13488 has a lot of other changes from experimental and later work that didn't originate here.)