[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