| 'hooks.d/indefero_post_push.conf.in',␊ | 
| 'hooks.d/indefero_post_push.lua',␊ | 
| );␊ | 
| if (!$project->private) {␊ | 
| // this is linked and not copied to be able to update␊ | 
| // the list of read-only commands on upgrades␊ | 
| $confdir_contents[] = 'hooks.d/indefero_authorize_remote_automate.conf';␊ | 
| }␊ | 
| ␊ | 
| // check whether we should handle additional files in the config directory␊ | 
| $confdir_extra_contents = Pluf::f('mtn_confdir_extra', false);␊ | 
| if ($confdir_extra_contents !== false) {␊ | 
|  | 
| __('Could not write read-permissions file "%s"'), $rcfile␊ | 
| ));␊ | 
| }␊ | 
| ␊ | 
| // link / unlink the read-only automate permissions for the project␊ | 
| $confdir = Pluf::f('mtn_confdir', false);␊ | 
| if ($confdir === false) {␊ | 
| $confdir = dirname(__FILE__).'/SyncMonotone/';␊ | 
| }␊ | 
| $file = 'hooks.d/indefero_authorize_remote_automate.conf';␊ | 
| $projectfile = $projectpath.'/'.$file;␊ | 
| $templatefile = $confdir.'/'.$file;␊ | 
| ␊ | 
| $serverRestartRequired = false;␊ | 
| if ($project->private && file_exists($projectfile) && is_link($projectfile)) {␊ | 
| if (!unlink($projectfile)) {␊ | 
| IDF_Scm_Exception(sprintf(␊ | 
| __('Could not remove symlink "%s"'), $projectfile␊ | 
| ));␊ | 
| }␊ | 
| $serverRestartRequired = true;␊ | 
| } else␊ | 
| if (!$project->private && !file_exists($projectfile)) {␊ | 
| if (!symlink($templatefile, $projectfile)) {␊ | 
| throw new IDF_Scm_Exception(sprintf(␊ | 
| __('Could not create symlink "%s"'), $projectfile␊ | 
| ));␊ | 
| }␊ | 
| $serverRestartRequired = true;␊ | 
| }␊ | 
| ␊ | 
| if ($serverRestartRequired) {␊ | 
| // FIXME: we should actually use stopServer() here, but this␊ | 
| // seems to be ignored when the server should be started␊ | 
| // again immediately afterwards␊ | 
| IDF_Scm_Monotone_Usher::killServer($project->shortname);␊ | 
| IDF_Scm_Monotone_Usher::startServer($project->shortname);␊ | 
| }␊ | 
| }␊ | 
| ␊ | 
| /**␊ |