Edgewall Software

How to Integrate Trac and WebSVN - Under Construction


This is a rather ad-hoc guide and I take no responsibility if it does not work in your config I'm sure that there are many improvements that I can make


Trac Is an integrated bug tracking system using Python, and WebSVN is a web front end for multiple projects under SVN running under PHP.

Trac works well for single repositories holding single projects, it can also be used to manage multiple projects using some tricks.

The downside of these tricks are that they are statically configured, if a new project or repository is created, then apache has to be configured to show the change.

WebSVN is completly dynamic, it imediately lists a new repository (as far as Trac is concerned a project) when it is created.

Trac does have a solution to this, modPythonHandler, but I've had no success in getting this working.

My solution works under Apache 2.0 under Windows 2000, but I can see no reason why it should not work under Linux/Unix with Apache 2.0.

Step 1

First get Trac and WebSVN working in isolation, the section in my apache.conf looks like this:-

### SVN Config
LoadModule dav_fs_module	modules/mod_dav_fs.so
LoadModule dav_module		modules/mod_dav.so
LoadModule dav_svn_module	modules/mod_dav_svn.so

#A single repository root with multiple repositories within
<Location  /svn>
  DAV svn
  SVNParentPath /SVN_ROOT
#  AuthType Basic
#  AuthName "Subversion repository"
#  AuthUserFile /svn/svn-auth-file
#  Satisfy Any
#  Require valid-user
</Location>


## If the user access /svn_root then send them to WebSVN
## index.php is added to the DirectoryIndex above
alias /svn_root "c:\svn_root\WebSVN"

## If the user tries to access /svn then send them to WebSVN
## See the <Directory> section for the server root

## Allow access to the SVN Root
<Directory "c:\svn_root">
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

## Generic permissions on the shared trac system
<Directory "C:\Program Files\Python23\share\trac\htdocs">
  Options Indexes MultiViews
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>


#Trac basic configuration used for testing calle TestTrac1
# use http://localhost/TestTrac1/... to access trac, trac is pointed at one single project
ScriptAlias /TestTrac1 "c:\program files\python23\share\trac\cgi-bin\trac.cgi"
<Location /TestTrac1>
  SetEnv TRAC_ENV "c:\svn_root\test\trac.db"
</Location>

<Location "/TestTrac1/login">
  AuthType Basic
  AuthName "Welcome To Test Trac 1"
  AuthUserFile c:\svn_root\tracpassword
  Require valid-user
</Location>

My WebSVN wsvn.php is modified thus:

// Note that wsvn.php need not be in the /websvn directory (and normally isn't).
$locwebsvnhttp = "/svn_root/WebSVN";

// Physical location of websvn directory
$locwebsvnreal = "C:/svn_root/WebSVN";

My WebSVN config.inc is modified thus:

$config->parentPath("c:\\SVN_ROOT");

My setup has the following locations for Trac, Python, Apache, WebSVN and the SVN repository.

Trac:      C:\Program Files\Python23\share\trac                [common files]
Trac:      C:\Program Files\Python23\Scripts                   [install and CGI scripts]
Trac:      C:\Program Files\Python23\Lib\site-packages\trac    [Program]  
Python:    C:\Program Files\Python23
Apache:    C:\Program Files\Apache Group\Apache2.0
WebSVN:    C:\svn_root\WebSVN
Repository:c:\svn_root\RepProject1
Repository:c:\svn_root\RepProject2
Repository:c:\svn_root\Rep.....

Step 2

Apply these changes to WebSVN index.php

//remove the ++ from
$listing[$i++]["projlink"] = "<a href=\"${url}sc=0\">".$project->name."</a>";

//Then add these three lines
$listing[$i]["projlink"]=$listing[$i]["projlink"]."        ";
$listing[$i]["projlink"]=$listing[$i]["projlink"]."<a href=\\Wiki\\".$project->name."> Wiki</a>";
$i++;

