Websvn mit Repositories in verschiedenen Verzeichnissen

Websvn in AktionWebsvn kann mehrere Repositories in verschiedenen Unterverzeichnissen darstellen, allerdings muss man sich entscheiden: Alle Repositories aller Unterverzeichnisse aufs mal oder nur Repositories eines einzelnen Unterverzeichnisses.
Bei uns im Betrieb hat jede Abteilung (Informatik, Physik, …) ihre Repositories in eigenen Verzeichnissen auf dem Server. Websvn unterstützt zwar mehrere parentPath und stellt alle SVN-Repositories in diesen Verzeichnissen dar, will man aber auch noch einzelne Ansichten für die Abteilungen machen wird es schwer. Lösung: Der parentPath wird an Hand der URL gesetzt.

Unter Debian kann die Datei /etc/websvn/svn_deb_conf.inc direkt missbraucht werden. In anderen Distributionen muss eventuell am Schluss der Datei config.inc folgendes Codesnippet eingefügt und danach für die Änderungen gebraucht werden:

<?php
if ( file_exists("/etc/websvn/svn_sup_conf.inc") ) {
  include("/etc/websvn/svn_sup_conf.inc");
}
?>

Nun soll an Hand des Pfades der /etc/websvn/svn_deb_conf.inc parentPath gesetzt werden:

/websvn
Alle Repositories
/websvn/informatik
Alle Repositories der Abteilung Informatik
/websvn/physik
Alle Repositories der Abteilung Physik

Dafür muss man in der oben konfigurierten Datei folgendes zum Besten geben (bei mehr Abteilungen einfach intelligent erweitern):

<?php
  $repository=dirname($GLOBALS['HTTP_SERVER_VARS']['PHP_SELF']);
  // echo "::: $repository :::";
  switch($repository) {
    case "/websvn/informatik":
    case "/websvn/physik":
          $reppath="/data/svn/repositories/".substr(dirname($GLOBALS['HTTP_SERVER_VARS']['PHP_SELF']),8)."/"; // "/websvn/" entfernen
          //print "::: $reppath :::"; exit(1);
          $config->parentPath($reppath);
    break;
    default:
        $config->parentPath("/data/svn/repositories/informatik");
        $config->parentPath("/data/svn/repositories/physik");
    break;
  }
?>

Der Apache muss dies natürlich auch noch mitkriegen. Die /websvn/ URL-Teile müssen dort konfiguriert werden (site-available oder .htaccess) und das wärs dann:

# Websvn is installed in /usr/share/websvn
Alias /websvn /usr/share/websvn

Alias /websvn/informatik /usr/share/websvn
Alias /websvn/physik /usr/share/websvn

<Location /websvn>
  # DO FUNKY (AUTHENTICATION) STUFF HERE
  <IfModule mod_php4.c>
    php_flag magic_quotes_gpc Off
    php_flag track_vars On
  </IfModule>
</Location>