HomePhabricator

[Wilds] Refine the working copy selection algorithm for Subversion vs…

Description

[Wilds] Refine the working copy selection algorithm for Subversion vs Git/Mercurial

Summary:
Ref T13098. I didn't fully capture all the nuances of the old algorithm, and the behavior we want is slightly more complicated. This adjust things to try to express the more complicated behavior in a relatively clear (?) way.

When a bunch of working copies are nested inside one another, first pick the deepest one, then ask it to pick the best option among all working copies of the same type.

For Git and Mercurial repositories, just pick the deepest one.

For Subversion repositories, pick the directory with .arcconfig if one exists, or the shallowest directory otherwise (this could be more sophisticated, some day).

The general idea here is that if /a is a Git repository and /a/b/c is a Git repository and you run inside /a/b/c, that should be the working copy.

But we have to use a different rule for Subversion because every directory had a .svn directory in it until SVN 1.7.

Test Plan:
Locally, with core/lib/arcanist/, got arc to anchor to arcanist/ instead of core/ with the new ruleset.

(This will eventually get more extensive Subversion testing.)

Reviewers: amckinley

Reviewed By: amckinley

Maniphest Tasks: T13098

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