Access all private methods in a non-static way, now that we have a instance-dependent _diagnoseProblem() method

This commit is contained in:
Thomas Keller 2011-06-13 12:23:22 +02:00
parent c4d2b99656
commit c4f92f4569

View File

@ -39,17 +39,6 @@ class IDF_Plugin_SyncMonotone
error_reporting($this->old_err_rep); error_reporting($this->old_err_rep);
} }
private function _diagnoseProblem($msg)
{
$system_err = error_get_last();
if (!empty($system_err)) {
$msg .= ': '.$system_err['message'];
}
error_reporting($this->old_err_rep);
throw new IDF_Scm_Exception($msg);
}
/** /**
* Entry point of the plugin. * Entry point of the plugin.
*/ */
@ -188,7 +177,7 @@ class IDF_Plugin_SyncMonotone
// //
$dbfile = $projectpath.'/database.mtn'; $dbfile = $projectpath.'/database.mtn';
$cmd = sprintf('db init -d %s', escapeshellarg($dbfile)); $cmd = sprintf('db init -d %s', escapeshellarg($dbfile));
self::_mtn_exec($cmd); $this->_mtn_exec($cmd);
// //
// step 2) create a server key // step 2) create a server key
@ -207,7 +196,7 @@ class IDF_Plugin_SyncMonotone
escapeshellarg($projectpath), escapeshellarg($projectpath),
escapeshellarg($serverkey) escapeshellarg($serverkey)
); );
self::_mtn_exec($cmd); $this->_mtn_exec($cmd);
// //
// step 3) create a client key, and save it in IDF // step 3) create a client key, and save it in IDF
@ -227,7 +216,7 @@ class IDF_Plugin_SyncMonotone
escapeshellarg($keydir), escapeshellarg($keydir),
escapeshellarg($clientkey_name) escapeshellarg($clientkey_name)
); );
$keyinfo = self::_mtn_exec($cmd); $keyinfo = $this->_mtn_exec($cmd);
$parsed_keyinfo = array(); $parsed_keyinfo = array();
try { try {
@ -252,13 +241,13 @@ class IDF_Plugin_SyncMonotone
escapeshellarg($keydir), escapeshellarg($keydir),
escapeshellarg($clientkey_hash) escapeshellarg($clientkey_hash)
); );
$clientkey_pubdata = self::_mtn_exec($cmd); $clientkey_pubdata = $this->_mtn_exec($cmd);
$cmd = sprintf('au put_public_key --db=%s %s', $cmd = sprintf('au put_public_key --db=%s %s',
escapeshellarg($dbfile), escapeshellarg($dbfile),
escapeshellarg($clientkey_pubdata) escapeshellarg($clientkey_pubdata)
); );
self::_mtn_exec($cmd); $this->_mtn_exec($cmd);
// //
// step 4) setup the configuration // step 4) setup the configuration
@ -385,8 +374,8 @@ class IDF_Plugin_SyncMonotone
$mtn = IDF_Scm_Monotone::factory($project); $mtn = IDF_Scm_Monotone::factory($project);
$stdio = $mtn->getStdio(); $stdio = $mtn->getStdio();
$projectpath = self::_get_project_path($project); $projectpath = $this->_get_project_path($project);
$auth_ids = self::_get_authorized_user_ids($project); $auth_ids = $this->_get_authorized_user_ids($project);
$key_ids = array(); $key_ids = array();
foreach ($auth_ids as $auth_id) { foreach ($auth_ids as $auth_id) {
$sql = new Pluf_SQL('user=%s', array($auth_id)); $sql = new Pluf_SQL('user=%s', array($auth_id));
@ -506,7 +495,7 @@ class IDF_Plugin_SyncMonotone
$projectpath = sprintf($projecttempl, $shortname); $projectpath = sprintf($projecttempl, $shortname);
if (file_exists($projectpath)) { if (file_exists($projectpath)) {
if (!self::_delete_recursive($projectpath)) { if (!$this->_delete_recursive($projectpath)) {
$this->_diagnoseProblem(sprintf( $this->_diagnoseProblem(sprintf(
__('One or more paths underneath %s could not be deleted'), $projectpath __('One or more paths underneath %s could not be deleted'), $projectpath
)); ));
@ -585,8 +574,8 @@ class IDF_Plugin_SyncMonotone
if ($scm != 'mtn') if ($scm != 'mtn')
continue; continue;
$projectpath = self::_get_project_path($project); $projectpath = $this->_get_project_path($project);
$auth_ids = self::_get_authorized_user_ids($project); $auth_ids = $this->_get_authorized_user_ids($project);
if (!in_array($key->user, $auth_ids)) if (!in_array($key->user, $auth_ids))
continue; continue;
@ -704,8 +693,8 @@ class IDF_Plugin_SyncMonotone
if ($scm != 'mtn') if ($scm != 'mtn')
continue; continue;
$projectpath = self::_get_project_path($project); $projectpath = $this->_get_project_path($project);
$auth_ids = self::_get_authorized_user_ids($project); $auth_ids = $this->_get_authorized_user_ids($project);
if (!in_array($key->user, $auth_ids)) if (!in_array($key->user, $auth_ids))
continue; continue;
@ -816,20 +805,7 @@ class IDF_Plugin_SyncMonotone
)); ));
} }
private static function _get_authorized_user_ids($project) private function _get_project_path($project)
{
$mem = $project->getMembershipData();
$members = array_merge((array)$mem['members'],
(array)$mem['owners'],
(array)$mem['authorized']);
$userids = array();
foreach ($members as $member) {
$userids[] = $member->id;
}
return $userids;
}
private static function _get_project_path($project)
{ {
$projecttempl = Pluf::f('mtn_repositories', false); $projecttempl = Pluf::f('mtn_repositories', false);
if ($projecttempl === false) { if ($projecttempl === false) {
@ -847,7 +823,7 @@ class IDF_Plugin_SyncMonotone
return $projectpath; return $projectpath;
} }
private static function _mtn_exec($cmd) private function _mtn_exec($cmd)
{ {
$fullcmd = sprintf('%s %s %s', $fullcmd = sprintf('%s %s %s',
Pluf::f('idf_exec_cmd_prefix', ''), Pluf::f('idf_exec_cmd_prefix', ''),
@ -865,7 +841,20 @@ class IDF_Plugin_SyncMonotone
return implode("\n", $output); return implode("\n", $output);
} }
private static function _delete_recursive($path) private function _get_authorized_user_ids($project)
{
$mem = $project->getMembershipData();
$members = array_merge((array)$mem['members'],
(array)$mem['owners'],
(array)$mem['authorized']);
$userids = array();
foreach ($members as $member) {
$userids[] = $member->id;
}
return $userids;
}
private function _delete_recursive($path)
{ {
if (is_file($path) || is_link($path)) { if (is_file($path) || is_link($path)) {
return @unlink($path); return @unlink($path);
@ -875,12 +864,23 @@ class IDF_Plugin_SyncMonotone
$scan = glob(rtrim($path, '/') . '/*'); $scan = glob(rtrim($path, '/') . '/*');
$status = 0; $status = 0;
foreach ($scan as $subpath) { foreach ($scan as $subpath) {
$status |= self::_delete_recursive($subpath); $status |= $this->_delete_recursive($subpath);
} }
$status |= @rmdir($path); $status |= @rmdir($path);
return $status; return $status;
} }
} }
private function _diagnoseProblem($msg)
{
$system_err = error_get_last();
if (!empty($system_err)) {
$msg .= ': '.$system_err['message'];
}
error_reporting($this->old_err_rep);
throw new IDF_Scm_Exception($msg);
}
} }
/** /**