[Evolvis-commits] r11: gforge-plugin-scmsvn added

sfromm at evolvis.org sfromm at evolvis.org
Wed Feb 13 14:20:42 CET 2008


Author: sfromm
Date: 2008-02-13 13:20:42 +0000 (Wed, 13 Feb 2008)
New Revision: 11

Added:
   trunk/gforge_base/gforge_plugins/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/README
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-delete.pl
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-upgrade.pl
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-svn.sh
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-viewcvs.sh
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/snapshots.sh
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn-create.php
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_dump.pl
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_update.pl
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cgi-bin/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cgi-bin/viewcvs.cgi
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/svn-stats.php
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/tarballs.php
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/README.Debian
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/changelog
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/control
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/copyright
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/cron.d
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/dirs
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/00list
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/disable-dav.dpatch
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/postinst
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/prerm
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/rules
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/11scm60svn
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/12scm60svn.ssl
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.php
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.pl
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/annotate.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/diff.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/dir_alternate.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/directory.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/error.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/graph.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch_form.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/diff_form.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_footer.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_header.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/footer.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/header.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/paging.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/sort.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/view_tag.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log_table.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/markup.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_form.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_results.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/revision.ezt
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/SVNPlugin.class
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Base.tab
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/French.tab
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Korean.tab
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/scmsvn-init.php
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/post-commit.evolvis
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/scmsvn-init.sql
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/styles.css
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs.php
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/contributing.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_dirview.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_log.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_logtable.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_query.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_rootview.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/back.gif
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/forward.gif
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/back.gif
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/debian.jpg
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/dir.gif
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/text.gif
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/chalk.jpg
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/cvsgraph_16x16.png
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/cvsgraph_32x32.png
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/down.png
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/logo.png
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/up.png
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/index.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/license-1.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/styles.css
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/upgrading.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/who.html
   trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs_utils.php
