4 * Copyright 2011, Franck Villaume - Capgemini
5 * Copyright 2012-2013,2017, Franck Villaume - TrivialDev
6 * Copyright 2013, Benoit Debaenst - TrivialDev
7 * Copyright 2014, Philipp Keidel - EDAG Engineering AG
9 * This file is part of FusionForge. FusionForge is free software;
10 * you can redistribute it and/or modify it under the terms of the
11 * GNU General Public License as published by the Free Software
12 * Foundation; either version 2 of the Licence, or (at your option)
15 * FusionForge is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License along
21 * with FusionForge; if not, write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 * main cronjob for scmhook plugin
29 require dirname(__FILE__).'/../../env.inc.php';
30 require_once $gfcommon.'include/pre.php';
31 require_once $gfcommon.'include/cron_utils.php';
33 // if you want debug output, uncomment the verbose variable.
39 $res = db_query_params('SELECT systask_id, group_id, user_name FROM systasks
40 JOIN users ON (systasks.user_id = users.user_id)
41 WHERE systasks.status=$1 AND systask_type=$2',
42 array('WIP', 'SCMHOOK_UPDATE'));
43 while ($task = db_fetch_array($res)) {
44 $group_id = $task['group_id'];
45 $user_name = $task['user_name'];
46 // Run as the requesting user to avoid symlinks attacks
47 if (util_sudo_effective_user($user_name, 'install_hooks', array($group_id)) == false) {
48 cron_debug("ERROR scmhook: couldn't run install_hooks as user $user_name");
52 $group = null; // pass info to library/ scripts
53 function install_hooks($params) {
54 global $group, $gfplugins;
56 $group_id = $params[0];
57 // get the list of project to be updated
58 $res = db_query_params('SELECT groups.group_id, groups.scm_box, plugin_scmhook.hooks, plugin_scmhook.scm_plugin, plugin_scmhook.repository_name
59 FROM groups, plugin_scmhook
60 WHERE groups.status = $1
61 AND plugin_scmhook.id_group = groups.group_id
62 AND plugin_scmhook.need_update = $2
63 AND groups.use_scm = $3
65 array('A', 1, 1, $group_id));
68 cron_debug("FATAL Database Query Failed: " . db_error());
71 while ($row = db_fetch_array($res)) {
72 $group_id = $row['group_id'];
73 $group = group_get_object($group_id);
75 // call the right cronjob in the library
76 $scmtype = $row['scm_plugin'];
79 cron_debug("INFO start updating hooks for project ".$group->getUnixName().", repository name: ".$row['repository_name']);
80 require_once $gfplugins.'scmhook/library/'.$scmtype.'/cronjobs/updateScmRepo.php';
81 $scmsvncronjob = new ScmSvnUpdateScmRepo();
83 $params['group_id'] = $group_id;
84 $params['hooksString'] = $row['hooks'];
85 $params['scm_root'] = forge_get_config('repos_path', 'scmsvn') . '/' . $group->getUnixName();
86 if ($scmsvncronjob->updateScmRepo($params)) {
87 $res_update = db_query_params('UPDATE plugin_scmhook set need_update = $1 where id_group = $2', array(0, $group_id));
95 cron_debug("INFO start updating hooks for project ".$group->getUnixName().", repository name: ".$row['repository_name']);
96 require_once $gfplugins.'scmhook/library/'.$scmtype.'/cronjobs/updateScmRepo.php';
97 $scmhgcronjob = new ScmHgUpdateScmRepo();
99 $params['group_id'] = $group_id;
100 $params['hooksString'] = $row['hooks'];
101 $params['scm_root'] = forge_get_config('repos_path', 'scmhg').'/'.$group->getUnixName().'/'.$row['repository_name'];
102 if ($scmhgcronjob->updateScmRepo($params)) {
103 $res_update = db_query_params('UPDATE plugin_scmhook set need_update = $1 where id_group = $2', array(0, $group_id));
105 $returnvalue = false;
111 cron_debug("INFO start updating hooks for project ".$group->getUnixName().", repository name: ".$row['repository_name']);
112 require_once $gfplugins.'scmhook/library/'.$scmtype.'/cronjobs/updateScmRepo.php';
113 $scmgitcronjob = new ScmGitUpdateScmRepo();
115 $params['group_id'] = $group_id;
116 $params['hooksString'] = $row['hooks'];
117 $params['scm_root'] = forge_get_config('repos_path', 'scmgit').'/'.$group->getUnixName().'/'.$row['repository_name'].'.git' ;
118 if ($scmgitcronjob->updateScmRepo($params)) {
119 $res_update = db_query_params('UPDATE plugin_scmhook set need_update = $1 where id_group = $2', array(0, $group_id));
121 $returnvalue = false;
127 cron_debug("INFO start updating hooks for project ".$group->getUnixName().", repository name: ".$row['repository_name']);
128 require_once $gfplugins.'scmhook/library/'.$scmtype.'/cronjobs/updateScmRepo.php';
129 $scmcvscronjob = new ScmCvsUpdateScmRepo();
131 $params['group_id'] = $group_id;
132 $params['hooksString'] = $row['hooks'];
133 $params['scm_root'] = forge_get_config('repos_path', 'scmcvs') . '/' . $group->getUnixName();
134 if ($scmcvscronjob->updateScmRepo($params)) {
135 $res = db_query_params('UPDATE plugin_scmhook set need_update = $1 where id_group = $2', array(0, $group_id));
137 $returnvalue = false;
144 cron_debug("WARNING No scm plugin found for this project ".$group->getUnixName()." or no cronjobs for this type");
145 $returnvalue = false;
150 cron_debug("INFO hooks updated for project ".$group->getUnixName());
152 cron_debug("ERROR Unable to update hooks for project ".$group->getUnixName());
157 cron_debug("INFO end of updateScmRepo main cronjob");