#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

Pygments
pytz
Babel
Genshi
-e svn+https://svn.apache.org/repos/asf/incubator/bloodhound/trunk/trac#egg=Trac
-e svn+https://trac-hacks.org/svn/accountmanagerplugin/0.11#egg=TracAccountManager
-e svn+https://svn.apache.org/repos/asf/incubator/bloodhound/trunk/bloodhound_multiproduct#egg=BloodhoundMultiProduct
-e svn+https://trac-hacks.org/svn/themeengineplugin/0.11#egg=TracThemeEngine
-e svn+https://svn.apache.org/repos/asf/incubator/bloodhound/trunk/bloodhound_dashboard#egg=BloodhoundDashboardPlugin
-e svn+https://svn.apache.org/repos/asf/incubator/bloodhound/trunk/bloodhound_theme#egg=BloodhoundTheme
-e svn+https://trac-hacks.org/svn/permredirectplugin/0.11#egg=TracPermRedirect

