| foreach ($confdir_contents as $content) {␊ |
| if (!file_exists($confdir.$content)) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('The configuration file "%s" is missing.'), $content␊ |
| __('The configuration file %s is missing.'), $content␊ |
| ));␊ |
| }␊ |
| }␊ |
|
| $projectpath = sprintf($projecttempl, $shortname);␊ |
| if (file_exists($projectpath)) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('The project path "%s" already exists.'), $projectpath␊ |
| __('The project path %s already exists.'), $projectpath␊ |
| ));␊ |
| }␊ |
| ␊ |
| if (!@mkdir($projectpath)) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (!mkdir($projectpath)) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('The project path "%s" could not be created: %s'),␊ |
| $projectpath, $err␊ |
| __('The project path %s could not be created.'), $projectpath␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| //␊ |
| $keydir = Pluf::f('tmp_folder').'/mtn-client-keys';␊ |
| if (!file_exists($keydir)) {␊ |
| if (!@mkdir($keydir)) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (!mkdir($keydir)) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('The key directory "%s" could not be created: %s'),␊ |
| $keydir, $err␊ |
| __('The key directory %s could not be created.'), $keydir␊ |
| ));␊ |
| }␊ |
| }␊ |
|
| foreach ($confdir_contents as $content) {␊ |
| $filepath = $projectpath.'/'.$content;␊ |
| if (substr($content, -1) == '/') {␊ |
| if (!@mkdir($filepath)) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (!mkdir($filepath)) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not create configuration directory "%s": %s'),␊ |
| $filepath, $err␊ |
| __('Could not create configuration directory "%s"'), $filepath␊ |
| ));␊ |
| }␊ |
| continue;␊ |
| }␊ |
| ␊ |
| if (substr($content, -3) != '.in') {␊ |
| if (!@symlink($confdir.$content, $filepath)) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (!symlink($confdir.$content, $filepath)) {␊ |
| IDF_Scm_Exception(sprintf(␊ |
| __('Could not create symlink for configuration file "%s": %s'),␊ |
| $filepath, $err␊ |
| __('Could not create symlink "%s"'), $filepath␊ |
| ));␊ |
| }␊ |
| continue;␊ |
|
| ␊ |
| // remove the .in␊ |
| $filepath = substr($filepath, 0, -3);␊ |
| if (@file_put_contents($filepath, $filecontents, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (file_put_contents($filepath, $filecontents, LOCK_EX) === false) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write configuration file "%s": %s'),␊ |
| $filepath, $err␊ |
| __('Could not write configuration file "%s"'), $filepath␊ |
| ));␊ |
| }␊ |
| }␊ |
|
| ␊ |
| // FIXME: more sanity - what happens on failing writes? we do not␊ |
| // have a backup copy of usher.conf around...␊ |
| if (@file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write usher configuration file "%s": %s'),␊ |
| $usher_config, $err␊ |
| __('Could not write usher configuration file "%s"'), $usher_config␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| ␊ |
| $write_permissions = implode("\n", $key_ids);␊ |
| $rcfile = $projectpath.'/write-permissions';␊ |
| if (@file_put_contents($rcfile, $write_permissions, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (file_put_contents($rcfile, $write_permissions, LOCK_EX) === false) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write write-permissions file "%s": %s'),␊ |
| $rcfile, $err␊ |
| __('Could not write write-permissions file "%s"'), $rcfile␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| }␊ |
| $read_permissions = IDF_Scm_Monotone_BasicIO::compile(array($stanza));␊ |
| $rcfile = $projectpath.'/read-permissions';␊ |
| if (@file_put_contents($rcfile, $read_permissions, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (file_put_contents($rcfile, $read_permissions, LOCK_EX) === false) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write read-permissions file "%s": %s'),␊ |
| $rcfile, $err␊ |
| __('Could not write read-permissions file "%s"'), $rcfile␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| ␊ |
| $serverRestartRequired = false;␊ |
| if ($project->private && file_exists($projectfile) && is_link($projectfile)) {␊ |
| if (!@unlink($projectfile)) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (!unlink($projectfile)) {␊ |
| IDF_Scm_Exception(sprintf(␊ |
| __('Could not remove symlink "%s": %s'), $projectfile, $err␊ |
| __('Could not remove symlink "%s"'), $projectfile␊ |
| ));␊ |
| }␊ |
| $serverRestartRequired = true;␊ |
| } else␊ |
| if (!$project->private && !file_exists($projectfile)) {␊ |
| if (!@symlink($templatefile, $projectfile)) {␊ |
| if (!symlink($templatefile, $projectfile)) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not create symlink "%s": %s'), $projectfile, $err␊ |
| __('Could not create symlink "%s"'), $projectfile␊ |
| ));␊ |
| }␊ |
| $serverRestartRequired = true;␊ |
|
| if ($keyname && $keyhash &&␊ |
| file_exists($keydir .'/'. $keyname . '.' . $keyhash)) {␊ |
| if (!@unlink($keydir .'/'. $keyname . '.' . $keyhash)) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not delete client private key "%s": %s'),␊ |
| $keyname, $err␊ |
| __('Could not delete client private key %s'), $keyname␊ |
| ));␊ |
| }␊ |
| }␊ |
|
| ␊ |
| // FIXME: more sanity - what happens on failing writes? we do not␊ |
| // have a backup copy of usher.conf around...␊ |
| if (@file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (file_put_contents($usher_config, $usher_rc, LOCK_EX) === false) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write usher configuration file "%s": %s'),␊ |
| $usher_config, $err␊ |
| __('Could not write usher configuration file "%s"'), $usher_config␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| ␊ |
| $read_perms = IDF_Scm_Monotone_BasicIO::compile($parsed_read_perms);␊ |
| ␊ |
| if (@file_put_contents($projectpath.'/read-permissions',␊ |
| if (file_put_contents($projectpath.'/read-permissions',␊ |
| $read_perms, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write read-permissions for project "%s": %s'),␊ |
| $shortname, $err␊ |
| __('Could not write read-permissions for project "%s"'), $shortname␊ |
| ));␊ |
| }␊ |
| }␊ |
|
| if (!in_array('*', $lines) && !in_array($mtn_key_id, $lines)) {␊ |
| $lines[] = $mtn_key_id;␊ |
| }␊ |
| if (@file_put_contents($projectpath.'/write-permissions',␊ |
| if (file_put_contents($projectpath.'/write-permissions',␊ |
| implode("\n", $lines) . "\n", LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write write-permissions file for project "%s": %s'),␊ |
| $shortname, $err␊ |
| __('Could not write write-permissions file for project "%s"'),␊ |
| $shortname␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| ␊ |
| $read_perms = IDF_Scm_Monotone_BasicIO::compile($parsed_read_perms);␊ |
| ␊ |
| if (@file_put_contents($projectpath.'/read-permissions',␊ |
| if (file_put_contents($projectpath.'/read-permissions',␊ |
| $read_perms, LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write read-permissions for project "%s": %s'),␊ |
| $shortname, $err␊ |
| __('Could not write read-permissions for project "%s"'), $shortname␊ |
| ));␊ |
| }␊ |
| }␊ |
|
| continue;␊ |
| }␊ |
| }␊ |
| if (@file_put_contents($projectpath.'/write-permissions',␊ |
| implode("\n", $lines) . "\n", LOCK_EX) === false) {␊ |
| $err = error_get_last();␊ |
| $err = $err == null ? 'unknown error' : $err['message'];␊ |
| if (file_put_contents($projectpath.'/write-permissions',␊ |
| implode("\n", $lines) . "\n", LOCK_EX) === false) {␊ |
| throw new IDF_Scm_Exception(sprintf(␊ |
| __('Could not write write-permissions file for project "%s": %s'),␊ |
| $shortname, $err␊ |
| __('Could not write write-permissions file for project "%s"'),␊ |
| $shortname␊ |
| ));␊ |
| }␊ |
| ␊ |
|
| foreach ($scan as $subpath) {␊ |
| $status |= self::_delete_recursive($subpath);␊ |
| }␊ |
| $status |= @rmdir($path);␊ |
| $status |= rmdir($path);␊ |
| return $status;␊ |
| }␊ |
| }␊ |