}␊ |
␊ |
/**␊ |
* Remove orphan repositories.␊ |
*/␊ |
public static function removeOrphanRepositories()␊ |
{␊ |
$path = Pluf::f('idf_plugin_syncgit_base_repositories', '/home/git/repositories');␊ |
if (!is_dir($path) || is_link($path)) {␊ |
throw new Pluf_Exception_SettingError(sprintf(␊ |
'Directory %s does not exist! Setting "idf_plugin_syncgit_base_repositories not set.',␊ |
$path));␊ |
}␊ |
if (!is_writable($path)) {␊ |
throw new Exception(sprintf('Repository %s is not writable.', $path));␊ |
}␊ |
$projects = array();␊ |
foreach (Pluf::factory('IDF_Project')->getList() as $project) {␊ |
$projects[] = $project->shortname;␊ |
}␊ |
unset($project);␊ |
$it = new DirectoryIterator($path);␊ |
$orphans = array();␊ |
while ($it->valid()) {␊ |
if (!$it->isDot() && $it->isDir() && !in_array(basename($it->getFileName(), '.git'), $projects)) {␊ |
$orphans[] = $it->getPathName();␊ |
}␊ |
$it->next();␊ |
}␊ |
if (count($orphans)) {␊ |
$cmd = Pluf::f('idf_exec_cmd_prefix', '').'rm -rf '.implode(' ', $orphans);␊ |
exec($cmd);␊ |
while (list(, $project) = each($orphans)) {␊ |
if (is_dir($project)) {␊ |
throw new Exception(sprintf('Cannot remove %s directory.', $project));␊ |
}␊ |
}␊ |
}␊ |
}␊ |
␊ |
/**␊ |
* Check if a sync is needed.␊ |
*␊ |
*/␊ |
|
@unlink(Pluf::f('idf_plugin_syncgit_sync_file'));␊ |
self::sync();␊ |
self::markExport();␊ |
if (Pluf::f('idf_plugin_syncgit_remove_orphans', false)) {␊ |
self::removeOrphanRepositories();␊ |
}␊ |
}␊ |
}␊ |
}␊ |