phacility/phabricator · error · Exception
This repository is currently in read-only maintenance mode.
Error message
This repository is currently in read-only maintenance mode.
What it means
Thrown by DiffusionSSHWorkflow::requireWriteAccess() when an SSH user requests write access to a repository whose 'read-only' detail flag is set. The flag is written by PhabricatorRepositoryMaintenanceTransaction, i.e. an administrator enabled Maintenance Mode on the repository; getReadOnlyMessageForDisplay() prepends this fixed text to any admin-supplied maintenance message. No VCS write over SSH is served while the flag is on.
Source
Thrown at src/applications/diffusion/ssh/DiffusionSSHWorkflow.php:273
protected function requireWriteAccess($protocol_command = null) {
if ($this->hasWriteAccess === true) {
return;
}
$repository = $this->getRepository();
$viewer = $this->getSSHUser();
if ($viewer->isOmnipotent()) {
throw new Exception(
pht(
'This request is authenticated as a cluster device, but is '.
'performing a write. Writes must be performed with a real '.
'user account.'));
}
if ($repository->isReadOnly()) {
throw new Exception($repository->getReadOnlyMessageForDisplay());
}
$protocol = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH;
if ($repository->canServeProtocol($protocol, true)) {
$can_push = PhabricatorPolicyFilter::hasCapability(
$viewer,
$repository,
DiffusionPushCapability::CAPABILITY);
if (!$can_push) {
throw new Exception(
pht('You do not have permission to push to this repository.'));
}
} else {
if ($protocol_command !== null) {
throw new Exception(
pht(
'This repository is read-only over SSH (tried to execute '.
'protocol command "%s").',View on GitHub (pinned to 5720a38cfe)
Solutions
- Open the repository in Diffusion, edit Maintenance, disable Maintenance Mode, then retry the push
- If maintenance is intentional, wait for the window to close and watch the repository timeline for the read-only flag clearing
- Confirm you are pushing the intended repository (callsign/URI) - the flag is per-repository, so sibling repositories still accept writes
Defensive patterns
Strategy: validation
Validate before calling
if ($repository->isReadOnly()) {
// Surface the maintenance message instead of starting a push session.
return $repository->getReadOnlyMessageForDisplay();
} Prevention
- Check isReadOnly() before advertising or starting push workflows so users fail fast with the maintenance message
- Alert on PhabricatorRepositoryMaintenanceTransaction applications so maintenance windows are never forgotten
When it happens
Trigger: Any SSH push path (git push over ssh://, hg push, or an svn+ssh session that begins writing) against a repository where the 'read-only' detail is true: an admin turned on Maintenance Mode from the repository edit page, or a maintenance script set it programmatically via setReadOnly(true).
Common situations: Admin enabled maintenance before an upgrade or storage migration and forgot to turn it off; maintenance window still open while users retry pushes; flag left set after a manual recovery operation on the repository.
Related errors
- This repository is read-only over SSH (tried to execute prot
- This repository is read-only over SSH.
- You do not have permission to push to this repository.
- This public key is already associated with another user or d
- Analyzing or decrypting SSH keys requires the "ssh-keygen" b
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/6d86cc42d054101e.
Report an issue: GitHub.