{"record":{"id":"ef33c097adf2a88d","repo":"phacility/phabricator","slug":"specify-one-or-more-repositories-to-lock","errorCode":null,"errorMessage":"Specify one or more repositories to lock.","messagePattern":"Specify one or more repositories to lock\\.","errorType":"exception","errorClass":"PhutilArgumentUsageException","httpStatus":null,"severity":"error","filePath":"src/applications/repository/management/PhabricatorRepositoryManagementLockWorkflow.php","lineNumber":27,"sourceCode":"      ->setExamples('**lock** [options] __repository__ ...')\n      ->setSynopsis(\n        pht(\n          'Temporarily lock clustered repositories to perform maintenance.'))\n      ->setArguments(\n        array(\n          array(\n            'name' => 'repositories',\n            'wildcard' => true,\n          ),\n        ));\n  }\n\n  public function execute(PhutilArgumentParser $args) {\n    $viewer = $this->getViewer();\n\n    $repositories = $this->loadRepositories($args, 'repositories');\n    if (!$repositories) {\n      throw new PhutilArgumentUsageException(\n        pht('Specify one or more repositories to lock.'));\n    }\n\n    foreach ($repositories as $repository) {\n      $display_name = $repository->getDisplayName();\n\n      if (!$repository->isHosted()) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'Unable to lock repository \"%s\": only hosted repositories may be '.\n            'locked.',\n            $display_name));\n      }\n\n      if (!$repository->supportsSynchronization()) {\n        throw new PhutilArgumentUsageException(\n          pht(\n            'Unable to lock repository \"%s\": only repositories that support '.","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/applications/repository/management/PhabricatorRepositoryManagementLockWorkflow.php#L9-L45","documentation":"Usage error from `bin/repository lock`: `loadRepositories($args, 'repositories')` resolved no repositories from the wildcard argument. The workflow takes cluster write locks on repositories via `PhabricatorGlobalLock`, so it refuses to run without an explicit target list.","triggerScenarios":"Running `./bin/repository lock` with no repository arguments; passing flags only; identifiers that do not resolve to any repository.","commonSituations":"Operators attempt a global maintenance lock and forget the command is per-repository; shell glob passed unquoted expands to nothing.","solutions":["Pass repository callsigns/IDs: `./bin/repository lock R1`.","Lock every cluster repository by passing the full list from `./bin/repository list`.","Confirm the callsigns are valid if the argument list seems ignored."],"exampleFix":"// before\n$ ./bin/repository lock\n[1166] Specify one or more repositories to lock.\n\n// after\n$ ./bin/repository lock R1 R2","handlingStrategy":"validation","validationCode":"[ $# -ge 1 ] || { echo 'usage: lock <callsign>...' >&2; exit 1; }\n./bin/repository lock \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Wrap cluster lock procedures in scripts that assert a non-empty repository list.","Remember lock is per-repository, not global — pass the full list if you mean all."],"tags":["phabricator","phorge","cli","usage-error","missing-argument","locking"],"backgroundTag":"missing-required-argument","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}