Fixed issue 204, deleting a project does not remove the repository
This commit is contained in:
parent
9b39d63104
commit
e235242ea6
@ -70,6 +70,9 @@ folder. Here is a configuration example:
|
||||
$cfg['idf_plugin_syncgit_path_gitserve'] = '/home/www/indefero/scripts/gitserve.py'; # yes .py
|
||||
$cfg['idf_plugin_syncgit_path_authorized_keys'] = '/home/git/.ssh/authorized_keys';
|
||||
$cfg['idf_plugin_syncgit_sync_file'] = '/tmp/SYNC-GIT';
|
||||
# Remove the git repositories which do not have a corresponding project
|
||||
# This is run at cron time
|
||||
$cfg['idf_plugin_syncgit_remove_orphans'] = false;
|
||||
|
||||
When someone will change his SSH key or add a new one, the
|
||||
`/tmp/SYNC-GIT` file will be created. The cron job
|
||||
|
@ -69,6 +69,44 @@ class IDF_Plugin_SyncGit_Cron
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
@ -79,6 +117,9 @@ class IDF_Plugin_SyncGit_Cron
|
||||
@unlink(Pluf::f('idf_plugin_syncgit_sync_file'));
|
||||
self::sync();
|
||||
self::markExport();
|
||||
if (Pluf::f('idf_plugin_syncgit_remove_orphans', false)) {
|
||||
self::removeOrphanRepositories();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user