above there should be about 6 <ampersand>nbsp in between the quotes, but Trac decides to remove them !!

Step 3

Apply these settings to Apache (Needs a lot of cleaning up)

#### Integrate WebSVN With Trac
###  Rewrite access to projects in the wiki to the correct project handler
#Turn on Rewrite if its not already on here
RewriteEngine On

# Rewrite access to http://localhost/Wiki/Project to http://localhost/Wiki/Project/trac.cgi setting TRAC_ENV & PATH_INFO, skipping next
RewriteRule /Wiki/([[:alnum:]]+)$	"/Wiki/$1/trac.cgi"   [PT,S,E=Trac_Env:c:\\svn_root\\$1\\trac.db,E=PATH_INFO:$2]


# For some reason, the virtual path, PATH_INFO is not set automatically by the CGI handler below, so it tries to find the file in the path info location
# L=don't execute any more rules, PT=pass through, don't actually forward, S=skip the next rule (should not be required)
# WebSVN is modified to access the repository using an automatically generated pane listing projects, this is modified with the Trac path and detected here
# Rewrite access to http://localhost/Wiki/Project/... to http://localhost/Wiki/Project/trac.cgi..., setting TRAC_ENV and PATH_INFO
RewriteRule /Wiki/([[:alnum:]]+)(/?.*)	"/Wiki/$1$2"   [PT,E=Trac_Env:c:\\svn_root\\$1\\trac.db,E=PATH_INFO:$2]

## Tell apache that any access to the ...trac.cgi... should be treated as a script, regardless of path
ScriptAliasMatch /Wiki/(.+)/trac.cgi(/?.*) "c:\program files\python23\share\trac\cgi-bin\trac.cgi$2"

###This line uses a script to debug the enviroment sent to Trac
#RewriteRule /Wiki/([[:alnum:]]+)(/?.*)	"/cgi-bin/pythonenv.cgi"   [PT,E=Trac_Env:c:\\svn_root\\$1\\trac.db,E=TRAC_DEBUG_ENV1:$1,E=TRAC_DEBUG_ENV2:$2]
#NOTES:
#Failure to use PT here results in a file name mapping that does not exist.
#Using R results in no env passed
#using P results in no valid URL (needs an HTTP prefix??)


#Any access to the login virtual path even under a project path results in a login box
<LocationMatch "^.*Wiki.*trac.cgi/login">
  AuthType Basic
  AuthName "Welcome To CITEL Trac"
  AuthUserFile c:\svn_root\tracpassword
  Require valid-user
</LocationMatch>

These changes to apache will 'standardise' the URLs used to access the various systems '(Needs work)'

<Directory <where your htdocs live>
#
#Enable the re-write engine
#For some reason, re-write rules only work in this <directory> section
#
RewriteEngine On

##  Re-write svn or svn/ to /svn_root
RewriteRule ^svn/?$ /svn_root  [R]

##Rewrite access to /Wiki or /Wiki/ to /svn_root as no project is specified
RewriteRule ^Wiki/?$ /svn
RewriteRule ^wiki/?$ /svn
</Directory>

Step 4

Tortoise (or whatever) will use http://server/svn/ProjectRepository/SubProject

To access a Project Repository list use http://server/svn or http://server/Wiki

To directly access a Project Trac use http://server/Wiki/ProjectRepository

BUGS & LIMITATIONS

I've not understood if the following are due to Trac or my setup and changes:-

  • After logging in, a refresh is needed to show the correct user
  • Log-ins are sticky, so if I'm managing one project and forget to log out, I'll be using the same user for the next project. This would cause problems if multiple people have access to the same machines.
  • Probably due more to a lack of forethought I've got my WebSVN installation in the same place as my repositories, so its listed as a repository, WebSVN should check that a folder is a repository anyway, but ideally it needs moving. Initial attempts at this resulted in a mess.
Last modified 13 years ago Last modified on Apr 21, 2006, 10:25:01 AM
Note: See TracWiki for help on using the wiki.