phacility/phabricator · error · Exception

No repository "%s" exists!

Error message

No repository "%s" exists!

What it means

Exception from PhabricatorRepositoryPullLocalDaemon::loadPullableRepositories(): an identifier passed via the daemon's --repositories argument did not resolve to any repository. The daemon runs PhabricatorRepositoryQuery->withIdentifiers($include) and requires every include identifier (callsign, PHID, or ID) to appear in the identifier map; a miss aborts daemon startup with 'No repository "X" exists!'.

Source

Thrown at src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php:424

    array $include,
    array $exclude,
    AlmanacDevice $device = null) {

    $query = id(new PhabricatorRepositoryQuery())
      ->setViewer($this->getViewer());

    if ($include) {
      $query->withIdentifiers($include);
    }

    $repositories = $query->execute();
    $repositories = mpull($repositories, null, 'getPHID');

    if ($include) {
      $map = $query->getIdentifierMap();
      foreach ($include as $identifier) {
        if (empty($map[$identifier])) {
          throw new Exception(
            pht(
              'No repository "%s" exists!',
              $identifier));
        }
      }
    }

    if ($exclude) {
      $xquery = id(new PhabricatorRepositoryQuery())
        ->setViewer($this->getViewer())
        ->withIdentifiers($exclude);

      $excluded_repos = $xquery->execute();
      $xmap = $xquery->getIdentifierMap();

      foreach ($exclude as $identifier) {
        if (empty($xmap[$identifier])) {
          throw new Exception(

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. List valid identifiers: use the UI or conduit repository.query, and confirm the callsign/PHID/ID you passed.
  2. Correct the --repositories argument and relaunch the daemon (phd launch repository-pull-locals -- --repositories <callsign>).
  3. If the repository was deleted, remove it from the daemon launch configuration entirely.
  4. For scripts, resolve identifiers dynamically (repository.query) instead of hard-coding PHIDs.

Example fix

# before
phd launch repository-pull-locals -- --repositories DOESNOTEXIST

# after
phd launch repository-pull-locals -- --repositories ABCD
Defensive patterns

Strategy: validation

Validate before calling

// Resolve identifiers before launching the daemon:
$repos = $conduit->callMethod('repository.query', array(
  'callsigns' => array('ABCD'),
));
if (!$repos) {
  throw new Exception('Repository ABCD does not exist; fix --repositories.');
}

Type guard

function allRepositoryIdentifiersExist(array $identifiers, $viewer) {
  $query = id(new PhabricatorRepositoryQuery())
    ->setViewer($viewer)
    ->withIdentifiers($identifiers);
  $query->execute();
  $map = $query->getIdentifierMap();
  foreach ($identifiers as $id) {
    if (empty($map[$id])) { return false; }
  }
  return true;
}

Try / catch

try {
  $daemon->run();
} catch (Exception $ex) {
  if (preg_match('/No repository "/', $ex->getMessage())) {
    // fix the --repositories argument, then relaunch
  }
  throw $ex;
}

Prevention

When it happens

Trigger: Launching the pull daemon with a bad filter, e.g. phd launch repository-pull-locals -- --repositories DOESNOTEXIST, or with a PHID/callsign of a repository that was deleted or never existed. The foreach over $include finds the identifier missing from $query->getIdentifierMap() and throws.

Common situations: Typos in callsigns; repository deleted or renamed after the daemon launch script/unit file was written; environments where the callsign contains different casing; scripts copied between instances whose PHIDs do not exist locally.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/ce1f1176543eb496. Report an issue: GitHub.