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_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_path_authorized_keys'] = '/home/git/.ssh/authorized_keys';
|
||||||
$cfg['idf_plugin_syncgit_sync_file'] = '/tmp/SYNC-GIT';
|
$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
|
When someone will change his SSH key or add a new one, the
|
||||||
`/tmp/SYNC-GIT` file will be created. The cron job
|
`/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.
|
* Check if a sync is needed.
|
||||||
*
|
*
|
||||||
@ -79,6 +117,9 @@ class IDF_Plugin_SyncGit_Cron
|
|||||||
@unlink(Pluf::f('idf_plugin_syncgit_sync_file'));
|
@unlink(Pluf::f('idf_plugin_syncgit_sync_file'));
|
||||||
self::sync();
|
self::sync();
|
||||||
self::markExport();
|
self::markExport();
|
||||||
|
if (Pluf::f('idf_plugin_syncgit_remove_orphans', false)) {
|
||||||
|
self::removeOrphanRepositories();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user