fusionforge (5.1.1-2) deb-specific/register-plugin

Summary

 deb-specific/register-plugin |  100 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)

    
download this patch

Patch contents

--- fusionforge-5.1.1.orig/deb-specific/register-plugin
+++ fusionforge-5.1.1/deb-specific/register-plugin
@@ -0,0 +1,100 @@
+#!/usr/bin/perl -w
+#
+# Debian-specific script to register a new plugin into the SF database
+
+use DBI ;
+use strict ;
+use diagnostics ;
+
+use vars qw/$dbh @reqlist $plugin_name $plugin_desc $plugin_id/ ;
+
+sub debug ( $ ) ;
+
+require ("/usr/share/gforge/lib/include.pl") ; # Include all the predefined functions
+
+&db_connect ;
+
+if ($#ARGV < 1) {
+    debug "Usage: register-plugin <plugin name> <plugin description>" ;
+    exit 1 ;
+}
+
+$plugin_name = $ARGV [0] ;
+$plugin_desc = $ARGV [1] ;
+
+if ($plugin_name =~ /[^a-z]/) {
+    debug "Error: the plugin name must contain only [a-z] characters" ;
+    exit 1 ;
+}
+
+$dbh->{AutoCommit} = 0;
+$dbh->{RaiseError} = 1;
+eval {
+    my ($query, $sth, @array, $version, $action) ;
+
+    $plugin_desc = $dbh->quote ($plugin_desc) ;
+
+    $query = "SELECT count(*) FROM plugins WHERE plugin_name = '$plugin_name'" ;
+    $sth = $dbh->prepare ($query) ;
+    $sth->execute () ;
+    @array = $sth->fetchrow_array () ;
+    $sth->finish () ;
+
+    if ($array[0] == 1) {
+	$query = "SELECT plugin_id FROM plugins WHERE plugin_name = '$plugin_name'" ;
+	$sth = $dbh->prepare ($query) ;
+	$sth->execute () ;
+	@array = $sth->fetchrow_array () ;
+	$sth->finish () ;
+
+	$plugin_id = $array[0] ;
+	debug "Plugin '$plugin_name' already registered, skipping." ;
+	print "$plugin_id\n" ;
+    } else {
+	$query = "INSERT INTO plugins (plugin_name, plugin_desc) VALUES ('$plugin_name', $plugin_desc)" ;
+
+	debug $query ;
+
+	$sth = $dbh->prepare ($query) ;
+	$sth->execute () ;
+	$sth->finish () ;
+
+	$query = "SELECT plugin_id FROM plugins WHERE plugin_name = '$plugin_name'" ;
+	$sth = $dbh->prepare ($query) ;
+	$sth->execute () ;
+	@array = $sth->fetchrow_array () ;
+	$sth->finish () ;
+
+	$plugin_id = $array[0] ;
+	debug "Plugin '$plugin_name' registered with id $plugin_id." ;
+	print "$plugin_id\n" ;
+
+	# debug "Committing." ;
+	$dbh->commit () ;
+    }
+
+    # There should be a commit at the end of every block above.
+    # If there is not, then it might be symptomatic of a problem.
+    # For safety, we roll back.
+    $dbh->rollback ();
+};
+
+if ($@) {
+    warn "Transaction aborted because $@" ;
+    debug "Transaction aborted because $@" ;
+    $dbh->rollback ;
+    debug "Please report this bug on the Debian bug-tracking system." ;
+    debug "Please include the previous messages as well to help debugging." ;
+    debug "You should not worry too much about this," ;
+    debug "your DB is still in a consistent state and should be usable." ;
+    exit 1 ;
+}
+
+$dbh->rollback ;
+$dbh->disconnect ;
+
+sub debug ( $ ) {
+    my $v = shift ;
+    chomp $v ;
+    print STDERR "$v\n" ;
+}