[evolvis-commits] r18166: [#2497] scmsvn-tweaks pending merges:↵ Thorsten Glaser 2012-03-12 merge git plugin improvements from 4.8 adjusted for new environment↵ Thorsten Glaser 2012-03-12 copied from 4.8↵ Thorsten Glaser 2012-03-12 avoid warnings when initialising a fresh group↵ Thorsten Glaser 2012-03-12 copy Evolvis 4.8 default mailing list configuration
mirabilos at evolvis.org
mirabilos at evolvis.org
Mon Mar 12 17:41:13 CET 2012
Author: mirabilos
Date: 2012-03-12 17:41:12 +0100 (Mon, 12 Mar 2012)
New Revision: 18166
Added:
trunk/gforge_base/evolvisforge-5.1/src/utils/scm-newsubrepo.php
Modified:
trunk/gforge_base/evolvisforge-5.1/src/common/include/SCMPlugin.class.php
trunk/gforge_base/evolvisforge-5.1/src/cronjobs/create_scm_repos.php
trunk/gforge_base/evolvisforge-5.1/src/deb-specific/create-mailing-lists.pl
trunk/gforge_base/evolvisforge-5.1/src/packaging/install/common
trunk/gforge_base/evolvisforge-5.1/src/plugins/scmgit/common/GitPlugin.class.php
trunk/gforge_base/evolvisforge-5.1/src/plugins/scmsvn/common/SVNPlugin.class.php
Log:
[#2497] scmsvn-tweaks pending merges:
Thorsten Glaser 2012-03-12 merge git plugin improvements from 4.8 adjusted for new environment
Thorsten Glaser 2012-03-12 copied from 4.8
Thorsten Glaser 2012-03-12 avoid warnings when initialising a fresh group
Thorsten Glaser 2012-03-12 copy Evolvis 4.8 default mailing list configuration
Modified: trunk/gforge_base/evolvisforge-5.1/src/common/include/SCMPlugin.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/common/include/SCMPlugin.class.php 2012-03-12 16:41:07 UTC (rev 18165)
+++ trunk/gforge_base/evolvisforge-5.1/src/common/include/SCMPlugin.class.php 2012-03-12 16:41:12 UTC (rev 18166)
@@ -43,6 +43,7 @@
# scm_gather_stats
# scm_browser_page
# scm_update_repolist
+ # scm_create_subrepo
}
function CallHook ($hookname, &$params) {
@@ -72,6 +73,10 @@
session_set_admin () ;
$this->createOrUpdateRepo ($params) ;
break;
+ case 'scm_create_subrepo': // Optional
+ session_set_admin () ;
+ $this->createOrUpdateSubRepo ($params) ;
+ break;
case 'scm_update_repolist':
session_set_admin () ;
$this->updateRepositoryList ($params) ;
Modified: trunk/gforge_base/evolvisforge-5.1/src/cronjobs/create_scm_repos.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/cronjobs/create_scm_repos.php 2012-03-12 16:41:07 UTC (rev 18165)
+++ trunk/gforge_base/evolvisforge-5.1/src/cronjobs/create_scm_repos.php 2012-03-12 16:41:12 UTC (rev 18166)
@@ -4,6 +4,8 @@
* FusionForge source control management
*
* Copyright 2009, Roland Mas
+ * Copyright © 2011
+ * Thorsten Glaser <t.glaser at tarent.de>
*
* This file is part of FusionForge. FusionForge is free software;
* you can redistribute it and/or modify it under the terms of the
@@ -46,6 +48,21 @@
plugin_hook ('scm_create_repo', $hook_params) ;
}
+$res = db_query_params('SELECT * FROM scm_subrepos', array());
+if (!$res) {
+ $this->setError('Unable to get list of projects using SCM: '.db_error());
+ return false;
+}
+
+while ($data = db_fetch_array($res)) {
+ $hook_params = array(
+ 'group_id' => $data['group_id'],
+ 'newrepo' => $data['newrepo'],
+ );
+ plugin_hook('scm_create_subrepo', $hook_params);
+ db_query_params('DELETE FROM scm_subrepos WHERE did=$1', array($data['did']));
+}
+
$hook_params = array () ;
plugin_hook ('scm_update_repolist', $hook_params) ;
Modified: trunk/gforge_base/evolvisforge-5.1/src/deb-specific/create-mailing-lists.pl
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/deb-specific/create-mailing-lists.pl 2012-03-12 16:41:07 UTC (rev 18165)
+++ trunk/gforge_base/evolvisforge-5.1/src/deb-specific/create-mailing-lists.pl 2012-03-12 16:41:12 UTC (rev 18166)
@@ -71,6 +71,17 @@
open CONFIG, ">>$tmp" ;
print CONFIG "description = \"$description\"\n" ;
print CONFIG "host_name = '$sys_lists_host'\n" ;
+ if ($listname =~ /-commits$/) {
+ # Set default maximum message size to unlimited
+ # for commit lists
+ print CONFIG "max_message_size = 0\n";
+ # Accept commits from svn from everyone by default
+ print CONFIG "accept_these_nonmembers = ['^.+\@$sys_default_domain']\n";
+ }
+ if ($listname =~ /-discuss$/) {
+ # Accept mails from Tasks and Tracker areas by default
+ print CONFIG "accept_these_nonmembers = ['^.+\@$sys_default_domain']\n";
+ }
print CONFIG "archive = True\n" ;
if (!$is_public) {
print CONFIG "archive_private = True\n" ;
Modified: trunk/gforge_base/evolvisforge-5.1/src/packaging/install/common
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/packaging/install/common 2012-03-12 16:41:07 UTC (rev 18165)
+++ trunk/gforge_base/evolvisforge-5.1/src/packaging/install/common 2012-03-12 16:41:12 UTC (rev 18166)
@@ -32,3 +32,4 @@
cronjobs/generate_scm_snapshots.php usr/share/@OLDPACKAGE@/cronjobs/
locales/* usr/share/locale/
utils/user-del.php usr/share/@OLDPACKAGE@/bin/
+utils/scm-newsubrepo.php usr/share/@OLDPACKAGE@/bin/
Modified: trunk/gforge_base/evolvisforge-5.1/src/plugins/scmgit/common/GitPlugin.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/plugins/scmgit/common/GitPlugin.class.php 2012-03-12 16:41:07 UTC (rev 18165)
+++ trunk/gforge_base/evolvisforge-5.1/src/plugins/scmgit/common/GitPlugin.class.php 2012-03-12 16:41:12 UTC (rev 18166)
@@ -3,6 +3,8 @@
*
* Copyright 2009, Roland Mas
* Copyright 2009, Mehdi Dogguy <mehdi at debian.org>
+ * Copyright © 2011, 2012
+ * Thorsten Glaser <t.glaser at tarent.de>
*
* This file is part of FusionForge.
*
@@ -33,10 +35,29 @@
$this->hooks[] = 'scm_update_repolist' ;
$this->hooks[] = 'scm_generate_snapshots' ;
$this->hooks[] = 'scm_gather_stats' ;
+ $this->hooks[] = 'scm_create_subrepo' ;
+ $this->hooks[] = "outermenu" ; // To put into the top tabs
$this->register () ;
}
+ function CallHook($hookname, $params) {
+ switch ($hookname) {
+ case 'outermenu':
+ if (!isset($params['TOOLTIPS'])) {
+ $tooltips_array = array();
+ $params['TOOLTIPS'] = &$tooltips_array;
+ }
+ $params['TITLES'][] = _('gitweb') /*$this->text*/;
+ $params['DIRS'][] = '/plugins/scmgit/cgi-bin/gitweb.cgi';
+ $params['TOOLTIPS'][count($params['TITLES']) - 1] =
+ _('Display a list of all subrepositories of all projects using the git SCM');
+ break;
+ default:
+ return parent::CallHook($hookname, $params);
+ }
+ }
+
function getDefaultServer() {
return forge_get_config('default_server', 'scmgit') ;
}
@@ -212,7 +233,7 @@
$b .= '</p>';
$b .= '<p>[' ;
$b .= util_make_link ("/scm/browser.php?group_id=".$project->getID(),
- _('Browse Git Repository')
+ _('Browse primary Git Repository')
) ;
$b .= ']</p>' ;
return $b ;
@@ -264,13 +285,19 @@
}
function createOrUpdateRepo ($params) {
+ $params['newrepo'] = false;
+ /* invert logic, subrepo returns false on success */
+ return !$this->createOrUpdateSubRepo($params);
+ }
+
+ function createOrUpdateSubRepo ($params) {
$project = $this->checkParams ($params) ;
if (!$project) {
- return false ;
+ return true;
}
if (! $project->usesPlugin ($this->name)) {
- return false;
+ return true;
}
$project_name = $project->getUnixName() ;
@@ -278,7 +305,20 @@
$unix_group = 'scm_' . $project_name ;
system ("mkdir -p $root") ;
- $main_repo = $root . '/' . $project_name . '.git' ;
+ $sys_name = forge_get_config('forge_name');
+ if ($params['newrepo'] === false) {
+ /* create main repository */
+ $repo_name = $project_name;
+ $repo_desc = "Main git repository" .
+ " for $sys_name project $project_name";
+ } else {
+ /* create subrepository */
+ $repo_name = $params['newrepo'];
+ $repo_desc = "Supplemental git repository $repo_name" .
+ " for $sys_name project $project_name";
+ }
+ $main_repo = $root . '/' . $repo_name . '.git';
+ system("mkdir -p $main_repo");
if (!is_file ("$main_repo/HEAD") && !is_dir("$main_repo/objects") && !is_dir("$main_repo/refs")) {
system ("GIT_DIR=\"$main_repo\" git init --bare --shared=group") ;
system ("GIT_DIR=\"$main_repo\" git update-server-info") ;
@@ -294,9 +334,13 @@
if (is_file ("$main_repo/hooks/post-update")) {
system ("chmod +x $main_repo/hooks/post-update") ;
}
- system ("echo \"Git repository for $project_name\" > $main_repo/description") ;
+ system("ln -sf /etc/gforge/plugins/scmgit/post-receive-email.sh $main_repo/hooks/post-receive");
+ system ("echo \"$repo_desc\" >$repo/description") ;
system ("find $main_repo -type d | xargs chmod g+s") ;
}
+
+ system("echo $project_name >$root/ffgroup.nfo");
+
system ("chgrp -R $unix_group $root") ;
system ("chmod g+s $root") ;
if ($project->enableAnonSCM()) {
@@ -342,6 +386,9 @@
system ("chmod -R g+rX-w,o-rwx $root/users") ;
}
}
+
+ /* success */
+ return false;
}
function updateRepositoryList ($params) {
@@ -582,6 +629,60 @@
unlink ("$tmp/tarball") ;
system ("rm -rf $tmp") ;
}
+
+ function printAdminPage($params) {
+ $rv = parent::printAdminPage($params);
+ $group = $this->checkParams($params);
+ if ($group && $group->usesPlugin($this->name)) {
+ print "\n<div style=\"border:1px solid black; margin:12px; padding:12px;\">\n";
+ print '<input type="checkbox" name="scm_git_addsubrepo" value="1" /> ';
+ print _('Create new subrepository with name:')."\n";
+ print '<input type="text" size="16" maxlength="15" ' .
+ 'name="scm_git_addsubreponame" value="" />';
+ print "\n</div>\n";
+ }
+ return $rv;
+ }
+
+ function adminUpdate($params) {
+ $rv = parent::adminUpdate($params);
+ $group = $this->checkParams($params);
+ if ($group && $group->usesPlugin($this->name) &&
+ util_ifsetor($params['scm_git_addsubrepo']) == 1 &&
+ ($p_reponame = util_ifsetor($params['scm_git_addsubreponame']))) {
+ /* copied from gforge/utils/scm-newsubrepo.php */
+
+ /* ltrim and rtrim, strip leading/trailing slash and ".git" */
+ $p_reponame = ltrim(preg_replace('#(/|.git)*$#', '', trim($p_reponame)), "/");
+
+ $e = false;
+ foreach (explode("/", $p_reponame) as $p_reponamepart) {
+ if (!account_groupnamevalid($p_reponamepart)) {
+ $e = "Invalid subrepo name! " . $GLOBALS['register_error'] . "\n";
+ break;
+ }
+ }
+
+ if (!$e) {
+ $res = db_query_params('INSERT INTO scm_subrepos
+ (group_id, newrepo)
+ VALUES ($1, $2)',
+ array($group->getID(), $p_reponame));
+ if (!$res || db_affected_rows($res) < 1) {
+ $e = "Could not queue for creation! " . db_error();
+ }
+ }
+
+ if (!$e) {
+ printf('<p>' . _('Subrepository %s scheduled for creation.') .
+ "</p>\n", $p_reponame);
+ } else {
+ print '<p class="submitErrorInformation">' .
+ htmlspecialchars($e) . "</p>\n";
+ }
+ }
+ return $rv;
+ }
}
// Local Variables:
Modified: trunk/gforge_base/evolvisforge-5.1/src/plugins/scmsvn/common/SVNPlugin.class.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/plugins/scmsvn/common/SVNPlugin.class.php 2012-03-12 16:41:07 UTC (rev 18165)
+++ trunk/gforge_base/evolvisforge-5.1/src/plugins/scmsvn/common/SVNPlugin.class.php 2012-03-12 16:41:12 UTC (rev 18166)
@@ -271,10 +271,15 @@
foreach ($check_hooks as $hook) {
$hookfile = $repo.'/hooks/'.$hook;
$result = array();
- $code = 0;
- exec ("grep -q '#FFHOOKVER=1$' $hookfile",$result,$code);
+ if (file_exists($hookfile)) {
+ $code = 0;
+ exec("grep -q '#FFHOOKVER=1$' $hookfile",
+ $result, $code);
+ } else {
+ $code = 1;
+ }
if ($code != 0) {
- unlink($hookfile);
+ @unlink($hookfile);
system("cp /etc/gforge/plugins/scmsvn/hooks/runhooks $hookfile");
chown($hookfile, "scm-gforge");
chgrp($hookfile, $unix_group);
Added: trunk/gforge_base/evolvisforge-5.1/src/utils/scm-newsubrepo.php
===================================================================
--- trunk/gforge_base/evolvisforge-5.1/src/utils/scm-newsubrepo.php (rev 0)
+++ trunk/gforge_base/evolvisforge-5.1/src/utils/scm-newsubrepo.php 2012-03-12 16:41:12 UTC (rev 18166)
@@ -0,0 +1,89 @@
+#!/usr/bin/php5 -f
+<?php
+/*-
+ * Create new SCM subrepository for an existing group.
+ *
+ * Copyright © 2011
+ * Thorsten Glaser <t.glaser at tarent.de>
+ * Copyright © 2010
+ * Roland Mas
+ * All rights reserved.
+ *
+ * This file is part of FusionForge. FusionForge is free software;
+ * you can redistribute it and/or modify it under the terms of the
+ * GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the Licence, or (at your option)
+ * any later version.
+ *
+ * FusionForge is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with FusionForge; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *-
+ * Create new SCM subrepository for an existing group, if the SCM
+ * supports this (svn doesn’t but git does).
+ */
+
+function usage($rc=1) {
+ echo "Usage: .../scm-newsubrepo.php groupname newreponame\n";
+ exit($rc);
+}
+
+if (count($argv) != 3) {
+ usage();
+}
+$argv0 = array_shift($argv);
+$p_groupname = array_shift($argv);
+$p_reponame = array_shift($argv);
+
+require_once(dirname(__FILE__).'/../common/include/env.inc.php');
+require_once $gfwww.'include/squal_pre.php';
+require_once $gfcommon.'include/cron_utils.php';
+
+// Plugins subsystem
+require_once $gfcommon.'include/Plugin.class.php';
+require_once $gfcommon.'include/PluginManager.class.php';
+
+// SCM-specific plugins subsystem
+require_once $gfcommon.'include/SCMPlugin.class.php';
+
+// Fake admin user login
+session_set_admin();
+
+setup_plugin_manager();
+
+$group = group_get_object_by_name($p_groupname);
+if (!$group || $group->isError()) {
+ echo "Wrong group! ";
+ if ($group) {
+ echo $group->getErrorMessage();
+ }
+ echo "\n";
+ usage();
+}
+
+/* ltrim and rtrim, strip leading/trailing slash and ".git" */
+$p_reponame = ltrim(preg_replace('#(/|.git)*$#', '', trim($p_reponame)), "/");
+
+foreach (explode("/", $p_reponame) as $p_reponamepart) {
+ if (!account_groupnamevalid($p_reponamepart)) {
+ echo "Invalid subrepo name! " . $GLOBALS['register_error'] . "\n";
+ usage();
+ }
+}
+
+$hook_params = array(
+ 'group_id' => $group->getID(),
+ 'newrepo' => $p_reponame,
+ );
+if (plugin_hook('scm_create_subrepo', $hook_params)) {
+ echo "Failed! Maybe the plugin doesn't support this?\n";
+ usage();
+}
+
+$hook_params = array();
+plugin_hook('scm_update_repolist', $hook_params);
Property changes on: trunk/gforge_base/evolvisforge-5.1/src/utils/scm-newsubrepo.php
___________________________________________________________________
Added: svn:executable
+ *
More information about the evolvis-commits
mailing list