{"record":{"id":"8d62c32b1bad261f","repo":"phacility/phabricator","slug":"no-repository-s-exists-8d62c3","errorCode":null,"errorMessage":"No repository \"%s\" exists!","messagePattern":"No repository \"(.+?)\" exists!","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/applications/diffusion/ssh/DiffusionSSHWorkflow.php","lineNumber":235,"sourceCode":"          '\"%s\", or \"%s\".',\n          $path,\n          '/diffusion/X/',\n          '/diffusion/123/',\n          '/source/thaumaturgy.git'));\n    }\n\n    $identifier = $info['identifier'];\n    $base = $info['base'];\n\n    $this->baseRequestPath = $base;\n\n    $repository = id(new PhabricatorRepositoryQuery())\n      ->setViewer($viewer)\n      ->withIdentifiers(array($identifier))\n      ->needURIs(true)\n      ->executeOne();\n    if (!$repository) {\n      throw new Exception(\n        pht('No repository \"%s\" exists!', $identifier));\n    }\n\n    $is_cluster = $this->getIsClusterRequest();\n\n    $protocol = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH;\n    if (!$repository->canServeProtocol($protocol, false, $is_cluster)) {\n      throw new Exception(\n        pht(\n          'This repository (\"%s\") is not available over SSH.',\n          $repository->getDisplayName()));\n    }\n\n    if ($repository->getVersionControlSystem() != $vcs) {\n      $this->raiseWrongVCSException($repository);\n    }\n\n    return $repository;","sourceCodeStart":217,"sourceCodeEnd":253,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/diffusion/ssh/DiffusionSSHWorkflow.php#L217-L253","documentation":"After parsing the identifier (callsign, ID, or short name), the workflow runs PhabricatorRepositoryQuery with the acting SSH user as viewer. If no repository matches — the identifier is wrong, or the user cannot see it due to view policies — executeOne returns null and this exception throws.","triggerScenarios":"git clone ssh://user@host/diffusion/NOPE/ with a typo'd callsign or ID, or cloning a private repository over SSH as a user who lacks its Can View policy (policies silently filter the result to null).","commonSituations":"Typos in automation URLs; renamed or deleted repositories; policy-restricted repos accessed by service or bot accounts.","solutions":["Open the repository in the web UI as the same user and confirm the callsign or ID in its URI","Check the repository's View policy includes the SSH user (or a project containing them)","For automation, use a dedicated bot account with explicit access and the numeric ID form"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  $workflow->executeRepositoryOperations();\n} catch (Exception $ex) {\n  if (preg_match('/^No repository /', $ex->getMessage())) {\n    // report wrong callsign/ID or missing view access to the client\n    fwrite(STDERR, $ex->getMessage().\"\\n\");\n    return 1;\n  }\n  throw $ex;\n}","preventionTips":["Verify the callsign or numeric ID in the web UI before wiring it into automation","Check the repository's View policy covers the SSH user — invisible repos look nonexistent","Use numeric IDs in scripts to survive callsign renames"],"tags":["ssh","repository-not-found","policy"],"backgroundTag":"repository-not-found","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}