Log:
gforge-plugin-scmsvn added

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/README
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/README	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/README	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,20 @@
+gforge-plugin-scmsvn
+--------------------
+
+This is the Subversion plugin for GForge. It creates Subversion
+repositories and provides some functionality to manage them.
+
+Decompress the plugin tarball and place it into your plugins directory.
+Usually, this would be in a location like /opt/gforge/gforge/plugins/scmsvn
+Whereever you place it, be sure your /etc/gforge/local.inc file has
+$sys_plugins_path pointing to the plugins directory.
+
+The scmsvn/etc/plugins/scmsvn/config.php should be copied and edited
+to
+
+        /etc/gforge/plugins/scmsvn/config.php
+
+The 'Site Admin' tab on the GForge web interface now has a 'Plugin Manager'
+page where you can activate plugins on a sitewide basis. Be sure to do that
+if you want this plugin to be available to projects.
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-delete.pl
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-delete.pl	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-delete.pl	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,112 @@
+#!/usr/bin/perl -w
+#
+# $Id: db-delete.pl,v 1.1.1.1 2004/09/23 21:08:18 lo-lan-do Exp $
+#
+# Debian-specific script to delete plugin-specific tables
+# Roland Mas <lolando at debian.org>
+
+use strict ;
+use diagnostics ;
+
+use DBI ;
+use MIME::Base64 ;
+use HTML::Entities ;
+
+use vars qw/$dbh @reqlist $query/ ;
+use vars qw/$sys_default_domain $sys_cvs_host $sys_download_host
+    $sys_shell_host $sys_users_host $sys_docs_host $sys_lists_host
+    $sys_dns1_host $sys_dns2_host $FTPINCOMING_DIR $FTPFILES_DIR
+    $sys_urlroot $sf_cache_dir $sys_name $sys_themeroot
+    $sys_news_group $sys_dbhost $sys_dbname $sys_dbuser $sys_dbpasswd
+    $sys_ldap_base_dn $sys_ldap_host $admin_login $admin_password
+    $server_admin $domain_name $newsadmin_groupid $statsadmin_groupid
+    $skill_list/ ;
+use vars qw/$pluginname $pluginid/ ;
+
+require ("/usr/lib/gforge/lib/include.pl") ; # Include a few predefined functions 
+require ("/usr/lib/gforge/lib/sqlparser.pm") ; # Our magic SQL parser
+require ("/usr/lib/gforge/lib/sqlhelper.pm") ; # Our SQL functions
+
+&debug ("You'll see some debugging info during this installation.") ;
+&debug ("Do not worry unless told otherwise.") ;
+
+&db_connect ;
+
+# &debug ("Connected to the database OK.") ;
+
+$pluginname = "scmsvn" ;
+$pluginid = -1 ;
+
+$dbh->{AutoCommit} = 0;
+$dbh->{RaiseError} = 1;
+eval {
+    my ($sth, @array, $version, $action, $path, $target, $rname) ;
+
+    $pluginid = &get_plugin_id ($dbh, $pluginname) ;
+    &remove_plugin_from_groups ($dbh, $pluginid) ;
+    &remove_plugin_from_users ($dbh, $pluginid) ;
+
+    my $pattern = "plugin_" . $pluginname . '_%' ;
+
+    $query = "SELECT relname FROM pg_class WHERE relname LIKE '$pattern' AND relkind='v'" ;
+    $sth = $dbh->prepare ($query) ;
+    $sth->execute () ;
+    while (@array = $sth->fetchrow_array ()) {
+	$rname = $array [0] ;
+	&drop_view_if_exists ($dbh, $rname) ;
+    }
+    $sth->finish () ;
+
+    $query = "SELECT relname FROM pg_class WHERE relname LIKE '$pattern' AND relkind='r'" ;
+    $sth = $dbh->prepare ($query) ;
+    $sth->execute () ;
+    while (@array = $sth->fetchrow_array ()) {
+	$rname = $array [0] ;
+	&drop_table_if_exists ($dbh, $rname) ;
+    }
+    $sth->finish () ;
+
+    $query = "SELECT relname FROM pg_class WHERE relname LIKE '$pattern' AND relkind='i'" ;
+    $sth = $dbh->prepare ($query) ;
+    $sth->execute () ;
+    while (@array = $sth->fetchrow_array ()) {
+	$rname = $array [0] ;
+	&drop_index_if_exists ($dbh, $rname) ;
+    }
+    $sth->finish () ;
+
+    $query = "SELECT relname FROM pg_class WHERE relname LIKE '$pattern' AND relkind='S'" ;
+    $sth = $dbh->prepare ($query) ;
+    $sth->execute () ;
+    while (@array = $sth->fetchrow_array ()) {
+	$rname = $array [0] ;
+	&drop_sequence_if_exists ($dbh, $rname) ;
+    }
+    $sth->finish () ;
+
+    $dbh->commit ();
+
+
+    &debug ("It seems your database deletion went well and smoothly.  That's cool.") ;
+    &debug ("Please enjoy using Debian GForge.") ;
+
+    # 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 $@") ;
+    &debug ("Last SQL query was:\n$query\n(end of query)") ;
+    $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 ;


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-delete.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-upgrade.pl
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-upgrade.pl	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-upgrade.pl	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,92 @@
+#!/usr/bin/perl -w
+#
+# $Id: db-upgrade.pl,v 1.2 2004/12/12 23:50:46 cbayle Exp $
+#
+# Debian-specific script to upgrade the database between releases
+# Roland Mas <lolando at debian.org>
+
+use strict ;
+use diagnostics ;
+
+use DBI ;
+use MIME::Base64 ;
+use HTML::Entities ;
+
+use vars qw/$dbh @reqlist $query/ ;
+use vars qw/$sys_default_domain $sys_cvs_host $sys_download_host
+    $sys_shell_host $sys_users_host $sys_docs_host $sys_lists_host
+    $sys_dns1_host $sys_dns2_host $FTPINCOMING_DIR $FTPFILES_DIR
+    $sys_urlroot $sf_cache_dir $sys_name $sys_themeroot
+    $sys_news_group $sys_dbhost $sys_dbname $sys_dbuser $sys_dbpasswd
+    $sys_ldap_base_dn $sys_ldap_host $admin_login $admin_password
+    $server_admin $domain_name $newsadmin_groupid $statsadmin_groupid
+    $skill_list/ ;
+use vars qw/$pluginname/ ;
+
+require ("/usr/lib/gforge/lib/include.pl") ; # Include a few predefined functions 
+require ("/usr/lib/gforge/lib/sqlparser.pm") ; # Our magic SQL parser
+require ("/usr/lib/gforge/lib/sqlhelper.pm") ; # Our SQL functions
+
+&debug ("You'll see some debugging info during this installation.") ;
+&debug ("Do not worry unless told otherwise.") ;
+
+&db_connect ;
+
+# &debug ("Connected to the database OK.") ;
+
+$pluginname = "scmsvn" ;
+
+$dbh->{AutoCommit} = 0;
+$dbh->{RaiseError} = 1;
+eval {
+    my ($sth, @array, $version, $path, $target) ;
+
+    &create_plugin_metadata_table ($dbh, $pluginname, "0") ;
+    
+    $version = &get_plugin_db_version ($dbh, $pluginname) ;
+    $target = "0.1" ;
+    if (&is_lesser ($version, $target)) {
+#	my @filelist = ( "/usr/lib/gforge/plugins/$pluginname/lib/$pluginname-init.sql" ) ;
+#	
+#	foreach my $file (@filelist) {
+#	    &debug ("Processing $file") ;
+#	    @reqlist = @{ &parse_sql_file ($file) } ;
+#	    
+#	    foreach my $s (@reqlist) {
+#		$query = $s ;
+#		# &debug ($query) ;
+#		$sth = $dbh->prepare ($query) ;
+#		$sth->execute () ;
+#		$sth->finish () ;
+#	    }
+#	}
+#	@reqlist = () ;
+	
+	&update_plugin_db_version ($dbh, $pluginname, $target) ;
+	&debug ("Committing.") ;
+	$dbh->commit () ;
+    }
+    
+    &debug ("It seems your database install/upgrade went well and smoothly.  That's cool.") ;
+    &debug ("Please enjoy using Debian GForge.") ;
+
+    # 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 $@") ;
+    &debug ("Last SQL query was:\n$query\n(end of query)") ;
+    $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 ;


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/db-upgrade.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-svn.sh
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-svn.sh	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-svn.sh	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,42 @@
+#! /bin/sh
+# 
+# $Id: install-svn.sh 75 2007-10-15 15:23:10Z mirabilos $
+#
+# Configure Subversion for Sourceforge
+# Roland Mas, Gforge
+
+set -e
+
+if [ $(id -u) != 0 ] ; then
+    echo "You must be root to run this, please enter passwd"
+    exec su -c "$0 $1"
+fi
+
+gforge_chroot=$(grep ^gforge_chroot= /etc/gforge/gforge.conf | cut -d= -f2-)
+
+case "$1" in
+    configure)
+	if [ ! -x /usr/local/share/gforge/commit-email.pl ]; then
+		mkdir -p /usr/local/share/gforge
+		cp /usr/share/subversion/hook-scripts/commit-email.pl \
+		    /usr/local/share/gforge/commit-email.pl
+		chown 0:0 /usr/local/share/gforge/commit-email.pl
+		chmod 0755 /usr/local/share/gforge/commit-email.pl
+	fi
+        echo "Modifying inetd for Subversion server"
+        # First, dedupe the commented lines
+        update-inetd --remove  "svnserve stream tcp nowait.400 gforge_scm /usr/bin/svnserve svnserve -i -r $gforge_chroot" || true
+        update-inetd --remove  "svn stream tcp nowait.400 scm-gforge /usr/bin/svnserve svnserve -i -r $gforge_chroot" || true
+        update-inetd --add  "svn stream tcp nowait.400 scm-gforge /usr/bin/svnserve svnserve -i -r $gforge_chroot"
+	/usr/lib/gforge/plugins/scmsvn/bin/install-viewcvs.sh
+	;;
+
+    purge)
+        update-inetd --remove  "svnserve stream tcp nowait.400 gforge_scm /usr/bin/svnserve svnserve -i -r $gforge_chroot"
+        update-inetd --remove  "svn stream tcp nowait.400 scm-gforge /usr/bin/svnserve svnserve -i -r $gforge_chroot"
+	;;
+
+    *)
+	echo "Usage: $0 {configure|purge}"
+	exit 1
+esac


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-svn.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-viewcvs.sh
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-viewcvs.sh	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-viewcvs.sh	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,46 @@
+#! /bin/sh
+
+# Create ViewCVS config for GForge from the own ViewCVS conf file.
+# Should be launched each time you change the ViewCVS conf is modified.
+
+server_admin=$(grep ^server_admin= /etc/gforge/gforge.conf | cut -d= -f2-)
+gforge_chroot=$(grep ^gforge_chroot= /etc/gforge/gforge.conf | cut -d= -f2-)
+svndir=$(grep ^svndir= /etc/gforge/gforge.conf | cut -d= -f2-)
+cvsdir=$(grep ^cvsdir= /etc/gforge/gforge.conf | cut -d= -f2-)
+
+python <<EOF
+import sys
+import os
+import string
+import ConfigParser
+r = ConfigParser.RawConfigParser ()
+r.read ("/etc/viewcvs/viewcvs.conf")
+r.set ("general","svn_roots","")
+r.set ("general","cvs_roots","")
+r.set ("general","root_parents","$gforge_chroot/$svndir : svn")
+# uncomment the next line if you want to use ViewCVS to browse CVS repositories
+#r.set ("general","root_parents","$gforge_chroot/$svndir : svn, $gforge_chroot/$cvsdir : cvs")
+r.set ("general","address","<a href=\"mailto:$server_admin\">CVS/SVN Admin</a>");
+r.set ("general","default_root", "")
+r.set ("templates","query","/etc/gforge/plugins/scmsvn/viewcvs/templates/query.ezt")
+r.set ("templates","diff","/etc/gforge/plugins/scmsvn/viewcvs/templates/diff.ezt")
+r.set ("templates","graph","/etc/gforge/plugins/scmsvn/viewcvs/templates/graph.ezt")
+r.set ("templates","annotate","/etc/gforge/plugins/scmsvn/viewcvs/templates/annotate.ezt")
+r.set ("templates","markup","/etc/gforge/plugins/scmsvn/viewcvs/templates/markup.ezt")
+r.set ("templates","revision","/etc/gforge/plugins/scmsvn/viewcvs/templates/revision.ezt")
+r.set ("templates","query_form","/etc/gforge/plugins/scmsvn/viewcvs/templates/query_form.ezt")
+r.set ("templates","query_results","/etc/gforge/plugins/scmsvn/viewcvs/templates/query_results.ezt")
+r.set ("templates","error","/etc/gforge/plugins/scmsvn/viewcvs/templates/error.ezt")
+r.set ("templates","directory","/etc/gforge/plugins/scmsvn/viewcvs/templates/directory.ezt")
+r.set ("templates","log","/etc/gforge/plugins/scmsvn/viewcvs/templates/log_table.ezt")
+r.set ("options", "generate_etags", 0)
+r.set ("options","docroot","/plugins/scmsvn/viewcvs");
+r.set ("options","icons","/plugins/scmsvn/viewcvs/icons");
+r.write (open ("/var/lib/gforge/etc/viewcvs.conf", "w"))
+EOF
+
+sed 's,pathname = CONF_PATHNAME .*,pathname = "/var/lib/gforge/etc/viewcvs.conf",' \
+    /usr/share/python-support/viewcvs/viewcvs.py >/var/lib/gforge/etc/viewcvs.py
+
+echo "Created ViewCVS conf for GForge - make sure to rerun $0 \
+each time you change the ViewCVS conf"


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/install-viewcvs.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/snapshots.sh
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/snapshots.sh	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/snapshots.sh	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,49 @@
+#!/bin/mksh
+#
+# Generate SVN repositories snapshots.
+
+export LC_ALL=en_US.UTF-8
+unset LANGUAGE
+
+#set -e
+#set -x
+
+if [  $(id -u) != 0 ] ; then
+    echo "You must be root to run this, please enter passwd"
+    exec su -c "$0 $1"
+fi
+
+SVNROOT=/var/lib/gforge/chroot/svnroot
+SCMSNAPSHOTSDIR=/var/lib/gforge/scmsnapshots
+TMPDIR=/tmp
+
+case "$1" in
+    generate)
+	# Create temporary dir
+	work_dir=$TMPDIR/gforge-plugin-scnsvn.$$
+	trap "rm -rf $work_dir" ERR EXIT
+
+        today=`date +%Y-%m-%d`
+	cd $SVNROOT
+	for dir in *; do
+	    [[ -e $SVNROOT/$dir ]] || continue
+            # Make tgz archive
+	    mkdir -p $work_dir/$dir-scm-$today
+	    cd $work_dir
+	    svn checkout -q file://$SVNROOT/$dir $dir-scm-$today
+            tar czf $dir-scm-latest.tar.gz $dir-scm-$today
+            mv $dir-scm-latest.tar.gz $SCMSNAPSHOTSDIR
+        done
+        ;;
+
+    update)
+        ;;
+
+    purge)
+        ;;
+
+    *)
+        echo "Usage: $0 {generate}"
+        exit 1
+        ;;
+esac


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/snapshots.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn-create.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn-create.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn-create.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,144 @@
+#! /usr/bin/php4 -f
+<?php
+/**
+ *	This file will create blank SVN repositories for the SVN-over-ssh 
+ *  authentication method.
+ *
+ * Copyright 2003 (c) GForge, LLC
+ *
+ * @version   $Id: svn-create.php,v 1.3 2005/04/19 10:30:11 mpeltier Exp $
+ *
+ * This file is part of GForge.
+ *
+ * GForge 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 License, or
+ * (at your option) any later version.
+ *
+ * GForge 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 GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  US
+ */
+
+require ('squal_pre.php');
+require ('common/include/cron_utils.php');
+
+//	/path/to/svn/bin/
+$svn_path='/usr/bin';
+
+//	Where is the SVN repository?
+$svn='/var/svn';
+
+// Whether to have all projects in a single repository
+$one_repository = false;
+
+//if everything is in one repository, we need a working checkout to use
+$repos_co = '/var/svn-co';
+
+//type of repository, whether filepassthru or bdb
+//use fsfs to be able to use ViewCVS
+$repos_type = ' --fs-type fsfs ';
+//$repos_type = '';
+
+/*
+	This script create the gforge dav/svn/docman repositories
+*/
+
+$err .= "Creating Groups at ". $svn."\n";
+
+$res = db_query("SELECT is_public,enable_anonscm,unix_group_name 
+	FROM groups, plugins, group_plugin 
+	WHERE groups.status != 'P' 
+	AND groups.group_id=group_plugin.group_id
+	AND group_plugin.plugin_id=plugins.plugin_id
+	AND plugins.plugin_name='scmsvn'");
+
+if (!$res) {
+	$err .=  "Error! Database Query Failed: ".db_error();
+	echo $err;
+	exit;
+}
+
+//
+//	If using a single large repository, create the checkout if necessary
+//
+if ($one_repository && !is_dir($repos_co)) {
+	$err .= "Error! Checkout Repository Does Not Exist!";
+	echo $err;
+	exit;
+} elseif (!is_dir($svn)) {
+	passthru ("mkdir $svn");
+}
+
+while ( $row =& db_fetch_array($res) ) {
+	if ($one_repository) {
+		passthru ("[ ! -d $repos_co/".$row["unix_group_name"]." ] && mkdir -p $repos_co/".$row["unix_group_name"]."/ && $svn_path/svn add $repos_co/".$row["unix_group_name"]);
+	} else {
+		passthru ("[ ! -d $svn/".$row["unix_group_name"]." ] &&  $svn_path/svnadmin create $repos_type $svn/".$row["unix_group_name"]);
+		svn_hooks("$svn/".$row["unix_group_name"]);
+		addsvnmail("$svn/".$row["unix_group_name"],$row["unix_group_name"]);
+		passthru("chown nobody:".$row["unix_group_name"]." -R $svn/".$row["unix_group_name"]."/");
+	}
+}
+
+/**
+* addsvnmail($filePath,$unix_group_name)
+* This function add the commit-email.pl into post-commit
+* The commit-email.pl must be in same directory of this script
+* Copyright 2004 (c) GForge
+* @autor Luis Alberto Hurtado Alvarado <luis at gforgegroup.com>
+* @param $filePath The path to svn repository
+* @param $unix_group_name The project name.
+*/
+function addsvnmail($filePath,$unix_group_name) {
+	global $sys_lists_host;
+	$pathsvnmail = dirname($_SERVER['_']).'/commit-email.pl '.' "$REPOS" '.' "$REV" '.$unix_group_name.'-commits@'.$sys_lists_host;
+	writeFile($filePath.'/hooks/post-commit',$pathsvnmail);
+}
+
+/**
+* svn_hooks($filePath)
+* This function create the post-commit file in svn hooks
+* Copyright 2004 (c) GForge
+* @autor Luis Alberto Hurtado Alvarado <luis at gforgegroup.com>
+* @param $filePath The path to svn repository
+*/
+function svn_hooks($filePath) {
+	system ("cp $filePath/hooks/post-commit.tmpl $filePath/hooks/post-commit");
+	system("chmod +x ".$filePath."/hooks/post-commit");
+}
+
+/**
+* writeFile($filePath, $content)
+* This function add the mail
+* Copyright 2004 (c) GForge
+* @autor Luis Alberto Hurtado Alvarado <luis at gforgegroup.com>
+* @param $filePath The path to svn repository
+* @param $content The mail
+*/
+function writeFile($filePath, $content) {
+	$file = fopen($filePath, 'a');
+	flock($file, LOCK_EX);
+	ftruncate($file, 0);
+	rewind($file);
+	if(!empty($content)) {
+		fwrite($file, '#!/bin/sh'."\n");
+		fwrite($file, 'REPOS="$1"'."\n");
+		fwrite($file, 'REV="$2"'."\n");
+		fwrite($file, $content);
+	}
+	flock($file, LOCK_UN);
+	fclose($file);
+}
+
+if ($one_repository) {
+	passthru ("cd $repos_co && $svn_path/svn commit -m\"\"");
+}
+
+cron_entry(21,$err);
+?>


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn-create.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_dump.pl
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_dump.pl	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_dump.pl	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+#
+# $Id: svn_dump.pl,v 1.2 2005/05/06 21:22:13 mpeltier Exp $
+#
+# svn_dump.pl - script to dump data from the database 
+#		       inspired from sourceforge scripts
+# Christian Bayle <bayle at debian.org>
+#
+use DBI;
+use Sys::Hostname;
+
+my $scm = 'scmsvn';
+require("/usr/lib/gforge/lib/include.pl");  # Include all the predefined functions
+require("/etc/gforge/plugins/$scm/config.pl"); # Include plugin config vars
+
+my $group_array = ();
+my $verbose = 0;
+my $scm_file = $file_dir . "/dumps/$scm.dump";
+
+if($verbose) {print ("\nConnecting to database");}
+
+if ( "$sys_dbname" ne "gforge" || "$sys_dbuser" ne "gforge" ) {
+$dbh ||= DBI->connect("DBI:Pg:dbname=$sys_dbname","$sys_dbuser","$sys_dbpasswd");
+} else {
+$dbh ||= DBI->connect("DBI:Pg:dbname=$sys_dbname");
+}
+die "Cannot connect to database: $!" if ( ! $dbh );
+
+if($verbose) {print ("\nGetting group list");}
+
+# Dump the Groups Table information
+
+$query= "SELECT groups.group_id,groups.unix_group_name,groups.status,groups.use_scm,groups.enable_pserver,groups.enable_anonscm FROM groups,group_plugin,plugins WHERE groups.unix_group_name !='' AND groups.group_id=group_plugin.group_id AND group_plugin.plugin_id=plugins.plugin_id AND plugins.plugin_name='".$scm."'";
+# AND cvs_box=$hostname to be added for multi-cvs server support
+
+$c = $dbh->prepare($query);
+$c->execute();
+
+if($verbose) {print ("\nGetting user list per group");}
+while(my ($group_id, $group_name, $status, $use_scm, $enable_pserver, $enable_anonscm) = $c->fetchrow()) {
+
+	my $new_query = "SELECT users.user_name AS user_name FROM users,user_group WHERE users.user_id=user_group.user_id AND cvs_flags=1 AND group_id=$group_id";
+	my $d = $dbh->prepare($new_query);
+	$d->execute();
+
+	my $user_list = "";
+	
+	while($user_name = $d->fetchrow()) {
+	   $user_list .= "$user_name,";
+	}
+
+	$grouplist = "$group_name:$status:$group_id:$use_scm:$enable_pserver:$enable_anonscm:$user_list\n";
+	$grouplist =~ s/,$//;
+
+	push @group_array, $grouplist;
+}
+
+# Now write out the files (not necessary, but can give info in case of problems)
+if($verbose) {print ("\nWriting list");}
+write_array_file($scm_file, @group_array);
+system("chmod o-r $scm_file");


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_dump.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_update.pl
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_update.pl	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_update.pl	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,87 @@
+#!/usr/bin/perl
+#
+# $Id: svn_update.pl,v 1.3.2.1 2006/07/23 13:03:57 lo-lan-do Exp $
+#
+# svn_update.pl - script to update svn
+#		       inspired from sourceforge scripts
+# Roland Mas <lolando at debian.org>
+# Christian Bayle <bayle at debian.org>
+
+use DBI;
+use Sys::Hostname;
+
+require("/usr/lib/gforge/lib/include.pl"); # Include all the predefined functions
+
+my $group_array = ();
+my $verbose = 0;
+my $svn_file = $file_dir . "/dumps/scmsvn.dump";
+my $anoncvs_uid_add = 50000;
+my $gid_add = 10000;
+
+
+# Script parse out the database dumps and create/update/delete svn
+#                accounts on the client machines
+#
+# Open up all the files that we need.
+#
+if($verbose) {print ("\nReading list");}
+ at group_array = open_array_file($svn_file);
+
+#
+# Loop through @group_array and deal w/ svn.
+#
+if($verbose) {print ("\n\nProcessing SVN\n\n");}
+while ($ln = pop(@group_array)) {
+	chop($ln);
+		($group_name, $status, $group_id, $use_scm, $enable_pserver, $enable_anonscm, $userlist) = split(":", $ln);
+
+	$svn_uid = $dummy_uid;
+	$svn_gid = $group_id + $anoncvs_uid_add;
+	$svn_dir = "$svn_root/$group_name";
+
+	$userlist =~ tr/A-Z/a-z/;
+
+	$group_exists = (-d $grpdir_prefix . '/' . $group_name);
+	$svn_exists = (-d "$svn_root/$group_name");
+
+	# SVN repository creation
+	if ($group_exists && !$svn_exists && $use_scm && $status eq 'A' && !(-e "$svn_root/$group_name/format")) {
+
+		# This for the first time
+		if (!(-d "$svn_root")) {
+		    if($verbose){print("Creating $svn_root\n");}
+		    system("mkdir -p $svn_root");
+		}
+		if($verbose){print("Creating a Subversion Repository for: $group_name\n");}
+		# Let's create a Subversion repository for this group
+		
+		# First create the repository
+		# Unix right will lock access to all users not in the
+		# group including ViewCVS when anoncvs is not enabled
+		mkdir $svn_dir, 0775;
+		# Used fsfs backend because ViewCVS (apache) needs
+		# write permission with default backend
+		system("/usr/bin/svnadmin create --fs-type fsfs $svn_dir");
+
+		# set up changes mailing list
+		system("sed 's/xprojectnamex/$group_name/' </usr/lib/gforge/plugins/scmsvn/lib/post-commit.evolvis >$svn_dir/hooks/post-commit");
+		system("chmod 775 $svn_dir/hooks/post-commit");
+		
+		# set group ownership, anonymous group user
+		system("chown -R $svn_uid:$svn_gid $svn_dir");
+		system("chmod -R g+rw $svn_dir");
+		# s bit to have all owned by group
+		system("find $svn_dir -type d | xargs chmod g+s");
+	} else {
+		if($verbose) {print("group already exits: $group_name \n\n");}
+	}
+
+	# Right management
+	if ($group_exists && $use_scm && $status eq 'A'){
+	    if ($enable_anonscm) {
+		chmod 02775, "$svn_dir";
+	    } else {
+		chmod 02070, "$svn_dir";
+	    }
+	}
+}


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/bin/svn_update.pl
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cgi-bin/viewcvs.cgi
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cgi-bin/viewcvs.cgi	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cgi-bin/viewcvs.cgi	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+# -*-python-*-
+#
+# Copyright (C) 1999-2002 The ViewCVS Group. All Rights Reserved.
+# Patched by Roland Mas <lolando at debian.org>
+#
+# By using this file, you agree to the terms and conditions set forth in
+# the LICENSE.html file which can be found at the top level of the ViewCVS
+# distribution or at http://viewcvs.sourceforge.net/license-1.html.
+#
+# Contact information:
+#   Greg Stein, PO Box 760, Palo Alto, CA, 94302
+#   gstein at lyra.org, http://viewcvs.sourceforge.net/
+#
+# -----------------------------------------------------------------------
+#
+# viewcvs: View CVS repositories via a web browser
+#
+# -----------------------------------------------------------------------
+
+import os
+import sys
+
+sys.path.insert(0, "/var/lib/gforge/etc/")
+
+# go do the work
+import sapi
+import viewcvs
+
+os.umask(0002)
+viewcvs.main(sapi.CgiServer())


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cgi-bin/viewcvs.cgi
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/svn-stats.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/svn-stats.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/svn-stats.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,431 @@
+<?php
+/**
+* This file is part of GForge.
+* 
+* This is a translation if svn-stats.pl
+*
+* GForge 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 License, or
+* (at your option) any later version.
+*
+* GForge 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 GForge; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  US
+*/
+require_once ('squal_pre.php');
+require_once ('common/include/cron_utils.php');
+require_once ('plugins/scmsvn/config.php');
+
+$pluginname = "scmsvn" ;
+// This variable should probably be moved to this plugin's config.php
+$svnroot = "/var/lib/gforge/chroot/svnroot/";
+$ARGV = $GLOBALS['argv'];
+$err = '';
+$debug = 0;
+
+// You should set this variable manually in the configuration file
+if (!isset($svn_bin)) {
+	$svn_bin = "svn"; // Assumes svn is in the PATH
+}
+
+// Set up some globals for use when parsing the XML log file
+$last_user = '';
+$last_time = '';
+$last_tag = '';
+$adds = array();
+$deletes = array();
+$updates = array();
+$commits = array();
+$usr_adds = array();
+$usr_deletes = array();
+$usr_updates = array();
+$start_time = 0;
+$end_time = 0;
+$time_ok = false;
+$date_key = '';
+$user_list = array();
+
+// Handle closing an element.
+// We are only actually interested in LOGENTRY type things, as this is 
+// where we update our commit total
+function endElement($parser, $name) {
+  debug ("endelement $name") ;
+	global $time_ok, $last_tag, $commits, $date_key;
+	if ($name == "LOGENTRY" && $time_ok) {
+		$commits[$date_key]++;
+	}
+	$last_tag = "";
+}
+
+// Handle character data
+// We only care about AUTHOR and DATE entries, so we can figure out who
+// is doing things and when. We use last_tag to keep track of the
+// last element we were in.
+function charData($parser, $chars) {
+  debug ("chardata $chars") ;
+	global $last_tag, $last_user, $last_time, $start_time,
+			$end_time, $time_ok, $date_key, $user_list;
+	switch ($last_tag) {
+		case "AUTHOR":
+			$last_user = strtolower(trim($chars));
+			// We can save time by looking up users and caching them
+			if (!array_key_exists($last_user, $user_list)) {
+				// trying to get user id from user name
+				$user_res = db_query("SELECT user_id FROM users WHERE " .
+									"user_name='$last_user'");
+	            if ($user_row = db_fetch_array($user_res)) {
+					$user_list[$last_user] = $user_row[0];
+				} else {
+					// We don't know about them, so give them the 
+					// nonsensical -1 value
+					$user_list[$last_user] = -1;
+				}
+			}
+			debug("Got author $last_user");
+			break;
+		case "DATE":
+			$chars = preg_replace('/T(\d\d:\d\d:\d\d)\.\d+Z?$/', ' ${1}', $chars);
+			$last_time = strtotime($chars);
+			// If we don't have a start end end time, we should assume
+			// that the time is OK.
+			// If we do have the start and end time, make sure this event
+			// is within those times.
+			debug ("start $start_time, end $end_time, last $last_time");
+			if (!$start_time && !$end_time) {
+				$time_ok = true;
+			} elseif ($start_time <= $last_time && $last_time <= $end_time) {
+				$time_ok = true;
+			} else {
+				$time_ok = false;
+			}
+			// We need to set up the date key that we use when generating
+			// totals
+			if ($time_ok) {
+	 			$year	= gmstrftime("%Y", $last_time);
+				$month	= gmstrftime("%m", $last_time);
+				$day	= gmstrftime("%d", $last_time);
+				$month_string = sprintf( "%04d%02d", $year, $month );
+				$date_key = "${month_string}-$day";
+			}
+			debug("Got date $chars $last_time $date_key");
+			break;
+	}
+}
+
+function startElement($parser, $name, $attrs) {
+  debug ("startelement $name");
+    global $last_user, $last_time, $last_tag, $time_ok,
+			$adds, $deletes, $updates, $commits, $date_key,
+			$usr_adds, $usr_deletes, $usr_updates;
+	$last_tag = $name;
+	switch($name) {
+		case "LOG":
+			// Clear up at the start of a new log file
+			$adds = array();
+			$deletes = array();
+			$updates = array();
+			$commits = array();
+			$usr_adds = array();
+			$usr_deletes = array();
+			$usr_updates = array();
+			$date_key = '';
+			break;
+		case "LOGENTRY":
+			// Make sure we clean up before doing a new log entry
+			$last_user = "";
+			$last_time = "";
+			break;
+		case "PATH":
+			if ($time_ok && $date_key) {
+				if ($attrs['ACTION'] == "M") {
+					$updates[$date_key]++;
+					if ($last_user) {
+						$usr_updates[$date_key][$last_user]++;
+					}
+				} elseif ($attrs['ACTION'] == "A") {
+					$adds[$date_key]++;
+					if ($last_user) {
+						$usr_adds[$date_key][$last_user]++;
+					}
+				} elseif ($attrs['ACTION'] == "D") {
+					$deletes[$date_key]++;
+					if ($last_user) {
+						$usr_deletes[$date_key][$last_user]++;
+					}
+				}
+			}
+			break;
+	}
+}
+
+function debug($message) {
+	global $debug, $err;
+	if ($debug) {
+		$err .= $message."\n";
+	}
+	if ($debug > 1) {
+		echo "$message\n";
+		flush();
+		ob_end_flush();
+	}
+}
+
+db_begin();
+
+$pluginid = get_plugin_id($pluginname);
+
+if ($ARGV[1] && $ARGV[2] && $ARGV[3]) {
+	//$ARGV[1] = Year
+	//$ARGV[2] = Month
+	//$ARGV[3] = Day
+	
+	$day_begin = gmmktime( 0, 0, 0, $ARGV[2], $ARGV[3], $ARGV[1] );
+	//	$day_begin = timegm( 0, 0, 0, $ARGV[2], $ARGV[1] - 1, $ARGV[0] - 1900 );
+	$day_end = $day_begin + 86400;
+ 
+	$rollback = process_day($day_begin, $day_end);
+} else if ($ARGV[1]=='all' && !$ARGV[2] && !$ARGV[3]) { 
+	// Do ALL the days
+	debug('Processing all days');
+	$rollback = process_day();
+
+} else {
+	// Do yesterday
+	$local_time = localtime();
+	// Start at midnight last night.
+	$day_end = gmmktime(0, 0, 0, $local_time[4] + 1, 
+						$local_time[3], $local_time[5] );
+	// go until midnight yesterday.
+	$day_begin = $day_end - 86400;
+
+	$rollback = process_day($day_begin, $day_end);
+}
+
+if ($rollback) {
+	db_rollback();
+} else {
+	db_commit();
+}
+
+// lenp Not sure about this...
+cron_entry(24,$err);
+
+function process_day($day_begin=0, $day_end=0) {
+	global $err;
+	global $pluginid;
+	global $svnroot;
+	global $svn_bin;
+	global $start_time;
+	global $end_time;
+	global $date_key;
+	global $time_ok;
+	global $last_time;
+	global $user_list;
+	global $usr_adds, $usr_deletes, $usr_updates, $adds, $deletes, $updates,
+			$commits;
+
+	$start_time = $day_begin;
+	$end_time = $day_end;
+
+	if ($day_begin && $day_end) {
+	 	$year	= gmstrftime("%Y", $day_begin );
+		$month	= gmstrftime("%m", $day_begin );
+		$day	= gmstrftime("%d", $day_begin );
+		$month_string = sprintf( "%04d%02d", $year, $month );
+		debug('Checking with SVN for actions on day ' .
+				$day.' month '.$month.' year '.$year);
+		$date_key = "${month_string}-$day";
+	}
+
+	$rollback = false;
+	
+	// Lookup all the groups that use this plugin, use SCM and
+	// are active
+	$res = db_query("SELECT group_plugin.group_id, groups.unix_group_name
+				FROM group_plugin, groups
+				WHERE group_plugin.plugin_id = $pluginid
+				AND groups.use_scm = 1
+				AND groups.status = 'A'
+				AND group_plugin.group_id = groups.group_id");
+	
+	if (!$res) {
+		$err .=  "Error! Database Query Failed: ".db_error();
+		return 1;
+	}
+
+	while ($groups =& db_fetch_array($res)) {
+		$logfile = tempnam("/tmp", "svnlog");
+		debug('Working on group ' . $groups[1]);
+
+		$svnroot_group = "$svnroot" . "/"  . $groups[1];	
+		if (!is_dir($svnroot_group)) {
+			debug("Skipping repository $svnroot_group : doesn't exist");
+		}
+
+		// Now, examine the log file for the group
+
+		$cmd = "$svn_bin log file://$svnroot_group --xml -v -q > $logfile";
+		debug($cmd);
+		exec($cmd, $cmd_out, $cmd_retval);
+		$xml_parser = xml_parser_create();
+		xml_set_element_handler($xml_parser, "startElement", "endElement");
+		xml_set_character_data_handler($xml_parser, "charData");
+
+		if (!$cmd_retval) {
+			$xmlhandle = fopen($logfile, "r");
+			while (!feof($xmlhandle) && 
+					$data = fread($xmlhandle, 8192)) {
+				if (!xml_parse($xml_parser, $data, feof($xmlhandle))) {
+					debug("Unable to parse XML with error " .
+							xml_error_string(xml_get_error_code($xml_parser)) .
+							" on line " .
+							xml_get_current_line_number($xml_parser));
+					$rollback = true;
+					break;
+				}
+				// See if we can drop out of parsing, since
+				// the time of the last event is less than our start time
+				// and, because the log is in newest first order,
+				// we will never run into a valid event after this
+				if (!$time_ok && $last_time && $last_time < $start_time) {
+					break;
+				}
+			}
+		} else {
+			// Looks like we couldn't open svn :(
+			// Fail the run
+			if (is_file($logfile)) {
+				debug("Removing log file $logfile");
+				unlink($logfile);
+			}
+			debug("Unable to svn group $svnroot_group");
+			$rollback = true;
+			xml_parser_free($xml_parser);
+			break;
+		}
+		xml_parser_free($xml_parser);
+		if (is_file($logfile)) {
+			debug("Removing log file $logfile");
+			unlink($logfile);
+		}
+
+		// We have to loop through all the days we've looked at,
+		// extracting the month and day from the date_key
+		foreach (array_keys($commits) as $key) {
+			// Cleaning stats_cvs_* table for the current day to
+			// avoid conflicting index problem.
+			list($m, $d) = split("-", $key);
+			$del_grp_sql = "DELETE FROM stats_cvs_group
+				WHERE month = '$m'
+				AND day = '$d'
+				AND group_id = '$groups[0]'";
+			$del_grp_res = db_query($del_grp_sql);
+			debug($del_grp_sql);
+			if (!$del_grp_res) {
+				$err .= 'Error cleaning stats_cvs_group for ' .
+						"current day $d, month $m and current group id " .
+						$groups[0] . ': ' . db_error();
+				// Break out completely
+				$rollback = true;
+				debug("Unable to clean stats_cvs_group");
+				break 2;
+			}
+	
+			$del_usr_sql = "DELETE FROM stats_cvs_user
+				WHERE month = '$m'
+				AND day = '$d'
+				AND group_id = '$groups[0]'";
+			$del_usr_res = db_query($del_usr_sql);
+			debug($del_usr_sql);
+			if (!$del_usr_res) {
+				$err .= 'Error cleaning stats_cvs_user for ' .
+						"current day $d, month $m and current group id " .
+						$groups[0] . ': ' . db_error();
+				// Break out completely
+				$rollback = true;
+				debug("Unable to clean stats_cvs_user");
+				break 2;
+			}
+
+			$ins_grp_sql = "INSERT INTO stats_cvs_group
+				(month,day,group_id,checkouts,commits,adds)
+				VALUES
+				('$m',
+				'$d',
+				'$groups[0]',
+				'0',
+				'" . ($updates[$key] ? $updates[$key] : 0) . "',
+				'" . ($adds[$key] ? $adds[$key] : 0) . "')";
+
+			debug($ins_grp_sql);
+			if (!db_query($ins_grp_sql)) {
+				$err .= 'Insertion in stats_cvs_group failed: ' . 
+						$ins_grp_sql . ' - ' . db_error();
+				// Break out completely
+				$rollback = true;
+				debug("Unable to insert to stats_cvs_group");
+				break 2;
+			}
+
+			// Now, loop through the users we've seen
+			// We want to update any user who's got an add, delete
+			// or update
+			foreach (array_keys($user_list) as $user_name) {
+				if ($user_list{$user_name} > 0 &&
+					((array_key_exists($key, $usr_updates) &&
+					  array_key_exists($user_name, $usr_updates[$key])) ||
+					 (array_key_exists($key, $usr_deletes) &&
+					  array_key_exists($user_name, $usr_deletes[$key])) ||
+					 (array_key_exists($key, $usr_adds) &&
+                      array_key_exists($user_name, $usr_adds[$key])))) {
+
+					$user_id = $user_list{$user_name};
+					$usr_sql = "INSERT INTO stats_cvs_user
+						(month,day,group_id,user_id,commits,adds) VALUES
+						('$m',
+					'$d',
+					'$groups[0]',
+					'$user_id',
+					'" . ($usr_updates{$key}{$user_name}?$usr_updates{$key}{$user_name}:0)  . "',
+					'" . ($usr_adds{$key}{$user_name}?$usr_adds{$key}{$user_name}:0)  . "')";
+
+					debug($usr_sql);
+
+					if (!db_query($usr_sql)) {
+						$err .= 'Insertion in stats_cvs_user failed: ' . 
+								$usr_sql . ' - ' . db_error();
+						$rollback = true;
+						debug("Unable to insert into stats_cvs_user");
+						break 3;
+					}
+				}
+			}
+		}
+		debug("Finished group : $groups[1]");
+	}
+	return $rollback;
+}
+
+function get_plugin_id($pluginname){
+	$res = db_query("SELECT plugin_id FROM plugins WHERE plugin_name = '" .
+					$pluginname."'");	
+	if (!$res) {
+		$err .=  "Error! Database Query Failed: ".db_error();
+		db_rollback();
+		exit;
+	}
+	if ($row =& db_fetch_array($res)) {
+		$plugin_id = $row[0];
+	}
+ 
+	return $plugin_id;
+}
+
+
+?>


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/svn-stats.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/tarballs.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/tarballs.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/tarballs.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,57 @@
+#! /usr/bin/php4 -f
+<?php
+
+$verbose=0;
+$scmname='scmroot';
+// For portability, if hot-backup.py path vary from one distro to another add some path
+// in the next line
+putenv("PATH=/usr/lib/subversion:".getenv('PATH'));
+$BACKUPPROG='hot-backup.py';
+
+require ('squal_pre.php');
+require ('common/include/cron_utils.php');
+
+$sys_scm_root_path = "$sys_chroot$svndir_prefix";
+
+if(!isset($sys_scm_root_path)) {
+	$err = 'You have to define $svndir_prefix and possibly $sys_chroot variable in your config file.';
+} elseif(!isset($sys_scm_tarballs_path)) {
+	$err = 'You have to define $sys_scm_tarballs_path variable in your config file.';
+} elseif(!is_dir($sys_scm_root_path) || !is_readable($sys_scm_root_path)) {
+	$err = $sys_scm_root_path.' is not a directory or is not readable.';
+} elseif(!is_dir($sys_scm_tarballs_path) || !is_writable($sys_scm_tarballs_path)) {
+	$err = $sys_scm_tarballs_path.' is not a directory or is not writable.';
+} else {
+	if ($handle = opendir($sys_scm_root_path)) {
+		if ($verbose) echo "Scanning $sys_scm_root_path\n";
+		chdir($sys_scm_root_path);
+		while (false !== ($file = readdir($handle))) {
+			chdir($sys_scm_root_path);
+			if ($file != "." && $file != ".." && is_dir($file) && $file != "cvs-locks") {
+				if ($verbose) echo "Creating $sys_scm_tarballs_path/$file-$scmname.tar.gz\n";
+				mkdir("$sys_scm_tarballs_path/$file");
+				chdir($sys_scm_root_path);
+				exec("$BACKUPPROG $file $sys_scm_tarballs_path/$file 2>&1", $output);
+				chdir($sys_scm_tarballs_path);
+				exec("tar czf $sys_scm_tarballs_path/$file-$scmname.tar.gz.new $file 2>&1", $output);
+
+				if (is_file("$sys_scm_tarballs_path/$file-$scmname.tar.gz.new")){
+					rename("$sys_scm_tarballs_path/$file-$scmname.tar.gz.new","$sys_scm_tarballs_path/$file-$scmname.tar.gz");
+					rename("$sys_scm_tarballs_path/$file","$sys_scm_tarballs_path/$file.done_by_cron");
+					system("rm -rf $sys_scm_tarballs_path/$file.done_by_cron");
+				}
+			}
+		}
+		closedir($handle);
+	}
+	if($output) {
+		$err = implode("\n", $output);
+	}
+	if(empty($err)) {
+		$err = 'SCM tarballs generated';
+	}
+}
+
+cron_entry(19, $err);
+
+?>


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/cronjobs/tarballs.php
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/README.Debian
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/README.Debian	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/README.Debian	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,8 @@
+gforge-plugin-scmsvn for Debian
+-------------------------------
+
+This plugin holds the Subversion stuff.  It is the second step towards
+choice of SCM systems, the first being that CVS has already been
+pluginified.
+
+ -- Roland Mas <lolando at debian.org>, Sun Mar 14 15:56:15 2004

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/changelog
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/changelog	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/changelog	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,114 @@
+gforge-plugin-scmsvn (4.5.14-5.1) unreleased; urgency=low
+
+  * Begin working on changes local to Evolvis
+  * Fix changes mailing list, AurISP ticket #1959
+  * Fix snapshots generation, AurISP ticket #2076
+  * Prune the .deb packages from version control subdirs
+  * Fix path to viewcvs.py
+  * Make the post-commit hook writable for project members
+  * Use the UTF-8 locale during snapshots generation, AurISP ticket #2128
+  * Support custom changelog-mail script, AurISP ticket #2255
+
+ -- Thorsten Glaser <mirabilos at evolvis.org>  Thu, 30 Aug 2007 12:01:56 +0000
+
+gforge-plugin-scmsvn (4.5.14-5) unstable; urgency=low
+
+  * [Roland] Removed hardcoded dependency on Python 2.3 in viewcvs.cgi,
+    thanks to Julien Cristau <julien.cristau at ens-lyon.org>.
+
+ -- Roland Mas <lolando at debian.org>  Mon, 16 Oct 2006 17:57:31 +0200
+
+gforge-plugin-scmsvn (4.5.14-4) unstable; urgency=low
+
+  * [Roland] Depend on python-subversion rather than python2.3-subversion
+    to follow the new Python policy (closes: #383381).
+
+ -- Roland Mas <lolando at debian.org>  Fri, 18 Aug 2006 19:37:51 +0200
+
+gforge-plugin-scmsvn (4.5.14-3) unstable; urgency=low
+
+  * [Roland] Made repositories actually not-accessible when the anonymous
+    SCM option is disabled (closes: #376513).
+  * [Roland] Started using dpatch.  First patch: disable-dav, to switch
+    SVN over to SSH (for developers) and svnserve (for anonymous).
+
+ -- Roland Mas <lolando at debian.org>  Sun, 23 Jul 2006 15:07:33 +0200
+
+gforge-plugin-scmsvn (4.5.14-2) unstable; urgency=low
+
+  * [Roland] Upload to unstable.
+
+ -- Roland Mas <lolando at debian.org>  Sat, 22 Jul 2006 17:04:44 +0200
+
+gforge-plugin-scmsvn (4.5.14-1) experimental; urgency=low
+
+  * [Roland] Updated for Gforge 4.5.14.
+
+ -- Roland Mas <lolando at debian.org>  Tue,  6 Jun 2006 21:28:44 +0200
+
+gforge-plugin-scmsvn (4.5.6-1) unstable; urgency=low
+
+  * New Upstream version
+
+ -- Christian Bayle <bayle at debian.org>  Sun, 29 Jan 2006 20:10:40 +0100
+
+gforge-plugin-scmsvn (4.5.3-5) stable; urgency=low
+
+  * New Upstream version, compile for sarge
+
+ -- Christian Bayle <bayle at debian.org>  Tue,  6 Dec 2005 22:14:05 +0100
+
+gforge-plugin-scmsvn (4.5.3-4) stable; urgency=low
+
+  * New Upstream version, compile for sarge
+
+ -- Christian Bayle <bayle at debian.org>  Wed, 16 Nov 2005 19:10:12 +0100
+
+gforge-plugin-scmsvn (4.5.3-3) stable; urgency=low
+
+  * New Upstream version, compile for sarge
+
+ -- Christian Bayle <bayle at debian.org>  Sun, 13 Nov 2005 18:26:45 +0100
+
+gforge-plugin-scmsvn (4.5-3) unstable; urgency=low
+
+  * [Christian] New version in the branch
+
+ -- Christian Bayle <bayle at debian.org>  Tue,  6 Sep 2005 00:57:06 +0200
+
+gforge-plugin-scmsvn (4.5-1) unstable; urgency=low
+
+  * [Roland] Ported to Gforge 4.5.
+  * [Roland] Fixed location of the svn-stats script in crontab.
+  * [Roland] Remove .arch-ids directories at build time.
+
+ -- Roland Mas <lolando at debian.org>  Sun,  7 Aug 2005 17:32:11 +0200
+
+gforge-plugin-scmsvn (4.1-9) unstable; urgency=low
+
+  * New upstream 
+  * [Christian] Added dependancy to php4-cli
+  * [Christian] Added cronjobs/tarballs.php
+  * [Christian] Splited svn_dump_update in svn_dump and svn_update
+  svn_dump is almost identical to cvs_dump
+  * [Mathieu] Link to snapshots added
+  * [Mathieu] Integrated ViewCVS PHP wrapper inspired from CodeX and
+  CVSweb's ones
+  * [Mathieu] Created repository with fsfs backend because ViewCVS
+  requires write permission with default SVN backend
+  * [Christian] Reviewed update-inetd 
+
+ -- Christian Bayle <bayle at debian.org>  Sat, 26 Feb 2005 09:13:47 +0100
+
+gforge-plugin-scmsvn (4.0.2-1) unstable; urgency=low
+
+  * Align version with gforge
+
+ -- Christian Bayle <bayle at debian.org>  Mon, 24 Jan 2005 23:15:29 +0100
+
+gforge-plugin-scmsvn (1.0-1) unstable; urgency=low
+
+  * Initial packaging.
+
+ -- Roland Mas <lolando at debian.org>  Mon, 26 Apr 2004 16:24:21 +0200
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/control
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/control	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/control	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,15 @@
+Source: gforge-plugin-scmsvn
+Section: devel
+Priority: optional
+Maintainer: Roland Mas <lolando at debian.org>
+Uploaders: Christian Bayle <bayle at debian.org>
+Build-Depends: debhelper (>> 4.0.0), dpatch
+Standards-Version: 3.7.2
+
+Package: gforge-plugin-scmsvn
+Architecture: all
+Depends: gforge-common, gforge-db-postgresql | gforge-db, gforge-web-apache | gforge-web, subversion, subversion-tools, viewcvs, python-subversion, python (>= 2.3), php4-cli, mksh
+Description: subversion plugin for GForge
+ This plug-in contains the Subversion subsystem of Gforge.  It allows
+ each Gforge project to have its own Subversion repository, and gives
+ some control over it to the project's administrator.

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/copyright
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/copyright	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/copyright	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,33 @@
+This package has been patched with changes local to evolvis.org which
+are not intended for the general public. These patches are authored by
+Tarent and its contractors.
+
+This package was debianized by Roland Mas <lolando at debian.org> on
+Sun, 14 Mar 2004 15:52:43 +0100.
+
+It was downloaded from <http://gforge.org/>
+
+Upstream Author: Roland Mas <lolando at debian.org>, but the code is
+derived from Gforge code, which was itself a derivative of the
+Sourceforge code, which was copyright VA Linux Systems.  Also, part of
+it was refined by same Roland Mas <roland at gnurandal.com> under
+contract for Gforge Group, LLC.
+
+Copyright:
+
+   This package 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; version 2 dated June, 1991.
+
+   This package 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 this package; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/cron.d
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/cron.d	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/cron.d	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,15 @@
+#
+# Regular cron jobs for the gforge-plugin-scmsvn package
+#
+
+# Tarballs
+5 2 * * * root [ -x /usr/lib/gforge/plugins/scmsvn/cronjobs/tarballs.php ] && php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include /usr/lib/gforge/plugins/scmsvn/cronjobs/tarballs.php
+
+# Snapshots
+35 3 * * * root [ -x /usr/lib/gforge/plugins/scmsvn/bin/snapshots.sh ] && /usr/lib/gforge/plugins/scmsvn/bin/snapshots.sh generate
+
+# Repositories update
+45 * * * * root [ -x /usr/lib/gforge/plugins/scmsvn/bin/svn_dump.pl ] && su -s /bin/sh gforge -c /usr/lib/gforge/plugins/scmsvn/bin/svn_dump.pl && [ -x /usr/lib/gforge/plugins/scmsvn/bin/svn_update.pl ] && /usr/lib/gforge/plugins/scmsvn/bin/svn_update.pl
+
+# Statistics
+55 4 * * Sun root [ -x /usr/lib/gforge/plugins/scmsvn/cronjobs/svn-stats.php ] && php -d include_path=/etc/gforge:/usr/share/gforge/:/usr/share/gforge/www/include /usr/lib/gforge/plugins/scmsvn/cronjobs/svn-stats.php

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/dirs
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/dirs	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/dirs	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,40 @@
+bin
+etc
+etc/gforge
+etc/gforge/httpd.d
+etc/gforge/plugins
+etc/gforge/plugins/scmsvn
+etc/gforge/plugins/scmsvn/viewcvs/templates
+etc/gforge/plugins/scmsvn/viewcvs/templates/include
+usr
+usr/lib
+usr/lib/gforge
+usr/lib/gforge/bin
+usr/lib/gforge/plugins/
+usr/lib/gforge/plugins/scmsvn
+usr/lib/gforge/plugins/scmsvn/bin
+usr/lib/gforge/plugins/scmsvn/cgi-bin
+usr/lib/gforge/plugins/scmsvn/include
+usr/lib/gforge/plugins/scmsvn/include/languages
+usr/lib/gforge/plugins/scmsvn/lib
+usr/lib/gforge/plugins/scmsvn/cronjobs
+usr/lib/gforge/cgi-bin/plugins/scmsvn
+usr/share
+usr/share/gforge
+usr/share/gforge/etc
+usr/share/gforge/etc/httpd.d
+usr/share/gforge/www
+usr/share/gforge/www/plugins
+usr/share/gforge/www/plugins/scmsvn
+usr/share/gforge/www/plugins/scmsvn/viewcvs
+usr/share/gforge/www/plugins/scmsvn/viewcvs/icons
+usr/share/gforge/www/plugins/scmsvn/viewcvs/images
+usr/share/gforge/scm
+var
+var/log
+var/log/gforge
+var/log/gforge/svn
+var/lib
+var/lib/gforge
+var/lib/gforge/chroot
+var/lib/gforge/chroot/svnroot

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/00list
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/00list	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/00list	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,2 @@
+disable-dav
+#repo-owner

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/disable-dav.dpatch
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/disable-dav.dpatch	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/disable-dav.dpatch	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,24 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## disable-dav.dpatch by Roland Mas <lolando at debian.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+ at DPATCH@
+diff -urNad gforge-plugin-scmsvn~/etc/plugins/scmsvn/config.php gforge-plugin-scmsvn/etc/plugins/scmsvn/config.php
+--- gforge-plugin-scmsvn~/etc/plugins/scmsvn/config.php	2005-07-30 12:26:44.000000000 +0200
++++ gforge-plugin-scmsvn/etc/plugins/scmsvn/config.php	2006-07-23 14:33:53.000000000 +0200
+@@ -3,10 +3,10 @@
+ //$default_svn_server = $GLOBALS['sys_default_domain'] ;
+ $default_svn_server = "svn." . $GLOBALS['sys_default_domain'] ;
+ //$default_svn_server = $GLOBALS['sys_scm_host'];
+-$use_ssh = false;
+-$use_dav = true;
++$use_ssh = true;
++$use_dav = false;
+ $use_ssl = true;
+-$svn_root = 'svn';
++$svn_root = 'svnroot';
+ $enabled_by_default = 0 ;
+ 
+ $svn_bin = "/usr/bin/svn";


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/patches/disable-dav.dpatch
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/postinst
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/postinst	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/postinst	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,72 @@
+#! /bin/sh
+# postinst script for gforge-plugin-scmsvn
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+#
+# quoting from the policy:
+#     Any necessary prompting should almost always be confined to the
+#     post-installation script, and should be protected with a conditional
+#     so that unnecessary prompting doesn't happen if a package's
+#     installation fails and the `postinst' is called with `abort-upgrade',
+#     `abort-remove' or `abort-deconfigure'.
+
+case "$1" in
+    configure)
+	/usr/sbin/gforge-config
+
+	# Prepare database
+	su -s /bin/sh gforge -c /usr/lib/gforge/plugins/scmsvn/bin/db-upgrade.pl
+	su -s /bin/sh gforge -c '/usr/lib/gforge/bin/register-plugin scmsvn "Subversion"'
+	test -f /etc/default/apache2 && . /etc/default/apache2
+	if [ "$NO_START" != "0" ]; then
+		if [ -x /usr/sbin/apache ]; then
+			/usr/sbin/invoke-rc.d --quiet apache reload 
+		fi
+	else
+		if [ -x /usr/sbin/apache2 ]; then
+			/usr/sbin/invoke-rc.d --quiet apache2 reload
+		fi
+	fi
+
+        # Setup our Subversion
+	/usr/lib/gforge/plugins/scmsvn/bin/install-svn.sh configure
+
+	# Making user group and svn update from database 
+	/usr/lib/gforge/bin/update-user-group-cvs.sh
+	rm -f /var/lib/gforge/dumps/*svn*dump
+	su -s /bin/sh gforge -c /usr/lib/gforge/plugins/scmsvn/bin/svn_dump.pl
+	/usr/lib/gforge/plugins/scmsvn/bin/svn_update.pl
+
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/prerm
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/prerm	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/prerm	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,51 @@
+#! /bin/sh
+# prerm script for gforge-plugin-scmsvn
+#
+# see: dh_installdeb(1)
+
+set -e
+
+#DEBHELPER#
+# summary of how this script can be called:
+#        * <prerm> `remove'
+#        * <old-prerm> `upgrade' <new-version>
+#        * <new-prerm> `failed-upgrade' <old-version>
+#        * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
+#        * <deconfigured's-prerm> `deconfigure' `in-favour'
+#          <package-being-installed> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    remove|deconfigure)
+	/usr/lib/gforge/plugins/scmsvn/bin/db-delete.pl
+	/usr/lib/gforge/bin/unregister-plugin scmsvn
+	test -f /etc/default/apache2 && . /etc/default/apache2
+	if [ "$NO_START" != "0" ]; then
+		if [ -x /usr/sbin/apache ]; then
+    			/usr/sbin/invoke-rc.d --quiet apache reload
+		fi
+	else
+		if [ -x /usr/sbin/apache2 ]; then
+    			/usr/sbin/invoke-rc.d --quiet apache2 reload
+		fi
+	fi
+        ;;
+    upgrade|failed-upgrade)
+        ;;
+    *)
+        echo "prerm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+
+
+exit 0
+
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/rules
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/rules	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/rules	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,95 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# This is the debhelper compatibility version to use.
+export DH_COMPAT=4
+
+export PLUGIN=scmsvn
+
+PACKAGE=gforge-plugin-scmsvn
+include /usr/share/dpatch/dpatch.make
+
+configure: configure-stamp
+configure-stamp:
+	dh_testdir
+	# Add here commands to configure the package.
+	touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp patch
+	dh_testdir
+	touch build-stamp
+
+clean: unpatch
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp configure-stamp
+	dh_clean
+
+DESTDIR=$(CURDIR)/debian/gforge-plugin-$(PLUGIN)
+
+install: build
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+
+	cp -r bin/* $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/bin/
+	cp -r include/* $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/include/
+	cp -r lib/* $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/lib/
+	cp -r cronjobs/* $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/cronjobs/
+	chmod 0755 $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/cronjobs/*
+	cp cgi-bin/viewcvs.cgi $(DESTDIR)/usr/lib/gforge/bin/
+	chmod 0755 $(DESTDIR)/usr/lib/gforge/bin/viewcvs.cgi
+	cp -r etc/httpd.d $(DESTDIR)/usr/share/gforge/etc/
+	cp -r etc/plugins $(DESTDIR)/etc/gforge/
+	cp -r www/* $(DESTDIR)/usr/share/gforge/www/plugins/$(PLUGIN)/
+	find $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/bin/ -type f | xargs chmod 0755
+	find $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/include/ -type f | xargs chmod 0644
+	find $(DESTDIR)/usr/lib/gforge/plugins/$(PLUGIN)/lib/ -type f | xargs chmod 0644
+	find $(DESTDIR)/usr/share/gforge/www/plugins/$(PLUGIN)/ -type f | xargs chmod 0644
+	# clean CVS/baz/SVN dir
+	find $(DESTDIR)/ -type d -name CVS -or -name .arch-ids -or -name .svn | xargs rm -rf
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+#	dh_installdebconf
+	dh_installdocs
+	dh_installexamples
+	dh_installmenu
+#	dh_installlogrotate
+#	dh_installemacsen
+#	dh_installpam
+#	dh_installmime
+#	dh_installinit
+	dh_installcron
+	dh_installman
+	dh_installinfo
+#	dh_undocumented
+	dh_installchangelogs 
+	dh_link
+	dh_strip
+	dh_compress
+	dh_fixperms
+#	dh_makeshlibs
+	dh_installdeb
+#	dh_perl
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure patch unpatch


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/debian/rules
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/11scm60svn
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/11scm60svn	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/11scm60svn	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,5 @@
+  # SVN begin
+  Alias /plugins/scmsvn/ /usr/share/gforge/www/plugins/scmsvn/
+  # SVN end
+
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/12scm60svn.ssl
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/12scm60svn.ssl	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/httpd.d/12scm60svn.ssl	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,3 @@
+  # SVN begin
+  Alias /plugins/scmsvn/ /usr/share/gforge/www/plugins/scmsvn/
+  # SVN end

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,19 @@
+<?php
+ 
+//$default_svn_server = $GLOBALS['sys_default_domain'] ;
+$default_svn_server = "svn." . $GLOBALS['sys_default_domain'] ;
+//$default_svn_server = $GLOBALS['sys_scm_host'];
+$use_ssh = false;
+$use_dav = true;
+$use_ssl = true;
+$svn_root = 'svn';
+$enabled_by_default = 0 ;
+
+$svn_bin = "/usr/bin/svn";
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+ 
+?>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.pl
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.pl	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/config.pl	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,5 @@
+$this_server = $sys_scm_host ;
+# $this_server = $sys_default_domain ;
+# $this_server = "svn." . $sys_default_domain ;
+
+1 ;

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/annotate.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/annotate.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/annotate.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,45 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - annotate - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt" "annotate"]
+
+<hr noshade>
+
+[define class1]vc_row_even[end]
+[define class2]vc_row_odd[end]
+[define last_rev]0[end]
+[define rowclass][class1][end]
+
+<table border="0" cellspacing="0" cellpadding="0" width="100%">
+[for lines]
+  [is lines.rev last_rev]
+  [else]
+    [is rowclass class1]
+      [define rowclass][class2][end]
+    [else]
+      [define rowclass][class1][end]
+    [end]
+  [end]
+
+  <tr class="[rowclass]">
+    <td class="vc_blame_line">[lines.line_number] :</td>
+    <td class="vc_blame_author">
+      [is lines.rev last_rev]&nbsp;[else][lines.author][end]
+    </td>
+    <td class="vc_blame_rev">
+      [is lines.rev last_rev]
+        &nbsp;
+      [else]
+        [if-any lines.diff_url]<a href="[lines.diff_url]">[end][lines.rev][if-any lines.diff_url]</a>[end]
+      [end]
+    </td>
+    <td class="vc_blame_text">[lines.text]</td>
+  </tr>
+  [define last_rev][lines.rev][end]
+[end]
+</table>
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/diff.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/diff.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/diff.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,166 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - diff - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt" "diff"]
+
+<h3 align=center>Diff for /[where] between version [rev1] and [rev2]</h3>
+
+[if-any raw_diff]
+  <pre class="vc_raw_diff">[raw_diff]</pre>
+[else]
+<table border=0 cellspacing=0 cellpadding=0 width="100%">
+  <tr class="vc_diff_header">
+    <th width="50%" valign=top>
+      version [rev1], [date1]
+      [if-any tag1]<br>Tag: [tag1][end]
+    </th>
+    <th width="50%" valign=top>
+      version [rev2], [date2]
+      [if-any tag2]<br>Tag: [tag2][end]
+    </th>
+  </tr>
+
+  [for changes]
+    [is changes.type "header"]
+      <tr class="vc_diff_chunk_header">
+        <td width="50%">
+          <table width="100%" border=1 cellpadding=5>
+            <tr>
+              <td> <b>Line [changes.line1]</b>&nbsp;
+              <span class="vc_diff_chunk_extra">[changes.extra]</span></td>
+            </tr>
+          </table>
+        </td>
+       <td width="50%">
+          <table width="100%" border=1 cellpadding=5>
+            <tr>
+              <td> <b>Line [changes.line2]</b>&nbsp;
+              <span class="vc_diff_chunk_extra">[changes.extra]</span></td>
+            </tr>
+          </table>
+        </td>
+      </tr>
+    [else]
+      [is changes.type "add"]
+        <tr>
+          <td class="vc_diff_empty">&nbsp;</td>
+          <td class="vc_diff_add">&nbsp;[changes.right]</td>
+        </tr>
+      [else]
+        [is changes.type "remove"]
+          <tr>
+            <td class="vc_diff_remove">&nbsp;[changes.left]</td>
+            <td class="vc_diff_empty">&nbsp;</td>
+          </tr>
+        [else]
+          [is changes.type "change"]
+            <tr>
+              [if-any changes.have_left]
+                <td class="vc_diff_change">&nbsp;[changes.left]</td>
+              [else]
+                <td class="vc_diff_change_empty">&nbsp;</td>
+              [end]
+              [if-any changes.have_right]
+                <td class="vc_diff_change">&nbsp;[changes.right]</td>
+              [else]
+                <td class="vc_diff_change_empty">&nbsp;</td>
+              [end]
+            </tr>
+          [else]
+            [is changes.type "no-changes"]
+              <tr>
+                <td colspan=2>&nbsp;</td>
+              </tr>
+              <tr class="vc_diff_empty">
+                <td colspan=2 align=center><br>
+                <b>- No changes -</b><br>&nbsp; </td>
+              </tr>
+            [else]
+              [is changes.type "binary-diff"]
+                <tr>
+                  <td colspan=2>&nbsp;</td>
+                </tr>
+                <tr class="vc_diff_empty">
+                  <td colspan=2 align=center><br>
+                  <b>- Binary file revisions differ -</b><br>&nbsp; </td>
+                </tr>
+              [else]
+                [is changes.type "error"]
+                  <tr>
+                    <td colspan=2>&nbsp;</td>
+                  </tr>
+                  <tr class="vc_diff_empty">
+                    <td colspan=2 align=center> <br>
+                    <b>- ViewCVS depends on rcsdiff and GNU diff to create 
+                    this page.  ViewCVS cannot find GNU diff. Even if you 
+                    have GNU diff installed, the rcsdiff program must be 
+                    configured and compiled with the GNU diff location.
+                    -</b> <br>&nbsp; </td>
+                  </tr>
+                [else]
+                  <tr>
+                    <td class="vc_diff_nochange">&nbsp;[changes.left]</td>
+                    <td class="vc_diff_nochange">&nbsp;[changes.right]</td>
+                  </tr>
+                [end]
+              [end]
+            [end]
+          [end]
+        [end]
+      [end]
+    [end]
+  [end]
+</table>
+[end]
+
+<br><hr noshade width="100%">
+
+<table border=0 cellpadding=10>
+  <tr>
+    <td>
+      <form method=get action="[diff_format_action]">
+        [diff_format_hidden_values]
+        <input type=checkbox name="makepatch" value="1"> 
+        Generate output suitable for use with a patch program<br>
+        <select name="diff_format" onchange="submit()">
+          <option value="h" [is diff_format "h"]selected[end]>Colored Diff</option>
+          <option value="l" [is diff_format "l"]selected[end]>Long Colored Diff</option>
+          <option value="u" [is diff_format "u"]selected[end]>Unidiff</option>
+          <option value="c" [is diff_format "c"]selected[end]>Context Diff</option>
+          <option value="s" [is diff_format "s"]selected[end]>Side by Side</option>
+        </select>
+        <input type=submit value="Show">
+      </form>
+    </td>
+    <td>
+[if-any raw_diff]
+      &nbsp;
+[else]
+      <table border=1>
+        <tr>
+          <td>Legend:<br>
+            <table border=0 cellspacing=0 cellpadding=1>
+              <tr>
+                <td align=center class="vc_diff_remove">Removed from v.[rev1]</td>
+                <td class="vc_diff_empty">&nbsp;</td>
+              </tr>
+              <tr>
+                <td align=center colspan=2 class="vc_diff_change">changed lines</td>
+              </tr>
+              <tr>
+                <td class="vc_diff_empty">&nbsp;</td>
+                <td align=center class="vc_diff_add">Added in v.[rev2]</td>
+              </tr>
+            </table>
+          </td>
+        </tr>
+      </table>
+[end]
+    </td>
+  </tr>
+</table>
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/dir_alternate.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/dir_alternate.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/dir_alternate.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,152 @@
+[include "include/dir_header.ezt"]
+
+<table width="100%" border=0 cellspacing=1 cellpadding=2>
+<thead>
+<tr>
+  <th class="vc_header[is sortby "rev"]_sort[end]">
+    <a href="[sortby_rev_href]#dirlist">Rev.</a>
+    [is sortby "rev"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+  <th class="vc_header[is sortby "file"]_sort[end]"
+    [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+    <a href="[sortby_file_href]#dirlist">File</a>
+    [is sortby "file"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+  <th class="vc_header[is sortby "date"]_sort[end]">
+    <a href="[sortby_date_href]#dirlist">Age</a>
+    [is sortby "date"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+  <th class="vc_header[is sortby "author"]_sort[end]">
+    <a href="[sortby_author_href]#dirlist">Author</a>
+    [is sortby "author"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+[is cfg.options.show_logs "1"]
+  <th class="vc_header[is sortby "log"]_sort[end]">
+    <a href="[sortby_log_href]#dirlist">Last log entry</a>
+    [is sortby "log"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+[end]
+</tr>
+</thead>
+
+<tbody>
+[for rows]
+  <tr class="vc_row_[if-index rows even]even[else]odd[end]">
+  [is rows.type "unreadable"]
+    <td>&nbsp;</td> [# revision ]
+    <td [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+      <a name="[rows.anchor]">[rows.name]</a>
+    </td>
+    <td colspan=[is cfg.options.show_logs "1"]3[else]2[end]>
+       <i>This entry is unreadable</i>
+    </td>
+  [else]
+    [is rows.type "dir"]
+      [is rows.state "error"]
+        <td>&nbsp;</td> [# revision ]
+      [else]
+        <td>&nbsp;[is roottype "svn"]<a href="[rows.rev_href]"><b>[rows.rev]</b></a>[end]</td>
+      [end]
+      <td [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+        <a name="[rows.anchor]" href="[rows.href]">
+        <img src="[icons]/small/dir.gif" alt="(dir)" border=0 width=16 height=16>
+        [rows.name]/</a>
+        [is roottype "cvs"]
+          [is rows.name "Attic"]
+            &nbsp; <a href="[show_attic_href]#dirlist">[[]show contents]</a>
+          [end]
+        [end]
+      </td>
+      [is rows.state "error"]
+        <td colspan=[is cfg.options.show_logs "1"]3[else]2[end]>
+          <i>Last modification unavailable - could not read CVS information</i>
+        </td>
+      [else]
+        [is rows.state "none"]
+          <td>&nbsp;</td> [# age ]
+          <td>&nbsp;</td> [# author ]
+          [is cfg.options.show_logs "1"]<td>&nbsp;</td> [# log ][end]
+        [else]
+          <td>&nbsp;[rows.time]</td>
+          [if-any rows.author]
+            <td>&nbsp;[rows.author]</td>
+          [end]
+          [is cfg.options.show_logs "1"]
+            [if-any rows.show_log]
+              <td>&nbsp;[rows.log][is roottype "cvs"] 
+                <i>(from [rows.log_file]/[rows.log_rev])</i>[end]</td>
+            [else]
+              <td>&nbsp;</td>
+            [end]
+          [end]
+        [end]
+      [end]
+          
+    [else]
+      [is rows.state "error"]
+        <td>&nbsp;</td>
+        <td [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+          <a name="[rows.anchor]">[rows.name]</a>
+        </td>
+        <td colspan=[is cfg.options.show_logs "1"]3[else]2[end]>
+         <i>CVS information is unreadable</i>
+        </td>
+      [else]
+        <td>&nbsp;<a href="[rows.href]"><b>[rows.rev]</b></a></td>
+        <td><a name="[rows.anchor]" href="[rows.rev_href]">
+            <img src="[icons]/small/text.gif" alt="(file)" border=0
+                 width=16 height=16>
+            [rows.name]
+            </a>
+            [is rows.state "dead"]
+              [# don't let this phrase/link be wrapped ]
+              [if-any view_tag](not&nbsp;exist)[else](in&nbsp;the&nbsp;Attic)[end][if-any attic_showing]&nbsp;<a href="[hide_attic_href]#dirlist">[[]hide][end]</a>
+            [end]
+        </td>
+        [is cfg.options.use_cvsgraph "1"]
+          [if-any rows.graph_href]
+            <td width="1%"><a href="[rows.graph_href]"><img
+              src="[docroot]/images/cvsgraph_16x16.png"
+              alt="(graph)" width=16 height=16 border=0>
+            </a></td>
+          [else]
+            <td>&nbsp;</td>
+          [end]
+        [end]
+        <td>&nbsp;[rows.time]</td>
+        [if-any rows.author]
+          <td>&nbsp;[rows.author]</td>
+        [end]
+        [is cfg.options.show_logs "1"]
+          <td>&nbsp;[if-any rows.show_log][rows.log][end]</td>
+        [end]
+      [end]
+    [end]
+  [end]
+  </tr>
+[end]
+</tbody>
+
+</table>
+
+[include "include/dir_footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/directory.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/directory.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/directory.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,146 @@
+[include "include/dir_header.ezt"]
+
+<table width="100%" border=0 cellspacing=1 cellpadding=2>
+<thead>
+<tr>
+  <th class="vc_header[is sortby "file"]_sort[end]"
+    [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+    <a href="[sortby_file_href]#dirlist">File</a>
+    [is sortby "file"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+  <th class="vc_header[is sortby "rev"]_sort[end]">
+    <a href="[sortby_rev_href]#dirlist">Rev.</a>
+    [is sortby "rev"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+  <th class="vc_header[is sortby "date"]_sort[end]">
+    <a href="[sortby_date_href]#dirlist">Age</a>
+    [is sortby "date"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+  <th class="vc_header[is sortby "author"]_sort[end]">
+    <a href="[sortby_author_href]#dirlist">Author</a>
+    [is sortby "author"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+[is cfg.options.show_logs "1"]
+  <th class="vc_header[is sortby "log"]_sort[end]">
+    <a href="[sortby_log_href]#dirlist">Last log entry</a>
+    [is sortby "log"]
+      <img class="vc_sortarrow" alt="[is sortdir "down"](rev)[end]"
+        width="13" height="13"
+        src="[docroot]/images/[is sortdir "up"]down[else]up[end].png" />
+    [end]
+  </th>
+[end]
+</tr>
+</thead>
+
+<tbody>
+[for rows]
+  <tr class="vc_row_[if-index rows even]even[else]odd[end]">
+  [is rows.type "unreadable"]
+    <td [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+      <a name="[rows.anchor]">[rows.name]</a>
+    </td>
+    <td colspan=[is cfg.options.show_logs "1"]4[else]3[end]>
+       <i>This entry is unreadable</i>
+    </td>
+  [else]
+    [is rows.type "dir"]
+      <td [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+        <a name="[rows.anchor]" href="[rows.href]">
+        <img src="[icons]/small/dir.gif" alt="(dir)" border=0 width=16 height=16>
+        [rows.name]/</a>
+        [is roottype "cvs"]
+          [is rows.name "Attic"]
+            &nbsp; <a href="[show_attic_href]#dirlist">[[]show contents]</a>
+          [end]
+        [end]
+      </td>
+      [is rows.state "error"]
+        <td colspan=[is cfg.options.show_logs "1"]4[else]3[end]>
+          <i>Last modification unavailable - could not read CVS information</i>
+        </td>
+      [else]
+        <td>&nbsp;[is roottype "svn"]<a href="[rows.rev_href]"><b>[rows.rev]</b></a>[end]</td>
+        [is rows.state "none"]
+          <td>&nbsp;</td> [# age ]
+          <td>&nbsp;</td> [# author ]
+          [is cfg.options.show_logs "1"]<td>&nbsp;</td> [# log ][end]
+        [else]
+          <td>&nbsp;[rows.time]</td>
+          [if-any rows.author]
+            <td>&nbsp;[rows.author]</td>
+          [end]
+          [is cfg.options.show_logs "1"]
+            [if-any rows.show_log]
+              <td>&nbsp;[rows.log][is roottype "cvs"] 
+                <i>(from [rows.log_file]/[rows.log_rev])</i>[end]</td>
+            [else]
+              <td>&nbsp;</td>
+            [end]
+          [end]
+        [end]
+      [end]
+          
+    [else]
+      [is rows.state "error"]
+        <td [is cfg.options.use_cvsgraph "1"]colspan=2[end]>
+          <a name="[rows.anchor]">[rows.name]</a>
+        </td>
+        <td colspan=[is cfg.options.show_logs "1"]4[else]3[end]>
+         <i>CVS information is unreadable</i>
+        </td>
+      [else]
+        <td><a name="[rows.anchor]" href="[rows.href]">
+            <img src="[icons]/small/text.gif" alt="(file)" border=0
+                 width=16 height=16>
+            [rows.name]
+            </a>
+            [is rows.state "dead"]
+              [# don't let this phrase/link be wrapped ]
+              [if-any view_tag](not&nbsp;exist)[else](in&nbsp;the&nbsp;Attic)[end][if-any attic_showing]&nbsp;<a href="[hide_attic_href]#dirlist">[[]hide][end]</a>
+            [end]
+        </td>
+        [is cfg.options.use_cvsgraph "1"]
+          [if-any rows.graph_href]
+            <td width="1%"><a href="[rows.graph_href]"><img
+              src="[docroot]/images/cvsgraph_16x16.png"
+              alt="(graph)" width=16 height=16 border=0>
+            </a></td>
+          [else]
+            <td>&nbsp;</td>
+          [end]
+        [end]
+        <td>&nbsp;<a href="[rows.rev_href]"><b>[rows.rev]</b></a></td>
+        <td>&nbsp;[rows.time]</td>
+        [if-any rows.author]
+          <td>&nbsp;[rows.author]</td>
+        [end]
+        [is cfg.options.show_logs "1"]
+          <td>&nbsp;[if-any rows.show_log][rows.log][end]</td>
+        [end]
+      [end]
+    [end]
+  [end]
+  </tr>
+[end]
+</tbody>
+
+</table>
+
+[include "include/dir_footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/error.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/error.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/error.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,14 @@
+<h3>An Exception Has Occurred</h3>
+
+[if-any msg]
+  <p><pre>[msg]</pre></p>
+[end]
+[if-any status]
+  <h4>HTTP Response Status</h4>
+  <p><pre>[status]</pre></p>
+  <hr />
+[end]
+<h4>Python Traceback</h4>
+<p><pre>
+[stacktrace]
+</pre></p>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/graph.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/graph.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/graph.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,18 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - graph - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt" "graph"]
+
+<center>
+<h1>Revision graph of [path]</h1>
+
+[imagemap]
+<img border="0" usemap="#MyMapName"
+  src="[imagesrc]" 
+  alt="Revisions of [path]">
+</center>
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,12 @@
+[if-any branch]
+  Default branch: [branch]
+  <br>
+  Bookmark a link to HEAD:
+  (<a href="[view_href]">view</a>)
+  (<a href="[download_href]">download</a>)
+  [if-any download_text_href](<a href="[download_text_href]">as text</a>)[end]
+[else]
+  No default branch
+[end]
+<br>
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch_form.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch_form.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/branch_form.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,19 @@
+[if-any branch_names]
+  <hr noshade>
+  <a name=branch></a>
+  <form method=GET action="[branch_select_action]">
+    [branch_select_hidden_values]
+    View only Branch:
+    [if-any current_root]
+    <input type="hidden" name="root" value="[current_root]">
+    [end]
+    <select name="only_with_tag" onchange="submit()">
+      <option value="" [is view_tag ""]selected[end]>Show all branches</option>
+      [for branch_names]
+        <option value="[branch_names]" [is branch_names view_tag]selected[end]>[branch_names]</option>
+      [end]
+    </select>
+    <input type=submit value="  View Branch  ">
+  </form>
+[end]
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/diff_form.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/diff_form.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/diff_form.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,62 @@
+<a name="diff"></a>
+  <hr noshade>
+  This form allows you to request diffs between any two revisions of
+  a file. You may select a symbolic revision name using the selection
+  box or you may type in a numeric name using the type-in text box.
+  <p>
+  <form method="get" action="[diff_select_action]" name="diff_select">
+  [diff_select_hidden_values]
+
+  <table border="0" cellpadding="2" cellspacing="0">
+  <tr>
+  <td>&nbsp;</td>
+  <td>
+  Diffs between
+[if-any tags]
+  <select name="r1">
+    <option value="text" selected>Use Text Field</option>
+  [for tags]
+    <option value="[tags.rev]:[tags.name]">[tags.name]</option>
+  [end]
+  </select>
+[else]
+  <input type="hidden" name="r1" value="text" />
+[end]
+  <input type="TEXT" size="12" name="tr1" value="[tr1]"
+        [if-any tags]onChange="document.diff_select.r1.selectedIndex=0"[end]>
+
+  and
+[if-any tags]
+  <select name="r2">
+    <option value="text" selected>Use Text Field</option>
+  [for tags]
+    <option value="[tags.rev]:[tags.name]">[tags.name]</option>
+  [end]
+  </select>
+[else]
+  <input type="hidden" name="r2" value="text" />
+[end]
+  <input type="TEXT" size="12" name="tr2" value="[tr2]"
+        [if-any tags]onChange="document.diff_select.r1.selectedIndex=0"[end]>
+  </td>
+  </tr>
+  <tr>
+  <td><input type="checkbox" name="makepatch" id="makepatch" value="1"></td>
+  <td><label for="makepatch">Generate output suitable for use with a patch
+  program</label></td>
+  </tr>
+  <tr>
+  <td>&nbsp;</td>
+  <td>
+  Type of Diff should be a
+  <select name="diff_format" onchange="submit()">
+    <option value="h" [is diff_format "h"]selected[end]>Colored Diff</option>
+    <option value="l" [is diff_format "l"]selected[end]>Long Colored Diff</option>
+    <option value="u" [is diff_format "u"]selected[end]>Unidiff</option>
+    <option value="c" [is diff_format "c"]selected[end]>Context Diff</option>
+    <option value="s" [is diff_format "s"]selected[end]>Side by Side</option>
+  </select>
+  <input type="submit" value="  Get Diffs  "></form>
+  </td>
+  </tr>
+  </table>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_footer.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_footer.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_footer.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,94 @@
+[if-any no_match]
+  <p><b>NOTE:</b> There are [num_files] files, but none match the
+  current selection criteria.
+[end]
+
+[if-any unreadable]
+  <hr size=1 noshade>
+  <b>NOTE:</b> One or more files were unreadable. The files in the CVS
+  repository should be readable by the web server process. Please
+  report this condition to the administrator of this CVS repository.
+[end]
+
+[if-any selection_form]
+  <hr size=1 noshade>
+  <form method=get action="[search_tag_action]">
+    [search_tag_hidden_values]
+    [# this table holds the selectors on the left, and reset on the right ]
+    <table>
+      [if-any has_tags]
+        <tr>
+          <td> Show files using tag: </td>
+          <td>
+            <select name=only_with_tag onchange="submit()">
+            <option value="">Select Branch</option>
+            [if-any branch_tags]
+              <optgroup label="Branches">
+              [for branch_tags]
+                [is branch_tags view_tag]
+                  <option selected>[branch_tags]</option>
+                [else]
+                  <option>[branch_tags]</option>
+                [end]
+              [end]
+              </optgroup>
+            [end]
+            <optgroup label="Non-branch tags">
+            [for plain_tags]
+              [is plain_tags view_tag]
+                <option selected>[plain_tags]</option>
+              [else]
+                <option>[plain_tags]</option>
+              [end]
+            [end]
+            </optgroup>
+            </select>
+          </td>
+          <td> &nbsp; </td>
+        </tr>
+      [end]
+
+      [is num_files "0"]
+      [else]
+        [is cfg.options.use_re_search "1"]
+          <tr>
+            <td>Show files containing the regular expression:</td>
+            <td><input type="text" name="search" value="[search_re]"></td>
+            <td> &nbsp; </td>
+          </tr>
+        [end]
+
+        <tr>
+          <td> &nbsp; </td>
+          <td> <input type="submit" value="Show"> </td>
+      [end]
+  [# I don't like closing the form here, but I thought this is better than 
+     having forms inside forms ]
+  </form>
+      [if-any view_tag]
+        <td valign=bottom>
+          <form method=get action="[search_tag_action]">
+            [search_tag_hidden_values]
+            <input type="submit" value="Show all files">
+          </form>
+        </td>
+      [else]
+        [if-any search_re]
+          <td valign=bottom>
+            <form method=get action="[search_tag_action]">
+              [search_tag_hidden_values]
+              <input type="submit" value="Show all files">
+            </form>
+          </td>
+        [end]
+      [end]
+    </tr>
+  </table>
+[end]
+
+[# if you want to disable tarball generation remove the following: ]
+[if-any tarball_href]
+  <p><a href="[tarball_href]">Download tarball</a></p>
+[end]
+
+[include "footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_header.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_header.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/dir_header.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,68 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - directory - [location][end]
+  [define help_href][docroot]/help_[if-any where]dir[else]root[end]view.html[end]
+[# end]
+
+[include "header.ezt" "directory"]
+
+[if-any where][else]
+  <!-- you may insert repository access instructions here -->
+
+[end]
+
+<table>
+<tr><td>Current directory:</td><td><b>[nav_path]</b></td></tr>
+
+[is roottype "svn"]
+<tr>
+  <td>Current revision:</td>
+  <td><a href="[tree_rev_href]">[tree_rev]</a></td>
+</tr>
+<tr>
+  <td>Jump to directory revision:</td>
+  <td>
+    <form method=get action="[jump_rev_action]">
+    [jump_rev_hidden_values]
+    <input type="text" name="rev" value="[jump_rev]">
+    <input type=submit value="Go">
+    </form>
+  </td>
+</tr>
+[end]
+[if-any view_tag]
+<tr><td>Current tag:</td><td><b>[view_tag]</b></td></tr>
+[end]
+[if-any search_re]
+<tr><td>Current search:</td><td><b>[search_re]</b></td></tr>
+[end]
+[if-any num_files]
+<tr><td>Files shown:</td><td><b>[files_shown]</b></td></tr>
+[end]
+[if-any queryform_href]
+<tr>
+  <td>Query:</td>
+  <td><a href="[queryform_href]">Query revision history</a></td>
+</tr>
+[end]
+</table>
+  [is cfg.options.use_pagesize "0"]
+  [else]
+    [is picklist_len "1"]
+    [else]
+      <form method=get action="[dir_paging_action]">
+        [dir_paging_hidden_values]
+        <input type=submit value="Go to:">
+        <select name=dir_pagestart  onchange="submit()">
+          [for picklist]
+            <option [is picklist.count dir_pagestart]selected[end] value="[picklist.count]">Page [picklist.page]: [picklist.start] to [picklist.end]</option>
+          [end]
+        </select>
+      </form>
+    [end]
+  [end]
+
+<p><a name="dirlist"></a></p>
+
+<hr noshade>
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/footer.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/footer.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/footer.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,21 @@
+[# standard footer used by all ViewCVS pages ]
+
+<hr noshade>
+
+<table width="100%" border="0" cellpadding="0" cellspacing="0">
+<tr>
+  <td align="left">
+    <address>[cfg.general.address]</address><br />
+    Powered by <a href="http://viewcvs.sourceforge.net/">ViewCVS [vsn]</a>
+  </td>
+  <td align="right">
+    <img src="/doc/viewcvs/images/logo.png" alt="(Powered by ViewCVS)" border="0" 
+              width="128" height="48" /><br />
+    <h3><a target="_blank" href="[help_href]">ViewCVS and CVS/SVN Help</a></h3>
+  </td>
+</tr>
+</table>
+<!--
+</body>
+</html>
+-->
\ No newline at end of file

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/header.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/header.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/header.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1 @@
+<h1>[location]</h1>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/paging.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/paging.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/paging.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,18 @@
+  [is cfg.options.use_pagesize "0"]
+  [else]
+    [is picklist_len "1"]
+    [else]
+      <hr noshade>
+      <form method=GET action="[log_paging_action]">
+        [log_paging_hidden_values]
+        <input type=submit value="Go to:">
+        <select name=log_pagestart  onchange="submit()">
+          [for picklist]
+            <option [is picklist.count log_pagestart]selected[end] value="[picklist.count]">Page [picklist.page]: [picklist.start] - [picklist.end]</option>
+          [end]
+        </select>
+      </form>
+    [end]
+  [end]
+
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/sort.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/sort.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/sort.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,13 @@
+<hr noshade>
+<a name=logsort></a>
+<form method=get action="[logsort_action]">
+  [logsort_hidden_values]
+  Sort log by:
+  <select name="logsort" onchange="submit()">
+    <option value="cvs" [is logsort "cvs"]selected[end]>Not sorted</option>
+    <option value="date" [is logsort "date"]selected[end]>Commit date</option>
+    <option value="rev" [is logsort "rev"]selected[end]>Revision</option>
+  </select>
+  <input type=submit value="  Sort  ">
+</form>
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/view_tag.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/view_tag.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/include/view_tag.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,5 @@
+[if-any view_tag]
+  Current tag: [view_tag] <br>
+[end]
+
+

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,155 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - log - [location][end]
+  [define help_href][docroot]/help_log.html[end]
+[# end]
+
+[include "include/header.ezt" "log"]
+
+<hr noshade>
+
+[include "include/branch.ezt"]
+
+[include "include/view_tag.ezt"]
+
+[include "include/paging.ezt"]
+
+[for entries]
+  <hr size=1 noshade>
+
+  [is roottype "svn"]
+    [is entries.filename where][else]Filename: [entries.filename]<br>[end]
+  [end]
+
+  [is entries.state "dead"]
+    Revision <b>[entries.rev]</b>
+  [else]
+    <a name="rev[entries.rev]"></a>
+    [for entries.tag_names]<a name="[entries.tag_names]"></a>
+    [end]
+    [for entries.branch_names]<a name="[entries.branch_names]"></a>
+    [end]
+
+    Revision [is roottype "svn"]<a href="[entries.revision_href]"><b>[entries.rev]</b></a>[else]<b>[entries.rev]</b>[end]
+    [is pathtype "file"] - 
+      (<a href="[entries.view_href]">view</a>)
+      (<a href="[entries.download_href]">download</a>)
+      [if-any entries.download_text_href](<a href="[entries.download_text_href]">as text</a>)[end]
+      [# if you don't want to allow annotation, then remove this line]
+      [is roottype "svn"][else](<a href="[entries.annotate_href]">annotate</a>)[end]
+
+      [# if you don't want to allow select for diffs then remove this section]
+      [is entries.rev rev_selected]
+        - <b>[[]selected]</b>
+      [else]
+        - <a href="[entries.sel_for_diff_href]">[[]select for diffs]</a>
+      [end]
+    [end]
+  [end]
+
+  [if-any entries.vendor_branch]
+    <i>(vendor branch)</i>
+  [end]
+
+  <br>
+
+  [is roottype "svn"]
+    [if-index entries last]Added[else]Modified[end]
+  [end]
+
+  <i>[entries.date_str]</i> ([entries.ago] ago) by <i>[entries.author]</i>
+
+  [if-any entries.branches]
+    <br>Branch:
+    [for entries.branches]
+      <a href="[entries.branches.href]"><b>[entries.branches.name]</b></a>[if-index entries.branches last][else],[end]
+    [end]
+  [end]
+
+  [if-any entries.tags]
+    <br>CVS Tags:
+    [for entries.tags]
+      <a href="[entries.tags.href]"><b>[entries.tags.name]</b></a>[if-index entries.tags last][else],[end]
+    [end]
+  [end]
+
+  [if-any entries.branch_points]
+    <br>Branch point for:
+    [for entries.branch_points]
+      <a href="[entries.branch_points.href]"><b>[entries.branch_points.name]</b></a>[if-index entries.branch_points last][else],[end]
+    [end]
+  [end]
+
+  [if-any entries.prev]
+    [if-any entries.changed]
+      [is roottype "cvs"]
+      <br>Changes since <b>[entries.prev]: [entries.changed] lines</b>
+      [end]
+    [end]
+  [end]
+
+  [is roottype "svn"]
+    [if-any entries.size]
+    <br>File length: [entries.size] byte(s)</b>
+    [end]
+
+    [if-any entries.copy_path]
+    <br>Copied from: <a href="[entries.copy_href]">[entries.copy_path]</a> revision [entries.copy_rev]
+    [end]
+  [end]
+
+  [is entries.state "dead"]
+    <br><b><i>FILE REMOVED</i></b>
+  [else]
+   [is pathtype "file"]
+    [if-any entries.prev]
+      <br>Diff to <a href="[entries.diff_to_prev_href]">previous [entries.prev]</a>
+      [if-any human_readable]
+      [else]
+        (<a href="[entries.diff_to_prev_href]&amp;diff_format=h">colored</a>)
+      [end]
+    [end]
+
+    [is roottype "cvs"]
+      [if-any entries.branch_point]
+        , to <a href="[entries.diff_to_branch_href]">branch point [entries.branch_point]</a>
+        [if-any human_readable]
+        [else]
+           (<a href="[entries.diff_to_branch_href]&amp;diff_format=h">colored</a>)
+        [end]
+      [end]
+  
+      [if-any entries.next_main]
+        , to <a href="[entries.diff_to_main_href]">next main [entries.next_main]</a>
+        [if-any human_readable]
+        [else]
+           (<a href="[entries.diff_to_main_href]&amp;diff_format=h">colored</a>)
+        [end]
+      [end]
+    [end]
+
+    [if-any entries.diff_to_sel_href]
+      [if-any entries.prev], [else]<br>Diff[end]
+        to <a href="[entries.diff_to_sel_href]">selected [rev_selected]</a>
+      [if-any human_readable]
+      [else]
+        (<a href="[entries.diff_to_sel_href]&amp;diff_format=h">colored</a>)
+      [end]
+    [end]
+   [end]
+  [end]
+
+<pre class="vc_log">[entries.html_log]</pre>
+[end]
+
+[include "include/paging.ezt"]
+
+[is pathtype "file"]
+  [include "include/diff_form.ezt"]
+[end]
+
+[include "include/branch_form.ezt"]
+
+[include "include/sort.ezt"]
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log_table.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log_table.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/log_table.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,179 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - log - [location][end]
+  [define help_href][docroot]/help_logtable.html[end]
+[# end]
+
+[include "include/header.ezt" "logtable"]
+
+<hr noshade>
+
+[include "include/branch.ezt"]
+
+[include "include/view_tag.ezt"]
+
+[include "include/paging.ezt"]
+
+<hr noshade>
+<table width="100%" border="0" cellspacing="1" cellpadding="2">
+<thead>
+<tr>
+  <th align="left" class="vc_header[is logsort "rev"]_sort[end]">Revision</th>
+  [is pathtype "file"]
+  <th align="left" class="vc_header">Tasks</th>
+  <th align="left" class="vc_header">Diffs</th>
+  [end]
+  [is roottype "cvs"]
+  <th align="left" class="vc_header">Branches/<br>Tags</th>
+  [end]
+  <th align="left" class="vc_header[is logsort "date"]_sort[end]">Age</th>
+  <th align="left" class="vc_header">Author</th>
+</tr>
+</thead>
+[for entries]
+  <tbody>
+  <tr valign="top" class="vc_row_[if-index entries even]even[else]odd[end]">
+
+    [# Revision column]
+    <td rowspan="2">
+      [is roottype "svn"]<a href="[entries.revision_href]"><b>[entries.rev]</b></a>[else]<b>[entries.rev]</b>[end]
+      <a name="rev[entries.rev]"></a>
+    </td>
+
+    [is pathtype "file"]
+      <td>
+      [# Tasks column]
+        <a href="[entries.view_href]"><b>View</b></a><br>
+        <a href="[entries.download_href]"><b>Download</b></a><br>
+        [if-any entries.download_text_href]<a href="[entries.download_text_href]"><b>As text</b></a><br>[end]
+
+        [# if you don't want to allow annotation, then remove this line]
+        [is roottype "svn"][else]<a href="[entries.annotate_href]"><b>Annotate</b></a><br>[end]
+      </td>
+      <td>
+      [is entries.state "dead"]
+        <b><i>FILE REMOVED</i></b>
+      [else]
+      [# if you don't want to allow select for diffs then remove this section]
+      [is entries.rev rev_selected]
+        <b>[[]selected]</b><br>
+      [else]
+      <a href="[entries.sel_for_diff_href]"><b>[[]select&nbsp;for&nbsp;diffs]</b></a><br>
+      [end]
+        [if-any entries.diff_to_sel_href]
+          <a href="[entries.diff_to_sel_href]"><b>Diff&nbsp;to&nbsp;selected&nbsp;[rev_selected]</b></a>
+          [if-any human_readable]
+          [else]
+            (<a href="[entries.diff_to_sel_href]&amp;diff_format=h"><b>colored</b></a>)
+          [end]<br />
+        [end]
+        [if-any entries.prev]
+          <a href="[entries.diff_to_prev_href]"><b>Diff&nbsp;to&nbsp;previous&nbsp;[entries.prev]</b></a>
+          [if-any human_readable]
+          [else]
+            (<a href="[entries.diff_to_prev_href]&amp;diff_format=h"><b>colored</b></a>)
+          [end]<br />
+        [end]
+      [end]  
+      </td>
+    [end]
+    [is roottype "cvs"]
+    <td>
+      [# Branches column]
+      [if-any entries.vendor_branch]
+        <i>vendor branch</i><br>
+      [end]
+      [if-any entries.branches]
+        [for entries.branches]
+          <a href="[entries.branches.href]"><b>[entries.branches.name]</b></a><br>
+        [end]
+      [end]
+      [if-any entries.branch_points]
+        Branch point for:
+        [for entries.branch_points]
+          <a href="[entries.branch_points.href]"><b>[entries.branch_points.name]</b></a><br>
+        [end]
+      [end]
+      [if-any entries.next_main]
+        <a href="[entries.diff_to_main_href]"><b>Diff&nbsp;to&nbsp;next&nbsp;MAIN&nbsp;[entries.next_main]</b></a>
+        [if-any human_readable]
+        [else]
+          (<a href="[entries.diff_to_main_href]&amp;diff_format=h"><b>colored</b></a>)
+        [end]<br />
+      [end]
+      [if-any entries.branch_point]
+        <a href="[entries.diff_to_branch_href]"><b>Diff&nbsp;to&nbsp;branch&nbsp;point&nbsp;[entries.branch_point]</b></a>
+        [if-any human_readable]
+        [else]
+          (<a href="[entries.diff_to_branch_href]&amp;diff_format=h"><b>colored</b></a>)
+        [end]<br />
+      [end]
+
+      [# Tags ]
+      [if-any entries.tags]
+        <form method=get action="[branch_select_action]" >
+          [branch_select_hidden_values]
+          <select name="only_with_tag" onChange="submit()">
+          <option value="" [is view_tag ""]selected[end]>Show all tags</option>
+          [for entries.tags]
+            <option [is view_tag entries.tags.name]selected[end]>[entries.tags.name]</option>
+          [end]
+          </select>
+        </form>
+      [else]&nbsp;
+      [end]
+    </td>
+    [end]
+
+    [# Time column]
+    <td>
+      [is roottype "svn"]
+        [if-index entries last]Added[else]Modified[end]
+      [end]
+      [entries.ago] ago<br><i>[entries.date_str]</i>
+      [is roottype "cvs"]
+        [if-any entries.prev]
+          [if-any entries.changed]
+            <br>Changes since <b>[entries.prev]: [entries.changed] lines</b>
+          [end]
+        [end]
+      [end]
+    </td>
+
+    [# Author column]
+    <td>
+      [entries.author]
+    </td>
+
+  </tr>
+  <tr class="vc_row_[if-index entries even]even[else]odd[end]">
+    <td colspan=5>
+      [is roottype "svn"]
+        [is entries.filename where][else]<b>File name: </b>[entries.filename]<br>[end]
+        [if-any entries.size]
+          <b>File length: </b>[entries.size] byte(s)<br>
+        [end]
+
+        [if-any entries.copy_path]
+           <b>Copied from: </b><a href="[entries.copy_href]">[entries.copy_path]</a> revision [entries.copy_rev]<br>
+        [end]
+      [end]
+
+      <b>Log: </b><pre class="vc_log">[entries.html_log]</pre>
+    </td>
+  </tr>
+  </tbody>
+[end]
+</table>
+
+[include "include/paging.ezt"]
+
+[is pathtype "file"]
+  [include "include/diff_form.ezt"]
+[end]
+
+[include "include/branch_form.ezt"]
+
+[include "include/sort.ezt"]
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/markup.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/markup.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/markup.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,52 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - markup - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt" "markup"]
+
+<div class="vc_summary">
+File: [nav_file]
+
+(<a href="[download_href]"><b>download</b></a>)
+[if-any download_text_href](<a href="[download_text_href]"><b>as text</b></a>)[end]
+
+<br>
+
+[if-any log]
+  Revision: <b>[rev]</b>[if-any vendor_branch] <i>(vendor branch)</i>[end],
+  <i>[date_str]</i> ([ago] ago) by <i>[author]</i>
+  
+  [if-any branches]
+    <br>Branch: <b>[branches]</b>
+  [end]
+  [if-any tags]
+    <br>CVS Tags: <b>[tags]</b>
+  [end]
+  [if-any branch_points]
+    <br>Branch point for: <b>[branch_points]</b>
+  [end]
+  [is roottype "cvs"]
+    [if-any changed]
+      <br>Changes since <b>[prev]: [changed] lines</b>
+    [end]
+  [end]
+  [is roottype "svn"]
+    <br>File size: [size] byte(s)
+  [end]
+  [is state "dead"]
+    <br><b><i>FILE REMOVED</i></b>
+  [end]
+  <pre class="vc_log">[log]</pre>
+[else]
+  Revision: <b>[rev]</b><br>
+  [if-any tag]
+    Tag: <b>[tag]</b><br>
+  [end]
+[end]
+</div>
+
+[markup]
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,244 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<!-- ViewCVS       -- http://viewcvs.sourceforge.net/
+     by Greg Stein -- mailto:gstein at lyra.org  -->
+
+<html>
+<head>
+  <title>[cfg.general.main_title] - query</title>
+  <link rel="stylesheet" href="[docroot]/styles.css" type="text/css">
+</head>
+
+<body>
+
+[# setup page definitions]
+  [define help_href][docroot]/help_query.html[end]
+[# end]
+
+  <p> 
+    Select your parameters for querying the CVS commit database.  You
+    can search for multiple matches by typing a comma-seperated list
+    into the text fields.  Regular expressions, and wildcards are also
+    supported.  Blank text input fields are treated as wildcards.
+  </p>
+  <p>
+    Any of the text entry fields can take a comma-seperated list of
+    search arguments.  For example, to search for all commits from
+    authors <i>jpaint</i> and <i>gstein</i>, just type: <b>jpaint,
+    gstein</b> in the <i>Author</i> input box.  If you are searching
+    for items containing spaces or quotes, you will need to quote your
+    request.  For example, the same search above with quotes is:
+    <b>"jpaint", "gstein"</b>.
+  </p>
+  <p>                           
+
+    Wildcard and regular expression searches are entered in a similar
+    way to the quoted requests.  You must quote any wildcard or
+    regular expression request, and a command charactor preceeds the
+    first quote.  The command charactor <b>l</b> is for wildcard
+    searches, and the wildcard charactor is a percent (<b>%</b>).  The
+    command charactor for regular expressions is <b>r</b>, and is
+    passed directly to MySQL, so you'll need to refer to the MySQL
+    manual for the exact regex syntax.  It is very similar to Perl.  A
+    wildard search for all files with a <i>.py</i> extention is:
+    <b>l"%.py"</b> in the <i>File</i> input box.  The same search done
+    with a regular expression is: <b>r".*\.py"</b>.
+  </p>
+  <p>                  
+    All search types can be mixed, as long as they are seperated by
+    commas.
+  </p>                                                    
+
+<form method=get>
+
+<div class="vc_query_form">
+<table border=0 cellspacing=0 cellpadding=2 width=100%>
+ <tr>
+  <td>
+   <table>
+    <tr>
+     <td valign=top>
+
+      <table>
+       <tr>
+        <td align=right>CVS Repository:</td>
+        <td>
+         <input type=text name=repository size=40 value="[repository]">
+        </td>
+       </tr>
+       <tr>
+        <td align=right>CVS Branch:</td>
+        <td>
+         <input type=text name=branch size=40 value="[branch]">
+        </td>
+       </tr>
+       <tr>
+        <td align=right>Directory:</td>
+        <td>
+         <input type=text name=directory size=40 value="[directory]">
+        </td>
+       </tr>
+       <tr>
+        <td align=right>File:</td>
+        <td>
+         <input type=text name=file size=40 value="[file]">
+        </td>
+       </tr>
+       <tr>
+        <td align=right>Author:</td>
+        <td>
+         <input type=text name=who size=40 value="[who]">
+        </td>
+       </tr>
+      </table>
+
+     </td>
+     <td valign=top>
+
+      <table>
+       <tr>
+        <td align=left>Sort By:</td>
+        <td>
+         <select name=sortby>
+          <option value=date [is sortby "date"]selected[end]>Date</option>
+          <option value=author [is sortby "author"]selected[end]>Author</option>
+          <option value=file [is sortby "file"]selected[end]>File</option>
+         </select>
+        </td>
+       </tr>
+       <tr>
+        <td colspan=2>
+         <table border=0 cellspacing=0 cellpadding=0>
+          <tr>
+           <td>Date:</td>
+          </tr>
+          <tr>
+           <td><input type=radio name=date value=hours
+		  [is date "hours"]checked[end]></td>
+           <td>In the last
+             <input type=text name=hours value=[hours] size=4>hours
+           </td>
+          </tr>
+          <tr>
+           <td><input type=radio name=date value=day
+		  [is date "day"]checked[end]></td>
+           <td>In the last day</td>
+          </tr>
+          <tr>
+           <td><input type=radio name=date value=week
+		  [is date "week"]checked[end]></td>
+           <td>In the last week</td>
+          </tr>
+          <tr>
+           <td><input type=radio name=date value=month
+		  [is date "month"]checked[end]></td>
+           <td>In the last month</td>
+          </tr>
+          <tr>
+           <td><input type=radio name=date value=all
+		  [is date "all"]checked[end]></td>
+           <td>Since the beginning of time</td>
+          </tr>
+         </table>
+        </td>
+       </tr>
+      </table>
+
+     </td>
+    </tr>
+   </table>
+  </td>
+  <td>
+   <input type=submit value="Search">
+  </td>
+ </tr>
+</table>
+</div>
+
+</form>
+
+[is query "skipped"]
+[else]
+<p><b>[num_commits]</b> matches found.</p>
+
+[if-any commits]
+<table width="100%" border=0 cellspacing=0 cellpadding=2>
+ <thead>
+ <tr class="vc_header">
+  <th align=left valign=top>Revision</th>
+  <th align=left valign=top>File</th>
+  <th align=left valign=top>Branch</th>
+  <th align=left valign=top>+/-</th>
+  <th align=left valign=top>Date</th>
+  <th align=left valign=top>Author</th>
+[# uncommment, if you want a separate Description column: (also see below)
+<th align=left valign=top>Description</th>
+]
+ </tr>
+ </thead>
+[for commits]
+ <tbody>
+  [for commits.files]
+    <tr class="vc_row_[if-index commits even]even[else]odd[end]">
+      <td align=left valign=top>
+	[if-any commits.files.rev][commits.files.rev][else]&nbsp;[end]
+      </td>
+      <td align=left valign=top>[commits.files.link]</td>
+      <td align=left valign=top>
+	[if-any commits.files.branch][commits.files.branch][else]&nbsp;[end]
+      </td>
+      <td align=left valign=top>
+        [is commits.files.type "Add"]<ins>[end]
+        [is commits.files.type "Change"]<a href="[commits.files.difflink]">[end]
+        [is commits.files.type "Remove"]<del>[end]
+          [commits.files.plus]/[commits.files.minus]
+        [is commits.files.type "Add"]</ins>[end]
+        [is commits.files.type "Change"]</a>[end]
+        [is commits.files.type "Remove"]</del>[end]
+      </td>
+      <td align=left valign=top>
+	[if-any commits.files.date][commits.files.date][else]&nbsp;[end]
+      </td>
+      <td align=left valign=top>
+	[if-any commits.files.author][commits.files.author][else]&nbsp;[end]
+      </td>
+
+[# uncommment, if you want a separate Description column:
+      {if-index commits.files first{
+        <td align=left valign=top rowspan={commits.num_files}>
+          {commits.desc}
+        </td>
+      {end}
+
+   (substitute brackets for the braces)
+]
+    </tr>
+[# and also take the following out in the "Description column"-case:]
+      [if-index commits.files last]
+	<tr class="vc_row_[if-index commits even]even[else]odd[end]">
+	  <td>&nbsp;</td>
+	  <td colspan=5><b>Log:</b><br>
+	    <pre class="vc_log">[commits.desc]</pre></td>
+	</tr>
+      [end]
+[# ---]
+  [end]
+ </tbody>
+[end]
+
+ <tr class="vc_header">
+  <th align=left valign=top>&nbsp;</th>
+  <th align=left valign=top>&nbsp;</th>
+  <th align=left valign=top>&nbsp;</th>
+  <th align=left valign=top>&nbsp;</th>
+  <th align=left valign=top>&nbsp;</th>
+  <th align=left valign=top>&nbsp;</th>
+[# uncommment, if you want a separate Description column:
+  <th align=left valign=top>&nbsp;</th>
+]
+ </tr>
+</table>
+[end]
+[end]
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_form.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_form.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_form.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,167 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - query - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt" "query"]
+
+<form action="[query_action]" method="get">
+  [query_hidden_values]
+
+<div class="vc_query_form">
+<table border="0" cellspacing="0" cellpadding="5">
+  [is roottype "cvs"]
+  [# For subversion, the branch field is not used ]
+  <tr>
+    <th align="right" valign="top">Branch:</th>
+    <td>
+      <input type="text" name="branch" value="[branch]" /><br />
+      <label for="branch_match_exact">
+        <input type="radio" name="branch_match" id="branch_match_exact"
+           value="exact" [is branch_match "exact"]checked=""[end] />
+        Exact match
+      </label>
+      <label for="branch_match_glob">
+        <input type="radio" name="branch_match" id="branch_match_glob"
+           value="glob" [is branch_match "glob"]checked=""[end] />
+        Glob pattern match
+      </label>
+      <label for="branch_match_regex">
+        <input type="radio" name="branch_match" id="branch_match_regex"
+           value="regex" [is branch_match "regex"]checked=""[end] />
+        Regex match
+      </label>
+      <label for="branch_match_notregex">
+        <input type="radio" name="branch_match" id="branch_match_notregex"
+           value="notregex" [is branch_match "notregex"]checked=""[end] />
+        Regex doesn't match
+      </label>
+    </td>
+  </tr>
+  [end]
+  <tr>
+    <th align="right" valign="top">Subdirectory:</th>
+    <td>
+      <input type="text" name="dir" value="[dir]" /><br />
+      (you can list multiple directories separated by commas)
+    </td>
+  </tr>
+  <tr>
+    <th align="right" valign="top">File:</th>
+    <td>
+      <input type="text" name="file" value="[file]" /><br />
+      <label for="file_match_exact">
+        <input type="radio" name="file_match" id="file_match_exact"
+           value="exact" [is file_match "exact"]checked=""[end] />
+        Exact match
+      </label>
+      <label for="file_match_glob">
+        <input type="radio" name="file_match" id="file_match_glob"
+           value="glob" [is file_match "glob"]checked=""[end] />
+        Glob pattern match
+      </label>
+      <label for="file_match_regex">
+        <input type="radio" name="file_match" id="file_match_regex"
+           value="regex" [is file_match "regex"]checked=""[end] />
+        Regex match
+      </label>
+      <label for="file_match_notregex">
+        <input type="radio" name="file_match" id="file_match_notregex"
+           value="notregex" [is file_match "notregex"]checked=""[end] />
+        Regex doesn't match
+      </label>
+    </td>
+  </tr>
+  <tr>
+    <th align="right" valign="top">Who</th>
+    <td>
+      <input type="text" name="who" value="[who]" /><br />
+      <label for="who_match_exact">
+        <input type="radio" name="who_match" id="who_match_exact"
+           value="exact" [is who_match "exact"]checked=""[end] />
+        Exact match
+      </label>
+      <label for="who_match_glob">
+        <input type="radio" name="who_match" id="who_match_glob"
+           value="glob" [is who_match "glob"]checked=""[end] />
+        Glob pattern match
+      </label>
+      <label for="who_match_regex">
+        <input type="radio" name="who_match" id="who_match_regex"
+           value="regex" [is who_match "regex"]checked=""[end] />
+        Regex match
+      </label>
+      <label for="who_match_notregex">
+        <input type="radio" name="who_match" id="who_match_notregex"
+           value="notregex" [is who_match "notregex"]checked=""[end] />
+        Regex doesn't match
+      </label>
+    </td>
+  </tr>
+  <tr>
+    <th align="right" valign="top">Sort By:</th>
+    <td>
+      <select name="querysort">
+        <option value="date" [is querysort "date"]selected=""[end]>Date</option>
+        <option value="author" [is querysort "author"]selected=""[end]>Author</option>
+        <option value="file" [is querysort "file"]selected=""[end]>File</option>
+      </select>
+    </td>
+  </tr>
+  <tr>
+    <th align="right" valign="top">Date:</th>
+    <td>
+      <table border="0" cellspacing="0" cellpadding="0">
+        <tr>
+          <td><input type="radio" name="date" id="date_hours"
+                 value="hours" [is date "hours"]checked=""[end] /></td>
+          <td>
+            <label for="date_hours">In the last</label>
+            <input type="text" name="hours" value="[hours]" size="4" />
+            hours
+          </td>
+        </tr>
+        <tr>
+          <td><input type="radio" name="date" id="date_day"
+                 value="day" [is date "day"]checked=""[end] /></td>
+          <td><label for="date_day">In the last day</label></td>
+        </tr>
+        <tr>
+          <td><input type="radio" name="date" id="date_week"
+                 value="week" [is date "week"]checked=""[end] /></td>
+          <td><label for="date_week">In the last week</label></td>
+        </tr>
+        <tr>
+          <td><input type="radio" name="date" id="date_month"
+                 value="month" [is date "month"]checked=""[end] /></td>
+          <td><label for="date_month">In the last month</label></td>
+        </tr>
+        <tr>
+          <td><input type="radio" name="date" id="date_all"
+                 value="all" [is date "all"]checked=""[end] /></td>
+          <td><label for="date_all">Since the beginning of time</label></td>
+        </tr>
+        <tr>
+          <td><input type="radio" name="date" id="date_explicit"
+                 value="explicit" [is date "explicit"]checked=""[end] /></td>
+          <td>
+            <label for="date_explicit">Between</label>
+            <input type="text" name="mindate" value="[mindate]" size="20" />
+            and
+            <input type="text" name="maxdate" value="[maxdate]" size="20" />
+            <br />
+            (use the form <b>yyyy-mm-dd hh:mm:ss</b>)
+          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+  <tr>
+    <td></td>
+    <td><input type="submit" value="Search" /></td>
+  </tr>
+</table>
+</div>
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_results.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_results.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/query_results.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,77 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - query results - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt"]
+
+<p><b>[english_query]</b></p>
+[# <!-- {sql} --> ]
+<p><a href="[queryform_href]">Modify query</a></p>
+<p><a href="[backout_href]">Show commands which could be used to back out these changes</a></p>
+
+<p><b>+[plus_count]/-[minus_count]</b> lines changed.</p>
+
+[if-any commits]
+<table width="100%" border="0" cellspacing="1" cellpadding="2">
+ <thead>
+  <tr>
+   <th align="left" class="vc_header">Revision</th>
+   <th align="left" class="vc_header[is querysort "file"]_sort[end]">File</th>
+[if-any show_branch]
+   <th align="left" class="vc_header">Branch</th>
+[end]
+   <th align="left" class="vc_header">+/-</th>
+   <th align="left" class="vc_header[is querysort "date"]_sort[end]">Date</th>
+   <th align="left" class="vc_header[is querysort "author"]_sort[end]">Author</th>
+[# uncommment, if you want a separate Description column: (also see below)
+   <th align="left" class="vc_header">Description</th>
+]
+  </tr>
+ </thead>
+[for commits]
+  [for commits.files]
+    <tbody>
+    <tr class="vc_row_[if-index commits even]even[else]odd[end]">
+      <td align=left valign=top>
+	[if-any commits.files.rev]<a href="[commits.files.rev_href]">[commits.files.rev]</a>[else]&nbsp;[end]
+      </td>
+      <td align="left" valign="top">
+        <a href="[commits.files.dir_href]">[commits.files.dir]/</a>
+        <a href="[commits.files.log_href]">[commits.files.file]</a>
+      </td>
+[if-any show_branch]
+      <td align="left" valign="top">
+	[if-any commits.files.branch][commits.files.branch][else]&nbsp;[end]
+      </td>
+[end]
+      <td align="left" valign="top">
+        [# only show a diff link for changes ]
+        [is commits.files.type "Add"]<ins>[end]
+        [is commits.files.type "Change"]<a href="[commits.files.diff_href]">[end]
+        [is commits.files.type "Remove"]<del>[end]
+          [commits.files.plus]/[commits.files.minus]
+        [is commits.files.type "Add"]</ins>[end]
+        [is commits.files.type "Change"]</a>[end]
+        [is commits.files.type "Remove"]</del>[end]
+      </td>
+      <td align="left" valign="top">
+	[if-any commits.files.date][commits.files.date][else]&nbsp;[end]
+      </td>
+      <td align="left" valign="top">
+	[if-any commits.files.author][commits.files.author][else]&nbsp;[end]
+      </td>
+    </tr>
+  [end]
+  <tr class="vc_row_[if-index commits even]even[else]odd[end]">
+    <td>&nbsp;</td>
+    <td colspan="5"><b>Log:</b><br>
+      <pre class="vc_log">[commits.desc]</pre></td>
+  </tr>
+  </tbody>
+[end]
+</table>
+[end]
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/revision.ezt
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/revision.ezt	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/etc/plugins/scmsvn/viewcvs/templates/revision.ezt	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,91 @@
+[# setup page definitions]
+  [define location][rootname][if-any where]: [where][end][end]
+  [define page_title][cfg.general.main_title] - revision - [location][end]
+  [define help_href][docroot]/help_rootview.html[end]
+[# end]
+
+[include "include/header.ezt" "revision"]
+
+<hr noshade>
+
+<table border="0" cellspacing="1" cellpadding="2">
+  <tr align=left>
+    <th>Jump to revision:</td>
+    <td>
+      <form method=get action="[jump_rev_action]">
+      [jump_rev_hidden_values]
+      <input type="text" name="rev" value="[jump_rev]">
+      <input type=submit value="Go">
+      [if-any prev_href]
+        <a href="[prev_href]"><img src="[icons]/back.gif" border="0" alt="Previous"></a>[end]
+      [if-any next_href] <a href="[next_href]"><img src="[icons]/forward.gif" border="0" alt="Next"></a>[end]
+      </form>
+    </td>
+  </tr>
+  <tr align=left>
+    <th>Author:</th>
+    <td>[author]</td>
+  </tr>
+  <tr align=left>
+    <th>Date:</th>
+    <td>[date_str] <i>([ago] ago)</i></td>
+  </tr>
+</table>
+
+<p><b>Log Message:</b><br/>
+   <pre class="vc_log">[log]</pre>
+</p>
+
+<hr noshade>
+
+<p><b>Changed paths:</b></p>
+<table border="0" cellspacing="1" cellpadding="2">
+  <thead>
+  <tr align=left>
+    <th class="vc_header_sort">Path</th>
+    <th class="vc_header">Action</th>
+    <th class="vc_header">Text Changes</th>
+    <th class="vc_header">Prop Changes</th>
+    <th class="vc_header">Diff to Previous</th>
+  </tr>
+  </thead>
+  <tbody>
+  [if-any changes]
+    [for changes]
+      <tr class="vc_row_[if-index changes even]even[else]odd[end]">
+      <td>
+        [is changes.pathtype "dir"]
+          <img src="[icons]/small/dir.gif">
+        [else]
+          <img src="[icons]/small/text.gif">
+        [end]
+        [is changes.action "deleted"]
+          [changes.filename]
+        [else]
+          <a href="[changes.view_href]">[changes.filename]</a>
+        [end]
+      </td>
+      <td align=center>[changes.action]</td>
+      [is changes.action "deleted"]
+        <td align=center>&nbsp;</td>
+        <td align=center>&nbsp;</td>
+      [else]
+        <td align=center>[is changes.text_mods "1"]X[else]&nbsp;[end]</td>
+        <td align=center>[is changes.prop_mods "1"]X[else]&nbsp;[end]</td>
+      [end]
+        [if-any changes.diff_href]
+          <td align=center><a href="[changes.diff_href]&amp;r1=[rev]&amp;r2=[changes.prev_rev]&amp;p1=[changes.filename]&amp;p2=[changes.prev_path]">(diff to previous)</a></td>
+        [else]
+          <td align=center>&nbsp;</td>
+        [end]
+      </tr>
+    [end]
+  [else]
+    <tr>
+    <td colspan="5">No changed paths.</td>
+    </tr>
+  [end]
+  </tbody>
+</table>
+
+[include "include/footer.ezt"]

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/SVNPlugin.class
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/SVNPlugin.class	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/SVNPlugin.class	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,340 @@
+<?php
+/** Subversion plugin for Gforge
+ * Copyright 2003 Roland Mas <lolando at debian.org>
+ * Copyright 2004 Roland Mas <roland at gnurandal.com> 
+ *				The Gforge Group, LLC <http://gforgegroup.com/>
+ * Based on the CVS plugin, which was derived from Gforge, which was
+ * derived from Sourceforge
+ *
+ * This file is not part of Gforge
+ *
+ * This plugin, like Gforge, 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 License, or (at your option) any later version.
+ *
+ * GForge 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 GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  US
+ */
+
+require_once('common/include/User.class');
+
+class SVNPlugin extends SCM {
+	function SVNPlugin () {
+		$this->SCM () ;
+		$this->name = 'scmsvn';
+		$this->text = 'SVN';
+		$this->hooks[] = 'scm_page';
+		$this->hooks[] = 'scm_admin_update';
+		$this->hooks[] = 'scm_admin_page';
+// to be revised		
+ 		$this->hooks[] = 'scm_stats';
+// 		$this->hooks[] = 'group_approved';
+		$this->hooks[] = 'scm_plugin';
+		$this->hooks[] = 'cssfile';
+
+		require_once('plugins/scmsvn/config.php') ;
+		
+		$this->default_svn_server = $default_svn_server ;
+		$this->enabled_by_default = $enabled_by_default ;
+		$this->use_ssh = $use_ssh;
+		$this->use_dav = $use_dav;
+		$this->use_ssl = $use_ssl;
+		$this->svn_root = $svn_root;
+
+		$this->register () ;
+	}
+	
+	function getDefaultServer() {
+		return $this->default_svn_server ;
+	}
+
+	function CallHook ($hookname, $params) {
+		global $Language, $HTML ;
+		
+		switch ($hookname) {
+		case 'scm_page':
+			$group_id = $params['group_id'] ;
+			$this->display_scm_page ($group_id) ;
+			break ;
+		case 'scm_admin_update':
+			$this->scm_admin_update ($params) ;
+			break ;
+		case 'scm_admin_page':
+			$this->display_scm_admin_page ($params) ;
+			break ;
+		case 'scm_stats':
+			$this->display_stats ($params) ;
+			break;
+// 		case 'group_approved':
+// 			$this->group_approved ($params) ;
+// 			break;
+		case 'scm_plugin':
+			$scm_plugins=& $params['scm_plugins'];
+			$scm_plugins[]=$this->name;
+			break;
+		case 'cssfile':
+			$this->cssfile_scm ($params) ;
+			break;
+		default:
+			// Forgot something
+		}
+	}
+
+	function display_scm_page ($group_id) {
+		global $Language, $HTML ;
+
+		$project =& group_get_object($group_id);
+		if (!$project || !is_object($project)) {
+			return false;
+		} elseif ($project->isError()) {
+			return false;
+		}
+
+		if ($project->usesPlugin ($this->name)) {
+
+			// SVN browser links must be displayed if
+			// project enables anon SVN or if logged-in
+			// user is a member of the group
+			$displaySvnBrowser = $project->enableAnonSCM();
+			if(session_loggedin()) {
+				$perm =& $project->getPermission(session_get_user());
+				if ($perm && is_object($perm) && !$perm->isError() && $perm->isMember()) {
+					$displaySvnBrowser = true;
+				}
+			}
+
+			// ######################## Table for summary info
+			?>
+			<table width="100%">
+			<tr valign="top">
+				<td width="65%">
+				<?php
+				print $Language->getText('plugin_scmsvn','documentation');
+
+				// ######################## Anonymous SVN Instructions
+				if ($project->enableAnonSCM()) {
+					print $Language->getText('plugin_scmsvn', 'anonsvn');
+					print '<p>';
+					if ($this->use_ssh) {
+						print '<tt>svn checkout svn://'.$project->getSCMBox().'/'.$this->svn_root.'/'.$project->getUnixName().'</tt><br />';
+					}
+					if ($this->use_dav) {
+						print '<tt>svn checkout http'.(($this->use_ssl) ? 's' : '').'://' . $project->getSCMBox(). '/' . $this->svn_root .'/'. $project->getUnixName() .'</tt><br/>';
+					}
+					print '</p>';
+				}
+	
+				// ######################## Developer Access
+				if ($this->use_ssh) {
+					echo $Language->getText('plugin_scmsvn', 'devsvnssh');
+					print '<p><tt>svn checkout svn+ssh://<i>'.$Language->getText('plugin_scmsvn', 'developername').'</i>@' . $project->getSCMBox() . '/'. $this->svn_root .'/'. $project->getUnixName().'</tt></p>' ;
+				}
+				if ($this->use_dav) {
+					echo $Language->getText('plugin_scmsvn', 'devsvndav');
+					print '<p><tt>svn checkout --username <i>'.$Language->getText('plugin_scmsvn', 'developername').'</i> http'.(($this->use_ssl) ? 's' : '').'://'. $project->getSCMBox() .'/'. $this->svn_root .'/'.$project->getUnixName().'</tt></p>' ;
+				}
+
+				// ######################## SVN Snapshot
+				if ($displaySvnBrowser) {
+					print '
+						<p>
+						[<a href="/snapshots.php?group_id='.$group_id.'">'.$Language->getText('plugin_scmsvn', 'download_snapshot').'</a>]
+						</p>';
+				}
+				?>
+				</td>
+
+				<td width="35%" valign="top">
+				<?php
+				// ######################## SVN Browsing
+				echo $HTML->boxTop($Language->getText('plugin_scmsvn', 'history'));
+				echo $this->display_detailed_stats(array('group_id'=>$group_id)).'<p>';
+				if ($displaySvnBrowser) {
+					echo $Language->getText('plugin_scmsvn', 'browsetree');
+					echo '<p>[<a href="'.$this->account_group_viewcvs_url($group_id).'">'.$Language->getText('plugin_scmsvn', 'browseit').'</a>]</p>' ;
+				}
+
+				echo $HTML->boxBottom();
+				?>
+				</td>
+			</tr>
+			</table>
+			<?php
+		}
+	}
+
+	function scm_admin_update ($params) {
+		$group =& group_get_object($params['group_id']);
+		if (!$group || !is_object($group)) {
+			return false;
+		} elseif ($group->isError()) {
+			return false;
+		}
+		if ( $group->usesPlugin ( $this->name ) ) {
+			if ($params['scmsvn_enable_anon_svn']) {
+				$group->SetUsesAnonSCM(true);
+			} else {
+				$group->SetUsesAnonSCM(false);
+			}
+		}
+	}
+
+	// This function is used to render checkboxes below
+	function c($v) {
+		if ($v) {
+			return 'checked="checked"';
+		} else {
+			return '';
+		}
+	}
+
+	function display_scm_admin_page ($params) {
+		global $Language ;
+		$group =& group_get_object($params['group_id']);
+		if ( $group->usesPlugin ( $this->name ) ) {
+			?>
+			<p><input type="checkbox" name="scmsvn_enable_anon_svn" value="1" <?php echo $this->c($group->enableAnonSCM()); ?> /><strong><?php echo $Language->getText('plugin_scmsvn', 'enable_anonymous_svn') ?></strong></p>
+			<?php
+		}
+	}
+
+	function display_stats ($params) {
+		global $Language ;
+		$group_id = $params['group_id'] ;
+		$project =& group_get_object($group_id);
+		if (!$project || !is_object($project)) {
+			return false;
+		} elseif ($project->isError()) {
+			return false;
+		}
+
+		if ($project->usesPlugin ($this->name)) {
+			list($commit_num, $add_num) = $this->get_total_stats($group_id);
+			echo ' (SVN: '.$Language->getText('plugin_scmsvn','svn_updates',array(number_format($commit_num,0),number_format($add_num,0))).')';
+		}
+	}
+
+	// Get the total stats for a group
+	function get_total_stats($group_id) {
+		$result = db_query("
+			SELECT SUM(commits) AS commits, SUM(adds) AS adds
+			FROM stats_cvs_group
+			WHERE group_id='$group_id'");
+		$commit_num = db_result($result,0,0);
+		$add_num	= db_result($result,0,1);
+		if (!$commit_num) {
+			$commit_num=0;
+		}
+		if (!$add_num) {
+			$add_num=0;
+		}
+		return array($commit_num, $add_num);
+	}
+
+	// Not used at the moment and probably useless
+	function group_approved ($params) {
+		$group_id = $params['group_id'] ;
+		
+		$project =& group_get_object($group_id);
+		if (!$project || !is_object($project)) {
+			return false;
+		} elseif ($project->isError()) {
+			return false;
+		}
+		if ($this->enabled_by_default) {
+			$project->setPluginUse('scmsvn', 1) ;
+		} else {
+			$project->setPluginUse('scmsvn', 0) ;
+		}
+		return true;
+	}
+
+	/**
+	 *	account_group_viewcvs_url() - Returns URL for group's SVN interface WWW.
+	 *
+	 *	@param  int  The group id
+	 *	@return URL to access CVS over HTTP
+	 */
+	function account_group_viewcvs_url($group_id) {
+		$project =& group_get_object($group_id);
+		return '/plugins/scmsvn/viewcvs.php/?root='.$project->getUnixName();
+	}
+
+	function cssfile_scm ($layout) {
+		// Only show the stylesheet if we're actually in the SVN pages.
+		// This stops styles inadvertently clashing with the main site.
+		if (strncmp($_SERVER['REQUEST_URI'], '/plugins/scmsvn/', 16) == 0) {
+			echo '<link rel="stylesheet" type="text/css" href="/plugins/scmsvn/viewcvs/styles.css" />';
+		}
+	}
+
+	function display_detailed_stats ($params) {
+		global $Language, $HTML;
+		$group_id = $params['group_id'] ;
+
+		$result = db_query('
+			SELECT u.realname, u.user_name, sum(commits) as commits, sum(adds) as adds, sum(adds+commits) as combined
+			FROM stats_cvs_user s, users u
+			WHERE group_id=\''.$group_id.'\' AND s.user_id=u.user_id AND (commits>0 OR adds >0)
+			GROUP BY group_id, realname, user_name
+			ORDER BY combined DESC, realname;
+		');
+
+		if (db_numrows($result) > 0) {
+			$tableHeaders = array(
+				$Language->getText('plugin_scmsvn', 'realname'),
+				$Language->getText('plugin_scmsvn', 'adds'),
+				$Language->getText('plugin_scmsvn', 'commits')
+			);
+			echo $HTML->listTableTop($tableHeaders);
+
+			$i = 0;
+			$total = array('adds' => 0, 'commits' => 0);
+
+			while($data = db_fetch_array($result)) {
+				echo '<tr '. $HTML->boxGetAltRowStyle($i) .'>';
+				echo '<td width="50%">' .
+					'<a href="/users/'.$data['user_name'].'/">'.$data['realname'].'</a>' .
+					'</td><td width="25%" align="right">'.$data['adds']. '</td>'.
+					'<td width="25%" align="right">'.$data['commits'].'</td></tr>';
+				$total['adds'] += $data['adds'];
+				$total['commits'] += $data['commits'];
+				$i++;
+			}
+			list($commit_num, $add_num) = $this->get_total_stats($group_id);
+			if ($commit_num > $total['commits'] ||
+				$add_num > $total['adds']) {
+				echo '<tr '. $HTML->boxGetAltRowStyle($i) .'>';
+				echo '<td width="50%">' .
+					$Language->getText('plugin_scmsvn', 'unknown') .
+					'</td><td width="25%" align="right">'.
+					($add_num - $total['adds']) . '</td>'.
+					'<td width="25%" align="right">'.
+					($commit_num - $total['commits']) .
+					'</td></tr>';
+				$i++;
+			}
+			echo '<tr '. $HTML->boxGetAltRowStyle($i) .'>';
+			echo '<td width="50%"><strong>'.$Language->getText('plugin_scmsvn', 'total').':</strong></td>'.
+				'<td width="25%" align="right"><strong>'.$add_num. '</strong></td>'.
+				'<td width="25%" align="right"><strong>'.$commit_num.'</strong></td>';
+			echo '</tr>';
+			echo $HTML->listTableBottom();
+			echo '<hr size="1" />';
+		}
+	}
+}
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Base.tab
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Base.tab	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Base.tab	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,24 @@
+plugin_scmsvn	anonsvn	<p><b>Anonymous Subversion Access</b></p><p>This project's SVN repository can be checked out through anonymous access with the following command(s).</p>
+plugin_scmsvn	svn_repository	SVN Repository
+plugin_scmsvn	developername	developername
+plugin_scmsvn	error_only_projects_can_use_svn	Error, Only Projects Can Use SVN
+plugin_scmsvn	error_this_project_has_turned_off	Error This Project Has Turned Off SVN
+plugin_scmsvn	history	Repository History
+plugin_scmsvn	nohistory	This project has no SVN history.
+plugin_scmsvn	section	Project: $1
+plugin_scmsvn	title	SCM
+plugin_scmsvn	admin	Administration
+plugin_scmsvn	download_snapshot	Download The Nightly SVN Tree Snapshot
+plugin_scmsvn	documentation	<p>Documentation for Subversion (sometimes referred to as "SVN") is available <a href="http://svnbook.red-bean.com/">here</a>.</p>
+plugin_scmsvn	devsvnssh	<p><b>Developer Subversion Access via SSH</b></p><p>Only project developers can access the SVN tree via this method. SSH must be installed on your client machine. Substitute <i>developername</i> with the proper values. Enter your site password when prompted.</p>
+plugin_scmsvn	devsvndav	<p><b>Developer Subversion Access via DAV</b></p><p>Only project developers can access the SVN tree via this method. Substitute <i>developername</i> with the proper values. Enter your site password when prompted.</p>
+plugin_scmsvn	enable_svn	Use Subversion
+plugin_scmsvn	enable_anonymous_svn	Enable Anonymous Access
+plugin_scmsvn	browseit	Browse Subversion Repository
+plugin_scmsvn	browsetree	<b>Browse the Subversion Tree</b><p>Browsing the SVN tree gives you a great view into the current status of this project's code. You may also view the complete histories of any file in the repository.</p>
+plugin_scmsvn	realname	Name
+plugin_scmsvn	adds	Adds
+plugin_scmsvn	commits	Updates
+plugin_scmsvn	unknown	Unknown
+plugin_scmsvn	total	Total
+plugin_scmsvn	svn_updates	<strong>$1</strong> updates, <strong>$2</strong> adds

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/French.tab
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/French.tab	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/French.tab	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,24 @@
+plugin_scmsvn	admin	Administration
+plugin_scmsvn	anonsvn	<p><b>Accès Subversion anonyme</b></p><p>Le dépôt Subversion de ce projet peut être récupéré anonymement en utilisant la(les) commande(s) suivante(s).</p>
+plugin_scmsvn	browseit	Parcourir le dépôt Subversion
+plugin_scmsvn	browsetree	<b>Parcourir le dépôt Subversion</b><p>Parcourir l'arbre Subversion vous donne une vue d'ensemble du code de ce projet. Vous pouvez également voir l'historique complet de chaque fichier du dépôt.</p>
+plugin_scmsvn	developername	développeur
+plugin_scmsvn	devsvndav	<p><b>Accès Subversion pour développeur via DAV</b></p><p>Seuls les développeurs d'un projet peuvent accéder à l'arbre Subversion par cette méthode. Remplacez <i>developername</i> par la valeur appropriée. Fournissez votre mot de passe du site lorsqu'on vous le demande.</p>
+plugin_scmsvn	devsvnssh	<p><b>Accès Subversion pour développeur via SSH</b></p><p>Seuls les développeurs d'un projet peuvent accéder à l'arbre Subversion par cette méthode. SSH doit être installé sur votre machine cliente. Remplacez <i>developername</i> par la valeur appropriée. Fournissez votre mot de passe du site lorsqu'on vous le demande.</p>
+plugin_scmsvn	documentation	<p>Pour toute information complémentaire, vous pouvez vous référer à la <a href="http://svnbook.red-bean.com/">documentation de Subversion</a>.</p>
+plugin_scmsvn	download_snapshot	Télécharger le snapshot nocturne de l'arbre Subversion
+plugin_scmsvn	enable_svn	Utiliser Subversion
+plugin_scmsvn	enable_anonymous_svn	Activer l'accès anonyme
+plugin_scmsvn	error_only_projects_can_use_svn	Erreur : seuls les projets peuvent utiliser Subversion
+plugin_scmsvn	error_this_project_has_turned_off	Erreur : ce projet a désactivé Subversion.
+plugin_scmsvn	history	Historique du dépôt
+plugin_scmsvn	nohistory	Ce projet n'a pas de dépôt Subversion.
+plugin_scmsvn	section	Projet : $1
+plugin_scmsvn	title	Sources
+plugin_scmsvn	svn_repository	Dépôt Subversion
+plugin_scmsvn	adds	Ajouts
+plugin_scmsvn	commits	Commits
+plugin_scmsvn	realname	Nom
+plugin_scmsvn	svn_updates	<strong>$1</strong> commits, <strong>$2</strong> ajouts
+plugin_scmsvn	total	Total
+plugin_scmsvn	unknown	Inconnu	

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Korean.tab
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Korean.tab	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/languages/Korean.tab	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,24 @@
+plugin_scmsvn	anonsvn	<p><b>익명 Subversion 권한</b></p><p>이 프로젝트의 SVN 저장소는 다음과 같은 방법을 통해 익명으로 체크아웃하실 수 있습니다.</p>
+plugin_scmsvn	svn_repository	SVN 저장소
+plugin_scmsvn	developername	developername
+plugin_scmsvn	error_only_projects_can_use_svn	오류: 프로젝트만이 SVN을 사용할 수 있습니다.
+plugin_scmsvn	error_this_project_has_turned_off	오류: 이 프로젝트는 SVN을 사용하지 않도록 설정되어 있습니다.
+plugin_scmsvn	history	저장소 히스토리
+plugin_scmsvn	nohistory	이 프로젝트는 SVN 히스토리가 없습니다.
+plugin_scmsvn	section	프로젝트: $1
+plugin_scmsvn	title	SCM
+plugin_scmsvn	admin	관리
+plugin_scmsvn	download_snapshot	일일 SVN 트리 스냅샷 내려받기
+plugin_scmsvn	documentation	<p>Subversion(SVN)에 대한 문서는 <a href="http://svnbook.red-bean.com/">여기</a>에서 참고하실 수 있습니다.</p>
+plugin_scmsvn	devsvnssh	<p><b>SSH를 통한 개발자의 Subversion 접근</b></p><p>프로젝트에 개발자로 등록되어 있는 사람만이 이 방법을 사용하실 수 있습니다. 클라이언트 측에 SSH가 설치되어 있어야 합니다. <i>developername</i>을 적절히 바꾸어서 넣어 주시면 됩니다. 비밀번호는 자기 자신의 비밀번호를 입력하세요.</p>
+plugin_scmsvn	devsvndav	<p><b>DAV를 통한 개발자의 Subversion 접근</b></p><p>프로젝트에 개발자로 등록되어 있는 사람만이 이 방법을 사용하실 수 있습니다. <i>developername</i>을 적절히 바꾸어서 넣어 주시면 됩니다. 비밀번호는 자기 자신의 비밀번호를 입력하세요.</p>
+plugin_scmsvn	enable_svn	Subversion 사용함
+plugin_scmsvn	enable_anonymous_svn	익명 접근 허용함
+plugin_scmsvn	browseit	Subversion 저장소 둘러보기
+plugin_scmsvn	browsetree	<b>Subversion 저장소 둘러보기</b><p>SVN 저장소를 둘러보시면 현재 프로젝트가 어떻게 진행되고 있는지 쉽게 살펴보실 수 있습니다. 그리고 저장소 안에서 어떤 특정 파일에 대한 전체 내역도 아울러 보실 수 있습니다.</p>
+plugin_scmsvn	realname	이름
+plugin_scmsvn	adds	Adds
+plugin_scmsvn	commits	Updates
+plugin_scmsvn	unknown	Unknown
+plugin_scmsvn	total	전체
+plugin_scmsvn	svn_updates	<strong>$1</strong> updates, <strong>$2</strong> adds

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/scmsvn-init.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/scmsvn-init.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/include/scmsvn-init.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,37 @@
+<?php
+/** Subversion plugin for Gforge
+ * Copyright 2003 Roland Mas <lolando at debian.org>
+ * Copyright 2004 Roland Mas <roland at gnurandal.com> 
+ *                The Gforge Group, LLC <http://gforgegroup.com/>
+ * Based on the CVS plugin, which was derived from Gforge, which was
+ * derived from Sourceforge
+ *
+ * This file is not part of Gforge
+ *
+ * This plugin, like Gforge, 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 License, or (at your option) any later version.
+ *
+ * GForge 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 GForge; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  US
+ */
+
+require_once ($GLOBALS['sys_plugins_path'].'/scmsvn/include/SVNPlugin.class') ;
+
+$SVNPluginObject = new SVNPlugin ;
+
+register_plugin ($SVNPluginObject) ;
+
+// Local Variables:
+// mode: php
+// c-file-style: "bsd"
+// End:
+
+?>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/post-commit.evolvis
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/post-commit.evolvis	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/post-commit.evolvis	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,12 @@
+#!/bin/mksh
+# $Id: post-commit.evolvis 75 2007-10-15 15:23:10Z mirabilos $
+
+REPOS=$1
+REV=$2
+PROJ=xprojectnamex
+
+export LC_ALL=en_US.UTF-8
+unset LANGUAGE
+
+/usr/local/share/gforge/commit-email.pl -h evolvis.org \
+    "$REPOS" "$REV" $PROJ-commits at lists.evolvis.org

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/scmsvn-init.sql
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/scmsvn-init.sql	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/lib/scmsvn-init.sql	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,4 @@
+DROP TABLE plugin_scmsvn_group_usage;
+DROP TABLE plugin_scmsvn_stats;
+DROP SEQUENCE plugin_scmsvn_grp_usage_pk_seq;
+DROP SEQUENCE plugin_scmsvn_stats_pk_seq;

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/styles.css
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/styles.css	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/styles.css	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,111 @@
+/*******************************/
+/***  ViewCVS CSS Stylesheet ***/
+/*******************************/
+
+/*** Standard Tags ***/
+
+/** Navigation Headers ***/
+.vc_navheader {
+  background-color: #DDDDDD;
+}
+
+
+/*** Table Headers ***/
+.vc_header {
+  text-align: left;
+  background-color: #BBBBBB;
+}
+.vc_header_sort {
+  text-align: left;
+  background-color: #BBBBBB;
+}
+
+
+/*** Table Rows ***/
+.vc_row_even {
+  background-color: #dddddd;
+}
+.vc_row_odd {
+  background-color: #cccccc;
+}
+
+
+/*** Log messages ***/
+.vc_log {
+  /* unfortunately, white-space: pre-wrap isn't widely supported ... */
+  white-space: -moz-pre-wrap; /* Mozilla based browsers */
+  white-space: -pre-wrap;     /* Opera 4 - 6 */
+  white-space: -o-pre-wrap;   /* Opera >= 7 */
+  white-space: pre-wrap;      /* CSS3 */
+  word-wrap: break-word;      /* IE 5.5+ */
+}
+
+
+/*** Markup Summary Header ***/
+.vc_summary {
+  background-color: #eeeeee;
+}
+
+
+/*** Diff Styles ***/
+.vc_diff_header {
+  background-color: #ffffff;
+}
+.vc_diff_chunk_header {
+  background-color: #99cccc;
+}
+.vc_diff_chunk_extra {
+  font-size: smaller;
+}
+.vc_diff_empty {
+  background-color: #cccccc;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_add {
+  background-color: #aaffaa;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_remove {
+  background-color: #ffaaaa;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_change {
+  background-color: #ffff77;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_change_empty {
+  background-color: #eeee77;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_nochange {
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_raw_diff {
+  background-color: #cccccc;
+  font-size: smaller;
+}
+
+/*** Annotate Styles ***/
+.vc_blame_line, .vc_blame_author, .vc_blame_rev {
+  font-family: monospace;
+  text-align: right;
+  white-space: nowrap;
+  padding-right: 0.5em;
+}
+.vc_blame_text {
+  font-family: monospace;
+  text-align: left;
+  white-space: pre;
+  width: 100%;
+}
+
+/*** Query Form ***/
+.vc_query_form {
+  background-color: #e6e6e6;
+}

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/contributing.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/contributing.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/contributing.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Contributing to ViewCVS Development</title>
+  </head>
+
+  <body background="images/chalk.jpg">
+
+    <table width="100&#37;" cellspacing=5>
+     <tr>
+        <td width="1%"><a href="index.html"><img border=0
+	      src="images/logo.png"></a>
+	</td>
+	<td>
+	  <h1>Contributing to ViewCVS Development</h1>
+	</td>
+	<td width="1%"><a href="http://sourceforge.net/"><img border=0
+	      src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS&nbsp;project&nbsp;page</a>
+	</td>
+     </tr>
+     <tr><td width="1%" valign=top>
+         <a href="index.html">Home</a><br>
+         <a href="upgrading.html">Upgrading</a><br>
+	 Contributing<br>
+         <a href="license-1.html">License</a><br>
+         <a href="who.html">Who</a><br>
+     </td><td colspan=2>
+
+      <p>
+      Contributions to ViewCVS are very welcome.
+      </p>
+
+      <h2>Getting Started</h2>
+      <p>
+      Some basic knowledge about <a href="http://www.python.org"><i>Python</i></a> and
+      development Tools like <code>diff</code> is required.  Best is you start
+      with a fresh snapshot, which you may obtain from the 
+      <a href="http://sourceforge.net/cvs/?group_id=18760">CVS-Repository</a> 
+      at SourceForge.
+      </p>
+
+      <h2>Testing and reporting</h2>
+      <p>
+      Testing usability and the installation process on different platforms is
+      also a valuable contribution.  Please report your results back to 
+      us developers.  But always tell us, which version of ViewCVS
+      you used on which platform (and in particular which version of Python
+      you use).  
+      </p><p>
+      If you are using the latest current development version please note 
+      the date of your latest download or cvs update when reporting.
+      </p>
+      
+      <h2>Does a Certain Coding Style Guide apply?</h2>
+      <p>
+      Maintain whatever style is present in the code being modified.  New
+      code can use anything sane (which generally means 
+      <a href="http://python.sourceforge.net/peps/pep-0008.html"><i>PEP&nbsp;8</i></a>).
+      Greg's only real peeve is if someone writes a function call as:  
+      <code>some_func&nbsp;(args)</code>  -- that space is Huge Badness. 
+      </p>
+      <p>
+      CVS keyword macros like for example <code>$</code><code>Id$</code> 
+      are currently <b>not</b> used within the source, because Greg 
+      doesn't like them.  If you want to know why, read this 
+      <a href="http://mailman.lyra.org/pipermail/viewcvs-dev/2002-June/000730.html">EMail</a> (skip to
+      the second half).
+      </p>
+      <p>
+      Otherwise... <i>shrug</i>.
+      </p>
+
+      <h2>Submitting patches</h2>
+      <p>
+      Please use the
+      <a href="http://sourceforge.net/tracker/?func=add&group_id=18760&atid=318760">SourceForge&nbsp;project&nbsp;patch&nbsp;manager</a>
+      to submit your patches.  Unified context diffs relative to the latest 
+      development version are preferred.
+      </p><p>
+      If you have commit access, then you should know what
+      you're doing.  Just make changes directly.  Subscribing to
+      the <a href="http://mailman.lyra.org/mailman/listinfo/viewcvs-dev"><i>developer&nbsp;mailing&nbsp;list</i></a> 
+      is recommended in any case.
+      </p>
+
+      <h2>Preserving security</h2>
+      <p>
+      Since ViewCVS is used in the internet, security is a major issue.
+      If you need to pass data from the request into an external program, 
+      please don't use <code>os.system()</code> or <code>os.popen()</code>.
+      Please use the module <code>lib/popen</code> that comes with ViewCVS
+      instead.
+      </p>
+
+      <h2>Adding new features</h2>
+      <p>
+      If a new file or module is added, a new line in the installer program
+      <code>viewcvs-install</code> is required.
+      </p><p>
+      The library subdirectory contains a module <code>debug</code>, which may
+      useful to make performance tests.
+      </p><p>
+      If you need a new configuration option think carefully, into 
+      which section it belongs.  Try to keep the content of 
+      <code>cgi/viewcvs.conf.dist</code> file and the library module
+      <code>lib/config.py</code> in sync.
+      </p>
+
+      <h2>Hacking on templates</h2>
+      <p>
+      The library module <code>ezt</code> contains a module doc string which
+      describes the directives used in the HTML templates, which can be found
+      in the <code>templates</code> sub directory.
+      </p>
+
+      <h2>Cutting a release</h2>
+      <p>
+      Also there actually is a script <code>tools/make-release</code>, 
+      which creates a release directory, all other steps required to get 
+      a ViewCVS release out of the door will be currently executed manually 
+      by Greg Stein.
+      </p><p>
+      Nevertheless in case he ever wants to retire from this job, it is 
+      probably a good idea to write the procedure down here:
+      <ol>
+        <li>Add a new subsection to the file 
+	 <code>website/upgrading.html</code> describing all user visible 
+	 changes for users of previous releases of ViewCVS.
+	    </li>
+	    <li>Update the <code>CHANGES</code> file</li>
+	    <li>Update the <code>website/index.html</code> file to
+	      refer to the new X.Y files. (there are three links to
+	      update)</li>
+	<li>Edit the file <code>lib/viewcvs.py</code>  and remove the
+	 <tt>"-dev"</tt> suffix from <code>__version__</code>.  The remainder 
+	 should be of the form X.Y, where X is a positive number and 
+	 Y is a single digit.
+	      </li>
+	    <li>Ensure all of the above changes have been committed.</li>
+        <li>Test, Test, Test!  At the time of this writing (1.0-dev) there
+	 is no automatic testsuite available.  So just run with permuting
+	 different <code>viewcvs.conf</code> settings and ... pray.
+	<li>Review any <a 
+	 href="http://sourceforge.net/tracker/?atid=118760&group_id=18760&func=browse">
+	 bug reports, that are still marked open.</a>
+	<li><code>cvs tag V</code><i>X</i><code>_</code><i>Y</i>, where
+	 <i>X</i> and <i>Y</i> should be replaced by the release number
+	 from above.  If a developer is willing to volunteer as a
+	 bug fix patch release manager, it is now possible to start here
+	 at this point with a feature freezed branch using the command 
+	 <blockquote>
+         <code>cvs tag -b V</code><i>X</i><code>_</code><i>Y</i><code>_maint</code>
+	 </blockquote>
+	<li>go into an empty directory and run the command:
+	  <blockquote>
+	   <code>tools/make-release V</code><i>X_Y</i> <code>viewcvs-</code><i>X.Y</i>
+	  </blockquote>
+	 This step requires anonymous CVS access to repository at SourceForge.
+	<li>pack the content of this <code>viewcvs-</code><i>X.Y</i> directory
+	 into a tarball.  
+	<li>Upload the created tarball into the download files section of the
+	 ViewCVS project at SourceForge:
+	      <ul>
+		<li><code>scp viewcvs-X.Y.*
+		    <var>USERNAME</var>@viewcvs.sourceforge.net:/home/groups/v/vi/viewcvs/htdocs</code></li>
+		<li>ssh to viewcvs.sourceforge.net, cd to the above
+		  directory, and do a "<code>cvs update</code>" to
+		  pull down the latest website files.</li>
+		<li>ftp to upload.sourceforge.net, cd to the
+		  <code>/incoming</code> directory, and upload the .gz
+		  and the .zip</li>
+		<li>go to the Admin pages for the ViewCVS project, and
+		go to "Edit/Release Files"</li>
+		<li>select "Add Release" and fill in the new release
+		  name (X.Y)</li>
+		<li>fill in the Change Log section with the relevant
+		  portion from the <code>CHANGES</code> file and
+		  select the "Preserve my pre-formatted text"
+		  option. (and Submit those changes)</li>
+		<li>the files uploaded to upload.sourceforge.net
+		  should appear in the "Add Files To This Release"
+		  section. Select them, and add them.</li>
+
+		<li>For each file: change the processor type to "Any",
+		  select "Source .zip" or "Source .gz" as
+		  appropriate, and hit the Update button. (note: you
+		  need to Update each file separately)</li>
+		<li>After about 15-30 minutes, the files will appear
+		  on the Files page of the project.</li>
+		<li>Select the "I'm sure" button and hit the "Send
+		  Notice" button.</li>
+		<li>Note: if you need to hide a prior release, then go
+		back to the admin page and follow the links for
+		  editing a release. Change the "Status" drop-down to
+		  "Hidden" and submit the change.</li>
+	      </ul>
+	<li>Edit the file <code>lib/viewcvs.py</code> again and this time 
+	 increment the <code>__version__</code> for the next release cycle,
+	 again append the <code>"-dev"</code> to the version and again
+	 <blockquote>
+	  <code>cvs commit -m "new release cycle begins" lib/viewcvs.py</code>.
+	 </blockquote>
+	<li>Write an announcement explaining all the cool new features
+	  and put it out to:
+	  <ul>
+	   <li><a href="http://www.freshmeat.net"><i>www.freshmeat.net</i></a>
+	   <li><a href="http://www.vex.net/parnassus/apyllo.py?i=91022454"><i>Vaults of Parnassus</i></a>
+	   <li><a href="news:comp.lang.python">comp.lang.python</a>
+	   <li><i>Where else? I dunno. Suggestions welcome.</i>
+	  </ul>
+      </ol>
+     </td></tr>
+    </table>
+
+    <hr>
+    <address><a href="mailto:viewcvs-dev at lyra.org">ViewCVS Group</a></address>
+<!-- Created: Thu Oct 18 09:05:40 CEST 2001 -->
+<!-- hhmts start -->
+Last modified: Thu Dec 27 00:13:43 PST 2001
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_dirview.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_dirview.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_dirview.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>ViewCVS Help: Directory View</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href="http://viewcvs.sf.net/index.html"><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>ViewCVS Help: Directory View</h1>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top bgcolor="#ffffff">
+       <h3>Help</h3>
+       <a href="help_rootview.html">General</a><br>
+       <b>Directory&nbsp;View</b><br>
+       <a href="help_log.html">Classic&nbsp;Log&nbsp;View</a><br>
+       <a href="help_logtable.html">Alternative&nbsp;Log&nbsp;View</a><br>
+       <a href="help_query.html">Query&nbsp;Database</a><br>
+
+       <h3>Internet</h3>
+       <a href="http://viewcvs.sf.net/index.html">Home</a><br>
+       <a href="http://viewcvs.sf.net/upgrading.html">Upgrading</a><br>
+       <a href="http://viewcvs.sf.net/contributing.html">Contributing</a><br>
+       <a href="http://viewcvs.sf.net/license-1.html">License</a><br>
+    </td><td colspan=2>
+  
+    <p>
+      Click on a directory to enter that directory.  Click in the leftmost
+      column of a row to display the revision history of a file and to get 
+      a chance to display diffs between revisions.  Click on second column
+      to view the content of the latest revision of that file.
+    </p>
+    <p>
+      Directories are always displayed first in alphabetically order.
+      Ordinary files follow and are sorted according to the selected 
+      sort criteria.  You may click on a particular column header to
+      select this column as sort criteria.  It is than displayed in
+      another color (e.g. light green, if using the default configuration).
+    </p>
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs-dev at lyra.org">ViewCVS Group</a></address>
+<!-- Created: Thu Oct 25 22:08:29 CEST 2001 -->
+<!-- hhmts start -->
+Last modified: Tue Nov 13 20:40:02 CEST 2001
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_log.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_log.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_log.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>ViewCVS Help: Classic Log View</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href="http://viewcvs.sf.net/index.html"><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>ViewCVS Help: Classic Log View</h1>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top bgcolor="#ffffff">
+       <h3>Help</h3>
+       <a href="help_rootview.html">General</a><br>
+       <a href="help_dirview.html">Directory&nbsp;View</a><br>
+       <b>Classic&nbsp;Log&nbsp;View</b><br>
+       <a href="help_logtable.html">Alternative&nbsp;Log&nbsp;View</a><br>
+       <a href="help_query.html">Query&nbsp;Database</a><br>
+
+       <h3>Internet</h3>
+       <a href="http://viewcvs.sf.net/index.html">Home</a><br>
+       <a href="http://viewcvs.sf.net/upgrading.html">Upgrading</a><br>
+       <a href="http://viewcvs.sf.net/contributing.html">Contributing</a><br>
+       <a href="http://viewcvs.sf.net/license-1.html">License</a><br>
+    </td><td colspan=2>
+    <p> 
+      The log view displays the revision history of the selected source
+      file.  For each revision the following information is displayed:
+      <ul>
+        <li>the revision number (clickable to download it)</li>
+	<li>a link to view this revision annotated</li>
+	<li>a link to select this revision for diffs (see below)</li>
+	<li>the date and age of this change</li>
+	<li>and the author of this modification.</li>
+	<li>The CVS branch (usually <code>MAIN</code>, if not on a branch).</li>
+	<li>Possibly a list of CVS tags bound to this revision (if any).</li>
+	<li>The size of this change measured in added and removed lines of 
+	    code.</li>
+	<li>Links to view Diffs to the previous revision or possibly to
+	    an arbitrary selected revision (if any, see above).
+	<li>And last but not least, the commit log message which should tell
+	    about the reason for this change.</li>
+      </ul>
+    </p><p>
+      At the bottom of such a page you will find a form which allows
+      to request diffs between arbitrary revisions.
+    </p>
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs-dev at lyra.org">ViewCVS Group</a></address>
+<!-- Created: Thu Oct 25 22:08:29 CEST 2001 -->
+<!-- hhmts start -->
+Last modified: Wed Dec 12 13:56:52 CET 2001
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_logtable.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_logtable.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_logtable.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>ViewCVS Help: Log Table View</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href="http://viewcvs.sf.net/index.html"><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>ViewCVS Help: Log Table View</h1>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top bgcolor="#ffffff">
+       <h3>Help</h3>
+       <a href="help_rootview.html">General</a><br>
+       <a href="help_dirview.html">Directory&nbsp;View</a><br>
+       <a href="help_log.html">Classic&nbsp;Log&nbsp;View</a><br>
+       <b>Alternative&nbsp;Log&nbsp;View</b><br>
+       <a href="help_query.html">Query&nbsp;Database</a><br>
+
+       <h3>Internet</h3>
+       <a href="http://viewcvs.sf.net/index.html">Home</a><br>
+       <a href="http://viewcvs.sf.net/upgrading.html">Upgrading</a><br>
+       <a href="http://viewcvs.sf.net/contributing.html">Contributing</a><br>
+       <a href="http://viewcvs.sf.net/license-1.html">License</a><br>
+    </td><td colspan=2>
+    <p> 
+      The table based log view must be enabled in the site wide 
+      ViewCVS configuration file.
+    </p><p>
+      It displays the revision history of the selected source
+      file in a table containing the following columns:  
+      <ul>
+        <li><b>Revision</b>: The revision number.</li>
+	<li><b>Tasks</b>: This column contains several links to view 
+	    a revision.</li>
+	<li><b>Diffs</b>: Several links to view the changes between this
+	    and other revisions.
+	<li><b>Branches and Tags</b>: Displays the branch and a pulldown
+	    menu button displaying all tags bound to that revision</li>
+	<li>FIXME: Document the other columns</li>
+      </ul>
+    </p><p>
+      At the bottom of such a page you will find a form which allows
+      to request diffs between arbitrary revisions.
+    </p>
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs-dev at lyra.org">ViewCVS Group</a></address>
+<!-- Created: Thu Oct 25 22:08:29 CEST 2001 -->
+<!-- hhmts start -->
+Last modified: Sat Dec  8 23:26:52 CET 2001
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_query.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_query.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_query.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html><head>
+  <title>ViewCVS Help: Query The Commit Database</title>
+</head>
+
+<body background="images/chalk.jpg">
+<table width="100%" border=0 cellspacing=5 cellpadding=0>
+  <tr>
+    <td width="1%"><a href=".."><img border=0
+        src="images/logo.png"></a>
+    </td>
+    <td><h1>ViewCVS Help: Query The Commit Database</h1></td>
+  </tr>
+  <tr><td width="1%" valign="top" bgcolor="#ffffff">
+     <h3>Other&nbsp;Help:</h3>
+     <a href="help_rootview.html">General</a><br>
+     <a href="help_dirview.html">Directory&nbsp;View</a><br>
+     <a href="help_log.html">Classic&nbsp;Log&nbsp;View</a><br>
+     <a href="help_logtable.html">Alternative&nbsp;Log&nbsp;View</a><br>
+     <b>Query&nbsp;Database</b>
+
+     <h3>Internet</h3>
+     <a href="http://viewcvs.sf.net/index.html">Home</a><br>
+     <a href="http://viewcvs.sf.net/upgrading.html">Upgrading</a><br>
+     <a href="http://viewcvs.sf.net/contributing.html">Contributing</a><br>
+     <a href="http://viewcvs.sf.net/license-1.html">License</a><br>
+  </td><td colspan=2>
+
+  <p> 
+    Select your parameters for querying the CVS commit database in the
+    form at the top of the page.  You
+    can search for multiple matches by typing a comma-seperated list
+    into the text fields.  Regular expressions, and wildcards are also
+    supported.  Blank text input fields are treated as wildcards.
+  </p>
+  <p>
+    Any of the text entry fields can take a comma-seperated list of
+    search arguments.  For example, to search for all commits from
+    authors <i>jpaint</i> and <i>gstein</i>, just type: <code>jpaint,
+    gstein</code> in the <i>Author</i> input box.  If you are searching
+    for items containing spaces or quotes, you will need to quote your
+    request.  For example, the same search above with quotes is:
+    <code>"jpaint", "gstein"</code>.
+  </p>
+  <p>                           
+    Wildcard and regular expression searches are entered in a similar
+    way to the quoted requests.  You must quote any wildcard or
+    regular expression request, and a command character preceeds the
+    first quote.  The command character <code>l</code>(lowercase L) is for wildcard
+    searches, and the wildcard character is a percent (<code>%</code>).  The
+    command character for regular expressions is <code>r</code>, and is
+    passed directly to MySQL, so you'll need to refer to the MySQL
+    manual for the exact regex syntax.  It is very similar to Perl.  A
+    wildard search for all files with a <i>.py</i> extention is:
+    <code>l"%.py"</code> in the <i>File</i> input box.  The same search done
+    with a regular expression is: <code>r".*\.py"</code>.
+  </p>
+  <p>                  
+    All search types can be mixed, as long as they are seperated by
+    commas.
+  </p>                                                    
+  </td></tr></table>
+</body></html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_rootview.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_rootview.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/help_rootview.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>ViewCVS Help: Toplevel Directory View</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href=".."><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>ViewCVS Help: Toplevel Directory View</h1>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top bgcolor="#ffffff">
+       <h3>Help</h3>
+       <b>General</b><br>
+       <a href="help_dirview.html">Directory&nbsp;View</a><br>
+       <a href="help_log.html">Classic&nbsp;Log&nbsp;View</a><br>
+       <a href="help_logtable.html">Alternative&nbsp;Log&nbsp;View</a><br>
+       <a href="help_query.html">Query&nbsp;Database</a><br>
+
+       <h3>Internet</h3>
+       <a href="http://viewcvs.sf.net/index.html">Home</a><br>
+       <a href="http://viewcvs.sf.net/upgrading.html">Upgrading</a><br>
+       <a href="http://viewcvs.sf.net/contributing.html">Contributing</a><br>
+       <a href="http://viewcvs.sf.net/license-1.html">License</a><br>
+    </td><td colspan=2>
+  
+  <p><b>ViewCVS</b> is a WWW interface for CVS and Subversion repositories.</b>
+    You can browse the
+    file hierarchy by picking directories (which have slashes after
+    them, <i>e.g.</i>, <b>src/</b>).  If you pick a file, you will see
+    the revision history for that file.  Selecting a revision number
+    will display that revision of the file.  There is a link at each
+    revision to display diffs between that revision and the previous
+    one, and a form at the bottom of the page that allows you to
+    display diffs between arbitrary revisions.
+  </p>
+  <h3>ViewCVS History and Credits</h3>
+  <p>
+    This program
+    (<a href="http://viewcvs.sourceforge.net/">ViewCVS</a>)
+    has been written by Greg Stein
+    &lt;<a href="mailto:gstein at lyra.org">gstein at lyra.org</a>&gt;
+    based on the
+    <a href="http://linux.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi">cvsweb</a>
+    script by Henner Zeller
+    &lt;<a href="mailto:zeller at think.de">zeller at think.de</a>&gt;;
+    it is covered by the
+    <a href="http://www.opensource.org/licenses/bsd-license.html">BSD-License</a>.
+    If you would like to use this CGI script on your own web server and
+    CVS tree, see Greg's
+    <a href="http://viewcvs.sourceforge.net/">ViewCVS&nbsp;distribution&nbsp;site</a>.
+    Please send any suggestions, comments, etc. to the
+    <a href="mailto:viewcvs-dev at lyra.org">ViewCVS&nbsp;Developers&nbsp;Mailinglist</a>.
+  </p>
+
+  <h3>Documentation about CVS</h3>
+  <blockquote>
+    <p>
+      <a href="http://cvsbook.red-bean.com/">Karl Fogel's CVS book</a><br>
+      <a href="http://www.loria.fr/~molli/cvs/doc/cvs_toc.html">CVS
+      User's Guide</a><br>
+      <a href="http://cellworks.washington.edu/pub/docs/cvs/tutorial/cvs_tutorial_1.html">Another CVS tutorial</a><br>
+      <a href="http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/cvs/">Yet another CVS tutorial (a little old, but nice)</a><br>
+      <a href="http://www.cs.utah.edu/dept/old/texinfo/cvs/FAQ.txt">An old but very useful FAQ about CVS</a>
+    </p>
+  </blockquote>
+
+  <h3>Documentation about Subversion</h3>
+  <blockquote>
+    <p>
+      <a href="http://svnbook.red-bean.com/">Subversion: the Definitive Guide</a><br>
+    </p>
+  </blockquote>
+
+  <!-- insert repository access instructions here -->
+
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs-dev at lyra.org">ViewCVS Group</a></address>
+<!-- Created: Thu Oct 25 22:16:29 CEST 2001 -->
+<!-- hhmts start -->
+Last modified: Tue Nov 13 20:41:02 CEST 2001
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/back.gif
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/back.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/forward.gif
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/forward.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/back.gif
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/back.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/debian.jpg
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/debian.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/dir.gif
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/dir.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/text.gif
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/icons/small/text.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/chalk.jpg
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/chalk.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/cvsgraph_16x16.png
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/cvsgraph_16x16.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/cvsgraph_32x32.png
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/cvsgraph_32x32.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/down.png
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/down.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/logo.png
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/logo.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/up.png
===================================================================
(Binary files differ)


Property changes on: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/images/up.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/index.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/index.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/index.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,356 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>ViewCVS: Viewing CVS Repositories</title>
+  </head>
+<!-- Editors: Please keep all links to external sites in italics. -->
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><img border=0 src="images/logo.png"></td>
+      <td>
+	<h1>ViewCVS: Viewing CVS Repositories</h1>
+      </td>
+      <td align=center valign=top bgcolor="white" width="1%">
+	<b>Quickstart:</b>
+	<a href="viewcvs-0.9.2.tar.gz">download</a>
+      </td>
+      <td width="1%"><a href="http://sourceforge.net/"><img border=0
+	    src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS&nbsp;project&nbsp;page</a>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top>
+     <h3>Links:</h3>
+      <a href="http://viewcvs.sourceforge.net">Home</a><br>
+      <a href="upgrading.html">Upgrading</a><br>
+      <a href="contributing.html">Contributing</a><br>
+      <a href="license-1.html">License</a><br>
+      <a href="who.html">Who</a><br>
+     <h3>Sections:</h3>
+      <a href="#Features">Features</a><br>
+      <a href="#History">History</a><br>
+      <a href="#Mail">Mailing Lists</a><br>
+      <a href="#Cvsweb">vs.&nbsp;cvsweb</a><br>
+      <a href="#Download">Download</a><br>
+      <a href="#Future">Future&nbsp;directions</a><br>
+      <a href="#Colorize">Colorization</a><br>
+      <a href="#OtherSoftware">Related&nbsp;Software</a><br>
+    </td>
+    <td colspan=3>
+
+    <hr width="75&#37;">
+    <h2><a name="Features">Features</a></h2>
+    <p>
+      ViewCVS can browse directories, change logs, and specific
+      revisions of files. It can display diffs between versions and
+      show selections of files based on tags or branches. In addition,
+      ViewCVS has "annotation" or "blame" support, Bonsai-like query
+      facilities, template-based page generation, and support for
+      individually configuring virtual hosts.
+
+      It also includes support for
+      <a href="http://www.akhphd.au.dk/~bertho/cvsgraph/"><i>CvsGraph</i></a>
+      -- a program to display the tree of revisions and branches
+      graphically.
+    </p>
+    <p>
+      Currently, the functionality of ViewCVS surpasses that of cvsweb.
+      See <a href="#Cvsweb">below</a> for a list of additional features.
+    </p>
+
+    <hr width="75&#37;">
+    <h2><a name="History">History</a></h2>
+    <p>
+      The ViewCVS software was inspired by
+      <a href="http://stud.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi/"><i>cvsweb</i></a>
+      (originally written by Bill Fenner and then further developed by 
+      <a href="mailto:zeller at think.de">Henner Zeller</a>).
+      Greg Stein wanted to make some changes and updates, but cvsweb was
+      implemented in Perl. He wrote: 
+      <blockquote><i>While I can manage some Perl, cvsweb was
+	 rather unmaintainable for me. So I undertook the 
+	 task to convert the software to
+	 <a href="http://www.python.org/">Python</a>. As a result, 
+	 I've actually been able to go <em>way</em> beyond the simple
+	 changes that I had envisioned.
+      </i></blockquote>
+    </p>
+    <p>
+      ViewCVS started as a port of the cvsweb script, but has had
+      numerous cleanups and other modifications, based on some of
+      Python's strengths. There is still some minor "badness"
+      remaining from the Perl code, but Greg has been working on
+      flushing that out, while adding new features.
+    </p>
+    <p>
+      ViewCVS has been developed by the <a href="who.html">ViewCVS
+	Group</a> and is made available under a
+      <a href="license-1.html">BSD-type license</a>.
+    </p>
+
+    <p>
+      ViewCVS requires <strong>Python 1.5.2</strong> or later (Python
+      1.5.2 has been out for several years and is readily available for 
+      your favorite operating system).
+    </p>
+
+    <hr width="75&#37;">
+    <h2><a name="Mail">Mailing Lists</a></h2>
+    <p>
+      If you have any comments, questions, or suggestions,
+      then please send them to the
+      <a href="http://mailman.lyra.org/mailman/listinfo/viewcvs"><i>ViewCVS
+	mailing list</i></a>, which is also 
+      <a href="http://mailman.lyra.org/pipermail/viewcvs/"><i>archived</i></a>. 
+    </p>
+    <p>
+      A <a href="http://mailman.lyra.org/mailman/listinfo/viewcvs-dev"><i>mailing
+	list for ViewCVS developers</i></a> is also available 
+      (<a href="http://mailman.lyra.org/pipermail/viewcvs-dev/"><i>Archive</i></a>). 
+    </p>
+    <p>
+      ViewCVS is an <a href="http://www.opensource.org/"><i>Open
+      Source</i></a> project, and all
+      <a href="contributing.html">contributions</a> are welcome.
+    </p>
+
+    <hr width="75&#37;">
+    <h2><a name="Cvsweb">Additional features over cvsweb</a></h2>
+
+    <ul>
+      <li>
+        Template support: you can now customize the look and feel of
+        ViewCVS by editing the provided EZT templates, which are used
+        to generate the pages.
+      </li>
+      <li>
+        Internationalization support: ViewCVS will parse and handle
+        the Accept-Language request header, and can select different
+        inputs for localized page generation.
+      </li>
+      <li>
+	<a href="#Colorize">Colorization</a> for many file types via 
+	<code>enscript</code>.
+      </li>
+      <li>
+	Bonsai-like query features. (Requires MySQL and some other
+	prerequisites)
+      </li>
+      <li>
+	Annotation/blame viewing support against a <strong>read-only</strong>
+	repository.
+      </li>
+      <li>
+	Configuration on a per-virtual-host basis. This allows you
+	to share the configuration file and ViewCVS installation
+	across virtual hosts, yet still be able to fine-tune the
+	options when necessary.
+      </li>
+      <li>
+        Automatic generation of tarballs for the HEAD or a specified
+        tag.
+      </li>
+      <li>
+	Runs either as CGI script, called from an installed web server
+	(such as <a href="http://httpd.apache.org/"><i>Apache</i></a>),
+	or as a standalone server.
+      </li>
+      <li>
+        Searching files for matches for a regular expression.
+      </li>
+      <li>Better reporting for unreadable files.</li>
+      <li>
+	More robust when given varying <code>rcsdiff</code> or
+	<code>rlog</code> outputs.
+      </li>
+      <li>Hard breaks in human-readable diffs.</li>
+      <li>
+	The configuration file is optional (you can change the values
+	right in the CGI script and avoid the config file, if you so
+	choose). The config file syntax is also cleaner, since it is
+	human-manageable rather than source code.
+      </li>
+      <li>
+	Directories with a large number of files can be viewed.
+      </li>
+      <li>
+        Support for browsing <a href="http://subversion.tigris.org/">Subversion</a> 
+        repositories. <small>(requires Subversion's Python bindings)</small>
+      </li>
+      <li>
+	<strong>Security</strong>: ViewCVS only requires read access
+	to the CVS repository (not read/write). With the correct
+	security partitioning, this means that even if ViewCVS were to 
+	be subverted, your source code is safe. Further, ViewCVS does
+	not use any <code>system()</code> or <code>popen()</code>
+	calls, which are very susceptible to abuse.
+	<br>
+	<small>(cvsweb had a hole due to a popen() call)</small>
+      </li>
+      <li>
+        Last but not least: it doesn't suffer from the "unmaintainable
+	code effect" that hits most Perl projects sooner or later:  
+	<blockquote><i>[Perl] combines all the worst aspects of C and Lisp: 
+	  a billion different sublanguages in one monolithic executable.  
+	  It combines the power of C with the readability of PostScript.</i>
+					       --&nbsp;Jamie&nbsp;Zawinski
+         </blockquote>
+       </li>
+    </ul>
+    
+    <p>
+      The changes present in each release are available in
+      <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/viewcvs/viewcvs/CHANGES?rev=HEAD">ViewCVS's
+      CHANGES file</a>.
+    </p>
+
+    <hr width="75&#37;">
+    <h2><a name="Download">Download</a></h2>
+    <p>
+      The software is available for download:
+    </p>
+    <blockquote>
+      <a href="viewcvs-0.9.2.tar.gz">Version 0.9.2 of ViewCVS as a gzipped
+      tar</a>
+      <br>
+      <a href="viewcvs-0.9.2.zip">Version 0.9.2 of ViewCVS as a ZIP
+      file</a>
+    </blockquote>
+    <p>
+      Of course the current development version is also available 
+      through ViewCVS itself:
+    </p>
+    <blockquote>
+      <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/viewcvs/">http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/viewcvs/</a>
+    </blockquote>
+
+    <p>
+      You can also
+      <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/viewcvs/viewcvs/CHANGES?rev=HEAD">see
+      the changes</a> for this release.
+    </p>
+
+    <hr width="75&#37;">
+    <h2><a name="Future">Future features, directions</a></h2>
+    <p>
+    ViewCVS is a Open Source project.  So any future development depends
+    on the contributions that will be made by its user community.  
+    Certainly working patches have a greater chance to become realized 
+    quickly than feature requests.  <i>But don't hesitate to submit your
+	suggestions! Send mail to the
+	  <a href="mailto:viewcvs at lyra.org">viewcvs at lyra.org</a>
+	  mailing list or even better use the 
+	  <a href="http://sourceforge.net/tracker/?func=add&group_id=18760&atid=368760">SF&nbsp;tracker</a>.
+	</i>
+    </p>
+    <ul>
+      <li>See the feature requests already submitted through
+        the <a href="http://sourceforge.net/tracker/?atid=368760&group_id=18760&func=browse">SF feature request tracker</a>
+      </li>
+      <li>UI streamlining/simplification</li>
+      <li>Integration with CVS checkin auto-mail scripts</li>
+      <li>Tighter integration with the query features</li>
+     <p>
+    </ul>
+
+    <p>
+      And another longer term pet of Greg Stein:
+    </p>
+    <ul>
+      <li>Integration with an indexer such as LXR</li>
+    </ul>
+    </p>
+
+    <hr width="75&#37;">
+    <h2><a name="Colorize">Colorization of files</a></h2>
+    <p>
+      ViewCVS can make use of the <code>enscript</code> program to
+      colorize files in the CVS repository. If <code>enscript</code>
+      is present on your system, then set the
+      <code>use_enscript</code> option in the
+      <code>viewcvs.conf</code> configuration file to <code>1</code>. 
+      If necessary,
+      update the <code>enscript_path</code> option to point to your
+      installation directory. ... That's it! Now, as you view files
+      through ViewCVS, they will be colored.
+    </p>
+
+    <h3>Colorization of Python files</h3>
+    <p>
+      ViewCVS currently also comes with a builtin colorizer for Python
+      source files. This may go away in a future version, given the new
+      <code>enscript</code> support...
+    </p>
+    <p>
+      Christophe Pelte suggested this feature: colorize Python source
+      files using
+      <a href="http://starship.python.net/crew/lemburg/SoftwareDescriptions.html#py2html.py"><i>py2html</i></a>
+      (by Marc-Andrew Lemburg, based on
+      <a href="http://starship.python.net/crew/just/code/PyFontify.py"><i>PyFontify</i></a>
+      by Just van Rossum). I've added this feature to ViewCVS 0.3,
+      along with a generalized plugin mechanism for custom coloring other
+      types of files. See the instructions within the viewcvs.cgi for
+      setting the <code>py2html_path</code> configuration variable if
+      you want to use this feature.
+    </p>
+    <hr width="75&#37;">
+    <h2><a name="OtherSoftware">Related Software</a></h2>
+    <p>
+    Finally we compiled a list of links to related
+    software projects that might be also of interest to you:
+    <ul>
+      <li>
+      <a href="http://www.python.org/"><i>Python</i></a> : The programming
+      language ViewCVS is written in.
+      </li>
+      <li>
+      <a href="http://www.cvshome.org/"><i>CVS</i></a> : CVS is the 
+      Concurrent Versions System, the dominant open-source 
+      network-transparent version control system.
+      </li>
+      <li>
+      <a href="http://www.cs.purdue.edu/homes/trinkle/RCS/"><i>RCS</i></a> : 
+      Revision Control System; the backend to CVS.
+      </li>
+      <li>
+      <a href="http://subversion.tigris.org/"><i>Subversion</i></a> : 
+      a CVS-like open source version control system.
+      </li>
+      <li>
+      <a href="http://www.apache.org/"><i>Apache</i></a> : A (The?) web server.
+      </li>
+      <li>
+      <a href="http://people.ssh.com/mtr/genscript/"><i>enscript</i></a> :
+      used to colorize code displayed from the CVS repository 
+      (<a href="#Colorize">see above</a>).
+      </li>
+      <li>
+      <a href="http://www.akhphd.au.dk/~bertho/cvsgraph/"><i>CvsGraph</i></a> :
+      server side software used to display revisions graphically.  Called from
+      ViewCVS.
+      </li>
+      <li>
+      <a href="http://www.mysql.com/"><i>MySQL</i></a> : to create 
+      and query a commit database.  To make use of it you also need:
+      </li>
+      <li>
+      <a href="http://sourceforge.net/projects/mysql-python"><i>mysql-python</i></a> : 
+      the Python language binding to access MySQL databases.
+      </li>
+      <li>
+      <a href="http://cvsgrab.sourceforge.net/"><i>CVSGrab</i></a> :
+      client software used to grab from a public repository using ViewCVS 
+      and HTTP (useful if you are behind a firewall).
+      </li>
+    </ul>
+    </p>
+
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs at lyra.org">ViewCVS Users Group</a></address>
+<!-- Created: Fri Dec  3 02:51:37 PST 1999 -->
+<!-- hhmts start -->
+Last modified: Sat Jun 15 11:30:35 CEST 2002
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/license-1.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/license-1.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/license-1.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>ViewCVS License Agreement (v1)</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href="index.html"><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>ViewCVS License Agreement (v1)</h1>
+      </td>
+      <td width="1%"><a href="http://sourceforge.net/"><img border=0
+	    src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS&nbsp;project&nbsp;page</a>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top>
+       <a href="index.html">Overview</a><br>
+       <a href="upgrading.html">Upgrading</a><br>
+       <a href="contributing.html">Contributing</a><br>
+       License<br>
+       <a href="who.html">Who</a><br>
+    </td><td colspan=2>
+
+    <p>
+      The following text constitutes the license agreement for the
+      <a href="./">ViewCVS</a> software. It
+      is an agreement between
+      <a href="who.html">The ViewCVS
+	Group</a> and the users of ViewCVS.
+    </p>
+    <p>
+      <small>
+	<em>
+	  Note: the copyright years were updated on May 12, 2001 and
+	  September 5, 2002. No other changes were made to the
+	  license.
+	</em>
+      </small>
+    </p>
+
+    <hr>
+
+    <p>
+      <b>
+	Copyright &copy; 1999-2002 The ViewCVS Group.  All rights reserved.
+      </b>
+    </p>
+    <p>
+      By using ViewCVS, you agree to the terms and conditions set
+      forth below:
+    </p>
+    <p>
+      Redistribution and use in source and binary forms, with or
+      without modification, are permitted provided that the following
+      conditions are met:
+    </p>
+    <ol>
+      <li>
+	<p>
+	  Redistributions of source code must retain the above
+	  copyright notice, this list of conditions and the following
+	  disclaimer.
+	</p>
+      </li>
+      <li>
+	<p>
+	  Redistributions in binary form must reproduce the above
+	  copyright notice, this list of conditions and the following
+	  disclaimer in the documentation and/or other materials
+	  provided with the distribution.
+	</p>
+      </li>
+    </ol>
+
+    <p>
+      THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS
+      IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+      LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+      FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT
+      SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+      DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+      SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+      BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+      LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+      (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+      THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+      SUCH DAMAGE.
+    </p>
+
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs at lyra.org">ViewCVS Users Group</a></address>
+<!-- Created: Mon May  8 19:01:27 PDT 2000 -->
+<!-- hhmts start -->
+Last modified: Thu Sep  5 00:34:13 PDT 2002
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/styles.css
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/styles.css	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/styles.css	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,120 @@
+/*******************************/
+/***  ViewCVS CSS Stylesheet ***/
+/*******************************/
+
+/*** Standard Tags ***/
+html, body {
+  color: #000000;
+  background-color: #ffffff;
+}
+
+a:link    { color: #0000ff; }
+a:visited { color: #880088; }
+a:active  { color: #0000ff; }
+
+
+/** Navigation Headers ***/
+.vc_navheader {
+  background-color: #8888ff;
+}
+
+
+/*** Table Headers ***/
+.vc_header {
+  text-align: left;
+  background-color: #cccccc;
+}
+.vc_header_sort {
+  text-align: left;
+  background-color: #88ff88;
+}
+
+
+/*** Table Rows ***/
+.vc_row_even {
+  background-color: #ffffff;
+}
+.vc_row_odd {
+  background-color: #ccccee;
+}
+
+
+/*** Log messages ***/
+.vc_log {
+  /* unfortunately, white-space: pre-wrap isn't widely supported ... */
+  white-space: -moz-pre-wrap; /* Mozilla based browsers */
+  white-space: -pre-wrap;     /* Opera 4 - 6 */
+  white-space: -o-pre-wrap;   /* Opera >= 7 */
+  white-space: pre-wrap;      /* CSS3 */
+  word-wrap: break-word;      /* IE 5.5+ */
+}
+
+
+/*** Markup Summary Header ***/
+.vc_summary {
+  background-color: #eeeeee;
+}
+
+
+/*** Diff Styles ***/
+.vc_diff_header {
+  background-color: #ffffff;
+}
+.vc_diff_chunk_header {
+  background-color: #99cccc;
+}
+.vc_diff_chunk_extra {
+  font-size: smaller;
+}
+.vc_diff_empty {
+  background-color: #cccccc;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_add {
+  background-color: #aaffaa;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_remove {
+  background-color: #ffaaaa;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_change {
+  background-color: #ffff77;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_change_empty {
+  background-color: #eeee77;
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_diff_nochange {
+  font-family: sans-serif;
+  font-size: smaller;
+}
+.vc_raw_diff {
+  background-color: #cccccc;
+  font-size: smaller;
+}
+
+/*** Annotate Styles ***/
+.vc_blame_line, .vc_blame_author, .vc_blame_rev {
+  font-family: monospace;
+  text-align: right;
+  white-space: nowrap;
+  padding-right: 0.5em;
+}
+.vc_blame_text {
+  font-family: monospace;
+  text-align: left;
+  white-space: pre;
+  width: 100%;
+}
+
+/*** Query Form ***/
+.vc_query_form {
+  background-color: #e6e6e6;
+}

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/upgrading.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/upgrading.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/upgrading.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,773 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Upgrading a ViewCVS Installation</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href="index.html"><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>Upgrading a ViewCVS Installation</h1>
+      </td>
+      <td width="1%"><a href="http://sourceforge.net/"><img border=0
+	    src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS&nbsp;project&nbsp;page</a>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top>
+       <a href="index.html">Overview</a><br>
+       Upgrading<br>
+       <a href="contributing.html">Contributing</a><br>
+       <a href="license-1.html">License</a><br>
+       <a href="who.html">Who</a><br>
+    </td><td colspan=2>
+
+    <p>
+      This document describes some of the things that you will need to 
+      consider, change, or handle when upgrading an existing ViewCVS
+      installation to a newer version.
+    </p>
+    <p>
+      Upgrading from an ancient version of ViewCVS to the latest version
+      isn't necessarily a multi step process.  The instructions are only 
+      organized that way.  You can certainly upgrade in a single step.
+    </p>
+    <p>
+      It is always recommended to install the new version in a fresh directory
+      and to carefully compare the configuration files.  A possible approach
+      is to name the directories <code>/usr/local/viewcvs-0.6</code>, 
+      <code>/usr/local/viewcvs-0.7</code> and so on and than create a 
+      symbolic link <code>viewcvs</code> pointing to the production 
+      version.  This way you can easily test several versions and switch
+      back, if your users start to complain.
+    </p>
+
+    <ul>
+      <li><a href="#from9">Upgrading from ViewCVS 0.9</a></li>
+      <li><a href="#from8">Upgrading from ViewCVS 0.8</a></li>
+      <li><a href="#from7">Upgrading from ViewCVS 0.7 or earlier</a></li>
+    </ul>
+
+    <hr>
+
+    <h2><a name="from9">Upgrading from ViewCVS 0.9</a></h2>
+    <p>
+      This section discusses how to upgrade ViewCVS 0.9 to version
+      1.0 or a later version of the software.
+    </p>
+    <h3>CGI Stubs</h3>
+    
+    <p>The CGI stub scripts haved been moved from 
+    <code>&lt;VIEWCVS_INSTALLATION_DIRECTORY&gt;/cgi/</code> to 
+    <code>&lt;VIEWCVS_INSTALLATION_DIRECTORY&gt;/www/cgi/</code>, so you 
+    will need update any ScriptAlias directives pointing to them in 
+    your apache configuration. Also, the contents of these scripts
+    have changed, so you may need to replace copies of the old scripts
+    you put in other directories.</p>
+
+    <h3>Checkin Database</h3>
+    
+    <p>ViewCVS 1.0 reads and writes commit times in the MySQL
+    database in UTC time rather than local time. This can cause
+    times displayed on the query page to be a few hours off if
+    an old database is being used with a new version of ViewCVS.
+    The best way to fix this is to rebuild the database with the
+    new version of cvsdbadmin, but it it is also possible to
+    enable a backwards compatibility mode by setting
+    <code>utc_time = 0</code> at the top of lib/dbi.py</p>
+
+    <h3>Template Arrangement</h3>
+    
+    <p>The default templates have been rearranged a bit in ViewCVS
+    1.0.  Specifically, "header.ezt" and "footer.ezt" have moved into
+    the "templates/include/" subdirectory.  Also, "directory.ezt" and
+    "dir_alternate.ezt" now reference new template files
+    "dir_header.ezt" and "dir_footer.ezt", also found in the
+    "templates/include/" subdirectory.</p>
+
+    <p>Notably, the "markup.ezt" and "annotate.ezt" templates are now
+    fully self-contained.  That is, the markup and annotation data
+    generated by ViewCVS is now accessible in those templates just
+    like other template variables.  As a result, ViewCVS now has no
+    more internal need for the <var>templates.footer</var>
+    configuration variable, so that variable has been removed from the
+    default configuration file.</p>
+
+    <h3>Configuration Options</h3>
+    <p>
+      Lots of options have been added.  <i style="color:red;">### Need to
+      document them.</i>
+    </p>
+
+    <h3>Removed Template Variables</h3>
+    <blockquote>
+      <dl>
+        <dt>
+          <code>directory.ezt</code> and <code>dir_alternate.ezt</code>:
+          <var>params</var>
+        </dt>
+        <dd>
+          Replaced with new <var>search_tag_hidden_values</var>
+          variable.
+        </dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>directory.ezt</code> and <code>dir_alternate.ezt</code>:
+          <var>rows.cvs</var>
+        </dt>
+        <dd>
+          Merged with <var>rows.state</var>.  Interesting states for
+          <var>rows.state</var> now include "none" (no information
+          known), "error" (an error occured trying to get
+          information), "dead" (this revision is marked as 'dead').
+        </dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>directory.ezt</code> and <code>dir_alternate.ezt</code>:
+          <var>have_logs</var>
+        </dt>
+        <dd>Deemed unnecessary.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>directory.ezt</code>, <code>dir_alternate.ezt</code>,
+          <code>log.ezt</code>, and <code>log_table.ezt</code>:
+          <var>current_root</var>
+        </dt>
+        <dd>Replaced by <var>rootname</var>, which is now available to
+            all templates.</dd>
+      </dl>
+      <dl>
+        <dt><code>graph.ezt</code>: <var>request.url</var></dt>
+        <dd>Replaced with new <var>imagesrc</var> variable.</dd>
+      </dl>
+      <dl>
+        <dt><code>graph.ezt</code>: <var>request.where</var></dt>
+        <dd>Replaced with <var>path</var> variable.</dd>
+      </dl>      
+      <dl>
+        <dt><code>header.ezt</code>: <var>qquery</var></dt>
+        <dd>Combined into <var>file_url</var> variable.</dd>
+      </dl>
+      <dl>
+        <dt><code>markup.ezt</code>: <var>utc_date</var>,
+        <var>href</var>, and <var>text_href</var></dt>
+        <dd>
+          Replaced with new <var>date_str</var>, <var>download_href>,
+          and <var>download_text_href</var> variables.
+        </dd>
+      </dl>
+      <dl>
+        <dt><code>log.ezt</code> and <code>log_table.ezt</code>:
+        <var>href</var>, <var>query</var>, <var>qquery</var>,
+        <var>head_href</var>, <var>head_abs_href</var>,
+        <var>entries.href</var>, and 
+        <var>entries.text_href</var></dt>
+        <dd>
+          Replaced with new <var>entries.annotate_href</var>,
+          <var>diff_url</var>, <var>diff_params</var>,
+          <var>diff_select_action</var>,
+          <var>branch_select_action</var>,
+          <var>logsort_action</var>,
+          <var>view_href</var>, <var>download_href</var>,
+          <var>download_text_href</var>,
+          <var>entries.download_href</var>, and
+          <var>entries.download_text_href</var> variables.
+        </dd>
+      </dl>
+    </blockquote>
+
+    <h3>New Template Variables</h3>
+    <blockquote>
+      <dl>
+        <dt>All files: <var>roottype</var>, <var>rootname</var>, and 
+            <var>pathtype</var></dt>
+        <dd>
+          Strings denoting the type ("cvs" or "svn") and name current
+          repository. 
+        </dd>
+      </dl>
+      <dl>
+        <dt>All files: <var>icons</var></dt>
+        <dd>
+          Web path to directory containing apache icon files.
+        </dd>
+      </dl>
+      <dl>
+        <dt>All files: <var>docroot</var></dt>
+        <dd>
+          Web path to directory containing ViewCVS static files
+          (files in <code>&lt;VIEWCVS_INSTALLATION_DIRECTORY&gt;/doc</code>)
+        </dd>
+      </dl>
+      <dl>
+        <dt><code>graph.ezt</code>: <var>imagesrc</var></dt>
+        <dd>String contain URL for graph image.</dd>
+      </dl>
+      <dl>
+        <dt><code>markup.ezt</code>: <var>date_str</var></dt>
+        <dd>String representing checkin date</dd>
+      </dl>
+      <dl>
+        <dt><code>markup.ezt</code>: <var>markup</var></dt>
+        <dd>New placeholder for the marked-up file contents.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>markup.ezt</code>:
+          <var>download_href</var> and <var>download_text_href</var>
+        </dt>
+        <dd>New variables for links.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>directory.ezt</code> and <code>dir_alternate.ezt</code>:
+          <var>tree_rev</var>, <var>tree_rev_href</var>,
+          and <var>jump_rev</var>
+        </dt>
+        <dd>New Subversion-only directory revision items.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>directory.ezt</code> and <code>dir_alternate.ezt</code>:
+          <var>rows.mime_type</var>
+        </dt>
+        <dd>New mime-type variable for file directory entries.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>directory.ezt</code> and <code>dir_alternate.ezt</code>:
+          <var>rows.size</var>
+        </dt>
+        <dd>New filesize variable for file directory entries.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>diff.ezt</code>: 
+          <var>raw_diff</var>
+        </dt>
+        <dd>New variable for testing and presenting the raw
+          (non-colored) diff contents</dd>.
+      </dl>
+      <dl>
+        <dt>
+          <code>annotate.ezt</code>:
+          <var>lines</var>, <var>lines.line_number</var>, <var>lines.rev</var>,
+          <var>lines.author</var>, <var>lines.prev_rev</var>,
+          <var>lines.diff_url</var>, and <var>lines.text</var>
+        </dt>
+        <dd>New variables for annotations.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>log.ezt</code> and <code>log_table.ezt</code>:
+          <var>entries.filename</var>, <var>entries.size</var>,
+          <var>entries.copy_path</var>, <var>entries.copy_rev</var>,
+          <var>entries.copy_href</var>, <var>entries.prev_path</var>,
+          and <var>entries.revision_href</var>
+        </dt>
+        <dd>New attributes for Subversion revisions.</dd>
+      </dl>
+      <dl>
+        <dt>
+          <code>log.ezt</code> and <code>log_table.ezt</code>:
+          <var>view_href</var>, <var>download_href</var>,
+          <var>download_text_href</var>,
+          <var>entries.download_href</var>, and
+          <var>entries.download_text_href</var>
+        </dt>
+        <dd>New variables for links.</dd>
+      </dl>
+    </blockquote>
+
+
+    <h3>New Template Form Variables</h3>
+    <p>
+      Each HTML form that appears in ViewCVS templates is now
+      associated with 2 new variables which should be used to
+      determine its <code>ACTION</code> value and its hidden field
+      values. Forms using the new variables look like
+    </p>
+
+    <pre>
+      &lt;form method=get action="[my_form_action]"&gt;
+        [my_form_hidden_values]
+        ... form widgets go here ...
+      &lt;/form&gt;
+    </pre>
+
+    <p>
+      Here is a list of the new variable names and the forms they are
+      associated with:
+    </p>
+
+    <table border=1>
+      <tr>
+        <th>Variables</th><th>Form</th>
+      </tr>
+      <tr>
+        <td>
+          <var>change_root_action</var><br>
+          <var>change_root_hidden_values</var>
+        </td>
+        <td>
+          Root selector form in <code>directory.ezt</code> and
+          <code>dir_alternate.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>jump_rev_action</var><br>
+          <var>jump_rev_hidden_values</var>
+        </td>
+        <td>
+          Subversion directory revision selector form in
+          <code>directory.ezt</code> and
+          <code>dir_alternate.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>dir_paging_action</var><br>
+          <var>dir_paging_hidden_values</var>
+        </td>
+        <td>
+          Directory paging form in <code>directory.ezt</code> and
+          <code>dir_alternate.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>search_tag_action</var><br>
+          <var>search_tag_hidden_values</var>
+        </td>
+        <td>
+           Tag choosing and regular expression searching form in
+           <code>directory.ezt</code> and
+           <code>dir_alternate.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>log_paging_action</var><br>
+          <var>log_paging_hidden_values</var>
+        </td>
+        <td>
+           Log page paging form in <code>include/paging.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>diff_select_action</var><br>
+          <var>diff_select_hidden_values</var>
+        </td>
+        <td>
+           Arbitrary diff form on log page in
+           <code>include/diff_form.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>branch_select_action</var><br>
+          <var>branch_select_hidden_values</var>
+        </td>
+        <td>
+           Branch select form on log page in
+           <code>include/branch_form.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>logsort_action</var><br>
+          <var>logsort_hidden_values</var>
+        </td>
+        <td>
+           Log sort form on log page in <code>include/sort.ezt</code>.
+        </td>
+      </tr>
+      <tr>
+        <td>
+          <var>diff_format_action</var><br>
+          <var>diff_format_hidden_values</var>
+        </td>
+        <td>
+           Diff format form in <code>include/diff.ezt</code>.
+        </td>
+      </tr>
+    </table>
+
+    <h3>Other Template Changes</h3>
+    <h4>In <code>directory.ezt</code> and <code>dir_alternate.ezt</code></h4>
+    <ul>
+      <li>
+        A new form for changing the current directory revision is 
+        displayed for subversion directories.
+      </li>
+      <li>
+        A new form that controls paging is displayed when 
+        cfg.options.use_pagesize is not 0
+      </li>
+      <li>
+        The sorting links and "hide attic" link are no longer 
+        prefixed with "<code>./</code>"
+      </li>
+      <li>
+        The revision number links no longer need 
+        "<code>content-type=text/vnd.viewcvs-markup</code>" suffixes.
+      </li>
+      <li>
+        The link to Attic/ is only displayed for CVS roots
+      </li>
+      <li>
+        Directory <var>rows.name</var> values no longer have
+        trailing slashes
+      </li>
+    </ul>
+
+    <h4>In <code>log.ezt</code> and <code>log_table.ezt</code></h4>
+    <ul>
+      <li>
+        "Default branch" section moved into include/branch.ezt and is
+        only displayed for CVS roots
+      </li>
+      <li>
+        "Current tag" section moved into include/view_tag.ezt and is
+        only displayed for CVS roots
+      </li>
+      <li>
+        "Changes since" is only displayed for cvs roots
+      </li>
+      <li>
+        New paging form is included from include/paging.ezt
+      </li>
+      <li>
+        Arbitrary diff form moved into include/diff_form.ezt
+      </li>
+      <li>
+        Branch select form moved into include/branch_form.ezt
+      </li>
+      <li>
+        Log sort form moved into include/sort.ezt
+      </li>
+    </ul>
+
+    <hr>
+
+    <h2><a name="from8">Upgrading from ViewCVS 0.8</a></h2>
+    <p>
+      This section discusses how to upgrade ViewCVS 0.8 to version
+      0.9 or a later version of the software.
+    </p>
+    
+    <p>
+      <strong>NOTE:</strong> these changes will bring you up to the
+      requirements of version 0.9. You must also follow the directions
+      for <a href="#from9">upgrading from 0.9</a>.
+    </p>
+
+    <h3>Configuration Options</h3>
+    <p>
+      More templates were introduced in version 0.8 of the software,
+      which made many of the configuration options obsolete. This
+      section covers which options were removed. If you made any
+      changes to these options, then you will need to make
+      corresponding changes in the templates.
+    </p>
+    <blockquote>
+      <dl>
+	<dt>
+	  Colors:
+	  <strong>diff_heading</strong>,
+	  <strong>diff_empty</strong>,
+	  <strong>diff_remove</strong>,
+	  <strong>diff_change</strong>,
+	  <strong>diff_add</strong>,
+	  and <strong>diff_dark_change</strong>
+	</dt>
+	<dd>
+	  These options have been incorporated into the
+	  <code>diff.ezt</code> template.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>markup_log</strong></dt>
+	<dd>
+	  This option has been incorporated into the
+	  <code>markup.ezt</code> template.
+
+	  <p></p>
+	</dd>
+
+        <dt>Colors: <strong>nav_header</strong>
+          and <strong>alt_background</strong></dt>
+	<dd>
+	  These options have been incorporated into the
+	  <code>header.ezt</code> template.
+
+	  <p></p>
+	</dd>
+
+        <dt>
+	  Images:
+          <strong>back_icon</strong>,
+          <strong>dir_icon</strong>,
+          and <strong>file_icon</strong>
+        </dt>
+	<dd>
+	  These options have been incorporated into the
+	  <code>directory.ezt</code>, <code>header.ezt</code>,
+	  <code>log.ezt</code>, <code>log_table.ezt</code>, and
+	  <code>query.ezt</code> templates.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>use_java_script</strong>
+          and <strong>open_extern_window</strong></dt>
+	<dd>
+	  The templates now use JavaScript in all applicable places,
+	  and open external windows for most downloading and viewing
+	  of files. If you wish to not use JavaScript and/or external
+	  windows, then remove the feature(s) from the templates.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>show_author</strong></dt>
+	<dd>
+          Changing this option would be quite strange and rare. If you
+          do not want to show the author for the revisions, then you
+          should remove it from the various templates.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>hide_non_readable</strong></dt>
+	<dd>
+          This option was never used, so it has been removed.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>flip_links_in_dirview</strong></dt>
+	<dd>
+          This option is no longer available. If you want the links in
+          your directory view flipped, then you may use the
+          <code>dir_alternate.ezt</code> template.
+
+	  <p></p>
+	</dd>
+
+      </dl>
+    </blockquote>
+
+    <h3>Template Variables</h3>
+    <p>
+      Some template variables that were available in 0.8 have been
+      removed in 0.9. If you have custom templates that refer to these
+      variables, then you will need to modify your templates.
+    </p>
+
+	  <blockquote>
+	    <dl>
+	      <dt><code>directory.ezt</code>: <var>headers</var></dt>
+	      <dd>
+		The headers are now listed explicitly in the template,
+		rather than made available through a list.
+		<p></p>
+	      </dd>
+
+	      <dt>
+		<code>directory.ezt</code>:
+		<var>rows.cols</var>,
+		and <var>rows.span</var>
+	      </dt>
+	      <dd>
+		These variables were used in conjunction with the
+		<var>headers</var> variable to control the column
+		displays. This is now controlled explicitly within the
+		templates.
+		<p></p>
+	      </dd>
+
+	      <dt><code>directory.ezt</code>:
+		<var>rev_in_front</var></dt>
+	      <dd>
+		This was used to indicate that revision links should
+		be used in the first column, rather than in their
+		standard place in the second column. Changing the
+		links should now be done in the template, rather than
+		according to this variable. You may want to look at
+		the <code>dir_alternate.ezt</code> template, which has
+		the revision in front.
+		<p></p>
+	      </dd>
+
+	      <dt><code>directory.ezt</code>:
+		<var>rows.attic</var>
+		and <var>rows.hide_attic_href</var></dt>
+	      <dd>
+		These variable were used to manage the hide and
+		showing of the contents of the <code>Attic/</code>
+		subdirectory. Several new variables were introduced
+		which can be used to replace this functionality:
+		<var>show_attic_href</var>,
+		<var>hide_attic_href</var>, and <var>rows.state</var>.
+		<p></p>
+	      </dd>
+	    </dl>
+	  </blockquote>
+    <hr>
+
+    <h2><a name="from7">Upgrading from ViewCVS 0.7 or earlier</a></h2>
+    <p>
+      This section discusses how to upgrade ViewCVS 0.7, or earlier,
+      to 0.8 or a later version of the software.
+    </p>
+    <p>
+      <strong>NOTE:</strong> these changes will bring you up to the
+      requirements of version 0.8. You must also follow the directions
+      for <a href="#from8">upgrading from 0.8</a>.
+    </p>
+
+    <h3>Configuration Options</h3>
+    <p>
+      The largest change from 0.7 to 0.8, that you will need to deal
+      with, is the introduction of templates. This shifted many
+      configuration file options into the templates, for more direct
+      editing of the output style, colors, and layout. Below is a list 
+      of options that no longer exist, and where you can find their
+      counterpart in the current version of ViewCVS.
+    </p>
+    <p>
+      The following options have all been removed in ViewCVS 0.8. If
+      you made local changes to your ViewCVS configuration, then you
+      will need to edit templates in the <code>templates/</code>
+      subdirectory.
+    </p>
+
+    <blockquote>
+      <dl>
+	<dt>
+	  The [text] section:
+	  <strong>short_intro</strong>,
+	  <strong>long_intro</strong>,
+	  and <strong>doc_info</strong>
+	</dt>
+	<dd>
+	  These options have been incorporated into the
+	  <code>doc/help_rootview.html</code> page and the
+	  <code>doc/help_dirview.html</code> page.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>repository_info</strong></dt>
+	<dd>
+	This option is now incorporated into the
+	<code>directory.ezt</code> template.
+
+	<p></p>
+	</dd>
+
+	<dt><strong>table_padding</strong></dt>
+	<dd>
+	  The table padding values can be changed in the
+	  <code>directory.ezt</code> template.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>table_border</strong></dt>
+	<dd>
+	  Edit <code>directory.ezt</code> to add a border around the
+	  directory table.
+
+	  <p></p>
+	</dd>
+
+	<dt>
+	  <strong>column_header_normal</strong> and
+	  <strong>column_header_sorted</strong>
+	</dt>
+	<dd>
+	  Edit <code>directory.ezt</code> to modify the colors of the
+	  column headers.
+
+	  <p></p>
+	</dd>
+
+	<dt>
+	  <strong>extern_window_width</strong> and
+	  <strong>extern_window_height</strong>
+	</dt>
+	<dd>
+	  These options were never used and have been removed.
+	  <p></p>
+	</dd>
+
+	<dt><strong>logo</strong></dt>
+	<dd>
+	  Edit the templates directly (<code>directory.ezt</code>,
+	  <code>log.ezt</code> or <code>log_table.ezt</code> and if
+	  needed <code>query.ezt</code>) to alter the URL and size of
+	  your logo.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>allow_version_select</strong></dt>
+	<dd>
+	  Edit the <code>log.ezt</code> template if you want to remove
+	  the link which allows the user to select a revision for a
+	  diff.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>input_text_size</strong></dt>
+	<dd>
+	  Edit the <code>log.ezt</code> template if you want to change
+	  the size of the entry box for revisions for performing
+	  diffs.
+
+	  <p></p>
+	</dd>
+
+	<dt><strong>even_odd</strong></dt>
+	<dd>
+	  Edit the <code>directory.ezt</code> and
+	  <code>query.ezt</code> templates if you want to change the
+	  colors of the rows in the directory and query result tables.
+
+          <p></p>
+	</dd>
+
+        <dt>Colors: <strong>text</strong>
+          and <strong>background</strong></dt>
+	<dd>
+	  These options have been incorporated into the
+	  <code>directory.ezt</code>, <code>log.ezt</code>, and
+	  <code>log_table.ezt</code> templates.
+
+	  <p></p>
+	</dd>
+
+      </dl>
+    </blockquote>
+
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs at lyra.org">ViewCVS Users Group</a></address>
+<!-- Created: Mon Sep 24 04:23:53 PDT 2001 -->
+<!-- hhmts start -->
+Last modified: Sat Dec 22 20:05:14 PST 2001
+<!-- hhmts end -->
+</body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/who.html
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/who.html	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs/who.html	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>The ViewCVS Group</title>
+  </head>
+
+<body background="images/chalk.jpg">
+  <table width="100&#37;" cellspacing=5>
+    <tr>
+      <td width="1%"><a href="index.html"><img border=0
+	     src="images/logo.png"></a>
+      </td>
+      <td>
+	<h1>The ViewCVS Group</h1>
+      </td>
+      <td width="1%"><a href="http://sourceforge.net/"><img border=0
+	    src="http://sourceforge.net/sflogo.php?group_id=18760&type=1"></a><br><a href="http://sourceforge.net/projects/viewcvs/">ViewCVS&nbsp;project&nbsp;page</a>
+      </td>
+    </tr>
+    <tr><td width="1%" valign=top>
+       <a href="index.html">Overview</a><br>
+       <a href="upgrading.html">Upgrading</a><br>
+       <a href="contributing.html">Contributing</a><br>
+       <a href="license-1.html">License</a><br>
+       Who<br>
+    </td><td colspan=2>
+  
+
+    <p>
+      The ViewCVS Group is an informal group of people working on and
+      developing the ViewCVS package. The current set of members are:
+    </p>
+    <ul>
+      <li><a href="http://www.lyra.org/greg/"><b>Greg Stein</b></a></li>
+      <li>Tanaka Akira</li>
+      <li>Tim Cera</li>
+      <li>Peter Funk</li>
+      <li>Jay Painter</li>
+      <li>C. Michael Pilato</li>
+      <li>Russell Yanofsky</li>
+    </ul>
+    <p>
+    In 2001 the project has been moved to SourceForge and some 
+    <a href="http://sourceforge.net/project/memberlist.php?group_id=18760">more
+    developers</a> were given commit access.  
+    </p>
+    <p>
+      Please note that the <a href="./">ViewCVS</a> package is offered 
+      under a BSD-type license, which is detailed on the
+      <a href="license-1.html">ViewCVS License</a> page.
+    </p>
+  
+  </td></tr></table>
+  <hr>
+  <address><a href="mailto:viewcvs-dev at lyra.org">ViewCVS Group</a></address>
+<!-- Created: Mon May  8 19:08:58 PDT 2000 -->
+<!-- hhmts start -->
+Last modified: Thu Oct 25 01:47:02 PDT 2001
+<!-- hhmts end -->
+  </body>
+</html>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * GForge ViewCVS PHP wrapper.
+ *
+ * Portion of this file is inspired from the ViewCVS wrapper
+ * contained in CodeX.
+ * Copyright (c) Xerox Corporation, CodeX / CodeX Team, 2001,2002. All Rights Reserved.
+ * http://codex.xerox.com
+ *
+ * @version   $Id: viewcvs.php,v 1.4.2.4 2006/02/08 23:48:15 tperdue Exp $
+ */
+
+// make sure we're not compressing output if we are making a tarball
+if (isset($_GET['view']) && $_GET['view'] == 'tar') {
+	$no_gz_buffer=true;
+}
+
+require_once('pre.php');
+require_once('www/scm/include/scm_utils.php');
+require_once('www/plugins/scmsvn/viewcvs_utils.php');
+
+if (!$sys_use_scm) {
+	exit_disabled();
+}
+
+// Get the project name from query
+if(getStringFromGet('root') && strpos(getStringFromGet('root'), ';') === false) {
+	$projectName = getStringFromGet('root');
+} else {
+	$queryString = getStringFromServer('QUERY_STRING');
+	if(preg_match_all('/[;]?([^\?;=]+)=([^;]+)/', $queryString, $matches, PREG_SET_ORDER)) {
+		for($i = 0, $size = sizeof($matches); $i < $size; $i++) {
+			$query[$matches[$i][1]] = urldecode($matches[$i][2]);
+		}
+		$projectName = $query['root'];
+	}
+}
+// Remove eventual leading /root/ or root/
+$projectName = ereg_replace('^..[^/]*/','', $projectName);
+if (!$projectName) {
+	exit_no_group();
+}
+
+// Check permissions
+$Group =& group_get_object_by_name($projectName);
+if (!$Group || !is_object($Group) || $Group->isError()) {
+	exit_no_group();
+}
+if (!$Group->usesSCM()) {
+	exit_error($Language->getText('general','error'), $Language->getText('scm_index','error_this_project_has_turned_off'));
+}
+
+// check if the scm_box is located in another server
+$scm_box = $Group->getSCMBox();
+//$external_scm = (gethostbyname($sys_default_domain) != gethostbyname($scm_box)); 
+$external_scm = !$sys_scm_single_host;
+
+if (session_loggedin()) {
+	if (user_ismember($Group->getID())) {
+		$perm = & $Group->getPermission(session_get_user());
+		
+		if (!($perm && is_object($perm) && $perm->isCVSReader()) && !$Group->enableAnonSCM()) {
+			exit_permission_denied();
+		}
+	} else if (!$Group->enableAnonSCM()) {
+		exit_permission_denied();
+	}
+	
+} else if (!$Group->enableAnonSCM()) {		// user is not logged in... check if group accepts anonymous CVS
+	exit_permission_denied();
+}
+
+// User has access to the repository. Check for valid script
+// (only if we're working on a local SVN server, if the SVN server is external the variable
+// $sys_path_to_scmweb points to the path of the viewcvs script on the remote server)
+if (!isset($GLOBALS['sys_path_to_scmweb']) || (!$external_scm && !is_file($GLOBALS['sys_path_to_scmweb'].'/viewcvs.cgi'))) {
+	exit_error('Error',"viewcvs.cgi script doesn't exist in ".$GLOBALS['sys_path_to_scmweb']);
+}
+
+
+if ($external_scm) {
+	//$server_script = "/cgi-bin/viewcvs.cgi";
+	$server_script = $GLOBALS["sys_path_to_scmweb"]."/viewcvs.cgi";
+	// remove leading / (if any)
+	$server_script = preg_replace("/^\\//", "", $server_script); 
+	
+	// pass the parameters passed to this script to the remote script in the same fashion
+	$script_url = "http://".$scm_box."/".$server_script.$_SERVER["PATH_INFO"]."?".$_SERVER["QUERY_STRING"];
+	$fh = @fopen($script_url, "r");
+	if (!$fh) {
+		exit_error('Error', 'Could not open script <b>'.$script_url.'</b>.');
+	}
+	
+	// start reading the output of the script (in 8k chunks)
+	$content = "";
+	while (!feof($fh)) {
+		$content .= fread($fh, 8192);
+	}
+	
+	if (viewcvs_is_html()) {
+		// Now, we must replace the occurencies of $server_script with this script
+		// (do this only of outputting HTML)
+		// We must do this because we can't pass the environment variable SCRIPT_NAME
+		// to the cvsweb script (maybe this can be fixed in the future?)
+		$content = str_replace("/".$server_script, $_SERVER["SCRIPT_NAME"], $content);
+	}
+} else {
+	// Call to ViewCVS CGI locally (see viewcvs_utils.php)
+	$content = viewcvs_execute();
+}
+
+// Set content type header from the value set by ViewCVS
+// No other headers are generated by ViewCVS because in generate_etags
+// is set to 0 in the ViewCVS config file
+$found = false;
+$line = strtok($content,SEPARATOR);
+while ($line && !$found) {
+	if (preg_match('/^Content-Type:(.*)$/',$line,$matches)) {
+		header('Content-Type:' . $matches[1]);
+ 		$found = true;
+ 	}
+	$line = strtok(SEPARATOR);	
+}
+$content = substr($content, strpos($content,$line));
+
+if (viewcvs_is_html()) {
+	// If we output html and we found the mbstring extension, we
+	// should try to encode the output of ViewCVS in UTF-8
+	if (extension_loaded('mbstring')) {
+		$encoding = mb_detect_encoding($content);
+		if($encoding != 'UTF-8') {
+			$content = mb_convert_encoding($content, 'UTF-8', $encoding);
+		}
+	}
+	scm_header(array('title'=>$Language->getText('scm_index','svn_repository'),
+		'group'=>$Group->getID()));
+	?><link href="/plugins/scmsvn/styles.css" rel="stylesheet" TYPE="text/css"><?php
+	echo $content;
+	scm_footer(array());
+} else {
+	// TODO does not seem to work when allow_tar = 1 in ViewCVS conf
+	// (allow to generate on the fly a tar.gz): the generated file
+	// seems to be corrupted
+	echo $content;
+}
+
+?>

Added: trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs_utils.php
===================================================================
--- trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs_utils.php	                        (rev 0)
+++ trunk/gforge_base/gforge_plugins/gforge-plugin-scmsvn/www/viewcvs_utils.php	2008-02-13 13:20:42 UTC (rev 11)
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Utilitary class for the GForge ViewCVS wrapper.
+ *
+ * Portion of this file is inspired from the ViewCVS wrapper
+ * contained in CodeX.
+ * Copyright (c) Xerox Corporation, CodeX / CodeX Team, 2001,2002. All Rights Reserved.
+ * http://codex.xerox.com
+ *
+ * @version   $ID$
+ */
+
+define ('SEPARATOR', "\n\t\r\0\x0B");
+
+/**
+ *      viewcvs_is_html() - Test if ViewCVS returns HTML.
+ *
+ *      @return true if the content type of the ViewCVS is text/html.
+ */
+function viewcvs_is_html() {
+	$request_uri = getStringFromServer('REQUEST_URI');
+	$query_string = getStringFromServer('QUERY_STRING');
+
+	return (strpos($request_uri,"*checkout*") === false && 
+		strpos($query_string,"view=graphimg") === false &&
+		strpos($query_string,"view=tar") === false &&
+		strpos($request_uri,"*docroot*") === false &&
+		strpos($request_uri,"makepatch=1") === false);
+}
+
+/**
+ * make_arg_cmd_safe() - Make strings safe for the command line.
+ *
+ * @param  string  The argument that needs to be cleaned.
+ * @return string  The argument with dangerous shell characters escaped.
+ */
+function make_arg_cmd_safe($arg) {
+    if (get_magic_quotes_gpc()) {
+        $arg = stripslashes($arg);
+    }
+    return escapeshellcmd($arg);
+}
+
+/**
+ *      viewcvs_execute() - Call to viewcvs.cgi and returned the output.
+ *
+ *      @return String the output of the ViewCVS command.
+ */
+function viewcvs_execute() {
+
+	$request_uri = getStringFromServer('REQUEST_URI');
+	$query_string = getStringFromServer('QUERY_STRING');
+
+	// this is very important ...
+ 	if (getStringFromServer('PATH_INFO') == '') {
+ 		$path = '/';
+ 	} else {
+ 		$path = getStringFromServer('PATH_INFO');
+ 		// hack: path must always end with /
+ 		if (strrpos($path,'/') != (strlen($path)-1)) {
+ 			$path .= '/';
+ 		}
+ 	}
+ 	$query_string = str_replace('\\&', '&', make_arg_cmd_safe($query_string));
+ 	$query_string = str_replace('\\*', '*', $query_string);
+ 	$path = str_replace('\\*', '*', make_arg_cmd_safe($path));
+	$command = 'HTTP_COOKIE="'.make_arg_cmd_safe(getStringFromServer('HTTP_COOKIE')).'" '.
+		'REMOTE_ADDR="'.make_arg_cmd_safe(getStringFromServer('REMOTE_ADDR')).'" '.
+		'QUERY_STRING="'.$query_string.'" '.
+		'SERVER_SOFTWARE="'.make_arg_cmd_safe(getStringFromServer('SERVER_SOFTWARE')).'" '.
+		'SCRIPT_NAME="'.make_arg_cmd_safe(getStringFromServer('SCRIPT_NAME')).'" '.
+		'HTTP_USER_AGENT="'.make_arg_cmd_safe(getStringFromServer('HTTP_USER_AGENT')).'" '.
+		'HTTP_ACCEPT_ENCODING="'.make_arg_cmd_safe(getStringFromServer('HTTP_ACCEPT_ENCODING')).'" '.
+		'HTTP_ACCEPT_LANGUAGE="'.make_arg_cmd_safe(getStringFromServer('HTTP_ACCEPT_LANGUAGE')).'" '.
+		'PATH_INFO="'.$path.'" '.
+		'PATH="'.make_arg_cmd_safe(getStringFromServer('PATH')).'" '.
+		'HTTP_HOST="'.make_arg_cmd_safe(getStringFromServer('HTTP_HOST')).'" '.
+		$GLOBALS['sys_path_to_scmweb'].'/viewcvs.cgi 2>&1';
+
+	ob_start();
+	passthru($command);
+	$content = ob_get_contents();
+	ob_end_clean();
+	return $content;
+}
+
+?>




More information about the evolvis-commits mailing list