Update the "WorkingCopy" API and create a fallback "Filesystem" working copy

Authored by epriestley on Apr 8 2020, 2:18 PM.


Update the "WorkingCopy" API and create a fallback "Filesystem" working copy

Ref T11968.

  • Allow "WorkingCopy" objects to maintain an API object and update callers ("get...()" instead of "new...()").
  • Always generate a WorkingCopy object and a RepositoryAPI object.

Currently, code has to look like this:

$working_copy = ...
if ($working_copy) {
  $repository_api = ...
  if ($repository_api [instanceof ... ]) {

This is clunky. There's also no reason some "arc" commands can't run outside a VCS working directory without special-casing how they interact with the filesystem.

Conceptually, model the filesystem as a trivial VCS (which stores exactly one commit, always amends onto it, and discards history). Provide a trivial WorkingCopy and API for it.

(This change isn't terribly interesting on its own, but chips away at landing the new Hardpoint infrastructure.)

Test Plan: Ran arc version, arc upgrade.

Maniphest Tasks: T11968

Differential Revision: https://secure.phabricator.com/D21070