| }␊ | 
| ␊ | 
| /**␊ | 
| * 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();␊ | 
| }␊ | 
| }␊ | 
| }␊ | 
| }␊ |