Hacking Trac for code.djangoproject.com
For posterity -- and for when we upgrade! -- this page contains a list of all the things I've done to modify Trac for code.djangoproject.com.
Plugins
Most of the work comes from a set of plugins from Trac Hacks. This installation is using the following plugins:
Most of them are easy to install -- just check out the source, python setup.py bdist_egg, and copy the egg to plugins.
I did have to make one trivial bug fix for Python 2.3 to the NavHider plugin:
Index: navhider/filter.py
===================================================================
--- navhider/filter.py (revision 1926)
+++ navhider/filter.py (working copy)
@@ -4,7 +4,7 @@
try:
set = set
-except ImportError:
+except NameError:
from sets import Set as set
__all__ = ['NavHiderModule']
Custom fields
Most of the fields used by out ticket workflow are added using Trac's custom field feature. See the [ticket-custom] section in the ini below.
Configuration
There's a lot of config stuff in trac.ini, much of which is just there by default. These are the important bits:
[browser] downloadable_paths = /django/trunk, /django/branches/*, /django/tags/*, /django_website hide_properties = svk:merge, svn:ignore [navadd] add_items = reports, simpleticket reports.target = mainnav reports.title = Reports reports.url = /wiki/Reports simpleticket.target = mainnav simpleticket.title = New Ticket simpleticket.url = /simpleticket [notification] always_notify_owner = true always_notify_reporter = true always_notify_updater = true [simpleticket] hide = stage, needs_tests, needs_docs, needs_better_patch [ticket-custom] has_patch = checkbox has_patch.label = Has patch has_patch.order = 20 needs_better_patch = checkbox needs_better_patch.label = Patch needs improvement needs_better_patch.order = 50 needs_docs = checkbox needs_docs.label = Needs documentation needs_docs.order = 30 needs_tests = checkbox needs_tests.label = Needs tests needs_tests.order = 40 stage = select stage.label = Triage Stage stage.options = Unreviewed|Design decision needed|Accepted|Ready for checkin stage.order = 10 stage.value = 0 [trac] mainnav = wiki,timeline,browser,reports,tickets,-newticket,simpleticket,search metanav = -about,login,logout,settings,-help
Hooks
We use a couple of SVN post-commit hooks to send the checkin notifications to django-updates and to update Trac from "Fixed #XXX" messages. Our post-commit hook:
#!/bin/sh
export PYTHONPATH=/home/trac/
REPOS="$1"
REV="$2"
LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
TRAC_ENV='/home/trac/django.tracenv/'
TRAC_URL='http://code.djangoproject.com/'
/usr/bin/python2.3 /home/trac/trac-0.10.3/contrib/trac-post-commit-hook \
-p "$TRAC_ENV" \
-r "$REV" \
-u "$AUTHOR" \
-m "$LOG" \
-s "$TRAC_URL"
/home/svn/django/hooks/commit-email.pl \
"$REPOS" \
"$REV" \
-s "[Changeset]" \
--from noreply@djangoproject.com \
django-updates@googlegroups.com
Templates
I've deliberately avoided hacking any built-in trac templates so that upgrades aren't quite so painful. I've thus only edited site_css.cs site_footer.cs}, site_header.cs, and site_newticket.cs.