/** * Creates and/or cleans a workspace for the requested repo. * * return ArcanistGitAPI */ public static function getCleanGitWorkspace(PhabricatorRepository $repo) { $origin_path = $repo->getLocalPath(); $path = rtrim($origin_path, '/'); $path = $path . '__workspace'; if (!Filesystem::pathExists($path)) { $repo->execxLocalCommand('clone -- file://%s %s', $origin_path, $path); if (!$repo->isHosted()) { id(new ArcanistGitAPI($path))->execxLocal('remote set-url origin %s', $repo->getRemoteURI()); } } $workspace = new ArcanistGitAPI($path); $workspace->execxLocal('clean -f -d'); $workspace->execxLocal('checkout master'); $workspace->execxLocal('fetch'); $workspace->execxLocal('reset --hard origin/master'); $workspace->reloadWorkingCopy(); return $workspace; }