Premiere version : mise en route du suivi.
authorCyril Robert <Cyril Robert cyrilrbt@gmail.com>
Mon, 10 May 2010 18:31:37 +0000 (14:31 -0400)
committerCyril Robert <Cyril Robert cyrilrbt@gmail.com>
Mon, 10 May 2010 18:31:37 +0000 (14:31 -0400)
864 files changed:
.cvsignore [new file with mode: 0644]
.gitignore [new file with mode: 0644]
.svn/all-wcprops [new file with mode: 0644]
.svn/dir-prop-base [new file with mode: 0644]
.svn/entries [new file with mode: 0644]
.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
.svn/text-base/2to3-done.txt.svn-base [new file with mode: 0644]
.svn/text-base/BUILD.txt.svn-base [new file with mode: 0644]
.svn/text-base/CHANGES.txt.svn-base [new file with mode: 0644]
.svn/text-base/COPYING.txt.svn-base [new file with mode: 0644]
.svn/text-base/MANIFEST.in.svn-base [new file with mode: 0644]
.svn/text-base/README.txt.svn-base [new file with mode: 0644]
.svn/text-base/demo.py.svn-base [new file with mode: 0644]
.svn/text-base/run_tests.py.svn-base [new file with mode: 0644]
.svn/text-base/setup.py.svn-base [new file with mode: 0644]
2to3-done.txt [new file with mode: 0644]
BUILD.txt [new file with mode: 0644]
CHANGES.txt [new file with mode: 0644]
COPYING.txt [new file with mode: 0644]
MANIFEST.in [new file with mode: 0644]
README.txt [new file with mode: 0644]
build/lib/roundup/__init__.py [new file with mode: 0644]
build/lib/roundup/actions.py [new file with mode: 0644]
build/lib/roundup/admin.py [new file with mode: 0644]
build/lib/roundup/anypy/__init__.py [new file with mode: 0644]
build/lib/roundup/anypy/cookie_.py [new file with mode: 0644]
build/lib/roundup/anypy/dbm_.py [new file with mode: 0644]
build/lib/roundup/anypy/hashlib_.py [new file with mode: 0644]
build/lib/roundup/anypy/http_.py [new file with mode: 0644]
build/lib/roundup/anypy/io_.py [new file with mode: 0644]
build/lib/roundup/anypy/sets_.py [new file with mode: 0644]
build/lib/roundup/anypy/urllib_.py [new file with mode: 0644]
build/lib/roundup/backends/__init__.py [new file with mode: 0644]
build/lib/roundup/backends/back_anydbm.py [new file with mode: 0644]
build/lib/roundup/backends/back_mysql.py [new file with mode: 0644]
build/lib/roundup/backends/back_postgresql.py [new file with mode: 0644]
build/lib/roundup/backends/back_sqlite.py [new file with mode: 0644]
build/lib/roundup/backends/back_tsearch2.py [new file with mode: 0644]
build/lib/roundup/backends/blobfiles.py [new file with mode: 0644]
build/lib/roundup/backends/indexer_common.py [new file with mode: 0644]
build/lib/roundup/backends/indexer_dbm.py [new file with mode: 0644]
build/lib/roundup/backends/indexer_rdbms.py [new file with mode: 0644]
build/lib/roundup/backends/indexer_xapian.py [new file with mode: 0644]
build/lib/roundup/backends/locking.py [new file with mode: 0644]
build/lib/roundup/backends/portalocker.py [new file with mode: 0644]
build/lib/roundup/backends/rdbms_common.py [new file with mode: 0644]
build/lib/roundup/backends/sessions_dbm.py [new file with mode: 0644]
build/lib/roundup/backends/sessions_rdbms.py [new file with mode: 0644]
build/lib/roundup/backends/tsearch2_setup.py [new file with mode: 0644]
build/lib/roundup/cgi/MultiMapping.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/Expressions.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/GlobalTranslationService.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/MultiMapping.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/PageTemplate.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/PathIterator.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/PythonExpr.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/TALES.py [new file with mode: 0644]
build/lib/roundup/cgi/PageTemplates/__init__.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/DummyEngine.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/HTMLParser.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/HTMLTALParser.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/TALDefs.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/TALGenerator.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/TALInterpreter.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/TALParser.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/TranslationContext.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/XMLParser.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/__init__.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/markupbase.py [new file with mode: 0644]
build/lib/roundup/cgi/TAL/talgettext.py [new file with mode: 0644]
build/lib/roundup/cgi/TranslationService.py [new file with mode: 0644]
build/lib/roundup/cgi/ZTUtils/Batch.py [new file with mode: 0644]
build/lib/roundup/cgi/ZTUtils/Iterator.py [new file with mode: 0644]
build/lib/roundup/cgi/ZTUtils/__init__.py [new file with mode: 0644]
build/lib/roundup/cgi/__init__.py [new file with mode: 0644]
build/lib/roundup/cgi/accept_language.py [new file with mode: 0644]
build/lib/roundup/cgi/actions.py [new file with mode: 0644]
build/lib/roundup/cgi/apache.py [new file with mode: 0644]
build/lib/roundup/cgi/cgitb.py [new file with mode: 0644]
build/lib/roundup/cgi/client.py [new file with mode: 0644]
build/lib/roundup/cgi/exceptions.py [new file with mode: 0644]
build/lib/roundup/cgi/form_parser.py [new file with mode: 0644]
build/lib/roundup/cgi/templating.py [new file with mode: 0644]
build/lib/roundup/cgi/wsgi_handler.py [new file with mode: 0644]
build/lib/roundup/cgi/zLOG.py [new file with mode: 0644]
build/lib/roundup/configuration.py [new file with mode: 0644]
build/lib/roundup/date.py [new file with mode: 0644]
build/lib/roundup/demo.py [new file with mode: 0644]
build/lib/roundup/exceptions.py [new file with mode: 0644]
build/lib/roundup/hyperdb.py [new file with mode: 0644]
build/lib/roundup/i18n.py [new file with mode: 0644]
build/lib/roundup/init.py [new file with mode: 0644]
build/lib/roundup/install_util.py [new file with mode: 0644]
build/lib/roundup/instance.py [new file with mode: 0644]
build/lib/roundup/mailer.py [new file with mode: 0644]
build/lib/roundup/mailgw.py [new file with mode: 0644]
build/lib/roundup/msgfmt.py [new file with mode: 0644]
build/lib/roundup/password.py [new file with mode: 0644]
build/lib/roundup/rfc2822.py [new file with mode: 0644]
build/lib/roundup/roundupdb.py [new file with mode: 0644]
build/lib/roundup/scripts/__init__.py [new file with mode: 0644]
build/lib/roundup/scripts/roundup_admin.py [new file with mode: 0644]
build/lib/roundup/scripts/roundup_demo.py [new file with mode: 0644]
build/lib/roundup/scripts/roundup_gettext.py [new file with mode: 0644]
build/lib/roundup/scripts/roundup_mailgw.py [new file with mode: 0644]
build/lib/roundup/scripts/roundup_server.py [new file with mode: 0644]
build/lib/roundup/scripts/roundup_xmlrpc_server.py [new file with mode: 0644]
build/lib/roundup/security.py [new file with mode: 0644]
build/lib/roundup/support.py [new file with mode: 0644]
build/lib/roundup/token.py [new file with mode: 0644]
build/lib/roundup/version_check.py [new file with mode: 0644]
build/lib/roundup/xmlrpc.py [new file with mode: 0644]
build/scripts-2.6/roundup-admin [new file with mode: 0755]
build/scripts-2.6/roundup-demo [new file with mode: 0755]
build/scripts-2.6/roundup-gettext [new file with mode: 0755]
build/scripts-2.6/roundup-mailgw [new file with mode: 0755]
build/scripts-2.6/roundup-server [new file with mode: 0755]
build/scripts-2.6/roundup-xmlrpc-server [new file with mode: 0755]
build/share/locale/de/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/en/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/es/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/fr/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/hu/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/it/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/ja/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/lt/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/ru/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/zh_CN/LC_MESSAGES/roundup.mo [new file with mode: 0644]
build/share/locale/zh_TW/LC_MESSAGES/roundup.mo [new file with mode: 0644]
demo.py [new file with mode: 0644]
doc/.cvsignore [new file with mode: 0644]
doc/.svn/all-wcprops [new file with mode: 0644]
doc/.svn/dir-prop-base [new file with mode: 0644]
doc/.svn/entries [new file with mode: 0644]
doc/.svn/prop-base/roundup-favicon.ico.svn-base [new file with mode: 0644]
doc/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
doc/.svn/text-base/FAQ.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/Makefile.svn-base [new file with mode: 0644]
doc/.svn/text-base/ZPL.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/acknowledgements.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/admin_guide.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/announcement.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/conf.py.svn-base [new file with mode: 0644]
doc/.svn/text-base/contact.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/customizing.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/debugging.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/default.css.svn-base [new file with mode: 0644]
doc/.svn/text-base/design.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/developers.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/features.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/glossary.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/implementation.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/index.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/installation.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/license.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/mysql.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/original_overview.html.svn-base [new file with mode: 0644]
doc/.svn/text-base/overview.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/postgresql.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/roundup-favicon.ico.svn-base [new file with mode: 0644]
doc/.svn/text-base/roundup-server.ini.example.svn-base [new file with mode: 0644]
doc/.svn/text-base/spec.html.svn-base [new file with mode: 0644]
doc/.svn/text-base/tracker_templates.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/upgrading.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/user_guide.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/whatsnew-0.7.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/whatsnew-0.8.txt.svn-base [new file with mode: 0644]
doc/.svn/text-base/xmlrpc.txt.svn-base [new file with mode: 0644]
doc/FAQ.txt [new file with mode: 0644]
doc/Makefile [new file with mode: 0644]
doc/ZPL.txt [new file with mode: 0644]
doc/_static/.svn/all-wcprops [new file with mode: 0644]
doc/_static/.svn/entries [new file with mode: 0644]
doc/_static/.svn/text-base/style.css.svn-base [new file with mode: 0644]
doc/_static/style.css [new file with mode: 0644]
doc/_templates/.svn/all-wcprops [new file with mode: 0644]
doc/_templates/.svn/entries [new file with mode: 0644]
doc/_templates/.svn/text-base/layout.html.svn-base [new file with mode: 0644]
doc/_templates/layout.html [new file with mode: 0644]
doc/acknowledgements.txt [new file with mode: 0644]
doc/admin_guide.txt [new file with mode: 0644]
doc/announcement.txt [new file with mode: 0644]
doc/contact.txt [new file with mode: 0644]
doc/customizing.txt [new file with mode: 0644]
doc/debugging.txt [new file with mode: 0644]
doc/default.css [new file with mode: 0644]
doc/design.txt [new file with mode: 0644]
doc/developers.txt [new file with mode: 0644]
doc/features.txt [new file with mode: 0644]
doc/glossary.txt [new file with mode: 0644]
doc/images/.svn/all-wcprops [new file with mode: 0644]
doc/images/.svn/entries [new file with mode: 0644]
doc/images/.svn/prop-base/edit.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/edit_issue.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/hyperdb.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/index_logged_in.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/index_logged_out.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/logo-acl-medium.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/logo-codesourcery-medium.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/logo-software-carpentry-standard.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/my_details.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/new_issue.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/registration.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/roundup-1.png.svn-base [new file with mode: 0644]
doc/images/.svn/prop-base/roundup.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/edit.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/edit_issue.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/hyperdb.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/index_logged_in.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/index_logged_out.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/logo-acl-medium.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/logo-codesourcery-medium.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/logo-software-carpentry-standard.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/my_details.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/new_issue.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/registration.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/roundup-1.png.svn-base [new file with mode: 0644]
doc/images/.svn/text-base/roundup.png.svn-base [new file with mode: 0644]
doc/images/edit.png [new file with mode: 0644]
doc/images/edit_issue.png [new file with mode: 0644]
doc/images/hyperdb.png [new file with mode: 0644]
doc/images/index_logged_in.png [new file with mode: 0644]
doc/images/index_logged_out.png [new file with mode: 0644]
doc/images/logo-acl-medium.png [new file with mode: 0644]
doc/images/logo-codesourcery-medium.png [new file with mode: 0644]
doc/images/logo-software-carpentry-standard.png [new file with mode: 0644]
doc/images/my_details.png [new file with mode: 0644]
doc/images/new_issue.png [new file with mode: 0644]
doc/images/registration.png [new file with mode: 0644]
doc/images/roundup-1.png [new file with mode: 0644]
doc/images/roundup.png [new file with mode: 0644]
doc/implementation.txt [new file with mode: 0644]
doc/index.txt [new file with mode: 0644]
doc/installation.txt [new file with mode: 0644]
doc/license.txt [new file with mode: 0644]
doc/mysql.txt [new file with mode: 0644]
doc/original_overview.html [new file with mode: 0644]
doc/overview.txt [new file with mode: 0644]
doc/postgresql.txt [new file with mode: 0644]
doc/roundup-favicon.ico [new file with mode: 0644]
doc/roundup-server.ini.example [new file with mode: 0644]
doc/spec.html [new file with mode: 0644]
doc/tracker_templates.txt [new file with mode: 0644]
doc/upgrading.txt [new file with mode: 0644]
doc/user_guide.txt [new file with mode: 0644]
doc/whatsnew-0.7.txt [new file with mode: 0644]
doc/whatsnew-0.8.txt [new file with mode: 0644]
doc/xmlrpc.txt [new file with mode: 0644]
frontends/.svn/all-wcprops [new file with mode: 0644]
frontends/.svn/entries [new file with mode: 0644]
frontends/.svn/prop-base/roundup.cgi.svn-base [new file with mode: 0644]
frontends/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
frontends/.svn/text-base/roundup.cgi.svn-base [new file with mode: 0644]
frontends/README.txt [new file with mode: 0644]
frontends/ZRoundup/.cvsignore [new file with mode: 0644]
frontends/ZRoundup/.svn/all-wcprops [new file with mode: 0644]
frontends/ZRoundup/.svn/dir-prop-base [new file with mode: 0644]
frontends/ZRoundup/.svn/entries [new file with mode: 0644]
frontends/ZRoundup/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
frontends/ZRoundup/.svn/text-base/ZRoundup.py.svn-base [new file with mode: 0644]
frontends/ZRoundup/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
frontends/ZRoundup/.svn/text-base/refresh.txt.svn-base [new file with mode: 0644]
frontends/ZRoundup/ZRoundup.py [new file with mode: 0644]
frontends/ZRoundup/__init__.py [new file with mode: 0644]
frontends/ZRoundup/dtml/.svn/all-wcprops [new file with mode: 0644]
frontends/ZRoundup/dtml/.svn/entries [new file with mode: 0644]
frontends/ZRoundup/dtml/.svn/text-base/manage_addZRoundupForm.dtml.svn-base [new file with mode: 0644]
frontends/ZRoundup/dtml/manage_addZRoundupForm.dtml [new file with mode: 0644]
frontends/ZRoundup/icons/.svn/all-wcprops [new file with mode: 0644]
frontends/ZRoundup/icons/.svn/entries [new file with mode: 0644]
frontends/ZRoundup/icons/.svn/prop-base/tick_symbol.gif.svn-base [new file with mode: 0644]
frontends/ZRoundup/icons/.svn/text-base/tick_symbol.gif.svn-base [new file with mode: 0644]
frontends/ZRoundup/icons/tick_symbol.gif [new file with mode: 0644]
frontends/ZRoundup/refresh.txt [new file with mode: 0644]
frontends/roundup.cgi [new file with mode: 0755]
locale/.cvsignore [new file with mode: 0644]
locale/.svn/all-wcprops [new file with mode: 0644]
locale/.svn/dir-prop-base [new file with mode: 0644]
locale/.svn/entries [new file with mode: 0644]
locale/.svn/prop-base/es.po.svn-base [new file with mode: 0644]
locale/.svn/prop-base/lt.po.svn-base [new file with mode: 0644]
locale/.svn/prop-base/zh_TW.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
locale/.svn/text-base/GNUmakefile.svn-base [new file with mode: 0644]
locale/.svn/text-base/de.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/en.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/es.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/fr.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/hu.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/it.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/ja.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/lt.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/roundup.pot.svn-base [new file with mode: 0644]
locale/.svn/text-base/ru.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/zh_CN.po.svn-base [new file with mode: 0644]
locale/.svn/text-base/zh_TW.po.svn-base [new file with mode: 0644]
locale/GNUmakefile [new file with mode: 0644]
locale/de.mo [new file with mode: 0644]
locale/de.po [new file with mode: 0644]
locale/en.mo [new file with mode: 0644]
locale/en.po [new file with mode: 0644]
locale/es.mo [new file with mode: 0644]
locale/es.po [new file with mode: 0755]
locale/fr.mo [new file with mode: 0644]
locale/fr.po [new file with mode: 0644]
locale/hu.mo [new file with mode: 0644]
locale/hu.po [new file with mode: 0644]
locale/it.mo [new file with mode: 0644]
locale/it.po [new file with mode: 0644]
locale/ja.mo [new file with mode: 0644]
locale/ja.po [new file with mode: 0644]
locale/lt.mo [new file with mode: 0644]
locale/lt.po [new file with mode: 0755]
locale/roundup.pot [new file with mode: 0644]
locale/ru.mo [new file with mode: 0644]
locale/ru.po [new file with mode: 0644]
locale/zh_CN.mo [new file with mode: 0644]
locale/zh_CN.po [new file with mode: 0644]
locale/zh_TW.mo [new file with mode: 0644]
locale/zh_TW.po [new file with mode: 0755]
roundup/.cvsignore [new file with mode: 0644]
roundup/.svn/all-wcprops [new file with mode: 0644]
roundup/.svn/dir-prop-base [new file with mode: 0644]
roundup/.svn/entries [new file with mode: 0644]
roundup/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/actions.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/admin.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/configuration.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/date.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/exceptions.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/hyperdb.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/i18n.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/init.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/install_util.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/instance.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/mailer.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/mailgw.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/msgfmt.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/password.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/rfc2822.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/roundupdb.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/security.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/support.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/token.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/version_check.py.svn-base [new file with mode: 0644]
roundup/.svn/text-base/xmlrpc.py.svn-base [new file with mode: 0644]
roundup/__init__.py [new file with mode: 0644]
roundup/actions.py [new file with mode: 0644]
roundup/admin.py [new file with mode: 0644]
roundup/anypy/.svn/all-wcprops [new file with mode: 0644]
roundup/anypy/.svn/entries [new file with mode: 0644]
roundup/anypy/.svn/prop-base/README.txt.svn-base [new file with mode: 0644]
roundup/anypy/.svn/prop-base/TODO.txt.svn-base [new file with mode: 0644]
roundup/anypy/.svn/prop-base/__init__.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/prop-base/hashlib_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/prop-base/sets_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/TODO.txt.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/cookie_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/dbm_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/hashlib_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/http_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/io_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/sets_.py.svn-base [new file with mode: 0644]
roundup/anypy/.svn/text-base/urllib_.py.svn-base [new file with mode: 0644]
roundup/anypy/README.txt [new file with mode: 0644]
roundup/anypy/TODO.txt [new file with mode: 0644]
roundup/anypy/__init__.py [new file with mode: 0644]
roundup/anypy/cookie_.py [new file with mode: 0644]
roundup/anypy/dbm_.py [new file with mode: 0644]
roundup/anypy/hashlib_.py [new file with mode: 0644]
roundup/anypy/http_.py [new file with mode: 0644]
roundup/anypy/io_.py [new file with mode: 0644]
roundup/anypy/sets_.py [new file with mode: 0644]
roundup/anypy/urllib_.py [new file with mode: 0644]
roundup/backends/.cvsignore [new file with mode: 0644]
roundup/backends/.svn/all-wcprops [new file with mode: 0644]
roundup/backends/.svn/dir-prop-base [new file with mode: 0644]
roundup/backends/.svn/entries [new file with mode: 0644]
roundup/backends/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/back_anydbm.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/back_mysql.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/back_postgresql.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/back_sqlite.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/back_tsearch2.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/blobfiles.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/indexer_common.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/indexer_dbm.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/indexer_rdbms.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/indexer_xapian.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/locking.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/portalocker.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/rdbms_common.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/sessions_dbm.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/sessions_rdbms.py.svn-base [new file with mode: 0644]
roundup/backends/.svn/text-base/tsearch2_setup.py.svn-base [new file with mode: 0644]
roundup/backends/__init__.py [new file with mode: 0644]
roundup/backends/back_anydbm.py [new file with mode: 0644]
roundup/backends/back_mysql.py [new file with mode: 0644]
roundup/backends/back_postgresql.py [new file with mode: 0644]
roundup/backends/back_sqlite.py [new file with mode: 0644]
roundup/backends/back_tsearch2.py [new file with mode: 0644]
roundup/backends/blobfiles.py [new file with mode: 0644]
roundup/backends/indexer_common.py [new file with mode: 0644]
roundup/backends/indexer_dbm.py [new file with mode: 0644]
roundup/backends/indexer_rdbms.py [new file with mode: 0644]
roundup/backends/indexer_xapian.py [new file with mode: 0644]
roundup/backends/locking.py [new file with mode: 0644]
roundup/backends/portalocker.py [new file with mode: 0644]
roundup/backends/rdbms_common.py [new file with mode: 0644]
roundup/backends/sessions_dbm.py [new file with mode: 0644]
roundup/backends/sessions_rdbms.py [new file with mode: 0644]
roundup/backends/tsearch2_setup.py [new file with mode: 0644]
roundup/cgi/.cvsignore [new file with mode: 0644]
roundup/cgi/.svn/all-wcprops [new file with mode: 0644]
roundup/cgi/.svn/dir-prop-base [new file with mode: 0644]
roundup/cgi/.svn/entries [new file with mode: 0644]
roundup/cgi/.svn/prop-base/accept_language.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/prop-base/actions.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/prop-base/exceptions.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/prop-base/form_parser.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/MultiMapping.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/TranslationService.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/accept_language.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/actions.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/apache.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/cgitb.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/client.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/exceptions.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/form_parser.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/templating.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/wsgi_handler.py.svn-base [new file with mode: 0644]
roundup/cgi/.svn/text-base/zLOG.py.svn-base [new file with mode: 0644]
roundup/cgi/MultiMapping.py [new file with mode: 0644]
roundup/cgi/PageTemplates/.cvsignore [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/all-wcprops [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/dir-prop-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/entries [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/prop-base/PageTemplate.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/Expressions.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/GlobalTranslationService.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/MultiMapping.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/PageTemplate.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/PathIterator.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/PythonExpr.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/TALES.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/cgi/PageTemplates/Expressions.py [new file with mode: 0644]
roundup/cgi/PageTemplates/GlobalTranslationService.py [new file with mode: 0644]
roundup/cgi/PageTemplates/MultiMapping.py [new file with mode: 0644]
roundup/cgi/PageTemplates/PageTemplate.py [new file with mode: 0755]
roundup/cgi/PageTemplates/PathIterator.py [new file with mode: 0644]
roundup/cgi/PageTemplates/PythonExpr.py [new file with mode: 0644]
roundup/cgi/PageTemplates/README.txt [new file with mode: 0644]
roundup/cgi/PageTemplates/TALES.py [new file with mode: 0644]
roundup/cgi/PageTemplates/__init__.py [new file with mode: 0644]
roundup/cgi/TAL/.cvsignore [new file with mode: 0644]
roundup/cgi/TAL/.svn/all-wcprops [new file with mode: 0644]
roundup/cgi/TAL/.svn/dir-prop-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/entries [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/DummyEngine.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/HTMLParser.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/HTMLTALParser.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/TALDefs.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/TALGenerator.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/TALInterpreter.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/TALParser.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/TranslationContext.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/XMLParser.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/markupbase.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/.svn/text-base/talgettext.py.svn-base [new file with mode: 0644]
roundup/cgi/TAL/DummyEngine.py [new file with mode: 0644]
roundup/cgi/TAL/HTMLParser.py [new file with mode: 0644]
roundup/cgi/TAL/HTMLTALParser.py [new file with mode: 0644]
roundup/cgi/TAL/README.txt [new file with mode: 0644]
roundup/cgi/TAL/TALDefs.py [new file with mode: 0644]
roundup/cgi/TAL/TALGenerator.py [new file with mode: 0644]
roundup/cgi/TAL/TALInterpreter.py [new file with mode: 0644]
roundup/cgi/TAL/TALParser.py [new file with mode: 0644]
roundup/cgi/TAL/TranslationContext.py [new file with mode: 0644]
roundup/cgi/TAL/XMLParser.py [new file with mode: 0644]
roundup/cgi/TAL/__init__.py [new file with mode: 0644]
roundup/cgi/TAL/markupbase.py [new file with mode: 0644]
roundup/cgi/TAL/talgettext.py [new file with mode: 0644]
roundup/cgi/TranslationService.py [new file with mode: 0644]
roundup/cgi/ZTUtils/.cvsignore [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/all-wcprops [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/dir-prop-base [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/entries [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/text-base/Batch.py.svn-base [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/text-base/Iterator.py.svn-base [new file with mode: 0644]
roundup/cgi/ZTUtils/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/cgi/ZTUtils/Batch.py [new file with mode: 0644]
roundup/cgi/ZTUtils/Iterator.py [new file with mode: 0644]
roundup/cgi/ZTUtils/__init__.py [new file with mode: 0644]
roundup/cgi/__init__.py [new file with mode: 0644]
roundup/cgi/accept_language.py [new file with mode: 0755]
roundup/cgi/actions.py [new file with mode: 0755]
roundup/cgi/apache.py [new file with mode: 0644]
roundup/cgi/cgitb.py [new file with mode: 0644]
roundup/cgi/client.py [new file with mode: 0644]
roundup/cgi/exceptions.py [new file with mode: 0755]
roundup/cgi/form_parser.py [new file with mode: 0755]
roundup/cgi/templating.py [new file with mode: 0644]
roundup/cgi/wsgi_handler.py [new file with mode: 0644]
roundup/cgi/zLOG.py [new file with mode: 0644]
roundup/configuration.py [new file with mode: 0644]
roundup/date.py [new file with mode: 0644]
roundup/dist/.svn/all-wcprops [new file with mode: 0644]
roundup/dist/.svn/entries [new file with mode: 0644]
roundup/dist/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/dist/__init__.py [new file with mode: 0644]
roundup/dist/command/.svn/all-wcprops [new file with mode: 0644]
roundup/dist/command/.svn/entries [new file with mode: 0644]
roundup/dist/command/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/dist/command/.svn/text-base/bdist_rpm.py.svn-base [new file with mode: 0644]
roundup/dist/command/.svn/text-base/build.py.svn-base [new file with mode: 0644]
roundup/dist/command/.svn/text-base/build_doc.py.svn-base [new file with mode: 0644]
roundup/dist/command/.svn/text-base/build_py.py.svn-base [new file with mode: 0644]
roundup/dist/command/.svn/text-base/build_scripts.py.svn-base [new file with mode: 0644]
roundup/dist/command/__init__.py [new file with mode: 0644]
roundup/dist/command/bdist_rpm.py [new file with mode: 0644]
roundup/dist/command/build.py [new file with mode: 0644]
roundup/dist/command/build_doc.py [new file with mode: 0644]
roundup/dist/command/build_py.py [new file with mode: 0644]
roundup/dist/command/build_scripts.py [new file with mode: 0644]
roundup/exceptions.py [new file with mode: 0644]
roundup/hyperdb.py [new file with mode: 0644]
roundup/i18n.py [new file with mode: 0644]
roundup/init.py [new file with mode: 0644]
roundup/install_util.py [new file with mode: 0644]
roundup/instance.py [new file with mode: 0644]
roundup/mailer.py [new file with mode: 0644]
roundup/mailgw.py [new file with mode: 0644]
roundup/msgfmt.py [new file with mode: 0644]
roundup/password.py [new file with mode: 0644]
roundup/rfc2822.py [new file with mode: 0644]
roundup/roundupdb.py [new file with mode: 0644]
roundup/scripts/.cvsignore [new file with mode: 0644]
roundup/scripts/.svn/all-wcprops [new file with mode: 0644]
roundup/scripts/.svn/dir-prop-base [new file with mode: 0644]
roundup/scripts/.svn/entries [new file with mode: 0644]
roundup/scripts/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/roundup_admin.py.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/roundup_demo.py.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/roundup_gettext.py.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/roundup_mailgw.py.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/roundup_server.py.svn-base [new file with mode: 0644]
roundup/scripts/.svn/text-base/roundup_xmlrpc_server.py.svn-base [new file with mode: 0644]
roundup/scripts/__init__.py [new file with mode: 0644]
roundup/scripts/roundup_admin.py [new file with mode: 0644]
roundup/scripts/roundup_demo.py [new file with mode: 0644]
roundup/scripts/roundup_gettext.py [new file with mode: 0644]
roundup/scripts/roundup_mailgw.py [new file with mode: 0644]
roundup/scripts/roundup_server.py [new file with mode: 0644]
roundup/scripts/roundup_xmlrpc_server.py [new file with mode: 0644]
roundup/security.py [new file with mode: 0644]
roundup/support.py [new file with mode: 0644]
roundup/token.py [new file with mode: 0644]
roundup/version_check.py [new file with mode: 0644]
roundup/xmlrpc.py [new file with mode: 0644]
run_tests.py [new file with mode: 0644]
scripts/.svn/all-wcprops [new file with mode: 0644]
scripts/.svn/entries [new file with mode: 0644]
scripts/.svn/prop-base/add-issue.svn-base [new file with mode: 0644]
scripts/.svn/prop-base/copy-user.py.svn-base [new file with mode: 0644]
scripts/.svn/prop-base/roundup-reminder.svn-base [new file with mode: 0644]
scripts/.svn/prop-base/server-ctl.svn-base [new file with mode: 0644]
scripts/.svn/prop-base/weekly-report.svn-base [new file with mode: 0644]
scripts/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
scripts/.svn/text-base/add-issue.svn-base [new file with mode: 0644]
scripts/.svn/text-base/copy-user.py.svn-base [new file with mode: 0644]
scripts/.svn/text-base/imapServer.py.svn-base [new file with mode: 0644]
scripts/.svn/text-base/import_sf.py.svn-base [new file with mode: 0644]
scripts/.svn/text-base/roundup-reminder.svn-base [new file with mode: 0644]
scripts/.svn/text-base/roundup.rc-debian.svn-base [new file with mode: 0644]
scripts/.svn/text-base/schema_diagram.py.svn-base [new file with mode: 0644]
scripts/.svn/text-base/server-ctl.svn-base [new file with mode: 0644]
scripts/.svn/text-base/weekly-report.svn-base [new file with mode: 0644]
scripts/README.txt [new file with mode: 0644]
scripts/add-issue [new file with mode: 0755]
scripts/copy-user.py [new file with mode: 0755]
scripts/imapServer.py [new file with mode: 0644]
scripts/import_sf.py [new file with mode: 0644]
scripts/roundup-reminder [new file with mode: 0755]
scripts/roundup.rc-debian [new file with mode: 0644]
scripts/schema_diagram.py [new file with mode: 0644]
scripts/server-ctl [new file with mode: 0755]
scripts/weekly-report [new file with mode: 0755]
setup.py [new file with mode: 0644]
share/.svn/all-wcprops [new file with mode: 0644]
share/.svn/entries [new file with mode: 0644]
share/doc/.svn/all-wcprops [new file with mode: 0644]
share/doc/.svn/entries [new file with mode: 0644]
share/doc/roundup/.svn/all-wcprops [new file with mode: 0644]
share/doc/roundup/.svn/entries [new file with mode: 0644]
share/man/.svn/all-wcprops [new file with mode: 0644]
share/man/.svn/entries [new file with mode: 0644]
share/man/man1/.svn/all-wcprops [new file with mode: 0644]
share/man/man1/.svn/entries [new file with mode: 0644]
share/man/man1/.svn/text-base/roundup-admin.1.svn-base [new file with mode: 0644]
share/man/man1/.svn/text-base/roundup-demo.1.svn-base [new file with mode: 0644]
share/man/man1/.svn/text-base/roundup-mailgw.1.svn-base [new file with mode: 0644]
share/man/man1/.svn/text-base/roundup-server.1.svn-base [new file with mode: 0644]
share/man/man1/roundup-admin.1 [new file with mode: 0644]
share/man/man1/roundup-demo.1 [new file with mode: 0644]
share/man/man1/roundup-mailgw.1 [new file with mode: 0644]
share/man/man1/roundup-server.1 [new file with mode: 0644]
share/roundup/.svn/all-wcprops [new file with mode: 0644]
share/roundup/.svn/entries [new file with mode: 0644]
share/roundup/templates/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/.svn/entries [new file with mode: 0644]
share/roundup/templates/classic/.cvsignore [new file with mode: 0644]
share/roundup/templates/classic/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/classic/.svn/dir-prop-base [new file with mode: 0644]
share/roundup/templates/classic/.svn/entries [new file with mode: 0644]
share/roundup/templates/classic/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
share/roundup/templates/classic/.svn/text-base/TEMPLATE-INFO.txt.svn-base [new file with mode: 0644]
share/roundup/templates/classic/.svn/text-base/initial_data.py.svn-base [new file with mode: 0644]
share/roundup/templates/classic/.svn/text-base/schema.py.svn-base [new file with mode: 0644]
share/roundup/templates/classic/TEMPLATE-INFO.txt [new file with mode: 0644]
share/roundup/templates/classic/detectors/.cvsignore [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/dir-prop-base [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/entries [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/text-base/messagesummary.py.svn-base [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/text-base/nosyreaction.py.svn-base [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/text-base/statusauditor.py.svn-base [new file with mode: 0644]
share/roundup/templates/classic/detectors/.svn/text-base/userauditor.py.svn-base [new file with mode: 0644]
share/roundup/templates/classic/detectors/messagesummary.py [new file with mode: 0644]
share/roundup/templates/classic/detectors/nosyreaction.py [new file with mode: 0644]
share/roundup/templates/classic/detectors/statusauditor.py [new file with mode: 0644]
share/roundup/templates/classic/detectors/userauditor.py [new file with mode: 0644]
share/roundup/templates/classic/extensions/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/classic/extensions/.svn/entries [new file with mode: 0644]
share/roundup/templates/classic/extensions/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
share/roundup/templates/classic/extensions/README.txt [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/entries [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.404.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.calendar.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.collision.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.help-empty.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.help-list.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.help-search.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.help-submit.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.help.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/_generic.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/file.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/file.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/help.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/help_controls.js.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/home.classlist.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/home.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/issue.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/issue.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/issue.search.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/keyword.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/msg.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/msg.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/page.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/query.edit.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/query.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/style.css.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.forgotten.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.help-search.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.help.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.register.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user.rego_progress.html.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/.svn/text-base/user_utils.js.svn-base [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.404.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.calendar.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.collision.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.help-empty.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.help-list.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.help-search.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.help-submit.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.help.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.index.html [new file with mode: 0644]
share/roundup/templates/classic/html/_generic.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/file.index.html [new file with mode: 0644]
share/roundup/templates/classic/html/file.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/help.html [new file with mode: 0644]
share/roundup/templates/classic/html/help_controls.js [new file with mode: 0644]
share/roundup/templates/classic/html/home.classlist.html [new file with mode: 0644]
share/roundup/templates/classic/html/home.html [new file with mode: 0644]
share/roundup/templates/classic/html/issue.index.html [new file with mode: 0644]
share/roundup/templates/classic/html/issue.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/issue.search.html [new file with mode: 0644]
share/roundup/templates/classic/html/keyword.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/msg.index.html [new file with mode: 0644]
share/roundup/templates/classic/html/msg.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/page.html [new file with mode: 0644]
share/roundup/templates/classic/html/query.edit.html [new file with mode: 0644]
share/roundup/templates/classic/html/query.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/style.css [new file with mode: 0644]
share/roundup/templates/classic/html/user.forgotten.html [new file with mode: 0644]
share/roundup/templates/classic/html/user.help-search.html [new file with mode: 0644]
share/roundup/templates/classic/html/user.help.html [new file with mode: 0644]
share/roundup/templates/classic/html/user.index.html [new file with mode: 0644]
share/roundup/templates/classic/html/user.item.html [new file with mode: 0644]
share/roundup/templates/classic/html/user.register.html [new file with mode: 0644]
share/roundup/templates/classic/html/user.rego_progress.html [new file with mode: 0644]
share/roundup/templates/classic/html/user_utils.js [new file with mode: 0644]
share/roundup/templates/classic/initial_data.py [new file with mode: 0644]
share/roundup/templates/classic/schema.py [new file with mode: 0644]
share/roundup/templates/minimal/.cvsignore [new file with mode: 0644]
share/roundup/templates/minimal/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/minimal/.svn/dir-prop-base [new file with mode: 0644]
share/roundup/templates/minimal/.svn/entries [new file with mode: 0644]
share/roundup/templates/minimal/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/.svn/text-base/TEMPLATE-INFO.txt.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/.svn/text-base/initial_data.py.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/.svn/text-base/schema.py.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/TEMPLATE-INFO.txt [new file with mode: 0644]
share/roundup/templates/minimal/detectors/.cvsignore [new file with mode: 0644]
share/roundup/templates/minimal/detectors/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/minimal/detectors/.svn/dir-prop-base [new file with mode: 0644]
share/roundup/templates/minimal/detectors/.svn/entries [new file with mode: 0644]
share/roundup/templates/minimal/detectors/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/detectors/.svn/text-base/userauditor.py.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/detectors/userauditor.py [new file with mode: 0644]
share/roundup/templates/minimal/extensions/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/minimal/extensions/.svn/entries [new file with mode: 0644]
share/roundup/templates/minimal/extensions/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/extensions/README.txt [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/all-wcprops [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/entries [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/_generic.404.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/_generic.calendar.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/_generic.collision.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/_generic.help.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/_generic.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/_generic.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/help_controls.js.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/home.classlist.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/home.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/page.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/style.css.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/user.index.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/user.item.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/user.register.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/.svn/text-base/user.rego_progress.html.svn-base [new file with mode: 0644]
share/roundup/templates/minimal/html/_generic.404.html [new file with mode: 0644]
share/roundup/templates/minimal/html/_generic.calendar.html [new file with mode: 0644]
share/roundup/templates/minimal/html/_generic.collision.html [new file with mode: 0644]
share/roundup/templates/minimal/html/_generic.help.html [new file with mode: 0644]
share/roundup/templates/minimal/html/_generic.index.html [new file with mode: 0644]
share/roundup/templates/minimal/html/_generic.item.html [new file with mode: 0644]
share/roundup/templates/minimal/html/help_controls.js [new file with mode: 0644]
share/roundup/templates/minimal/html/home.classlist.html [new file with mode: 0644]
share/roundup/templates/minimal/html/home.html [new file with mode: 0644]
share/roundup/templates/minimal/html/page.html [new file with mode: 0644]
share/roundup/templates/minimal/html/style.css [new file with mode: 0644]
share/roundup/templates/minimal/html/user.index.html [new file with mode: 0644]
share/roundup/templates/minimal/html/user.item.html [new file with mode: 0644]
share/roundup/templates/minimal/html/user.register.html [new file with mode: 0644]
share/roundup/templates/minimal/html/user.rego_progress.html [new file with mode: 0644]
share/roundup/templates/minimal/initial_data.py [new file with mode: 0644]
share/roundup/templates/minimal/schema.py [new file with mode: 0644]
test/.cvsignore [new file with mode: 0644]
test/.svn/all-wcprops [new file with mode: 0644]
test/.svn/dir-prop-base [new file with mode: 0644]
test/.svn/entries [new file with mode: 0644]
test/.svn/prop-base/test_actions.py.svn-base [new file with mode: 0644]
test/.svn/prop-base/test_anypy_hashlib.py.svn-base [new file with mode: 0644]
test/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
test/.svn/text-base/README.txt.svn-base [new file with mode: 0644]
test/.svn/text-base/__init__.py.svn-base [new file with mode: 0644]
test/.svn/text-base/benchmark.py.svn-base [new file with mode: 0644]
test/.svn/text-base/db_test_base.py.svn-base [new file with mode: 0644]
test/.svn/text-base/memorydb.py.svn-base [new file with mode: 0644]
test/.svn/text-base/mocknull.py.svn-base [new file with mode: 0644]
test/.svn/text-base/session_common.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_actions.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_anydbm.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_anypy_hashlib.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_cgi.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_dates.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_hyperdbvals.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_indexer.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_locking.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_mailer.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_mailgw.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_mailsplit.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_memorydb.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_multipart.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_mysql.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_postgresql.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_rfc2822.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_schema.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_security.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_sqlite.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_templating.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_textfmt.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_token.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_tsearch2.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_userauditor.py.svn-base [new file with mode: 0644]
test/.svn/text-base/test_xmlrpc.py.svn-base [new file with mode: 0644]
test/README.txt [new file with mode: 0644]
test/__init__.py [new file with mode: 0644]
test/benchmark.py [new file with mode: 0644]
test/db_test_base.py [new file with mode: 0644]
test/memorydb.py [new file with mode: 0644]
test/mocknull.py [new file with mode: 0644]
test/session_common.py [new file with mode: 0644]
test/test_actions.py [new file with mode: 0755]
test/test_anydbm.py [new file with mode: 0644]
test/test_anypy_hashlib.py [new file with mode: 0644]
test/test_cgi.py [new file with mode: 0644]
test/test_dates.py [new file with mode: 0644]
test/test_hyperdbvals.py [new file with mode: 0644]
test/test_indexer.py [new file with mode: 0644]
test/test_locking.py [new file with mode: 0644]
test/test_mailer.py [new file with mode: 0644]
test/test_mailgw.py [new file with mode: 0644]
test/test_mailsplit.py [new file with mode: 0644]
test/test_memorydb.py [new file with mode: 0644]
test/test_multipart.py [new file with mode: 0644]
test/test_mysql.py [new file with mode: 0644]
test/test_postgresql.py [new file with mode: 0644]
test/test_rfc2822.py [new file with mode: 0644]
test/test_schema.py [new file with mode: 0644]
test/test_security.py [new file with mode: 0644]
test/test_sqlite.py [new file with mode: 0644]
test/test_templating.py [new file with mode: 0644]
test/test_textfmt.py [new file with mode: 0644]
test/test_token.py [new file with mode: 0644]
test/test_tsearch2.py [new file with mode: 0644]
test/test_userauditor.py [new file with mode: 0644]
test/test_xmlrpc.py [new file with mode: 0644]
tools/.cvsignore [new file with mode: 0644]
tools/.svn/all-wcprops [new file with mode: 0644]
tools/.svn/dir-prop-base [new file with mode: 0644]
tools/.svn/entries [new file with mode: 0644]
tools/.svn/prop-base/base64.svn-base [new file with mode: 0644]
tools/.svn/prop-base/load_tracker.py.svn-base [new file with mode: 0644]
tools/.svn/text-base/.cvsignore.svn-base [new file with mode: 0644]
tools/.svn/text-base/base64.svn-base [new file with mode: 0644]
tools/.svn/text-base/fixroles.py.svn-base [new file with mode: 0644]
tools/.svn/text-base/load_tracker.py.svn-base [new file with mode: 0644]
tools/.svn/text-base/migrate-queries.py.svn-base [new file with mode: 0644]
tools/.svn/text-base/pygettext.py.svn-base [new file with mode: 0644]
tools/base64 [new file with mode: 0755]
tools/fixroles.py [new file with mode: 0644]
tools/load_tracker.py [new file with mode: 0755]
tools/migrate-queries.py [new file with mode: 0644]
tools/pygettext.py [new file with mode: 0644]

diff --git a/.cvsignore b/.cvsignore
new file mode 100644 (file)
index 0000000..1d2d275
--- /dev/null
@@ -0,0 +1,9 @@
+*.pyc
+*.pyo
+localconfig.py
+build
+demo
+dist
+MANIFEST
+_test_*
+*.cover
diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..05e286b
--- /dev/null
@@ -0,0 +1,29 @@
+# binaires
+*.pyc
+*.pyo
+
+# Fichier temporaires:
+.*.swp
+*~
+\#*#
+
+# DB de dev
+*.db
+
+# restants de merge
+*.orig
+*.rej
+
+# Configuration du projet - par environnement
+conf.py
+django.wsgi
+
+# buildout
+.installed.cfg
+bin
+develop-eggs
+downloads
+eggs
+log
+parts
+tmp
diff --git a/.svn/all-wcprops b/.svn/all-wcprops
new file mode 100644 (file)
index 0000000..666936c
--- /dev/null
@@ -0,0 +1,65 @@
+K 25
+svn:wc:ra_dav:version-url
+V 44
+/svnroot/roundup/!svn/ver/4483/roundup/trunk
+END
+CHANGES.txt
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svnroot/roundup/!svn/ver/4483/roundup/trunk/CHANGES.txt
+END
+COPYING.txt
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svnroot/roundup/!svn/ver/4184/roundup/trunk/COPYING.txt
+END
+setup.py
+K 25
+svn:wc:ra_dav:version-url
+V 53
+/svnroot/roundup/!svn/ver/4413/roundup/trunk/setup.py
+END
+2to3-done.txt
+K 25
+svn:wc:ra_dav:version-url
+V 58
+/svnroot/roundup/!svn/ver/4468/roundup/trunk/2to3-done.txt
+END
+MANIFEST.in
+K 25
+svn:wc:ra_dav:version-url
+V 56
+/svnroot/roundup/!svn/ver/4125/roundup/trunk/MANIFEST.in
+END
+README.txt
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svnroot/roundup/!svn/ver/4184/roundup/trunk/README.txt
+END
+demo.py
+K 25
+svn:wc:ra_dav:version-url
+V 52
+/svnroot/roundup/!svn/ver/4228/roundup/trunk/demo.py
+END
+run_tests.py
+K 25
+svn:wc:ra_dav:version-url
+V 57
+/svnroot/roundup/!svn/ver/4173/roundup/trunk/run_tests.py
+END
+BUILD.txt
+K 25
+svn:wc:ra_dav:version-url
+V 54
+/svnroot/roundup/!svn/ver/4458/roundup/trunk/BUILD.txt
+END
+.cvsignore
+K 25
+svn:wc:ra_dav:version-url
+V 55
+/svnroot/roundup/!svn/ver/4074/roundup/trunk/.cvsignore
+END
diff --git a/.svn/dir-prop-base b/.svn/dir-prop-base
new file mode 100644 (file)
index 0000000..b7e4c1d
--- /dev/null
@@ -0,0 +1,14 @@
+K 10
+svn:ignore
+V 68
+*.pyc
+*.pyo
+localconfig.py
+build
+demo
+dist
+MANIFEST
+_test_*
+*.cover
+
+END
diff --git a/.svn/entries b/.svn/entries
new file mode 100644 (file)
index 0000000..81f4fa3
--- /dev/null
@@ -0,0 +1,392 @@
+10
+
+dir
+4483
+http://svn.roundup-tracker.org/svnroot/roundup/roundup/trunk
+http://svn.roundup-tracker.org/svnroot/roundup
+
+
+
+2010-05-10T07:08:11.732909Z
+4483
+ber
+has-props
+
+
+
+
+
+
+
+
+
+
+
+
+
+57a73879-2fb5-44c3-a270-3262357dd7e2
+\f
+test
+dir
+\f
+CHANGES.txt
+file
+
+
+
+
+2010-05-10T14:16:53.811658Z
+471136dd7358e95ed50f4fe29c385633
+2010-05-10T07:08:11.732909Z
+4483
+ber
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+105380
+\f
+COPYING.txt
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+84bd42ab282f187bb5522b7640a6b29d
+2009-03-12T05:55:16.706083Z
+4184
+richard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4461
+\f
+scripts
+dir
+\f
+setup.py
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+7527c42995feb6e1ae71d63b258b1e70
+2009-12-21T02:47:57.310371Z
+4413
+richard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5236
+\f
+2to3-done.txt
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+29b50f673f82539daa75e5f884e33436
+2010-02-26T00:38:53.399931Z
+4468
+richard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+4387
+\f
+roundup
+dir
+\f
+locale
+dir
+\f
+tools
+dir
+\f
+frontends
+dir
+\f
+share
+dir
+\f
+doc
+dir
+\f
+MANIFEST.in
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+7bc905a90d20afd10722bf17bee1a7c3
+2009-02-12T05:57:42.198989Z
+4125
+stefan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+571
+\f
+README.txt
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+d9463a4990473e6b0f83b87926a97922
+2009-03-12T05:55:16.706083Z
+4184
+richard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1239
+\f
+demo.py
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+cd5c512bb3b0f4df15887f7d270275b7
+2009-06-17T15:24:08.422504Z
+4228
+stefan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+5412
+\f
+run_tests.py
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+16db386aea7914e5c339d35f826b0f97
+2009-02-27T16:09:36.637418Z
+4173
+stefan
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+29384
+\f
+BUILD.txt
+file
+
+
+
+
+2010-05-07T18:30:38.940737Z
+1c1b44256ce2592d70d682f2f0abea85
+2010-02-09T01:47:25.000713Z
+4458
+richard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2251
+\f
+.cvsignore
+file
+
+
+
+
+2010-05-07T18:30:38.944077Z
+8950ffbba561850211d5586cd18e10aa
+2003-08-26T12:34:15.000000Z
+1824
+jlgijsbers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+68
+\f
diff --git a/.svn/text-base/.cvsignore.svn-base b/.svn/text-base/.cvsignore.svn-base
new file mode 100644 (file)
index 0000000..1d2d275
--- /dev/null
@@ -0,0 +1,9 @@
+*.pyc
+*.pyo
+localconfig.py
+build
+demo
+dist
+MANIFEST
+_test_*
+*.cover
diff --git a/.svn/text-base/2to3-done.txt.svn-base b/.svn/text-base/2to3-done.txt.svn-base
new file mode 100644 (file)
index 0000000..5aeb5fa
--- /dev/null
@@ -0,0 +1,159 @@
+CAN'T VERIFY
+
+./roundup/backends/back_mysql.py
+./roundup/backends/back_tsearch2.py
+
+TODO
+
+./roundup/cgi/exceptions.py
+./roundup/cgi/form_parser.py
+./roundup/cgi/MultiMapping.py
+./roundup/cgi/PageTemplates/__init__.py
+./roundup/cgi/PageTemplates/Expressions.py
+./roundup/cgi/PageTemplates/GlobalTranslationService.py
+./roundup/cgi/PageTemplates/MultiMapping.py
+./roundup/cgi/PageTemplates/PageTemplate.py
+./roundup/cgi/PageTemplates/PathIterator.py
+./roundup/cgi/PageTemplates/PythonExpr.py
+./roundup/cgi/PageTemplates/TALES.py
+./roundup/cgi/TAL/__init__.py
+./roundup/cgi/TAL/DummyEngine.py
+./roundup/cgi/TAL/HTMLParser.py
+./roundup/cgi/TAL/HTMLTALParser.py
+./roundup/cgi/TAL/markupbase.py
+./roundup/cgi/TAL/TALDefs.py
+./roundup/cgi/TAL/TALGenerator.py
+./roundup/cgi/TAL/talgettext.py
+./roundup/cgi/TAL/TALInterpreter.py
+./roundup/cgi/TAL/TALParser.py
+./roundup/cgi/TAL/TranslationContext.py
+./roundup/cgi/TAL/XMLParser.py
+./roundup/cgi/templating.py
+./roundup/cgi/TranslationService.py
+./roundup/cgi/wsgi_handler.py
+./roundup/cgi/zLOG.py
+./roundup/cgi/ZTUtils/__init__.py
+./roundup/cgi/ZTUtils/Batch.py
+./roundup/cgi/ZTUtils/Iterator.py
+./roundup/configuration.py
+./roundup/date.py
+./roundup/dist/__init__.py
+./roundup/dist/command/__init__.py
+./roundup/dist/command/bdist_rpm.py
+./roundup/dist/command/build.py
+./roundup/dist/command/build_doc.py
+./roundup/dist/command/build_py.py
+./roundup/dist/command/build_scripts.py
+./roundup/exceptions.py
+./roundup/hyperdb.py
+./roundup/i18n.py
+./roundup/init.py
+./roundup/install_util.py
+./roundup/instance.py
+./roundup/mailer.py
+./roundup/mailgw.py
+./roundup/msgfmt.py
+./roundup/password.py
+./roundup/rfc2822.py
+./roundup/roundupdb.py
+./roundup/scripts/__init__.py
+./roundup/scripts/roundup_admin.py
+./roundup/scripts/roundup_demo.py
+./roundup/scripts/roundup_gettext.py
+./roundup/scripts/roundup_mailgw.py
+./roundup/scripts/roundup_server.py
+./roundup/scripts/roundup_xmlrpc_server.py
+./roundup/security.py
+./roundup/support.py
+./roundup/token.py
+./roundup/version_check.py
+./roundup/xmlrpc.py
+./run_tests.py
+./scripts/copy-user.py
+./scripts/imapServer.py
+./scripts/import_sf.py
+./scripts/schema_diagram.py
+./setup.py
+./share/roundup/templates/classic/detectors/messagesummary.py
+./share/roundup/templates/classic/detectors/nosyreaction.py
+./share/roundup/templates/classic/detectors/statusauditor.py
+./share/roundup/templates/classic/detectors/userauditor.py
+./share/roundup/templates/classic/initial_data.py
+./share/roundup/templates/classic/schema.py
+./share/roundup/templates/minimal/detectors/userauditor.py
+./share/roundup/templates/minimal/initial_data.py
+./share/roundup/templates/minimal/schema.py
+./test/__init__.py
+./test/benchmark.py
+./test/db_test_base.py
+./test/memorydb.py
+./test/mocknull.py
+./test/session_common.py
+./test/test_actions.py
+./test/test_anydbm.py
+./test/test_anypy_hashlib.py
+./test/test_cgi.py
+./test/test_dates.py
+./test/test_hyperdbvals.py
+./test/test_indexer.py
+./test/test_locking.py
+./test/test_mailer.py
+./test/test_mailgw.py
+./test/test_mailsplit.py
+./test/test_memorydb.py
+./test/test_multipart.py
+./test/test_mysql.py
+./test/test_postgresql.py
+./test/test_rfc2822.py
+./test/test_schema.py
+./test/test_security.py
+./test/test_sqlite.py
+./test/test_templating.py
+./test/test_textfmt.py
+./test/test_token.py
+./test/test_tsearch2.py
+./test/test_userauditor.py
+./test/test_xmlrpc.py
+./test.py
+./tools/fixroles.py
+./tools/load_tracker.py
+./tools/migrate-queries.py
+./tools/pygettext.py
+./frontends/ZRoundup/__init__.py
+./frontends/ZRoundup/ZRoundup.py
+
+
+DONE
+
+./doc/conf.py
+./roundup/admin.py
+./roundup/backends/__init__.py
+./roundup/backends/back_anydbm.py
+./roundup/backends/back_postgresql.py
+./roundup/backends/back_sqlite.py
+./roundup/backends/indexer_common.py
+./roundup/backends/indexer_dbm.py
+./roundup/backends/indexer_rdbms.py
+./roundup/backends/locking.py
+./roundup/backends/portalocker.py
+./roundup/backends/rdbms_common.py
+./roundup/backends/sessions_dbm.py
+./roundup/backends/sessions_rdbms.py
+./roundup/cgi/accept_language.py
+./roundup/cgi/actions.py
+./roundup/cgi/cgitb.py
+
+
+NOTHING DONE
+
+./roundup/__init__.py
+./roundup/actions.py
+./roundup/anypy/__init__.py
+./roundup/anypy/hashlib_.py
+./roundup/anypy/sets_.py
+./roundup/backends/blobfiles.py
+./roundup/backends/indexer_xapian.py
+./roundup/backends/tsearch2_setup.py
+./roundup/cgi/__init__.py
+./roundup/cgi/apache.py
+./roundup/cgi/client.py
diff --git a/.svn/text-base/BUILD.txt.svn-base b/.svn/text-base/BUILD.txt.svn-base
new file mode 100644 (file)
index 0000000..029e46e
--- /dev/null
@@ -0,0 +1,54 @@
+Building Releases
+=================
+
+Roundup is currently a source-only release - it has no binary components. I
+want it to stay that way, too. This document describes how to build a
+source release. Users of Roundup should read the doc/installation.txt file
+to find out how to install this software.
+
+Building and distributing a release of Roundup is done by running:
+
+1.  Make sure the unit tests run! "./run_tests.py"
+2.  Edit roundup/__init__.py and doc/announcement.txt to reflect the new
+    version and appropriate announcements. Add truncated announcement to
+    setup.py description field.
+3.  Note the SVN revision in the CHANGES.txt file.
+4.  Clean out all *.orig, *.rej, .#* files from the source.
+5.  python setup.py clean --all
+6.  Edit setup.py to ensure that all information therein (version, contact
+    information etc) is correct.
+7.  python setup.py sdist --manifest-only
+8.  Check the MANIFEST to make sure that any new files are included. If
+    they are not, edit MANIFEST.in to include them. "Documentation" for
+    MANIFEST.in may be found in disutils.filelist._parse_template_line.
+9.  python setup.py sdist
+    (if you find sdist a little verbose, add "--quiet" to the end of the
+     command)
+10. Unpack the new dist file in /tmp then a) run_test.py and b) demo.py
+    with all available Python versions.
+11. Assuming all is well tag the release in SVN::
+
+      svn cp https://roundup.svn.sourceforge.net/svnroot/roundup/roundup/trunk \
+      https://roundup.svn.sourceforge.net/svnroot/roundup/roundup/tags/release-1.4.12
+
+11. python setup.py bdist_rpm
+12. python setup.py bdist_wininst
+13. Send doc/announcement.txt to python-announce@python.org and
+    roundup-users@lists.sourceforge.net and
+    roundup-devel@lists.sourceforge.net
+
+So, those commands in a nice, cut'n'pasteable form::
+
+ find . -name '*.orig' -exec rm {} \;
+ find . -name '*.rej' -exec rm {} \;
+ find . -name '.#*' -exec rm {} \;
+ python setup.py clean --all
+ python setup.py sdist --manifest-only
+ python setup.py sdist --quiet
+ python setup.py bdist_rpm
+ python setup.py bdist_wininst
+ python setup.py register
+ python setup.py sdist upload --sign
+ python setup.py bdist_wininst upload --sign
+
+(if the last two fail make sure you're using python2.5+)
diff --git a/.svn/text-base/CHANGES.txt.svn-base b/.svn/text-base/CHANGES.txt.svn-base
new file mode 100644 (file)
index 0000000..29bb127
--- /dev/null
@@ -0,0 +1,2325 @@
+This file contains the changes to the Roundup system over time. The entries
+are given with the most recent entry first.
+
+2010-??0?? 1.5.1
+
+Fixed:
+- Handle multiple @action values from broken trackers.
+- Accept single-character subject lines
+- xmlrpc handling of unicode characters and binary values, see
+  http://thread.gmane.org/gmane.comp.bug-tracking.roundup.user/10040
+  thanks to Hauke Duden for reporting these.
+- frontends/roundup.cgi got out of sync with the roundup.cgi.Client API
+- Default to "text/plain" if no Content-Type header is present in email
+  (thanks Hauke Duden)
+- Small documentation update regarding debugging aids (Bernhard Reiter)
+
+
+2010-02-23 1.5.0
+
+Fixed:
+- The email for the first message on an issue was having its In-Reply-To
+  set to itself (thanks Eric Kow)
+
+
+2010-02-19 1.4.13
+
+Fixed:
+- Multilink edit fields lose their values (thanks Will Maier)
+
+
+2010-02-09 1.4.12 (r4455)
+
+Features:
+- Support IMAP CRAM-MD5, thanks Jochen Maes
+
+Fixes:
+- Proper handling of 'Create' permissions in both mail gateway (earlier
+  commit r4405 by Richard), web interface, and xmlrpc. This used to
+  check 'Edit' permission previously. See
+  http://thread.gmane.org/gmane.comp.bug-tracking.roundup.devel/5133
+  Add regression tests for proper handling of 'Create' and 'Edit'
+  permissions.
+- Fix handling of non-ascii in realname in the nosy mailer, this used to
+  mangle the email address making it unusable when replying. Thanks to
+  intevation for funding the fix.
+- Fix documentation on user required to run the tests, fixes 
+  issue2550618, thanks to Chris aka 'radioking'
+- Add simple doc about translating customised tracker content
+- Add "flup" setup documentation, thanks Christian Glass
+- Fix "Web Access" permission check to allow serving of static files to
+  Anonymous again
+- Add check for "Web Access" permission in all web templating permission
+  checks
+- Improvements in upgrading documentation, thanks Christian Glass
+- Display 'today' in the account user's timezone, thanks David Wolever
+- Fix file handle leak in some web interfaces with logging turned on,
+  fixes issue1675845
+- Attempt to generate more human-readable addresses in email, fixes
+  issue2550632
+- Allow value to be specified to multilink form element templating, fixes
+  issue2550613, thanks David Wolever
+- Fix thread safety with stdin in roundup-server, fixes issue2550596
+  (thanks Werner Hunger)
+
+
+2009-12-21 1.4.11 (r4413)
+
+Features:
+- Generic class editor may now restore retired items (thanks Ralf Hemmecke)
+
+Fixes:
+- Fix security hole allowing user permission escalation (thanks Ralf
+  Schlatterbeck)
+- More SSL fixes. SSL wants the underlying socket non-blocking. So we
+  don't call socket.setdefaulttimeout in case of SSL. This apparently
+  never raises a WantReadError from SSL.
+  This also fixes a case where a WantReadError is raised and apparently
+  the bytes already read are dropped (seems the WantReadError is really
+  an error, not just an indication to retry).
+- Correct initial- and end-handshakes for SSL
+- Update FAQ to mention infinite redirects with pathological settings of
+  the tracker->web variable. Closes issue2537286, thanks to "stuidge"
+  for reporting.
+- Fix some format errors in italian translation file
+- Some bugs issue classifiers were causing database lookup errors
+- Fix security-problem: If user hasn't permission on a message (notably
+  files and content properties) and is on the nosy list, the content was
+  sent via email. We now check that user has permission on the message
+  content and files properties. Thanks to Intevation for funding this
+  fix.
+- Fix traceback on .../msgN/ url, this requests the file content and for
+  apache mod_wsgi produced a traceback because the mime type is None for
+  messages, fixes issue2550586, thanks to Thomas Arendsen Hein for
+  reporting and to Intevation for funding the fix.
+- Handle OPTIONS http request method in wsgi handler, fixes issue2550587.
+  Thanks to Thomas Arendsen Hein for reporting and to Intevation for
+  funding the fix.
+- Add documentation for migrating to the Register permission and
+  fix mailgw to use Register permission, fixes issue2550599
+- Fix styling of calendar to make it more usable, fixes issue2550608
+- Fix typo in email section of user guide, fixes issue2550607
+- Fix WSGI response code (thanks Peter Pöml)
+- Fix linking of an existing item to a newly created item, e.g.
+  edit action in web template is name="issue-1@link@msg" value="msg1"
+  would trigger a traceback about an unbound variable.
+  Add new regression test for this case. May be related to (now closed)
+  issue1177477. Thanks to Intevation for funding the fix.
+- Clean up all the places where role processing occurs. This is now in a
+  central place in hyperdb.Class and is used consistently throughout.
+  This also means now a template can override the way role processing
+  occurs (e.g. for elaborate permission schemes). Thanks to intevation
+  for funding the change.
+- Fix issue2550606 (german translation bug) "an hour" is only used in
+  the context "in an hour" or "an hour ago" which translates to german
+  "in einer Stunde" or "vor einer Stunde".  So "an hour" is translated
+  "einer Stunde" (which sounds wrong at first).  Also note that date.py
+  already has a comment saying "XXX this is internationally broken" --
+  but at least there's a workaround for german :-) Thanks to Chris
+  (radioking) for reporting.
+
+
+2009-10-09 1.4.10 (r4374)
+
+Fixes:
+- Minor update of doc/developers.txt to point to the new resources
+  on www.roundup-tracker.org (Bernhard Reiter)
+- Small CSS improvements regaring the search box (thanks Thomas Arendsen Hein)
+  (issue 2550589)
+- Indexers behaviour made more consistent regarding length of indexed words
+  and stopwords (thanks Thomas Arendsen Hein, Bernhard Reiter)(issue 2550584)
+- fixed typos in the installation instructions (thanks Thomas Arendsen Hein)
+  (issue 2550573) 
+- New config option csv_field_size: Pythons csv module (which is used
+  for export/import) has a new field size limit starting with python2.5.
+  We now issue a warning during export if the limit is too small and use
+  the csv_field_size configuration during import to set the limit for
+  the csv module. (Ralf Schlatterbeck)
+- Small fix for CGI-handling of XMLRPC requests for python2.4, this
+  worked only for 2.5 and beyond due to a change in the xmlrpc interface
+  in python (Ralf Schlatterbeck)
+- Document filter method of xmlrpc interface (Ralf Schlatterbeck)
+- Fix interaction of SSL and XMLRPC, now XMLRPC works with SSL 
+  (Ralf Schlatterbeck)
+
+2009-08-10 1.4.9 (r4346)
+
+Fixes:
+- fixed action taken in response to invalid GET request
+- fixed classic tracker template to submit POST requests when appropriate
+- fix problems with french and german locale files (issue 2550546)
+- Run each message of the mail-gateway in a separate transaction,
+  see http://thread.gmane.org/gmane.comp.bug-tracking.roundup.user/9500
+- fix problem with bounce-message if incoming mail has insufficient
+  privilege, e.g., user not existing (issue 2550534)
+- fix construction of individual messages to nosy recipents with
+  attachments (issue 2550568)
+- re-order sqlite imports to handle multiple installed versions (issue
+  2550570)
+- don't show entire history by default
+  (fixes http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=540629)
+- remove use of string exception
+
+
+2009-03-18 1.4.8 (r4209)
+
+Fixes:
+- bug introduced into hyperdb filter (issue 2550505)
+- bug introduced into CVS export and view (issue 2550529)
+- bugs introduced in the migration to the email package (issue 2550531)
+- handle bogus pagination values (issue 2550530)
+- fix TLS handling with some SMTP servers (issues 2484879 and 1912923)
+
+
+2009-03-13 1.4.7 (r4202)
+
+Features:
+- Provide a "no selection" option in web interface selection widgets
+- Debug logging now uses the logging module rather than print
+- Allow CGI frontend to serve XMLRPC requests.
+- Added XMLRPC actions, as well as bridging CGI actions to XMLRPC actions.
+- Optimized large file serving via mod_python / sendfile().
+- Support resuming downloads for (large) files.
+
+Fixes:
+- a number of security issues were discovered by Daniel Diniz
+- EditCSV and ExportCSV altered to include permission checks
+- HTTP POST required on actions which alter data
+- HTML file uploads served as application/octet-stream
+- Handle Unauthorised in file serving correctly
+- New item action reject creation of new users
+- Item retirement was not being controlled
+- Roundup is now compatible with Python 2.6
+- Improved French and German translations
+- Improve consistency of item sorting in HTML interface
+- Various other small bug fixes, robustification and optimisation
+
+
+2008-09-01 1.4.6
+Fixed:
+- Fix bug introduced in 1.4.5 in RDBMS full-text indexing
+- Make URL matching code less matchy
+- Try to clarify mail_domain config setting
+
+
+2008-08-19 1.4.5
+Feature:
+- Add use of username/password stored in ~/.netrc in mailgw (sf patch
+  #1912105)
+
+Fixed:
+- 'Make a Copy' failed with more than one person in nosy list (sf #1906147)
+- xml-rpc security checks and tests across all backends (sf #1907211)
+- Send a Precedence header in email so (well-written) autoresponders don't
+- Fix mailgw total failure bounce message generation (thanks Bradley Dean)
+- Fix for postgres 8.3 compatibility (and bug) (sf patch #2030479 and bug
+  #1959261)
+- Fix for translations (sf patch #2032526)
+- Fire reactors after file storage is all done (sf patch #2001243)
+- Allow negative ids other than -1 for item generation (sf patch #1982481)
+- Better German translation for retiring users (sf #1998701)
+- More improvements to German translation (sf #1919446)
+- Add filter() to XML-RPC interface (sf patch #1966456)
+- Fix IndexError when there are no messages to an issue (sf patch #1894249)
+- Prevent broken pipe errors in csv export (sf patch #1911449)
+- New session API and cleanup thanks anatoly t.
+- Make WSGI handler threadsafe (sf #1968027)
+- Improved URL matching RE (sf #2038858)
+- Allow binary file content submission via XML-RPC (sf #1995623)
+- Don't run old code on newer database (sf #1979556)
+- Fix HTML injection into page title
+- Fix indexer handling of indexed Link properties (sf #1936876)
+
+
+2008-03-01 1.4.4
+Fixed:
+- Security fixes (thanks Roland Meister)
+
+
+2008-02-27 1.4.3
+Fixed:
+- MySQL backend bug introduced in 1.4.2 (TEXT columns need a size when
+  being indexed)
+
+
+2008-02-08 1.4.2
+Feature:
+- New config option in mail section: ignore_alternatives allows to
+  ignore alternatives besides the text/plain part used for the content
+  of a message in multipart/alternative attachments.
+- Admin copy of error email from mailgw includes traceback (thanks Ulrik
+  Mikaelsson)
+- Messages created through the web are now given an in-reply-to header
+  when email out to nosy (thanks Martin v. Löwis)
+- Nosy messages now include more information about issues (all link
+  properties with a "name" attribute) (thanks Martin v. Löwis)
+
+Fixed:
+- Searching date range by supplying just a date as the filter spec
+- Handle no time.tzset under Windows (sf #1825643)
+- Fix race condition in file storage transaction commit (sf #1883580)
+- Make user utils JS work with firstname/lastname again (sf #1868323)
+- Fix ZRoundup to work with Zope 2.8.5 (sf #1806125)
+- Fix race condition for key properties in rdbms backends (sf #1876683)
+- Handle Reject in mailgw final set/create (sf #1826425)
+
+
+2007-11-09 1.4.1
+Fixed:
+- Removed some metakit references
+
+
+2007-11-04 1.4.0
+Feature:
+- Roundup has a new xmlrpc frontend that gives access to a tracker using
+  XMLRPC.
+- Dates can now be in the year-range 1-9999
+- The metakit backend has been removed
+- Add simple anti-spam recipe to docs
+- Allow customisation of regular expressions used in email parsing, thanks
+  Bruno Damour
+- Italian translation by Marco Ghidinelli
+- Multilinks take any iterable
+- config option: specify port and local hostname for SMTP connections
+- Tracker index templating (i.e. when roundup_server is serving multiple
+  trackers) (sf bug 1058020)
+- config option: Limit nosy attachments based on size (Philipp Gortan)
+- roundup_server supports SSL via pyopenssl
+- templatable 404 not found messages (sf bug 1403287)
+- Unauthorized email includes a link to the registration page for
+  the tracker
+- config options: control whether author info/email is included in email
+  sent by roundup
+- support for receiving OpenPGP MIME messages (signed or encrypted)
+
+Fixed:
+- Handling of unset Link search in RDBMS backend
+- Journal export of anydbm didn't correctly export previously empty values
+- Fix handling of defaults for date fields
+- Fix <form> name in user editing to allow multilink popups to work
+- Fix form handling of editing existing hyperdb items from a new item page.
+- Added new rdbms-indexes for full-text index which will speed up
+  reindexing.
+- Turning off indexing for content properties of FileClass instance
+  (e.g., "file" and "msg") now works for SQL backends.
+- Enabled over-riding of content-type in web interface (thanks
+  John Mitchell)
+- Validate user timezones to filter bad entries (sf bug 1738470)
+- Classic template allows searching for issues with no topic set
+  (sf bug 1610787)
+- xapian_indexer uses current API for stemming (Rick Benavidez)
+  (sf bug 1771414)
+- Ensure email addresses are unique (sf bug 1611787)
+- roundup_admin tracks uncommitted changes in interactive mode
+  for all backends (sf bug 1297014)
+- add template search path for easy_install (Marek Kubica)
+- don't spam the roundup admin on client shutdowns (Ulrik Mikaelsson)
+- respect umask on filestorage backends (Ulrik Mikaelsson) (sf bug 1744328)
+- cope with spam robots posting multiple instances of the same form
+- include the author of property-only changes in generated messages
+- fuller email validation in templates (sf feature 1216291)
+- cope with bad cookies from other apps on same domain (sf bug 1691708)
+- updated Spanish translation from Ramiro Morales
+- clean up query display of "Private to you items" (sf bug 1481394)
+- use local timezone for mail date header (sf bug 1658173)
+- allow CSV export of queries on selected issues (sf bug 1783492)
+- remove blobfiles on destroy (sf bug 1654132)
+- handle postgres exceptions during session cleanup (sf bug 1703116)
+- update Xapian indexer to use current API
+- handle export and import of old trackers that have data attached to
+  journal "create" events
+- fix a couple more old instances of "type" instead of "ENGINE" for mysql
+  backend
+- make LinkHTMLProperty handle non-existing keys (sf patch 1815895)
+
+
+2007-02-15 1.3.3
+Fixed:
+- If-Modified-Since handling was broken
+- Updated documentation for customising hard-coded searches in page.html
+- Updated Windows installation docs (thanks Bo Berglund)
+- Handle rounding of seconds generating invalid date values
+- Handle 8-bit untranslateable messages from database properties
+- Fix scripts/roundup-reminder date calculation (sf bug 1649979)
+- Improved due_date and timelog customisation docs (sf bug 1625124)
+
+
+2006-12-19 1.3.2
+Fixed:
+- relax rules for required fields in form_parser.py (sf bug 1599740)
+- documentation cleanup from Luke Ross (sf patch 1594860)
+- updated Spanish translation from Ramiro Morales (sf patch 1594718)
+- handle 8-bit untranslateable messages in tracker templates
+- handling of required for boolean False and numeric 0 (sf bug 1608200)
+- removed bogus args attr of ConfigurationError (sf bug 1608056)
+- implemented start_response in roundup.cgi (sf bug 1604304)
+- clarified windows service documentation (sf patch 1597713)
+- HTMLClass fixed to work with new item permissions check (sf bug 1602983)
+- support POP over SSL (sf patch 1597703)
+- clean up input field generation and quoting of values (sf bug 1615616)
+- allow use of roundup-server pidfile without forking (sf bug 1614753)
+- allow translation of status/priority menu options (sf bug 1613976)
+
+
+2006-11-11 1.3.1
+Fixed:
+- setup.py had broken reference to roundup.cgi (sf bug 1593573)
+- full-text search wasn't coping with multiple multilinks to the same class
+- unicode / sqlite 3 problem (sf bug 1589292)
+
+
+2006-11-09 1.3.0
+Feature:
+- WSGI support via roundup.cgi.wsgi_handler
+
+Fixed:
+- sqlite module detection was broken for python 2.5 compiled without sqlite
+  support
+- fixed support for pysqlite2 (version 2.1.0 is the minimum version
+  supported)
+- roundup-server called setuid when run by non-root user
+- fix sort/group direction checkbox in issue.index.html (sf bug 1593025)
+- fix error detection for non-EN locales of postgres (sf bug 1592249)
+- fix email change note rendering of multiline properties (sf patch 1575223)
+- fix sidebar search links (sf patch 1574467)
+- nicer "permission required" messages (sf patch 1558183)
+- fix unstable ordering of detectors (sf bug 1585378)
+
+
+2006-10-07 1.2.1
+Fixed:
+- E-mail subject line prefix delimiter configuration was being ignored.
+- Password confirm field in user editing.
+
+
+2006-10-04 1.2.0
+Feature:
+- supports Python 2.5, including the sqlite3 module
+- full timezone support (sf patch 1465296)
+- handle connection loss when responding to web requests
+- match incoming mail In-Reply-To against existing messages when no issue
+  id is specified in the Subject
+- added StringHTMLProperty wrapped() method to wrap long lines in issue
+  display
+- include the popcal in Date field editing and search fields by default
+- @required in forms may now specify properties of linked items (sf patch
+  1507093)
+- update for latest version of pysqlite (sf bug 1487098; patch 1534227)
+- update for latest version of psycopg2 (sf patch 1429391)
+- new "exporttables" command in roundup-admin (sf bug 1533791)
+- roundup-admin "export" may specify classes to exclude (sf bug 1533791)
+- sorting and grouping by multiple properties is now supported by the
+  backends *and* the classic template.
+- sorting, grouping, and searching by transitive properties (e.g.,
+  messages.author.supervisor) is now supported in all backends
+- added filter_sql to SQL backends which takes an arbitrary SQL statement
+  and returns a list of item ids
+
+
+Fixed:
+- Verbose option for import and export (sf bug 1505645)
+- -c option for roundup-mailgw won't accept parameter (sf bug 1505649)
+- '?' in rfc2822-encoded header isn't quoted (sf bug 1505663)
+- fix error message in form parser
+- updated ZRoundup for Zope 2.9 (sf patch 1511734)
+- fix timelog example in customisation doc to mention permissions
+- nicer listing of Superseder links (sf non-patch 1497767)
+- include roundup-server.ini.example (sf bug 1493859)
+- dumb bug in cgi templating utils (sf bug 1490176)
+- handle unicode in query names (sf bug 1495702)
+- fix error during mailgw bouncing message (sf bug 1413501)
+- hyperdb handling of empty raw values for Multilink and Password (sf bug
+  1507814)
+- don't int() ids (sf bug 1512939)
+- fix importing into anydbm backend (sf bug 1512939)
+- fix help message for roundup-admin install (sf bug 1494990)
+- removed traceback with OTK is used multiple times (sf bug 1240539)
+- metakit backend was indexing FileClass content even when asked not to
+- anydbm backend will finally sort numerically by ID
+- problem with string sorting in anydbm backend fixed: If a string was
+  fully numeric it was sorted as a number
+- Multilink-sorting now sorts by orderprop not by ID and works for all
+  backends
+- Bug with name-collisions in sorted classes when sorting by Link
+  properties in metakit backend fixed
+- Postgres backend allows transaction collisions to be ignored when
+  committing cleanup in the sessions database
+- translate titles of "show all" and "unassigned" issue lists
+  in classic template (sf patch 1424576)
+- "as" is a keyword in Python 2.6
+- "from __future__" statments need to be first line of file in Python 2.6
+- better conflict retry in postgresql backend (sf bug 1552809)
+- fix time log example (sf bug 1554630)
+
+
+2006-04-27 1.1.2
+Feature:
+- server-ctl script uses server configuration file (sf bug 1443805)
+- mail user interface translated (sf patch 1462491)
+
+Fixed:
+- progress display in roundup-admin reindex
+- bug in menu() permission filter (sf bug 1444440)
+- indexing may be turned off for FileClass "content" now
+  ("content" and "type" properties are now automatically included in the
+  FileClass schema where previously the "content" property was faked and
+  "type" was optional)
+- verbose output during import is optional now (sf bug 1475624)
+- escape *all* uses of "schema" in mysql backend (sf bug 1472120)
+- responses to user rego email (sf bug 1470254)
+- dangling connections in session handling (sf bug 1463359)
+- reduced frequency of session timestamp update
+- classhelp popup pagination forgot about "type" (sf bug 1465836)
+- umask is now configurable (with the same 0002 default)
+- sorting of entries in classhelp popup (sf bug 1449000)
+- allow single digit seconds in date spec (sf bug 1447141)
+- prevent generation of new single-digit seconds dates (sf bug 1429390)
+- implement close() on all indexers (sf bug 1242477)
+
+
+2006-03-03 1.1.1
+Fixed:
+- failure with browsers not sending "Accept-Language" header
+  (sf bugs 1429646 and 1435335)
+- translate class name in "required property not supplied" error message
+  (sf bug 1429669)
+- error in link property lookups with numeric-alike key values (sf bug 1424550)
+- ignore UTF-8 BOM in .po files
+- add permission filter to menu() implementations (sf bug 1431188)
+- lithuanian translation updated by Nerijus Baliunas (sf patch 1411175)
+- incompatibility with python2.3 in the mailer module (sf bug 1432602)
+- typo in SMTP TLS option name: "MAIL_TLS_CERFILE" (sf bug 1435452)
+- email obfuscation code in html templating is more robust
+- blank-title subject line handling (sf bug 1442121)
+- "All users may only view and edit issues, files and messages they
+  create" example in docs (sf bug 1439086)
+- saving of queries (sf bug 1436169)
+- "Adding a new constrained field to the classic schema" example in docs
+  (sf bug 1433118)
+- security check in mailgw (sf bug 1442145)
+- "clear this message" (sf bug 1429367)
+- escape all uses of "schema" in mysql backend (sf bug 1397569)
+- date spec wasn't allowing week intervals
+
+
+2006-02-10 1.1.0
+Feature:
+- trackers may configure custom stop-words for the full-text indexer
+- login may now be for a single session (and this is the default)
+- trackers may hide exceptions from web users (they will be mailed to the
+  tracker admin) (hiding is the default)
+- include "clear this message" link in the "ok" message bar
+
+Fixed:
+- fixes in scripts/import_sf.py
+- fix some unicode bugs in roundup-admin import
+- Xapian indexer wasn't actually being used and its reindexing of existing
+  data was busted to boot
+- roundup-admin import wasn't indexing message content
+- allow dispname to be passed to renderWith (sf bug 1424587)
+- rename dispname to @dispname to avoid name clashes in the future
+- fixed schema migration problem when Class keys were removed
+
+
+2006-02-03 1.0.1
+Feature:
+- scripts/import_sf.py will import a tracker from Sourceforge.NET
+- added hasRole() to HTMLUser
+
+Fixed:
+- SQL generation for sort/group by separate Link properties (sf bug
+  1417565)
+- fix timezone offsetting in email Date: header
+- fix security check for hasPermission('Permission', None)
+
+
+2006-01-27 1.0
+Feature:
+- Lithuanian translation by Aiste Kesminaite
+- Web User Interface language selection by form variable @language,
+  browser cookie or HTTP header Accept-Language (sf patch 1360321)
+- initial values for configuration options may be passed on
+  'roundup-admin install' command line (based on sf patch 1237110)
+- favicon.ico image may be changed with server config option (sf patch 1355661)
+- Password objects initialized from plaintext remember plaintext value
+  (sf rfe 1379447)
+- Roundup installation document includes configuration example
+  for Exim Internet Mailer (sf bug 1393860)
+- enable registration confirmation by web only (sf bug 1381675)
+- allow preselection of values in templating menu()s (sf patch 1396085)
+- display the query name in the header (sf feature 1298535 / patch 1349387)
+- classhelp works with Link properties now (sf bug 1410290)
+- added setorderprop() and setlabelprop() to Class (sf features 1379534,
+  1379490)
+- CSV encoding support (sf bug 1240848)
+- fields rendered with StructuredText are hyperlinked by default
+- additional attributes for input element may be passed to the 'field'
+  method of a property wrapper
+- added "copy_url" method to generate a URL for copying an item
+
+Fixed:
+- MySQL now creates String columns using the TEXT column type
+- password.crypt won't work with md5 passwords (sf bug 1372253)
+- use quoted printable encoding for nosy attachments that have MIME
+  type 'text/plain' but contain 8-bit characters (sf bug 1381559)
+- login name and email address fields in the classic template
+  are highlighted as required fields (sf bug 1392364)
+- french translation updated by Patrick Decat (sf patch 1397059)
+- HTTP authorization takes precedence over session cookie (sf bug 1396134)
+- enforce correct encoding of PostgreSQL backend (sf bug 1374235)
+- grouping/sorting on link to same class fixed (sf bug 1404930)
+- all backends implement the retired check in getnodeids (sf bug 1290560)
+- fix detection of "missing" existing values in CGI form parser (sf bug
+  1414149)
+- ZRoundup works again (sf bug 1263842)
+- default user template does not display password fields and submit button
+  when editing is not allowed
+- fix StructuredText import in cgi.templating
+- have "System Messages" be marked as such again (sf bug 1281907)
+- enable editing of public queries (sf bug 966144)
+
+
+2005-10-07 0.9.0b1
+Feature:
+- added "imapServer.py" script (sf patch 934567)
+- added date selection popup windows (thanks Marcus Priesch)
+- added Xapian indexer; replaces standard indexers if Xapian is available
+- mailgw subject parsing has configurable levels of strictness
+- nosy messages may be sent individually to all recipients
+- remember where we came from when logging in (sf patch 1312889)
+
+
+2006-??-?? 0.8.6
+Fixed:
+- french translation updated by Patrick Decat (sf patch 1397059)
+- tighten up Date parsing to not allow 'M/D/YY' (or 'D/M/YY) (sf bug
+  1290550)
+- handle "schema" being reserved word in MySQL 5+ (sf bug 1397569)
+- fixed documentation of filter() in the case of multiple values in a
+  String search (sf bug 1373396)
+- fix comma-separated ID filter spec in web requests (sf bug 1396278)
+- fix Date: header generation to be LOCALE-agnostic (sf bug 1352624)
+- fix admin doc description of roundup-server config file
+- fix redirect after instant registration (sf bug 1381676)
+- fix permission checks in cgi interface (sf bug 1289557)
+- fix permission check on RetireAction (sf bug 1407342)
+- timezone now applied to date for pretty-format (sf bug 1406861)
+- fix mangling of "_" in mail Subject class name (sf bug 1413852)
+- catch bad classname in URL (related to sf bug 1240541)
+- clean up digested_file_types (sf bug 1268303)
+- fix permission checks in mailgw (sf bug 1263655)
+- fix encoding of subject in generated error message (sf bug 1414465)
+
+
+2005-10-07 0.8.5
+Feature:
+- Argentinian Spanish translation by Ramiro Morales
+
+Fixed:
+- Display of Multilinks where linked Class labelprop values are None
+- Fix references to the old * Registration Permissions
+- Fix missing merge of fix to sf bug 1177057
+- Fix RDBMS indexer indexing UTF-8 words that encode to > 30 chars
+- Handle invalidly-specified charsets in incoming email
+
+
+2005-07-18 0.8.4
+Fixed:
+- extra CRs in CSV export files on Windows platform (sf bug 1195742)
+- activity RDBMS columns were being reported in changes
+- fix name collision in roundup.cgi script (sf bug 1203795)
+- fix handling of invalid interval input
+- search locale files relative ro roundup installation path (sf bug 1219689)
+- use translation for boolean property rendering (sf bug 1225152)
+- enabled disabling of REMOTE_USER for when it's not a valid username (sf
+  bug 1190187)
+- fix invocation of hasPermission from templating code (sf bug 1224172)
+- have 'roundup-admin security' display property restrictions (sf bug
+  1222135)
+- fixed templating menu() sort_on handling (sf bug 1221936)
+- allow specification of pagesize, sorting and filtering in "classhelp"
+  popups (sf bug 1211800)
+- handle dropped properies in rdbms/metakit journal export (sf bug 1203569)
+- handle missing Subject lines better (sf bug 1198729)
+- sort/group by missing values correctly (sf bugs 1198623, 1176897)
+- discard, don't bounce messages to the mailgw when the messages's sender
+  is invalid (ie. when we try to bounce, we get a 550 "unknown user
+  account" response from the SMTP server) (sf bug 1190906)
+- removed debugging code from cgi/actions.py
+- refactored hyperdb.rawToHyperdb, allowing a number of improvements
+  (thanks Ralf Schlatterbeck)
+- don't try to set a timeout for IMAPS (thanks Paul Jimenez)
+- present Reject exception messages to web users (sf bug 1237685)
+
+
+2005-05-02 0.8.3
+Feature:
+- chinese translation by limodou
+
+Fixed:
+- fix reference to The Zope Book in Roundup FAQ
+- disabled file logging in Roundup test suite (sf bug 1155649)
+- return original string if message issue xref isn't valid
+- fix nosyreaction.py to stop it setting the nosy list unnecessarily
+  (see doc/upgrading.txt for how to fix in your trackers)
+- after logout, always display tracker home page
+- web forms don't create new items if no item properties are set from UI
+- item creation failed if multilink fields had invalid entries (sf bug
+  1177602)
+- fix bdist_rpm (sf bug 1164328)
+- fix checking of "Email Access" for Anonymous email registration (sf bug
+  1177057)
+- disable "Email Access" for Anonymous by default to stop spam regsitering
+  users on public trackers
+- send errors in the web interface to a logfile by default. Use the
+  "debug" multiprocess mode (roundup-server) or the DEBUG_TO_CLIENT var
+  (roundup.cgi) to have the errors appear in your browser
+- fix setgid typo (sf bug 1171346)
+- fix faulty find_template filename facility (sf bug 1163629)
+- fix roundup-admin "export" so it creates the target dir if needed
+- "fix" roundup-admin "import" to not use "universal newline support" since
+  the csv module appears to have its own ideas about such things (sf bug
+  1163890)
+- fix installation docs referring to old-style configuration variables
+- fix roundup-admin "find" for searching Multilinks (sf bug 1189465)
+
+
+2005-03-03 0.8.2
+Feature:
+- roundup-server automatically redirects from trackers list
+  to the tracker page if there is only one tracker
+
+Fixed:
+- added content to ZRoundup refresh.txt file (sf bug 1147622)
+- fix invalid reference to csv.colon_separated
+- correct URL to What's New in setup.py meta-data
+- change AUTOCOMMIT=OFF to AUTOCOMMIT=0 for MySQL (sf bug 1143707)
+- compile message objects in 'setup.py build'
+- use backend datatype for journal timestamps in RDBMSes
+- fixes to the "Using an external password validation source"
+  customisation example (sf bugs 1153640 and 1155108)
+
+
+2005-02-17 0.8.1
+Fixed:
+- replaced MutlilinkIterator with multilinkGenerator (thanks Bob Ippolito)
+- fixed broken csv import in roundup.admin module
+- fixed braino in HTMLClass.filter() (sf bug 1124213)
+- change ZTUtils Iterator to always iter() its sequence argument
+
+
+2005-01-16 0.8.0
+Fixed:
+- fix roundup-server log and PID file paths to be absolute
+- fix initialisation of roundup-server in daemon mode so initialisation
+  errors are visible
+- fix: 'Logout' link was enabled on issue index page only
+- have Permissions only test the check function if itemid is suppled
+- modify cgi templating system to check item-level permissions in listings
+- enable batching in message and file listings
+- more documentation of security mechanisms (incl. sf patches 1117932,
+  1117860)
+- better unit tests for security mechanisms
+- code cleanup (sf patch 1115329 and additional)
+- issue search page allows setting of no sorting / grouping (sf bug
+  1119475)
+- better edit conflict handling (sf bug 1118790)
+- consistent text searching behaviour (AND everywhere) (sf bug 1101036)
+- fix handling of invalid date input (sf bug 1102165)
+- retain Boolean selections in edit error handling (sf bug 1101492)
+- fix initialisation of logging module from config file (sf bug 1108577)
+- removed rlog module (py 2.3 is minimum version now)
+- fixed class "help" listing paging (sf bug 1106329)
+- nicer error looking up values of None (response to sf bug 1108697)
+- fallback for (list) popups if javascript disabled (sf patch 1101626)
+
+
+2005-01-13 0.8.0b2
+Fixed:
+- note about how to run roundup demo in Windows (sf bug 1082090)
+- fix API for templating utils extensions - remove "utils" arg (sf bug 1081981)
+- back_sqlite.py is missing "import time" (sf bug 1081959)
+- fix (list) popup (sf bug 1083570)
+- fix some security assertions (sf bug 1085481)
+- 'roundup-server -S' always writes [trackers] section heading (sf bug 1088878)
+- fix port number as int in mysql connection info (sf bug 1082530)
+- fix setup.py to work with <Python2.3 (sf bug 1082801)
+- fix permissions checks in cgi templating (sf bug 1082755)
+- fix "Users may only edit their issues" example in docs
+- handle ~/.my.cnf files for MySQL defaults (sf bug 1096031)
+
+
+2004-12-08 0.8.0b1
+Feature:
+- added MD5 scheme for password hiding
+- added support for HTTP charset selection
+- implement __nonzero__ for HTMLProperty
+- remove "manual" locking of sqlite database
+- create a new RDBMS cursor after committing
+- added basic logging, and configuration of it and python's logging module
+- roundup-mailgw now logs fatal exceptions rather than mailing them to admin
+- add a default argument to the DateHTMLProperty.field method, and an
+  optional Interval (string or object) to the DateHTMLProperty.now (patch
+  from Vickenty Fesunov)
+- hide "(list)" popup links when issue is only viewable
+- roundup-server options -g and -u accept both ids and names (sf bug 983769)
+- roundup-server now has a configuration file (-C option)
+- added mod_python interface (see installation.txt)
+- reorganised tracker configuration, using ConfigParser config, cleaned-up
+  schema definition and implementing easier extension writing (sf rfe 661301)
+- Permissions may now be defined on a per-property basis
+- added "Create" Permission. Replaces the "Web"- and "Email Registration"
+  Permissions.
+- added option to turn off registration confirmation via email
+  ("instant_registration" in config) (sf rfe 922209)
+- roundup-admin reindex command may now work on single items or classes
+- multiple selection Link/Multilink search field (thanks Marlon van den Berg)
+- relaxed hyperlinking in web interface (accept "issue123" or "Issue 123")
+- record journaltag lookup ("fixes" sf bug 998140)
+- allow listing popup to be used in query forms (thanks Marcus Priesch)
+- roundup windows service may be installed with command line options
+  recognized by roundup-server (but not tracker specification arguments).
+  Use this to specify server configuration file for the service.
+- added experimental multi-thread server
+- don't try to import all backends in backends.__init__ unless we *want* to
+- unless in debug mode, keep a single persistent connection through a
+  single web or mailgw request.
+- HTTP Basic Authentication (sf patch 1067690)
+- extended security.addPermissionToRole to allow skipping the separate
+  getPermission call
+
+Fixed:
+- postgres backend open doesn't hide corruption in schema (sf bug 956375)
+- *dbm-style backends nuke() method now clear id counters
+- removed safeget() from the API (sf bug 994750)
+- demo tracker is always set up on localhost (sf bug 1049101)
+- relaxed URL designator syntax to allow issue[0]*1 (sf bug 1054523)
+
+
+2005-05-02 0.7.12
+Fixed:
+- handle capitalisation of class names in text hyperlinking (sf bug
+  1101043)
+- quote full-text search text in URL generation
+- fixed problem migrating mysql databases
+- fix search_checkboxes macro (sf patch 1113828)
+- fix bug in date editing in Metakit
+- allow suppression of search_text in indexargs_form (sf bug 1101548)
+- hack to fix some anydbm export problems (sf bug 1081454)
+- ignore AutoReply messages (sf patch 1085051)
+- fix ZRoundup syntax error (sf bug 1122335)
+- fix RDBMS clear() so it resets all class itemid counters
+
+
+2005-01-06 0.7.11
+Fixed:
+- index args URL generation broken in .10 (sf bug 1096027)
+- handle NotModified for non-static files (sf patch 1095790)
+- fix permission lookup in query editing
+
+
+2005-01-04 0.7.10
+Fixed:
+- reset ID counters if the database is cleared (thanks William)
+- apply IE caching "fix" to automatically serve up all pages expired
+- fix typo (sf patch 1076629)
+- fix hyperlinking of items (sf bug 1080251)
+- fix roundup-admin find command handling of Multilinks
+- fix some security assertions (sf bug 1085481)
+- don't set the title to nothing from incoming mail (thanks Bruce Guenter)
+- fix py2.4 strftime() API change bug (sf bug 1087746)
+- fix indexer searching with no valid words (sf bug 1086787)
+- updated searching / indexing docs
+- fix "(list)" popup when list is one item long (sf bug 1064716)
+- have RDBMS full-text indexer do AND searching (sf bug 1055435)
+- handle spaces in String index params in batching (sf bug 1054224)
+
+
+2004-10-26 0.7.9
+Feature:
+- DateHTMLProperty.field() accepts format string (thanks Wil Cooley)
+
+Fixed:
+- popup listing uses filter args (thanks Marlon van den Berg)
+- fixed editing of message contents
+- loosened the detection of issue cross-references in messages
+- open CSV files in "universal newline" mode
+- s/Modifed/Modified (thanks donfu)
+- applied patch fixing some form handling issues in ZRoundup (sf bug 995565)
+- enforce View Permission when serving file content (sf bug 1050470)
+- don't index common words (sf bug 1046612)
+- don't wrap query.item.html in a <span> (thanks Roch'e Compaan)
+- TAL expressions like 'request/show/whatever' return True
+  if the request does not contain explicit @columns list
+- NumberHTMLProperty should return '' not "None" if not set (thanks
+  William)
+- ensure multilink ordering in RDBMS backends (thanks Marcus Priesch, sf
+  bug 950963)
+- always honor indexme property on Strings (sf patch 1063711)
+- make hyperdb value parsing errors readable in mailgw errors
+- make anydbm journal export handle removed properties
+- allow use of XML templates again
+
+
+2004-10-15 0.7.8
+Fixed:
+- Clean out sessions / otks tables when migrating
+
+
+2004-10-11 0.7.7
+Fixed:
+- ZRoundup's search interface works now (sf bug 994957)
+- fixed history display when "ascending"
+- removed references to py2.3+ boolean values (sf bug 995682)
+- fix static file path normalisation in security check (thanks David Linke)
+- less specific messages for login failures (thanks Chris Withers)
+- Reject raised against email messages should result in email rejection, not
+  discarding of the message
+- mailgw can override the MAIL_DEFAULT_CLASS
+- handle Py2.3+ datetime objects as Date specs (sf bug 971300)
+- use row locking in MySQL newid() (sf bug 1034211)
+- add sanity check for sort and group on same property (sf bug 1033477)
+- extend OTK and session table value cols to TEXT (sf bug 1031271)
+- fix lookup of REMOTE_USER (sf bug 1002923)
+- new Interval props weren't created properly in rdbms
+- date.Interval() now accepts an Interval as a spec (sf bug 1041266)
+- handle deleted properties in RDBMS history
+- apply timezone in correct direction in user input (sf bug 1013097)
+- more efficient find() in RDBMS (sf bug 1012781)
+
+
+2004-07-21 0.7.6
+Fixed:
+- rdbms backend full text search failure after import (sf bug 980314)
+- rdbms backends not filtering correctly on link=None
+- fix anydbm journal import (sf bug 983166)
+- handle postgresql bug in SQL generation (sf bug 984591)
+- fix dates-from-Dates (sf bug 984604)
+- fix messageid generated when msgid is None for send_message (sf bug 987933)
+- make user permissions check more sane (fix search page for anonymous)
+- fixed RDBMS filter() for no matches from full-text search (sf bug 990778)
+- fixed DateHTMLProperty for invalid date entry (sf bug 986538)
+- fixed external password source example (sf bug 986601)
+- document the STATIC_FILES config var
+- implement the HTTP HEAD command (sf bug 992544)
+- fix journal export of files to remove content from CSV files
+- API clarification. Previously, the anydbm/bsddb/metakit filter() methods
+  had required exact matches to Multilink argument lists. The RDBMS
+  backends treated Multilink matches like all other data types - matching
+  any of the Multilink argument list is good enough. The latter behaviour
+  is implemented across the board now.
+- fix metakit handling of filter on Link==None
+
+
+2004-06-24 0.7.5
+Fixed:
+- force lookup of journal props in anydbm filtering
+- fixed lookup of "missing" Link values for new props in anydbm backend
+- allow list of values for id, Number and Boolean filtering in anydbm
+  backend
+- fixed some more mysql 0.6->0.7 upgrade bugs (sf bug 950410)
+- fixed Boolean values in postgresql (sf bugs 972546 and 972600)
+- fixed -g arg to roundup-server (sf bug 973946)
+- better roundup-server usage string (sf bug 973352)
+- include "context" always, as documented (sf bug 965447)
+- fixed REMOTE_USER (external HTTP Basic auth) (sf bug 977309)
+- fixed roundup-admin "find" to use better value parsing
+- fixed RDBMS Class.find() to handle None value in multiple find
+- export now stores file "content" in separate files in export directory
+
+
+2004-06-10 0.7.4
+Fixed:
+- re-acquire the OTK manager when we re-open the database
+- mailgw handler can close the database on us
+- fixed grouping by a NULL Link value
+- fixed anydbm import/export (sf bugs 965216, 964457, 964450)
+- fix python 2.3.3 strftime deprecation warning (sf patch 968398)
+- fix some column datatypes in postgresql and mysql (sf bugs 962611,
+  959177 and 964231)
+- fixed RDBMS journal packing (sf bug 959177)
+- fixed filtering by floats in anydbm (sf bug 963584)
+
+
+2004-05-28 0.7.3
+Fixed:
+- add "checked" to truth values for Boolean input
+- fixed import in metakit backend
+- fix SearchAction use of Class.filter(), and clarify API docs for same
+- ensure static files may only be served out of the tracker's "static
+  files" directory
+
+
+2004-05-17 0.7.2
+Fixed:
+- anydbm sorting with None values (sf bug 952853)
+- roundup-server -g option not recognised (sf bug 952310)
+- HTML templating isset() inverted (sf bug 951779)
+- otks manager missing (sf bug 952931)
+- mention DEFAULT_TIMEZONE requirement in upgrading doc (sf bug 952932)
+- fix DateHTMLProperty so local() can override user timezone (sf bug
+  953678)
+- fix anydbm sort/group direction handling, and make RDBMS sort/group use
+  Link'ed "order" properties (sf bug 953148)
+- fix Interval editing (sf bug 954891)
+
+
+2004-05-10 0.7.1
+Fixed:
+- several temp files made it into the source distribution (sf bug 949243)
+- typo in roundup/instance.py
+- missing CRLF var in rfc822.py (sf patch 949471)
+- fix user creation page
+- have roundup server pass though the cause of a "403 Forbidden" response
+- fix schema mutation in sqlite backends (thanks Tamer Fahmy)
+- make popup Javascript IE 5.0 friendly (thanks Marlon van den Berg)
+- fix RDBMS import (thanks Tamer Fahmy)
+
+
+2004-05-06 0.7.0
+Fixed:
+- sqlite migration drops some journal information (thanks David Linke)
+- user editing Role entry help text always appears
+- disable forking server when os.fork() not available (sf bug 938586)
+- removed Boolean from source to make py <2.3 happy (sf bug 938790)
+- fix nested scope bug in rdbms multilink sorting
+- re-seed the random number generator for each request
+- postgresql backend altered to not use popen (thanks Georges Martin)
+- fixed journal marshalling in RDBMS backends (sf bug 943627)
+- fixed handling of key values starting with numbers (sf bug 941363)
+- fixed journal "param" column size in RDBMS backends
+- fixed static file serving
+- fixed rego from email address (sf bug 947414)
+- fixed sqlite journal ordering issue
+- fixed mysql date range filtering
+
+
+2004-04-18 0.7.0b3
+Feature:
+- added a favicon
+- added url_quote and html_quote methods to the utils object
+- added isset method to HTMLProperty
+- database export now exports full journals too
+- tracker name at end of page title (sf rfe 926840)
+- roundup-server now uses the ForkingMixin
+- added another sample detector "creator_resolution"
+- added search_checkboxes as an option for the search form
+- added IMAP support to mail gateway (sf rfe 934000)
+- check MANIFEST against the files actually unpacked
+- roundupdb nosymessage() takes an optional bcc list
+
+Fixed:
+- mysql and postgresql schema mutation now handle added Multilinks
+- web CSV export was busted (as was any action returning a result)
+- MultiMapping deviated from the Zope C implementation in a number of
+  places (thanks Toby Sargeant)
+- MySQL and Postgresql use BOOL/BOOLEAN for Boolean types
+- OTK generation was busted (thanks Stuart D. Gathman)
+- export and import now include journals (incompatible with export < 0.7)
+- added "download_url" method to generate a correctly quoted URL for file
+  download links (sf bug 927745)
+- all uses of TRACKER_WEB now ensure it ends with a '/'
+- roundup-admin install checks for existing tracker in target home
+- grouping (and sorting) by multilink in RDBMS backends (sf bug 655702)
+- roundup scripts may now be asked for their version (sf rfe 798657)
+- sqlite backend had stopped using the global lock
+- better check for anonymous viewing of user items (sf bug 933510)
+- stop Interval from displaying an empty string (sf bug 934022)
+- fixed storage of some datatypes in some RDBMS backends
+
+
+2004-03-27 0.7.0b2
+Feature:
+- added CSV export to index pages
+- added emailauditor.py which works around a bug in IE. See
+  "detectors/emailauditor.py" for more info.
+- added dispatcher functionality - see upgrading.txt for more info
+- added Reject exception which may be raised by auditors. This is trapped
+  by mailgw and may be used to veto creation of file attachments or
+  messages. (sf bug 700265)
+- queries on a per-user basis, and public queries (sf "bug" 891798 :)
+- added DEFAULT_TIMEZONE (sf rfe 895139)
+- added HTML page template to the templating context as "template"
+- added is_retired to HTMLItems in templating
+
+Fixed:
+- Boolean, Date and Link HTML templating was broken
+- fix reporting of test inclusion in postgresql test
+- EditAction was confused about who "self" was
+- edit collision detection was broken for index-page edits
+- sqlite backend wasn't migrating multilink tables correctly
+- use SimpleCookie instead of Cookie (is an alias for the evil SmartCookie)
+- handle older sessions in session dbm
+- make presetunread more resilient to status Class changes
+- HTMLDatabase classes() was broken
+
+
+2004-03-24 0.7.0b1
+Major new features:
+- added postgresql backend (originally from sf patch 761740, many changes
+  since)
+- added new "actor" automatic property (indicates user who cause the last
+  "activity")
+- RDBMS backends implement their session and one-time-key stores and
+  full-text indexers; thus they are now performing their own locking
+  internally
+- all RDBMS backends now have indexes on several columns
+- support confirming registration by replying to the email (sf bug 763668)
+- all HTML templating methods now automatically check for permissions
+  (either view or edit as appropriate), greatly simplifying templates
+
+Other new features:
+- simple support for collision detection (sf rfe 648763)
+- support setgid and running on port < 1024 (sf patch 777528)
+- using Zope3's test runner now, allowing GC checks, nicer controls and
+  coverage analysis
+- change nosymessage and send_message to accept msgid=None (RFE #707235)
+- handle Resent-From: headers (sf bug 841151)
+- always sort MultilinkHTMLProperty in the correct order, usually
+  alphabetically (sf feature 790512)
+- added script for copying user(s) ("scripts/copy-user.py") from tracker
+  to tracker (sf patch 828963)
+- ignore incoming email with "Precedence: bulk" (sf patch 843489)
+- use HTTP 'Content-Length' header (modified sf patch 844577)
+- HTML generated is now HTML4 (or optionally XHTML) compliant (sf feature
+  814314 and sf patch 834620)
+- default stylesheet turns off sidebar when printing
+- allow direct supply of filter() arguments in templating (thanks Godefroid
+  Chapelle)
+- improved body_title slot in HTML templating (sf patch 873502)
+- HTMLLinkProperty field() method renders as a field now (thanks darryl)
+- cgi Action handlers may now return the actual content to be sent back to
+  the user (rather than using some template)
+- date.Date now handles fractional seconds
+
+Fixed:
+- mysql documentation fixed to note requirement of 4.0+ and InnoDB
+- added testing of schema mutation, fixed rdbms backends handling of a
+  couple of cases
+- HTML 4.01 validation on the 'classic' backend
+- messages to the mailgw can be about classes other than issues now.
+- signature matching is more precise (sf bug 827775).
+- anonymous user can no longer edit or view itself (sf bug 828901).
+- corrected typo in installation.html (sf bug 822967).
+- clarified listTemplates docstring.
+- print a nicer error message when the address is already in use
+  (sf bug 798659).
+- remove empty lines before sending strings off to the csv parser
+  (sf bug 821364).
+- centralised conversion of user-input data to hyperdb values (sf bug
+  802405, sf bug 817217, sf rfe 816994)
+- recalculate SHA on template files when installed tracker used as
+  template (sf bug 827510)
+- fixed ZRoundup (sf bug 624380)
+- the mail gateway now searches recursively for the text/plain and the
+  attachments of a message (sf bug 841241).
+- fixed display of feedback messages in some situations (sf bug 739545)
+- fixed ability to edit "content" property (sf bug 914062)
+
+Cleanup:
+- replace curuserid attribute on Database with the extended getuid() method
+- extract a new 'mailer' module for sending mail
+- extract a '_send_mail' method for testing mail sending
+- simplify backend importing
+- use roundup_server in demo.py
+- implement newItemAction using editItemAction
+- use FormError in client.py, moving the handling up to inner_main()
+- implemented semantic comparison of Message objects in test_mailgw
+- tidied up forms in default stylesheet
+- force textareas to use monospace fonts, lessening surprise on the user
+- moved out parts of client.py to new modules:
+  * actions.py - the xxxAction and xxxPermission functions refactored into
+    Action classes
+  * exceptions.py - all exceptions
+  * form_parser.py - parsePropsFromForm & extractFormList in a FormParser
+    class
+
+
+2004-05-17 0.6.10
+Fixed:
+- mysql backend wasn't locking tracker
+- ensure static files may only be served out of the tracker's "static
+  files" directory
+
+
+2004-04-18 0.6.9
+Fixed:
+- paging in classhelp popup was broken
+- socket timeout error logging can fail
+- hyperlink designators in message display (sf bug 931828)
+- don't match retired items in RDBMS stringFind
+
+
+2004-04-01 0.6.8
+Fixed:
+- existing trackers (ie. live ones) may be used as templates for new
+  trackers - the TEMPLATE-INFO.txt name entry has the tracker's dir name
+  appended (so the demo tracker's template name is "classic-demo")
+- handle bad multilink input at item creation time better (sf bug 917834)
+- make sure email signature starts on a newline (sf bug 919759)
+- add line to rego email to help URL detection (sf bug 906247)
+- look harder for text/plain in email
+- fixed fallback excel writer in rcsv so it has a delimiter
+- fixed setup.py's use of listTemplates (!)
+- make rdbms serialise() less trusting
+- handle Boolean values in history HTML display
+
+
+2004-03-01 0.6.7
+Fixed:
+- be more backward-compatible when asking for EMAIL_CHARSET
+- made error on create consistent with edit when user enters invalid data
+  for Multilink and Link form fields (sf bug 904072)
+- made errors from bad input in the quick "Show issue:" form more
+  user-friendly (sf bug 904064)
+- don't add a query to a user's list if it's already there
+- nicer invalid property error in HTML templating
+- use EMAIL_CHARSET for message body too (still sf bug 900046)
+
+
+2004-02-25 0.6.6
+Fixed:
+- don't insert spaces into designators, it just confuses users (sf bug
+  898087)
+- Eudora can't handle utf-8 headers. We love Eudora. (sf bug 900046)
+- fixed bug in args to new DateHTMLProperty in the local() method (sf bug
+  901444)
+- fixed registration (sf bug 903283)
+- also changed rego to not use a 302 during confirmation, as this seems to
+  confuse some email clients or browsers.
+
+
+2004-02-16 0.6.5
+Fixed:
+- mailgw handling of subject-line errors
+- allow serving of FileClass file content when the class isn't called
+  "file" (eg. messages and other FileClasses)
+- allowed negative ids (ie. new item markers) in HTMLClass.getItem,
+  allowing "db/file_with_status/-1/status/menu" to generate a useful
+  widget
+- fixed content-type when templates are serving up xml (thanks Godefroid
+  Chapelle)
+- fixed IE double-submit when it shouldn't (sf bug 842254)
+- fixed check for JS pop()/push() to make more general (sf bug 877504)
+- fix re-enabling queries (sf bug 861940)
+- use supplied content-type on file uploads before trying filename)
+- fixed roundup-reminder script to use default schema (thanks Klamer Schutte)
+- fixed edit action / parsePropsFromForm to handle index-page edits better
+- safer logging from HTTP server (sf bug 896917)
+
+
+2003-12-17 0.6.4
+Fixed:
+- fixed date arithmetic to not allow day-of-month == 0 (sf bug 853306)
+- fixed date arithmetic to limit hours-per-day to 24, not 60
+- hard-coded python2.3-ism (socket.timeout) fixed
+- fixed activity displaying as future because of Date arithmetic fix in 0.6.3
+  (sf bug 842027).
+- fix Windows service mode for roundup-server (sf bug 819890)
+- fixed #white in cgitb (thanks Henrik Levkowetz)
+
+
+2003-11-14 0.6.3
+Fixed:
+- fixed detectors fix incorrectly fixed in bugfix release 0.6.2
+- added note to upgrading doc for detectors fix in 0.6.2
+- added script to help migrating queries from pre-0.6 trackers
+- fixed "documentation" of getnodeids in roundup.hyperdb
+- added flush() to DevNull (sf bug 835365)
+- fixed javascript for help window for only one checkbox case
+- date arithmetic was utterly broken, and has been for a long time.
+  Date +/- Interval now works, and Date - Date also works (produces
+  an Interval.
+- handle socket timeout exception (thanks Marcus Priesch)
+- fixed retirement of items in rdbms imports (sf bug 841355)
+- fixed bug in looking up journal of newly-created items in *dbm backends
+
+
+2003-09-29 0.6.2
+Fixed:
+- cleaned up, clarified internal caching API in *dbm backends
+- stopped pyc writing to current directory! yay! (patch 800718 with changes)
+- fixed file leak in detector initialisation (patch 800715)
+- commented out example tracker homes (patch 800720)
+- added note about hidden :template var in user.item (bug 799842)
+- fixed Apply Error that was raised, when property was deleted from class and
+  we are trying to edit an instance
+
+
+2003-08-31 0.6.1
+Fixed:
+- Add note about installing cgi-bin with a different interpreter
+- Importing wasn't setting None values explicitly when it should have been
+- Fixed import warning regarding 0xffff0000 literal, finally, really this
+  time. Checked on win2k. (sf bug 786711)
+- fix CGI editCSV action to handle metakit's integer itemids
+- apply fix for "remove" links from Klamer Schutte
+- added permission check on "remove" link while I was there..
+- applied CSV fix for python2.3 (sf bug 790363)
+- fixed form padding in LHS menu (sf bug 790502)
+- fixed upgrading docs for timezones (sf bug 790498)
+- set the content type on page templates (can have XML templates now)
+- various cosmetic fixes (thanks James Kew for being persistent :)
+- applied patch 739314 (sorry John!)
+
+
+2003-08-08 0.6.0
+- Fixed editing attributes on FileClass nodes.
+- Query editing now works correctly (sf bug 621248)
+- roundup-server now logs IP addresses by default (sf bug 778795)
+- logfile must be specified if pidfile is (sf bug 772820)
+- timelog editing via csv interface crashes (sf bug 699837)
+- sort multilinks a little better for grouping (sf bug 772935)
+- batch the (list) listings at 500 entries per page (sf bug 759906)
+- don't have RDBMS backends list retired nodes (sf bug 767319)
+- fix file downloading
+- add action attribute to issue.item form tag
+
+
+2003-07-29 0.6.0b4
+- plugged cross-site-scripting hole (thanks Jeff Epler)
+- handle deprecation of FCNTL in python2.2+ (sf bug 756756)
+- handle missing Subject: line (sf bug 755331)
+- fix New User creation (sf bug 754510)
+- fix hackish message escaping (sf bug 757128)
+- fix :required ordering problem (sf bug 740214)
+- audit some user properties for valid values (roles, address) (sf bugs
+  742968 and 739653)
+- fix HTML file detection (hence history xref linking) (sf bug 741478)
+- session database caches it's type, rather than calling whichdb each time
+  around.
+- changed rdbms_common to fix sql backends for new Boolean types under Py2.3
+
+
+2003-06-10 0.6.0b3
+Fixed:
+- cgi client was broken during b2 fixing
+
+
+2003-06-09 0.6.0b2
+Feature:
+- added the start/stop/restart/condstart/status roundup-server control
+  script
+
+Fixed:
+- handle non-existant demo dir (thanks Ollie Rutherfurd)
+- strip whitespace from Role names so "User, Admin" will work
+- fixed template searching on Windows (thanks J Vickroy)
+
+
+2003-05-09 0.6.0b1
+Removed:
+- having served its purpose as a template for other relational database
+  implementations, the gadfly backend has now been removed from the Roundup
+  distribution.
+
+Feature:
+- new instant-gratification Demo Mode
+- support setting of properties on message and file through web and
+  email interface (thanks John Rouillard)
+- allow additional control over the roundupdb email sending (explicit
+  cc addresses, different from address and different nosy list property)
+  (thanks John Rouillard)
+- applied patch for nicer history display (sf feature 638280)
+- cleaning old unused sessions only once per hour, not on every cgi
+  request. It is greatly improves web interface performance, especially
+  on trackers under high load
+- added mysql backend (see doc/mysql.txt for details)
+- switch metakit to use "compressed" multilink journal change representation
+- metakit now handles "unset" for most types (not Number and Boolean)
+- fixed bug in metakit search-by-ID
+- added ability to display localized dates in web interface. User input is
+  convered to GMT (see doc/upgrading.txt).
+- added a form to show a specific issue
+- more proper sorting/grouping on mulitilink properties. Sorting is performed
+  not only by number of links, but also by links itself. This makes usable
+  grouping e.g. by topic multilink
+- add "ago" to intervals in the past (sf bug 679232)
+- included UN*X manual pages from Bastian Kleineidam
+- implemented extension to form parsing to allow editing of multiple items
+  and creation of multiple items (but only one per class)
+- the colon ":" special form variable designator may now be any of : + @
+- trackers' templates directory can contain subdirectories with static files
+  (e.g. images). They are accessible naturally: _file/images/img.gif
+- altered Class.create() and FileClass.create() methods to make "content"
+  property available in auditors
+- can now configure CC to author only for messages creating issues (sf
+  feature 625808)
+- registration is now a two-step process, with confirmation from the email
+  address supplied in the registration form
+- added password reset feature for forgotten password / login
+- added support for last-modified and if-modified-since headers for static
+  file serving
+- added Node.get() method
+- nicer page titles (sf feature 65197)
+- relaxed CVS importing (sf feature 693277)
+- added support for searching on ranges of dates and intervals (see
+  doc/user_guide.txt in chapter "Searching Page" for details) (closes sf
+  feature 700178)
+- role names made case insensitive
+- added ability to restore retired nodes
+- more lenient date input and addition Interval input support (sf bug 677764)
+- roundup mailgw now handles apop
+- implemented ability to search for multilink properties with no value
+- Class.find() may now find unset Links (sf bug 700620)
+- more flexibility in classhelp link labelling (sf feature 608204)
+- added command-line functionality for roundup-admin (sf feature 687664)
+- added nicer popup windows for topic, nosy, etc (has add/remove buttons)
+  thanks Gus Gollings
+- HTML templating files now have a .html extension
+- Roundup templates are now distributed much more sanely, allowing for
+  3rd-party templates.
+- extended date syntax to make range searches even more useful
+- SMTP login and TLS support added (sf bug 710853 with extras ;)
+  Note: requires python 2.2+
+- added Windows Service mode for roundup-server when daemonification is
+  attempted on Windows.
+- sort HTMLClass.properties results by name (sf feature 724738)
+- nicer index navigation (sf feature 676866)
+
+Fixed:
+- applied unicode patch. All data is stored in utf-8. Incoming messages
+  converted from any encoding to utf-8, outgoing messages are encoded
+  according to rfc2822 (sf bug 568873)
+- fixed layout issues with forms in sidebar
+- fixed timelog example so it handles new issues (sf bug 678908)
+- handle missing os.fork() (sf bug 681046)
+- added warning filter for "FutureWarning: hex/oct constants > sys.maxint will
+  return positive values..." (literal 0xffff0000 in portalocker.py)
+- fixed ZPT code generating SyntaxWarning for assignment to None
+- open static files using binary mode (sf bug 693208)
+- fixed deja-vu bug 692910
+- don't display "Editing" on read-only pages (sf bug 651967)
+- re-worked detectors initialisation - woohoo, no more cross-importing!
+- fixed export/import of retired nodes (sf bug 685273)
+- remember the display template specified during edit (sf bug 701815)
+- added example HTML tempating for vacation flag (sf bug 701722)
+- finally, tables autosize columns (sf bug 609070)
+- added creation to index columns (sf bug 708247)
+- fixed missing (pre-commit) journal entries in *dbm backends (sf bug 679217)
+- URL cited in roundup email confusing dumb Email clients (sf bug 716585)
+- set title on issues even when the email body is empty (sf bug 727430)
+- under the heading of "questionable whether it's a fix or not"
+  (sf "bug" 621226 for the users of the "standards compliant" browser IE)
+
+
+2003-05-08 0.5.7
+- fixed Interval maths (sf bug 665357)
+- fixed sqlite rollback/caching bug (sf bug 689383)
+- fixed rdbms table update detection logic (sf bug 703297)
+- fixed detection of bad date specs (sf bug 691439)
+- required String properties not being flagged (thanks Ajit George)
+- only look for CSV files when importing (thanks Dan Grassi)
+- can now unset values in CSV editing (sf bug 704788)
+- fixed rdbms email address lookup (case insensitivity)
+- email file attachments added to issue files list (sf bug 711501)
+- added socket timeout to attempt to prevent stuck processes (sf bug 665487)
+- email registered users shouldn't be able to log in (sf bug 714673)
+- handle missing addresses on users (sf bug 724537)
+
+
+2003-02-27 0.5.6
+- fixed templating filter function arguments (sf bug 678911)
+- fixed multiselect in searching (sf bug 676874)
+- fixed parsing of content-disposition filenames (sf bug 675116)
+- added 'h' to roundup-server optarg list (sf bug 674070)
+- fixed doc for db.history in anydbm and rdbms_common (sf bug 679221)
+- fixed roundup-reminder (sf bug 681042)
+- fixed int assumptions about Number values (sf bug 677762)
+- clarified licensing
+- another attempt to fix cookie misbehaviour - customise cookie name using
+  tracker name
+- fixed error in indexargs_url (thanks Patrick Ohly)
+- fixed getnode (sf bug 684531)
+- fixed args to some date templating methods (sf bug 689670)
+- fixed database corruption in rdbms property mutation
+
+
+2003-01-24 0.5.5
+- fixed rdbms searching by ID (sf bug 666615)
+- fixed metakit searching by ID
+- detect corrupted index and raise semi-useful exception (sf bug 666767)
+- open server logfile unbuffered
+- revert StringHTMLProperty to not hyperlink text by default
+- fixes to CGI form handling
+- fix unlink bug in metakit backend
+- fixed hyperlinking ambiguity (sf bug 669777)
+- fixed cookie path to use TRACKER_WEB (sf bug 667020) (thanks Nathaniel Smith
+  for helping chase it down and Luke Opperman for confirming fix)
+
+
+2003-01-10 0.5.4
+- key the templates cache off full path, not filename
+- implemented whole-database locking
+- hyperlinking of special text (url, email, item designator) in messages
+- fixed time default in date.py
+- fixed error in cgi/templates.py (sf bug 652089)
+- fixed handling of missing password (sf bug 655632)
+- applied patches for handling Outlook quirks (thanks Andrey Lebedev)
+  (multipart/alternative, "fw" and content-type "name")
+- fire auditors and reactors in rdbms retire (thanks Sheila King)
+- better match for mailgw help "command" text
+- handle :add: better in cgi form parsing (sf bug 663235)
+- handle all-whitespace multilink values in forms (sf bug 663855)
+- fixed searching on date / interval fields (sf bug 658157)
+- fixed form elements names in search form to allow grouping and sorting
+  on "creation" field
+- display of saved queries is now performed correctly
+
+
+2002-12-11 0.5.3
+- added mention of how to give users multiple Roles
+- mention needed trailing "/" in TRACKER_WEB
+- fixed upgrading doc to have CGI changes in the correct order
+- fixed double-close of anydbm backend (sf bug 639030)
+- removed use of string/strop from TAL/TALInterpreter
+- handle KeyboardInterrupt nicely
+- fixed Date and Interval form value handling
+- fixed Date.local()
+- email quoted text stripping is controllable again (sf bug 650742)
+- extract attachment name from content-disposition if name is missing (sf
+  bug 637278)
+- removed FILTER_POSITION from bundled configs
+- reverse message listing in issue display (reversion of recent change)
+- bad entries for multilink editing in cgi don't traceback now (sf bug 640310)
+- detect and break email loops (sf bug 640854)
+- finished of handling of retired flag in filter() (sf bug 635260)
+- allow StringHTMLProperty in MultilinkHTMLProperty test to work
+- don't set explicit None Link properties in web create
+- fixed nasty sorting bug that was lowercasing properties
+- allow multiple :remove and :add elements per property being edited
+- added date header to emails (sf bug 651358)
+
+
+2002-11-07 0.5.2
+- added quotes around python interpreter in windows bat (sf bug 623963)
+- fixed link at end of installation doc (sf bug 623957)
+- handle "classname" URL path errors cleaner (generate a 404)
+- added CGI :remove:<propname> and :add:<propname> which specify item ids to
+  remove / add in <propname> multilink.
+- bugfix in boolean templating
+- remember the change note on bad submissions (sf bug 625989)
+- highlight required form fields (sf bug 625989)
+- force non-word boundary to match re: in subject (sf bug 626303)
+- handle sqlite bug (<2.7.2) (sf bug 630828)
+- handle missing props in anydbm stringFind
+- updated email package address formatting (deprecation)
+- copied email address quoting from email v2.4.3 so we're consistent with 2.2
+- email summary extraction now takes the first whole sentence or line -
+  whichever is longer
+- documented dependency on Active State (sf bug 623959)
+- ensured there's no zero-length files in source (sf bug 633622)
+- added ID to the search page (sf bug 631601)
+- fixed filtering by id in anydbm
+- show issue ID in the headings (sf bug 631598)
+- show entire messages by default in issues (sf bug 625995)
+- fixed journalling to save old values instead of new (sorry it took so long GM)
+- handle missing REQUEST_URI for cgi-bin users (sf bug 620163)
+
+
+2002-10-16 0.5.1
+- highlight rows in groups of three
+- metakit cleanups
+- nicer "navigation" style in index views
+- handle missing Link values in anydbm backend set() operation
+- fixed filter() with no sort/group (sf bug 618614)
+- fixed register with no session (sf bug 618611)
+- fixed log / pid file path handling in roundup-server (sf bug 617981)
+- fixed old gadfly compatibiltiy problem, for sure this time (sf bug 612873)
+- https URLs from config now recognised as valid (sf bug 619829)
+- nicer display of tracker list in roundup-server (sf bug 619769)
+- fixed some missed renaming instance -> tracker (sf bug 619769)
+- allow blank passwords again (sf bug 619714)
+- expose the tracker config as a variable for templating
+- homogenise newlines in CGI text submissions (sf bug 614072)
+- merged Zope Collector #372 fix from ZPT CVS trunk
+- fixed history to display username instead of userid
+- shipped templates didn't import all hyperdb types in dbinit.py
+- fixed bug in Interval serialisation
+- handle "unset" status in status auditor (sf bug 621250)
+- issues in 'done-cbb' are now also moved to 'chatting' on new messages
+- implemented the missing Interval.__add__
+- added ability to implement new templating utility methods
+- expose the Date.pretty method to templating
+- made form table cell alignment consistent (sf bug 621887)
+- include stylesheet in docs (sf bug 623183)
+- store PIPE messages so we can re-send them on errors (sf bug 623082)
+- implemented "retire" cgi action, added to user index (sf bug 618612)
+- included doc ideas from Bernhard Reiter (sf feature 621941)
+
+
+2002-10-02 0.5.0
+- fixed style for alternating rows in user lists
+- fixed query edit form so it doesn't barf
+- #617133 ] 0.5.0pr1 uses nonexistent renderTemplate
+- merged Zope Collector #539 fix from ZPT CVS trunk
+
+
+2002-09-27 0.5.0 pr1
+- handling of None for Date/Interval/Password values in export/import
+- handling of journal values in export/import
+- password edit now has a confirmation field
+- registration error punts back to register page
+- gadfly backend now handles changes to the schema - but only one property
+  at a time
+- cgi.client base URL is now obtained from the config TRACKER_WEB
+- request.url has gone away - there's too much magic in trying to figure
+  what it should be
+- cgi-bin script redirects to https now if the request was https
+- FileClass "content" property wasn't being returned by getprops() in most
+  backends
+- we now verify instance attributes on instance open and throw a useful error
+  if they're not all there
+- sf 611217 ] menu() has problems when labelprop==None
+- verify contents of tracker module when the tracker is opened
+- many performance improvements in *dbm and sql backends
+- mailgw was missing an "import sys"
+- setup now installs scripts with python -O flag, doubling performance in some
+  cases (there's a lot of __debug__ use)
+- fix :required for Link menus
+- import wasn't setting the ID to maxid+1
+- added getItem to HTMLClass so you can access arbitrary items in templates
+- index filtering form values may now be key values too
+- replaced the content() callback ickiness with Page Template macro usage
+- changed the default CSS style to be less offensive to some ;)
+- better handling of Page Template compilation errors
+- handle multiple unrelated indexed classes
+- #614188 ] Exception in mailgw.py
+- #613310 ] traceback on onexistant items
+- #613291 ] typos in nosy list
+- handle stupid mailers that QUOTE their Re; 'Re: "[issue1] bla blah"'
+- giving a user a Role that doesn't exist doesn't break stuff any more
+- revamped user guide, customisation guide, added maintenance guide
+- merge Zope Collector #538 fix from ZPT CVS trunk (path expressions with a
+  non-path final alternate no longer try to call a value returned by that
+  alternate)
+- merge Zope Collector #573 fix from ZPT CVS trunk
+- merge Zope Collector #580 fix from ZPT CVS trunk
+- added "crypt" password encoding and ability to set password with
+  already encrypted password through roundup-admin
+- fixed the mailgw so that anonymous users may still access it
+- add hook to allow external password verification, overridable in the
+  tracker interfaces module
+- fixed login attempt by user that doesn't exist
+
+
+2002-09-13 0.5.0 beta2
+-  all backends now have a .close() method, and it's used everywhere
+-  fixed bug in detectors __init__
+-  switched the default issue item display to only show issue summary
+   (added instructions to doc to make it display entire content)
+-  MANIFEST.in was missing a lot of template files
+-  added generic item editing
+-  much nicer layout of template rendering errors
+-  added context/is_edit_ok and context/is_view_ok convenience methods and
+   implemented use of them in the classic template
+
+
+2002-09-11 0.5.0 beta1
+Fixed:
+-  #576086 ] dumb copying mistake (frontends/ZRoundup.py)
+-  installation instructions now mention "python2" in "testing your python".
+-  made the unit tests run again - they were quite b0rken
+-  #571170 ] gdbm deadlock
+-  #576241 ] MultiLink problems in parsePropsFromForm
+-  fixed the date module so that Date(". - 2d") works
+-  web forms may now unset Link values (like assignedto)
+-  cleanup: moved roundup.templatebuilder to roundup.templates.builder
+-  instance __init__ no longer silently traps dbinit import errors
+
+Feature:
+-  new backend for metakit (thanks Gordon McMillan)
+-  new backend for gadfly (it's as done as it's going to get)
+-  further split the dbm backends from the core code, allowing easier
+   non-dict-like backends (eg metakit, RDB)
+-  implemented and used the new access control mechanisms (Permissions, Roles)
+   (see doc/security.txt)
+-  switched templating to use Zope's PageTemplates (yay!)
+-  switched to sessions for web authentication
+-  added Boolean and Number types
+-  fixed the journal bloat
+-  updated design document for new access controls
+-  updated customisation document, including more examples
+-  entire database export and import (incl files)
+-  better mailgw help message (feature request #558562)
+-  re-enabled link backrefs from messages (feature request #568714)
+-  the page layout is now templatable
+-  re-worked cgi interface to abstract out the explicit "issue" interface
+-  have index page handle mid-page errors better so header and footer are
+   still visible
+-  we handle "not found", access and item page render errors better
+-  fixed double-submit by having new-item-submit redirect at end
+-  daemonify roundup-server (fork, logfile, pidfile)
+-  modify cgitb to display PageTemplate errors better
+-  rename to "instance" to "tracker"
+-  have roundup.cgi pick up tracker config from the environment
+-  revamped look and feel in web interface
+-  cleaned up stylesheet usage
+-  several bug fixes and documentation fixes
+-  added is_retired test to hyperdb.Class
+-  added capability to save queries:
+   - a query Class with name, klass (to search) and url (query string)
+     properties
+   - a Multilink to query on user called queries
+   - html templates for query, and a list of queries in user.item
+   - search form has Save button & name input
+   - saved queries put in menu in pagehead
+   - for migration, none of the above is required and old behavior preserved.
+   - showquery translates search form <-> query string
+-  cleaned up the indexer code:
+   - it splits more words out
+   - removed code we'll never use (roundup.roundup_indexer has the full
+     implementation, and replaces roundup.indexer)
+   - only index text/plain and rfc822/message (ideas for other text formats to
+     index are welcome)
+   - added simple unit test for indexer. Needs more tests for regression.
+   - all String properties may now be indexed too. Currently there's a bit of
+     "issue" specific code in the actual searching which needs to be
+     addressed. In a nutshell:
+     + pass 'indexme="yes"' as a String() property initialisation arg, eg:
+           file = FileClass(db, "file", name=String(), type=String(),
+               comment=String(indexme="yes"))
+     + the comment will then be indexed and be searchable, with the results
+       related back to the issue that the file is linked to
+   - as a result of this work, the FileClass has a default MIME type that may
+     be overridden in a subclass, or by the use of a "type" property as is
+     done in the default templates.
+   - the regeneration of the indexes (if necessary) is done once the schema is
+     set up in the dbinit.
+   - new "reindex" command in roundup-admin used to force regeneration of the
+     index
+-  added email display function - mangles email addrs so they're not so easily
+   scraped from the web
+-  switched to using a session-based web login
+-  made mailgw handle set and modify operations on multilinks (bug #579094)
+-  fixed the journal bloat from multilink changes - we just log the add or
+   remove operations, not the whole list
+
+
+2002-06-24 0.4.2
+Fixed:
+-  Cleaned up the hyperdb unit tests.
+-  Applied patch from Andrew W. Nosenko to give nicer Unauthorised message
+   when anonymous user tries to edit. Should've been applied in 0.4.2pr1. Oops.
+-  Added more detailed note to MIGRATION regarding the detectors changes.
+
+
+2002-06-19 0.4.2pr1
+Feature:
+-  added a "detectors" directory for people to put their useful auditors and
+   reactors in. Note - the roundupdb.IssueClass.sendmessage method has been
+   split and renamed "nosymessage" specifically for things like the nosy
+   reactor, and "send_message" which just sends the message.
+-  link() htmltemplate function now has a "showid" option for links and
+   multilinks. When true, it only displays the linked node id as the anchor
+   text. The link value is displayed as a tooltip using the title anchor
+   attribute.
+   To use in eg. the superseder field, have something like this:
+   <td>
+    <display call="field('superseder', showid=1)">
+    <display call="classhelp('issue', 'id,title', label='list', width=500)">
+    <property name="superseder">
+     <br>View: <display call="link('superseder', showid=1)">
+    </property>
+   </td>
+-  stripping of the email message body can now be controlled through the
+   config variables EMAIL_KEEP_QUOTED_TEXT and EMAIL_LEAVE_BODY_UNCHANGED.
+-  all database files created are now group readable and writable.
+-  added option to automatically add the authors and recipients of messages
+   to the nosy lists with the options ADD_AUTHOR_TO_NOSY (default 'new') and
+   ADD_RECIPIENTS_TO_NOSY (default 'new'). These settings emulate the current
+   behaviour. Setting them to 'yes' will add the author/recipients to the nosy
+   on messages that create issues and followup messages.
+-  reverting to dates for intervals > 2 months sucks
+-  changed the default message list in issues to display the message body
+-  applied patch #558876 ] cgi client customization
+-  split instance initialisation into two steps, allowing config changes
+   before the database is initialised.
+-  don't create an empty message on email issue creation if the email is empty
+-  may now display additional fields in Multilink form menus
+-  #541941 ] changing multilink properties by mail
+-  #526730 ] search for messages capability
+-  #505180 ] split MailGW.handle_Message
+   - also changed cgi client since it was duplicating the functionality
+
+Fixed:
+-  stop sending blank (whitespace-only) notes
+-  cleanup of serialisation for database storage
+-  node ids are now generated from a lockable store - no more race conditions
+-  sorting was applied to all nodes of the MultiLink class instead of
+   to the nodes that are actually linked to in the "field" template
+   function.  This adds about 20+ seconds in the display of an issue if
+   your database has a 1000 or more issues in it.
+-  added missing documentation for a few of the config option values
+-  file upload broke if you didn't supply a change note
+-  fixed SCRIPT_NAME in ZRoundup for instances not at top level of Zope
+   (thanks dman)
+-  fixed some sorting issues that were breaking some unit tests under py2.2
+-  mailgw test output dir was confusing the init test (but only on 2.2 *shrug*)
+-  node caching now works, and gives a small boost in performance
+-  #449374 ] re-enable bsddb3 backend
+   bsddb3 backend now works, reinstating
+-  #551483 ] assignedto in Client.make_index_link
+-  made backends.__init__ be more specific about which ImportErrors it really
+   wants to ignore
+-  fixed the example addresses in the templates to use correct example domains
+-  cleaned out the template stylesheets, removing a bunch of junk that really
+   wasn't necessary (font specs, styles never used) and added a style for
+   message content
+-  build htmlbase if tests are run using CVS checkout
+-  #565979 ] code error in hyperdb.Class.find
+-  #565996 ] The "Attach a File to this Issue" fails
+-  #564271 ] find() and new properties
+-  #562130 ] cookie path generated from ZRoundup was wrong in some situations
+-  remove CR characters embedded in messages (ZRoundup)
+-  properly quote the email address and "real name" in all situations using the
+    'email' module if it is available and 'rfc822' otherwise
+-  #565992 ] if ISSUE_TRACKER_WEB doesn't have the trailing '/', add it
+-  use the rfc822 module to ensure that every (oddball) email address and
+   real-name is properly quoted
+-  #558867 ] ZRoundup redirect /instance requests to /instance/
+-  #569415 ] {version}
+-  #569178 ] type error
+   was fixed as part of the general cleanup of reactors
+
+
+2002-03-25 - 0.4.1
+Feature:
+-  use blobfiles in back_anydbm which is used in back_bsddb.
+   change test_db as dirlist does not work for subdirectories.
+   ATTENTION: blobfiles now creates subdirectories for files.
+-  add module blobfiles in backends with file access functions.
+-  roundup db catch only IOError in getfile.
+-  roundup db catches retrieving not existing files.
+-  #503204 ] mailgw needs a default class
+   - partially done - the setting of additional properties can wait for a
+     better configuration system.
+-  Alternate email addresses are now available for users. See the MIGRATION
+   file for info on how to activate the feature.
+-  #511168 ] Web interface: Adding new products
+   Classes that don't provide template html get a default edit interface now:
+   - access using the admin "class list" interface
+   - limited to admin-only
+   - requires the csv module from object-craft (url given if it's missing)
+-  Added popup help for classes using the classhelp html template function.
+   - add <display call="classhelp('priority', 'id,name,description')">
+     to an item page, and it generates a link to a popup window which displays
+     the id, name and description for the priority class. The description
+     field won't exist in most installations, but it will be added to the
+     default templates.
+-  #517734 ] web header customisation is obscure
+-  All messages sent to the nosy list are now encoded as
+   quoted-printable before they are sent.
+-  Fixed display of mutlilink properties when using the template
+   functions, menu and plain.
+
+Fixed:
+-  Clean up mail handling, multipart handling.
+-  respect encodings in non multipart messages.
+-  makeHtmlBase: re.sub under python 2.2 did not replace '.', string.replace
+   does it.
+-  preamble in tepmlateBuilder mentioned htmldata
+-  mailgw checks encoding on first part too.
+-  #511586 ] unittest FAIL: testReldate_date
+-  Added a uniquely Roundup header to email, "X-Roundup-Name"
+-  All forms now have "double-submit" protection when Javascript is enabled
+   on the client-side.
+-  #516883 ] mail interface + ANONYMOUS_REGISTER
+-  #516854 ] "My Issues" and redisplay
+-  #517906 ] Attribute order in "View customisation"
+-  #514854 ] History: "User" is always ticket creator
+-  wasn't handling cvs parser feeding correctly
+-  fixed some problems in date calculations (calendar.py doesn't handle over-
+   and under-flow). Also, hour/minute/second intervals may now be more than
+   99 each.
+-  #527416 ] roundup-admin uses undefined value
+-  #527503 ] unfriendly init blowup when parent dir
+   (also handles UsageError correctly now in init)
+-  #524129 ] roundup-admin gets python path wrong
+
+
+2002-01-24 - 0.4.0
+Feature:
+-  much nicer history display (actualy real handling of property types etc)
+-  journal entries for link and mutlilink properties can be switched on or
+   off
+-  properties in change note are now sorted
+-  you can now use the roundup-admin tool pack the database
+
+Fixed:
+-  the mail gateway now responds with an error message when invalid values
+   for arguments are specified for link or mutlilink properties
+-  modified unit test to check nosy and assignedto when specified as arguments
+-  handle attachments with no name (eg tnef)
+-  fixed setting nosy as argument in subject line
+-  fixed back_bsddb so it passed the journal tests
+-  fixed status changes in mail gateway (eg. unread -> chatting)
+-  we'll actually distribute the frontends directory now, as advertised...
+-  handle stripping of "AW:" from subject line
+-  htmltemplate list() wasn't sorting...
+-  unit tests for html templating (and re-enabled the listbox field for
+   multilinks)
+-  allow abbreviation of "help" in admin tool too.
+-  run_tests testReldate_date failed if LANG is 'german'
+-  mailgw failures (unexpected ones) are forwarded to the roundup admin
+
+
+2002-01-16 - 0.4.0b2
+Fixed:
+-  #495392 ] empty nosy -patch
+-  #500574 ] messageid must have format <part1@part2>
+-  fixed some problems with web editing and change detection
+-  mail splitting wasn't detecting responses in the same "section" as quoted
+   text
+-  missed a "from i18n import _" in date.py
+-  #501690 ] MIGRATION.txt incomplete
+-  #502342 ] pipe interface
+-  #502437 ] rogue reactor and unittest
+-  re-enabled dumbdbm when using python >2.1.1 (ie 2.1.2, 2.2)
+-  changed all config accesses so they access either the instance or the
+   config attriubute on the db. This means that all config is obtained from
+   instance_config instead of the mish-mash of classes. This will make
+   switching to a ConfigParser setup easier too, I hope.
+-  #502951 ] adding new properties to old database
+-  #502953 ] nosy-like treatment of other multilinks
+-  #503164 ] create and passwords
+-  plain rendering of links in the htmltemplate now generate a hyperlink to
+   the linked node's page.
+-  #503330 ] ANONYMOUS_REGISTER now applies to mail
+-  #503353 ] setting properties in initial email
+-  #502956 ] filtering by multilink not supported
+-  #503340 ] creating issue with [asignedto=p.ohly]
+-  #502949 ] index view for non-issues and redisplay
+-  #503793 ] changing assignedto resets nosy list
+-  lots of date/interval related changes:
+   - more relaxed date format for input
+   - handle None for date/interval properties
+
+
+2002-01-08 - 0.4.0b1
+Feature:
+-  Added INSTANCE_NAME to configuration - used in web and email to identify
+   the instance.
+-  Added EMAIL_SIGNATURE_POSITION to indicate where to place the roundup
+   signature info in e-mails.
+-  Some more flexibility in the mail gateway and more error handling.
+-  Login now takes you to the page you back to the were denied access to.
+-  Admin user now can has a user index link on their web interface.
+-  We now have basic transaction support. Information is only written to
+   the database when the commit() method is called. Only the anydbm and
+   bsddb3 backends are modified in this way - the bsddb3 backend needs a
+   lot more work anyway...
+    - the CGI and mailgw automatically commit() at the end of processing a
+      single transaction
+    - the admin tool requires an explicit "commit" - it will prompt at exit
+      if there are unsaved changes. A "rollback" removes all changes made
+      during the session (up to the last commit).
+-  Added the "display" command to the admin tool - displays a node's values
+-  Message author's name appears in From: instead of roundup instance name
+   (which still appears in the Reply-To:)
+-  Added a Zope frontend for roundup.
+-  Centralised the python version check code, bumped version to 2.1.1 (really
+   needs to be 2.1.2, but that isn't released yet :)
+-  much better attaching of erroneous messages in the mail gateway
+-  #496356 ] Use threading in messages
+   This adds the tracking of messages by message-id and allows threading
+   using in-reply-to. Most e-mail clients support threading using this
+   feature, and we hope to add support for it to the web gateway.
+
+Fixed:
+-  Lots of bugs, thanks Roché and others on the devel mailing list!
+-  login_action and newuser_action return values were being ignored
+-  Woohoo! Found that bloody re-login bug that was killing the mail
+   gateway.
+-  Fixed login/registration forwarding the user to the right page (or not,
+   on a failure)
+-  We now use weakrefs in the Classes to keep the database reference, so
+   the close() method on the database is no longer needed.
+-  #487480 ] roundup-server
+-  #487476 ] INSTALL.txt
+-  #489760 ] [issue] only subject
+-  fixed doc/index.html to include the quoting in the mail alias.
+-  fixed the backends __init__ so we can pydoc the backend modules
+-  web i/f reports "note added" if there are no changes but a note is entered
+-  we were assuming database files created by anydbm had the same name, but
+   this is not the case for dbm. We now perform a much better check _and_
+   cope with the anydbm implementation module changing too!
+-  envelope-from is now set to the roundup-admin and not roundup itself so
+   delivery reports aren't sent to roundup (thanks Patrick Ohly)
+-  #495400 ] entering blanks
+   Values with spaces are now accepted in roundup-admin - check the long help
+   for details.
+-  #496360 ] table width does not work
+-  detectors were being registered multiple times
+-  added tests for mailgw
+
+
+2001-11-23 - 0.3.0
+Feature:
+-  #467129 ] Lossage when username=e-mail-address
+-  #473123 ] Change message generation for author
+-  MailGW now moves 'resolved' to 'chatting' on receiving e-mail for an issue.
+-  Added Structured Text rendering to htmltemplate, thanks Brad Clements.
+-  Added CGI configuration via env vars (see roundup.cgi for details)
+-  "roundup.cgi" is now installed to "<python-prefix>/share/roundup/cgi-bin"
+-  roundup-admin now accepts abbreviated commands (eg. l = li = lis = list)
+-  roundup-mailgw now supports unix mailbox and POP as sources of mail.
+-  roundup-admin now handles all hyperdb exceptions
+-  users may attach files to issues (and support in ext) through the web now
+-  incorporated patch from Roch'e Compaan implementing attachments in nosy
+   e-mail
+-  added a target version field to the extended issue schema
+-  added dummy hooks for I18N and some preliminary (test) markup of
+   translatable messages
+
+Fixed:
+-  Fixed a bug in HTMLTemplate changes.
+-  'unread' to 'chatting' automagic status change was b0rken.
+-  Anonymous user lockout wasn't working.
+-  roundup-server now works on Windows, thanks Juergen Hermann.
+-  Fixed install documentation, also thanks Juergen Hermann.
+-  Fixed some URL issues in roundup.cgi, again thanks Juergen Hermann.
+-  bug #475347 ] WindowsError still not caught (patch from Juergen Hermann)
+-  bug #474749 ] indentations lost
+-  bug #477104 ] HTML tag error in roundup-server
+-  bug #477107 ] HTTP header problem
+-  bug #477687 ] conforming html
+-  bug #474372 ] Netscape 4.77 do not render Support form
+-  bug #477685 ] base64.decodestring breaks
+-  bug #477837 ] lynx does not like the cookie
+-  bug #477892 ] Password edit doesn't fix login cookie
+-  newuser_action now presents error messages rather than tracebacks.
+-  bug #479511 ] mailgw to pop
+-  bug #479508 ] roundup-admin crash on wrong class
+-  bad error report in hyperdb
+-  roundup.mailgw now handles errors on the set() and create() at the end
+   of processing
+-  roundup.mailgw also handles messages that are passed to it that don't
+   contain a From: line - apparently some POP servers can do this. It punts
+   an error message to the roundup admin.
+-  fixed nosy reaction and author copy handling
+-  errors in nosy reaction will be propogated now (were effectively being
+   squashed)
+-  re-open the database as the author in mail handling
+-  missing "return" in filter_section (thanks Roch'e Compaan)
+
+
+2001-10-23 - 0.3.0 pre 3
+Feature:
+-  MailGW now moves 'unread' to 'chatting' on receiving e-mail for an issue.
+-  feature #473127: Filenames. I modified the file.index and htmltemplate
+   source so that the filename is used in the link and the creation
+   information is displayed.
+ Admin Tool (roundup-admin):
+ -  Interactive mode for running multiple (independant at present) commands.
+ -  Tabular display of nodes.
+ -  Import and export via colon-separated files.
+
+Changed:
+-  re-organised the html templating code. Fixed some bugs, probably
+   introduced some more.  Hopefully not too many.
+
+Fixed:
+-  Stand-alone server now has a configurable setuid user.
+-  CGI interface wasn't handling checkboxes at all.
+-  Fixed quopri usage in mailgw from bug reports on mailing list.
+-  Remove the "freshen" command from the roundup-admin tool.
+-  Catch errors in login - no username or password supplied.
+-  Fixed editing of password (Password property type) thanks Roch'e Compaan.
+-  Fixed grouping of non-str properties thanks Roch'e Compaan.
+-  bug #473121: The customisation view and filters (CGI interface view
+   customisation section may now be hidden (patch from Roch'e Compaan.)
+-  bug #473122: Issue id sorting (hyperdb sorts strings-that-look-like-numbers
+   as numbers now.
+-  bug #473124: UI inconsistency with Link fields.
+   This also prompted me to fix a fairly long-standing usability issue -
+   that of being able to turn off certain filters.
+-  bug #473125: Paragraph in e-mails
+-  bug #473126: Sender unknown
+-  bug #473130: Nosy list not set correctly
+
+
+2001-10-11 - 0.3.0 pre 2
+Fixed:
+-  Hyperdatabase was inserting empty strings instead of None for missing
+   property values. This broke a lot of things.
+
+
+2001-10-10 - 0.3.0 pre 1
+Feature:
+-  roundup-admin create now prompts for property info if none is supplied
+   on the command-line.
+-  hyperdb Class getprops() method may now return only the mutable
+   properties.
+-  CGI interfaces now generate a top-level index of their known instances.
+
+Changed:
+-  Login now uses cookies, which makes it a whole lot more flexible. We can
+   now support anonymous user access (read-only, unless there's an
+   "anonymous" user, in which case write access is permitted). Login
+   handling has been moved into cgi_client.Client.main()
+-  The "extended" schema is now the default in roundup init.
+-  The schemas have had their page headings modified to cope with the new
+   login handling. Existing installations should copy the interfaces.py
+   file from the roundup lib directory to their instance home.
+-  Passwords are now encoded by default (except exising databases which
+   will only be encoded when the passwords are changed). The scheme used
+   at the moment is SHA - but the code is flexible enough to take any
+   number of encoding systems.
+-  The roundup-admin tool always operates as the "admin" user now. Database
+   protection should be achieved using file system protections (see the
+   documentation for details.)
+
+Fixed:
+-  Incorrectly had a Bizar Software copyright on the cgitb.py module from
+   Ping - has been removed.
+-  Pretty time interval wasn't handling > 1 month properly.
+-  Generation of links to Link/Multilink in indexes. (thanks Hubert Hoegl)
+-  AssignedTo wasn't in the "classic" schema's item page.
+-  Fixed a whole bunch of places in the CGI interface where we should have
+   been returning Not Found instead of throwing an exception.
+-  Fixed a deviation from the spec: trying to modify the 'id' property of
+   an item now throws an exception.
+-  The plain() template function now html-escapes the content.
+-  Change message was stuffing up for multilinks with no key property.
+
+
+
+--------------
+
+2001-08-30 - 0.2.8
+Fixed:
+-  Wasn't handling unguessable mime types for file uploads.
+-  Missing import in mailgw.
+
+
+2001-08-29 - 0.2.7
+Feature:
+-  Text searches are now case insensitive. All forms of text search use
+   regular expressions now.
+
+Fixed:
+-  Had another 2.1-ism in the unit tests
+-  Made the mail parser a little more robust w.r.t missing Subject:
+   (both thanks Mikhail Sobolev)
+-  Missed some isFooType usages (thanks Mikhail Sobolev for spotting them)
+-  Reverted back to sending change messages to the web editor of a node so
+   that the change note message is actually genrated.
+-  CGI interface wasn't generating correct change messages.
+-  Notes entered during a change are saved to the messages list even if
+   there's no nosy list. No message is generated if there's no nosy list and
+   there's no change note (since it would just duplicates the journal).
+-  Completely removed the bsddb3 module from the tests - will be reinstated
+   when the http://bsddb.sourceforge.net/'s bugs #439959 and #456408 are
+   dealt with. One is fixed in CVS, the other pending.
+
+
+2001-08-08 - 0.2.6
+Note:
+-  Roundup is now released under the same terms as the Python License.
+
+Feature:
+-  Added tests for instance initialisation. No more releasing the software
+   with bugs in roundup.init!
+-  Now bundling unittest with the package so that python 2.0 users can use
+   the tests.
+-  Much better error handling and messages generated by the mail gateway.
+
+Fixed:
+-  Implemented correct mail splitting. Added unit tests. Also snips
+   signatures now too.
+-  Bug #447671 - typo in roundup/init.py
+-  Changed date.Date to use regular string formatting instead of strftime -
+   win32 seems to have problems with %T and no hour... or something...
+-  Bug #448484 - now catching correct exception from makedirs.
+-  Instances are now opened by a special function that generates a unique
+   module name for the instances on import time.
+
+
+2001-08-03 - 0.2.5
+Note:
+-  The bsddb3 module has a bug that renders it non-functional. Users should
+   select the anydbm or bsddb backend instead.
+
+Fixed:
+-  Python 2.0 does not contain the unittest module. The setup.py module now
+   checks for unittest before attempting to run the unit tests.
+
+
+2001-08-03 - 0.2.4
+Features:
+-  Added ability for cgi newblah forms to indicate that the new node
+   should be linked somewhere.
+-  Added time logging and file uploading to the templates.
+-  Added "My Issues" and "My Support" to extended template. Changed "Your
+   Details" to "My Details". Changed the "New Foo" links to "Add Foo".
+   Added links for unassigned support and issues. Generally reorganised and
+   cleanup the header up.
+-  Changed the order of the information in the message generated by web edits.
+-  Extended the range of intervals that are pretty-printed before actual dates
+   are displayed.
+-  Added more BUILD instructions including the "clean" command to force
+   rebuild.
+-  Web edit messages aren't sent to the person who did the edit any more. No
+   message is generated if they are the only person on the nosy list.
+-  Roundupdb now appends "mailing list" information to its messages which
+   include the e-mail address and web interface address. Templates may
+   override this in their db classes to include specific information (support
+   instructions, etc).
+
+Fixed:
+-  Argument handling for the roundup-admin find command.
+-  Handling of summary when no note supplied for newblah. Again.
+-  Detection of no form in htmltemplate Field display.
+-  Checklist html template command was setting wrong name.
+-  2.1-specific gmtime() (no arg) call in roundup.date. (thanks Paul Wright)
+-  mailgw was making naughty assumptions about the schema of the classes it
+   was creating nodes for.
+-  remove the $Foo$ from the HTML files stored in the htmlbase modules.
+-  Instance import now imports the instance using imp.load_module so that
+   we can have instance homes of "roundup" or other existing python package
+   names.
+
+
+2001-07-30 - 0.2.3
+Big change:
+-  I've split off the support class from the issue class in "extended".
+   Anyone who has any support entries, sorry. It should be possible to
+   write a scipt that moves the entries over pretty easily. If this causes
+   you pain, I'll do so. You'll want to update your instance with the new
+   code in "extended" either way.
+
+Features:
+-  Added the unit tests to the start of setup.py so they're run whenever
+   we do anything distutils'y.
+-  Added nicer prompting to the roundup-admin "init" command.
+-  Actually, the roundup-admin code is totally revamped, and has command
+   help and better command-line arg handling.
+-  The cgi_client.Client base class now reflects the structure of "classic"
+   rather than "extended" since "classic" is more of a "base" template.
+-  Added more DB to test. Skips tests where imports fail.
+
+Fixed:
+-  One of the tests in test_date had the wrong expected result.
+-  Fixed IssueClass so that superseders links to its classname rather than
+   hard-coded to "issue".
+-  templatebuilder was catching IOError instead of OSError.
+-  The cgi_client newblah method wasn't detecting the __note form field
+   properly.
+-  The History command in htmltemplate didn't handle a new node (None
+   nodeid) properly.
+
+
+2001-07-29 - 0.2.2
+Features:
+-  Added implementation.txt to the doc directory. Contains implementation
+   notes specific to this implementations of Roundup.
+-  Cleaned up mailgw some (subclass Message for getPart) and added some
+   tests for multipart splitting.
+-  Better checking for html dir in templatebuilder.
+-  Base hyperdb.Class now fakes the "id" property.
+-  Made the classic roundup look more like the original prototype.
+-  Made cgi_client and templating slightly more generic.
+-  Moved some code around in cgi_client allowing for subclassing to change
+   behaviour.
+-  Added the fabricated property "id" to all hyperdb classes.
+-  Cleanup of the link label generation (new method on hyperdb.Class to do
+   it).
+
+Fixed:
+-  Everything uses errno module now to check errno values.
+-  New issue form handles lack of note better now.
+-  HTML templating uses section-bar style for index group headers now.
+-  Fixed problem in link display when Link value is None.
+-  Form handling in cgi client wasn't propogating through the previous
+   query elements.
+-  Fixed sort arguments generated for column headings so sorting can be
+   changed now.
+
+
+2001-07-28 - 0.2.1
+Features:
+-  Added docstring to roundup package so pydoc reports useful information.
+-  Added the roundup 1 software carpentry submission HTML to the doc
+   directory as "overview.html".
+
+Fixes:
+-  Fixed bug in init command - templatebuilder was assuming existence of
+   "html" directory in instance home.
+-  Fixed INSTALL.txt to reflect some changes in the installation and test
+   procedure. Whatdya know, "setup.py install" does the script install.
+   There you go...
+-  Fixed some non-string node ids in cgi_client now that the hyperdb is
+   strict about such things.
+
+2001-07-26 - 0.2.0
+Features:
+-  Major reorganisation of code to allow multiple roundup instances and a
+   single, site-packages -based installation. Also allows multiple database
+   back-ends.
+-  Moved the bin/ proggies into the top dir, so that it all works
+   out-of-the-box
+-  Added the "classic" template - a direct implementation of the Roundup
+   spec. Well, as close as we're going to get, anyway.
+-  Added an issue priority of support to "extended"
+-  Added command-line arg handling to roundup-server so it's more useful
+   out-of-the-box.
+-  Added distutils-style installation of "lib" files.
+-  Added some unit tests.
+
+Fixes:
+-  Fixed bug in re generation in the filter
+-  Fixed handling of None String property in grouped list headings
+-  Fixed adding new issue with no change note
+-  Fixed values in text input fields which contained quotes (") are now
+   quoted.
+-  Fixed a bug in the hyperdb filter - wrong variable names in the error
+   message.
+
+2001-07-19 - 0.1.3
+-  Reldate now takes an argument "pretty" - when true, it pretty-prints the
+   interval generated up to 5 days, then pretty-prints the date of last
+   activity. The issue index and item now use the pretty format.
+-  Classes list for admin user in CGI interface.
+-  Made the view configuration more accessible, neater and more realistic.
+-  Fixed list view grouping handling grouping by a Multilink or String or Link
+   value of None or Date, ...  (mind you, sorting by Date???)
+-  Fixed bug in the plain formatter when a Link was None.
+-  Fixed ordering of list view column headings.
+-  Fixed list view column heading sort links - and limited the number of
+   columns to sort by to 2.
+-  Added searching by glob to StringType filtering -
+    ^text  - search for text at start of fields
+    text$  - search for text at end of fields
+    ^text$ - exactly match text in fields
+    te*xt  - search for text matching "te"<any characters>"xt"
+    te?xt  - search for text matching "te"<any one character>"xt"
+-  Added more fields to the issue.filter and issue.index templates
+
+
+2001-07-18 - 0.1.2
+-  Set default index to ?:group=priority&:columns=activity,status,title so
+   the priority column isn't displayed.
+-  Thanks Anthony:
+   - added notes to the README about Python prerequisites
+   - added check to roundup.py, roundup.cgi, server.py and roundup-mailgw.py
+     for python 2+ - and made the file itself parseable by 1.5.2 ;)
+   - python 2.0 didn't have the default args for the time module functions.
+   - better handling of db directory in initDB
+-  Sorting on the extra properties defined by roundupdb classes was broken
+   due to the caching used. May now sort on activity and creation
+   properties, etc.
+-  Set the default index to sort on activity
+
+
+2001-07-18 - 0.1.1
+-  Initial version release with consent of Roundup spec author, Ka-Ping Yee:
+   "Amazing!  Nice work.  I'll watch for the source code on your website."
+
+2001-07-11 - 0.1.0
+-  Needed a bug tracking system. Looked around. Tried to install many
+   Perl-based systems, to no avail. Got tired of waiting for Roundup to be
+   released. Had just finished major product project, so needed something
+   different for a while. Roundup here I come...
+
+
diff --git a/.svn/text-base/COPYING.txt.svn-base b/.svn/text-base/COPYING.txt.svn-base
new file mode 100644 (file)
index 0000000..b396397
--- /dev/null
@@ -0,0 +1,106 @@
+Roundup Licensing
+-----------------
+
+Copyright (c) 2003-2009 Richard Jones (richard@mechanicalcat.net)
+Copyright (c) 2002 eKit.com Inc (http://www.ekit.com/)
+Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be included in
+  all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+PageTemplates Licensing
+-----------------------
+
+Portions of this code (roundup.cgi.PageTemplates, roundup.cgi.TAL and
+roundup.cgi.ZTUtils) have been copied from Zope. They have been modified in
+the following manner:
+
+- removal of unit tests, Zope-specific code and support files from 
+  PageTemplates: PageTemplateFile.py, ZPythonExpr.py, ZRPythonExpr.py,
+  ZopePageTemplate.py, examples, help, tests, CHANGES.txt, HISTORY.txt,
+  version.txt and www. From TAL: DummyEngine.py, HISTORY.txt, CHANGES.txt,
+  benchmark, driver.py, markbench.py, ndiff.py, runtest.py, setpath.py,
+  tests and timer.py. From ZTUtils: SimpleTree.py, Zope.py, CHANGES.txt and
+  HISTORY.txt.
+- editing to remove dependencies on Zope modules (see files for change notes)
+
+The license for this code is the `Zope Public License (ZPL) Version 2.0`_,
+included below.
+
+
+Zope Public License (ZPL) Version 2.0
+-------------------------------------
+
+This software is Copyright (c) Zope Corporation (tm) and
+Contributors. All rights reserved.
+
+This license has been certified as open source. It has also
+been designated as GPL compatible by the Free Software
+Foundation (FSF).
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions in source code must retain the above
+   copyright notice, this list of conditions, and the following
+   disclaimer.
+
+2. 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.
+
+3. The name Zope Corporation (tm) must not be used to
+   endorse or promote products derived from this software
+   without prior written permission from Zope Corporation.
+
+4. The right to distribute this software or to use it for
+   any purpose does not give you the right to use Servicemarks
+   (sm) or Trademarks (tm) of Zope Corporation. Use of them is
+   covered in a separate agreement (see
+   http://www.zope.com/Marks).
+
+5. If any files are modified, you must cause the modified
+   files to carry prominent notices stating that you changed
+   the files and the date of any change.
+
+Disclaimer
+
+  THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS''
+  AND ANY EXPRESSED 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 ZOPE CORPORATION OR ITS 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.
+
+
+This software consists of contributions made by Zope
+Corporation and many individuals on behalf of Zope
+Corporation.  Specific attributions are listed in the
+accompanying credits file.
+
diff --git a/.svn/text-base/MANIFEST.in.svn-base b/.svn/text-base/MANIFEST.in.svn-base
new file mode 100644 (file)
index 0000000..b95ef64
--- /dev/null
@@ -0,0 +1,14 @@
+recursive-include share *
+recursive-include roundup *.*
+recursive-include frontends *.*
+recursive-include scripts *.* *-*
+recursive-include tools *.*
+recursive-include test *.py *.txt
+recursive-include doc *.html *.png *.txt *.css *.1 *.example
+recursive-include detectors *.py
+recursive-include templates *.* home* page*
+global-exclude .svn .cvsignore *.pyc *.pyo .DS_Store
+include run_tests.py *.txt demo.py MANIFEST.in MANIFEST
+exclude BUILD.txt I18N_PROGRESS.txt TODO.txt
+exclude doc/security.txt doc/templating.txt
+include locale/*.po locale/*.mo locale/roundup.pot
diff --git a/.svn/text-base/README.txt.svn-base b/.svn/text-base/README.txt.svn-base
new file mode 100644 (file)
index 0000000..b6cf8c6
--- /dev/null
@@ -0,0 +1,46 @@
+=======================================================
+Roundup: an Issue-Tracking System for Knowledge Workers
+=======================================================
+
+Copyright (c) 2003-2009 Richard Jones (richard@mechanicalcat.net)
+Copyright (c) 2002 eKit.com Inc (http://www.ekit.com/)
+Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
+
+
+INSTANT GRATIFICATION
+=====================
+
+The impatient may try Roundup immediately by typing at the console::
+
+   python demo.py
+
+To start anew (a fresh demo instance)::
+
+   python demo.py nuke
+
+Run demo.py from the *source* directory; don't try to run demo.py from
+the *installed* directory, it will *break*.
+
+
+Installation
+============
+For installation instructions, please see installation.txt in the "doc"
+directory.
+
+
+Upgrading
+=========
+For upgrading instructions, please see upgrading.txt in the "doc" directory.
+
+
+Usage and Other Information
+===========================
+See the index.txt file in the "doc" directory.
+The *.txt files in the "doc" directory are written in reStructedText. If
+you have rst2html installed (part of the docutils suite) you can convert
+these to HTML by running "make html" in the "doc" directory.
+
+
+License
+=======
+See COPYING.txt
diff --git a/.svn/text-base/demo.py.svn-base b/.svn/text-base/demo.py.svn-base
new file mode 100644 (file)
index 0000000..20f9f12
--- /dev/null
@@ -0,0 +1,181 @@
+#! /usr/bin/env python
+#
+# Copyright (c) 2003 Richard Jones (richard@mechanicalcat.net)
+#
+
+import errno
+import os
+import socket
+import sys
+import urlparse
+from glob import glob
+import getopt
+
+from roundup import configuration
+from roundup.scripts import roundup_server
+
+def install_demo(home, backend, template):
+    """Install a demo tracker
+
+    Parameters:
+        home:
+            tracker home directory path
+        backend:
+            database backend name
+        template:
+            tracker template
+
+    """
+
+    from roundup import init, instance, password, backends
+
+    # set up the config for this tracker
+    config = configuration.CoreConfig()
+    config['TRACKER_HOME'] = home
+    config['MAIL_DOMAIN'] = 'localhost'
+    config['DATABASE'] = 'db'
+    config['WEB_DEBUG'] = True
+    if backend in ('mysql', 'postgresql'):
+        config['RDBMS_HOST'] = 'localhost'
+        config['RDBMS_USER'] = 'rounduptest'
+        config['RDBMS_PASSWORD'] = 'rounduptest'
+        config['RDBMS_NAME'] = 'rounduptest'
+
+    # see if we have further db nuking to perform
+    module = backends.get_backend(backend)
+    if module.db_exists(config):
+        module.db_nuke(config)
+
+    template_dir = os.path.join('share', 'roundup', 'templates', template)
+    init.install(home, template_dir)
+    # don't have email flying around
+    nosyreaction = os.path.join(home, 'detectors', 'nosyreaction.py')
+    if os.path.exists(nosyreaction):
+        os.remove(nosyreaction)
+    nosyreaction += 'c'
+    if os.path.exists(nosyreaction):
+        os.remove(nosyreaction)
+    init.write_select_db(home, backend)
+
+    # figure basic params for server
+    hostname = 'localhost'
+    # pick a fairly odd, random port
+    port = 8917
+    while 1:
+        print 'Trying to set up web server on port %d ...'%port,
+        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        try:
+            s.connect((hostname, port))
+        except socket.error, e:
+            if not hasattr(e, 'args') or e.args[0] != errno.ECONNREFUSED:
+                raise
+            print 'should be ok.'
+            break
+        else:
+            s.close()
+            print 'already in use.'
+            port += 100
+    config['TRACKER_WEB'] = 'http://%s:%s/demo/'%(hostname, port)
+
+    # write the config
+    config['INSTANT_REGISTRATION'] = 1
+    config.save(os.path.join(home, config.INI_FILE))
+
+    # open the tracker and initialise
+    tracker = instance.open(home)
+    tracker.init(password.Password('admin'))
+
+    # add the "demo" user
+    db = tracker.open('admin')
+    # FIXME: Move tracker-specific demo initialization into the tracker templates.
+    if (template == 'minimal'):
+        db.user.create(username='demo', password=password.Password('demo'),
+                       roles='User')
+    else:
+        db.user.create(username='demo', password=password.Password('demo'),
+                       realname='Demo User', roles='User')
+    db.commit()
+    db.close()
+
+def run_demo(home):
+    """Run the demo tracker installed in ``home``"""
+    cfg = configuration.CoreConfig(home)
+    url = cfg["TRACKER_WEB"]
+    hostname, port = urlparse.urlparse(url)[1].split(':')
+    port = int(port)
+    success_message = '''Server running - connect to:
+    %s
+1. Log in as "demo"/"demo" or "admin"/"admin".
+2. Hit Control-C to stop the server.
+3. Re-start the server by running "roundup-demo" again.
+4. Re-initialise the server by running "roundup-demo nuke".
+
+Demo tracker is set up to be accessed by localhost browser.  If you
+run demo on a server host, please stop the demo, open file
+"demo/config.ini" with your editor, change the host name in the "web"
+option in section "[tracker]", save the file, then re-run the demo
+program.
+
+''' % url
+
+    # disable command line processing in roundup_server
+    sys.argv = sys.argv[:1] + ['-p', str(port), 'demo=' + home]
+    roundup_server.run(success_message=success_message)
+
+
+def usage(msg = ''):
+
+    if msg: print msg
+    print 'Usage: %s [options] [nuke]'%sys.argv[0]
+    print """
+Options:
+ -h                -- print this help message
+ -t template       -- specify the tracker template to use
+ -b backend        -- specify the database backend to use
+"""
+
+
+def main():
+    """Run a demo server for users to play with for instant gratification.
+
+    Sets up the web service on localhost. Disables nosy lists.
+    """
+
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 't:b:h')
+    except getopt.GetoptError, e:
+        usage(str(e))
+        return 1
+
+    home = os.path.abspath('demo')
+    nuke = args and args[0] == 'nuke'
+    if not os.path.exists(home) or nuke:
+        backend = 'anydbm'
+        template = 'classic'
+        for opt, arg in opts:
+            if opt == '-h':
+                usage()
+                return 0
+            elif opt == '-t':
+                template = arg
+            elif opt == '-b':
+                backend = arg
+        if (len(args) > 1 or
+            (len(args) == 1 and args[0] != 'nuke')):
+            usage()
+            return 1
+
+        install_demo(home, backend, template)
+    elif opts:
+        print "Error: Arguments are not allowed when running an existing demo."
+        print "       Use the 'nuke' command to start over."
+        sys.exit(1)
+
+    run_demo(home)
+
+
+if __name__ == '__main__':
+    sys.exit(main())
+
+# vim: set filetype=python sts=4 sw=4 et si :
diff --git a/.svn/text-base/run_tests.py.svn-base b/.svn/text-base/run_tests.py.svn-base
new file mode 100644 (file)
index 0000000..5855e8a
--- /dev/null
@@ -0,0 +1,886 @@
+#! /usr/bin/env python
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+test.py [-aBbcdDfgGhLmprtTuv] [modfilter [testfilter]]
+
+Test harness.
+
+-a level
+--all
+    Run the tests at the given level.  Any test at a level at or below this is
+    run, any test at a level above this is not run.  Level 0 runs all tests.
+    The default is to run tests at level 1.  --all is a shortcut for -a 0.
+
+-b
+--build
+    Run "python setup.py build" before running tests, where "python"
+    is the version of python used to run test.py.  Highly recommended.
+    Tests will be run from the build directory.  (Note: In Python < 2.3
+    the -q flag is added to the setup.py command line.)
+
+-B
+    Run "python setup.py build_ext -i" before running tests.  Tests will be
+    run from the source directory.
+
+-c  use pychecker
+
+-d
+    Instead of the normal test harness, run a debug version which
+    doesn't catch any exceptions.  This is occasionally handy when the
+    unittest code catching the exception doesn't work right.
+    Unfortunately, the debug harness doesn't print the name of the
+    test, so Use With Care.
+
+--dir directory
+    Option to limit where tests are searched for. This is
+    important when you *really* want to limit the code that gets run.
+    For example, if refactoring interfaces, you don't want to see the way
+    you have broken setups for tests in other packages. You *just* want to
+    run the interface tests.
+
+-D
+    Works like -d, except that it loads pdb when an exception occurs.
+
+-f
+    Run functional tests instead of unit tests.
+
+-g threshold
+    Set the garbage collector generation0 threshold.  This can be used to
+    stress memory and gc correctness.  Some crashes are only reproducible when
+    the threshold is set to 1 (agressive garbage collection).  Do "-g 0" to
+    disable garbage collection altogether.
+
+-G gc_option
+    Set the garbage collection debugging flags.  The argument must be one
+    of the DEBUG_ flags defined bythe Python gc module.  Multiple options
+    can be specified by using "-G OPTION1 -G OPTION2."
+
+--libdir test_root
+    Search for tests starting in the specified start directory
+    (useful for testing components being developed outside the main
+    "src" or "build" trees).
+
+--keepbytecode
+    Do not delete all stale bytecode before running tests
+
+-L
+    Keep running the selected tests in a loop.  You may experience
+    memory leakage.
+
+-t
+    Time the individual tests and print a list of the top 50, sorted from
+    longest to shortest.
+
+-p
+    Show running progress.  It can be combined with -v or -vv.
+
+-r
+    Look for refcount problems.
+    This requires that Python was built --with-pydebug.
+
+-T
+    Use the trace module from Python for code coverage.  XXX This only works
+    if trace.py is explicitly added to PYTHONPATH.  The current utility writes
+    coverage files to a directory named `coverage' that is parallel to
+    `build'.  It also prints a summary to stdout.
+
+-v
+    Verbose output.  With one -v, unittest prints a dot (".") for each test
+    run.  With -vv, unittest prints the name of each test (for some definition
+    of "name" ...).  With no -v, unittest is silent until the end of the run,
+    except when errors occur.
+
+    When -p is also specified, the meaning of -v is sligtly changed.  With
+    -p and no -v only the percent indicator is displayed.  With -p and -v
+    the test name of the current test is shown to the right of the percent
+    indicator.  With -p and -vv the test name is not truncated to fit into
+    80 columns and it is not cleared after the test finishes.
+
+-u
+-m
+    Use the PyUnit GUI instead of output to the command line.  The GUI imports
+    tests on its own, taking care to reload all dependencies on each run.  The
+    debug (-d), verbose (-v), progress (-p), and Loop (-L) options will be
+    ignored.  The testfilter filter is also not applied.
+
+    -m starts the gui minimized.  Double-clicking the progress bar will start
+    the import and run all tests.
+
+
+modfilter
+testfilter
+    Case-sensitive regexps to limit which tests are run, used in search
+    (not match) mode.
+    In an extension of Python regexp notation, a leading "!" is stripped
+    and causes the sense of the remaining regexp to be negated (so "!bc"
+    matches any string that does not match "bc", and vice versa).
+    By default these act like ".", i.e. nothing is excluded.
+
+    modfilter is applied to a test file's path, starting at "build" and
+    including (OS-dependent) path separators.
+
+    testfilter is applied to the (method) name of the unittest methods
+    contained in the test files whose paths modfilter matched.
+
+Extreme (yet useful) examples:
+
+    test.py -vvb . "^testWriteClient$"
+
+    Builds the project silently, then runs unittest in verbose mode on all
+    tests whose names are precisely "testWriteClient".  Useful when
+    debugging a specific test.
+
+    test.py -vvb . "!^testWriteClient$"
+
+    As before, but runs all tests whose names aren't precisely
+    "testWriteClient".  Useful to avoid a specific failing test you don't
+    want to deal with just yet.
+
+    test.py -m . "!^testWriteClient$"
+
+    As before, but now opens up a minimized PyUnit GUI window (only showing
+    the progress bar).  Useful for refactoring runs where you continually want
+    to make sure all tests still pass.
+"""
+
+import gc
+import os
+import re
+import pdb
+import sys
+import threading    # just to get at Thread objects created by tests
+import time
+import traceback
+import unittest
+import warnings
+
+from distutils.util import get_platform
+
+PLAT_SPEC = "%s-%s" % (get_platform(), sys.version[0:3])
+
+class ImmediateTestResult(unittest._TextTestResult):
+
+    __super_init = unittest._TextTestResult.__init__
+    __super_startTest = unittest._TextTestResult.startTest
+    __super_printErrors = unittest._TextTestResult.printErrors
+
+    def __init__(self, stream, descriptions, verbosity, debug=0,
+                 count=None, progress=0):
+        self.__super_init(stream, descriptions, verbosity)
+        self._debug = debug
+        self._progress = progress
+        self._progressWithNames = 0
+        self._count = count
+        self._testtimes = {}
+        # docstrings for tests don't override test-descriptions:
+        self.descriptions = False
+        if progress and verbosity == 1:
+            self.dots = 0
+            self._progressWithNames = 1
+            self._lastWidth = 0
+            self._maxWidth = 80
+            try:
+                import curses
+            except ImportError:
+                pass
+            else:
+                curses.setupterm()
+                self._maxWidth = curses.tigetnum('cols')
+            self._maxWidth -= len("xxxx/xxxx (xxx.x%): ") + 1
+
+    def stopTest(self, test):
+        self._testtimes[test] = time.time() - self._testtimes[test]
+        if gc.garbage:
+            print "The following test left garbage:"
+            print test
+            print gc.garbage
+            # eat the garbage here, so that the garbage isn't
+            # printed for every subsequent test.
+            gc.garbage[:] = []
+
+        # Did the test leave any new threads behind?
+        new_threads = [t for t in threading.enumerate()
+                         if (t.isAlive()
+                             and
+                             t not in self._threads)]
+        if new_threads:
+            print "The following test left new threads behind:"
+            print test
+            print "New thread(s):", new_threads
+
+    def print_times(self, stream, count=None):
+        results = self._testtimes.items()
+        results.sort(lambda x, y: cmp(y[1], x[1]))
+        if count:
+            n = min(count, len(results))
+            if n:
+                print >>stream, "Top %d longest tests:" % n
+        else:
+            n = len(results)
+        if not n:
+            return
+        for i in range(n):
+            print >>stream, "%6dms" % int(results[i][1] * 1000), results[i][0]
+
+    def _print_traceback(self, msg, err, test, errlist):
+        if self.showAll or self.dots or self._progress:
+            self.stream.writeln("\n")
+            self._lastWidth = 0
+
+        tb = "".join(traceback.format_exception(*err))
+        self.stream.writeln(msg)
+        self.stream.writeln(tb)
+        errlist.append((test, tb))
+
+    def startTest(self, test):
+        if self._progress:
+            self.stream.write("\r%4d" % (self.testsRun + 1))
+            if self._count:
+                self.stream.write("/%d (%5.1f%%)" % (self._count,
+                                  (self.testsRun + 1) * 100.0 / self._count))
+            if self.showAll:
+                self.stream.write(": ")
+            elif self._progressWithNames:
+                # XXX will break with multibyte strings
+                name = self.getShortDescription(test)
+                width = len(name)
+                if width < self._lastWidth:
+                    name += " " * (self._lastWidth - width)
+                self.stream.write(": %s" % name)
+                self._lastWidth = width
+            self.stream.flush()
+        self._threads = threading.enumerate()
+        self.__super_startTest(test)
+        self._testtimes[test] = time.time()
+
+    def getShortDescription(self, test):
+        s = self.getDescription(test)
+        if len(s) > self._maxWidth:
+            pos = s.find(" (")
+            if pos >= 0:
+                w = self._maxWidth - (pos + 5)
+                if w < 1:
+                    # first portion (test method name) is too long
+                    s = s[:self._maxWidth-3] + "..."
+                else:
+                    pre = s[:pos+2]
+                    post = s[-w:]
+                    s = "%s...%s" % (pre, post)
+        return s[:self._maxWidth]
+
+    def addError(self, test, err):
+        if self._progress:
+            self.stream.write("\r")
+        if self._debug:
+            raise err[0], err[1], err[2]
+        self._print_traceback("Error in test %s" % test, err,
+                              test, self.errors)
+
+    def addFailure(self, test, err):
+        if self._progress:
+            self.stream.write("\r")
+        if self._debug:
+            raise err[0], err[1], err[2]
+        self._print_traceback("Failure in test %s" % test, err,
+                              test, self.failures)
+
+    def printErrors(self):
+        if self._progress and not (self.dots or self.showAll):
+            self.stream.writeln()
+        self.__super_printErrors()
+
+    def printErrorList(self, flavor, errors):
+        for test, err in errors:
+            self.stream.writeln(self.separator1)
+            self.stream.writeln("%s: %s" % (flavor, self.getDescription(test)))
+            self.stream.writeln(self.separator2)
+            self.stream.writeln(err)
+
+
+class ImmediateTestRunner(unittest.TextTestRunner):
+
+    __super_init = unittest.TextTestRunner.__init__
+
+    def __init__(self, **kwarg):
+        debug = kwarg.get("debug")
+        if debug is not None:
+            del kwarg["debug"]
+        progress = kwarg.get("progress")
+        if progress is not None:
+            del kwarg["progress"]
+        self.__super_init(**kwarg)
+        self._debug = debug
+        self._progress = progress
+
+    def _makeResult(self):
+        return ImmediateTestResult(self.stream, self.descriptions,
+                                   self.verbosity, debug=self._debug,
+                                   count=self._count, progress=self._progress)
+
+    def run(self, test):
+        self._count = test.countTestCases()
+        return unittest.TextTestRunner.run(self, test)
+
+# setup list of directories to put on the path
+class PathInit:
+    def __init__(self, build, build_inplace, libdir=None):
+        self.inplace = None
+        # Figure out if we should test in-place or test in-build.  If the -b
+        # or -B option was given, test in the place we were told to build in.
+        # Otherwise, we'll look for a build directory and if we find one,
+        # we'll test there, otherwise we'll test in-place.
+        if build:
+            self.inplace = build_inplace
+        if self.inplace is None:
+            # Need to figure it out
+            if os.path.isdir(os.path.join("build", "lib.%s" % PLAT_SPEC)):
+                self.inplace = 0
+            else:
+                self.inplace = 1
+        # Calculate which directories we're going to add to sys.path, and cd
+        # to the appropriate working directory
+        org_cwd = os.getcwd()
+        if self.inplace:
+            self.libdir = "src"
+        else:
+            self.libdir = "lib.%s" % PLAT_SPEC
+            os.chdir("build")
+        # Hack sys.path
+        self.cwd = os.getcwd()
+        sys.path.insert(0, os.path.join(self.cwd, self.libdir))
+        # Hack again for external products.
+        global functional
+        kind = functional and "functional" or "unit"
+        if libdir:
+            extra = os.path.join(org_cwd, libdir)
+            print "Running %s tests from %s" % (kind, extra)
+            self.libdir = extra
+            sys.path.insert(0, extra)
+        else:
+            print "Running %s tests from %s" % (kind, self.cwd)
+        # Make sure functional tests find ftesting.zcml
+        if functional:
+            config_file = 'ftesting.zcml'
+            if not self.inplace:
+                # We chdired into build, so ftesting.zcml is in the
+                # parent directory
+                config_file = os.path.join('..', 'ftesting.zcml')
+            print "Parsing %s" % config_file
+            from zope.testing.functional import FunctionalTestSetup
+            FunctionalTestSetup(config_file)
+
+def match(rx, s):
+    if not rx:
+        return 1
+    if rx[0] == "!":
+        return re.search(rx[1:], s) is None
+    else:
+        return re.search(rx, s) is not None
+
+class TestFileFinder:
+    def __init__(self, prefix):
+        self.files = []
+        self._plen = len(prefix)
+        if not prefix.endswith(os.sep):
+            self._plen += 1
+        global functional
+        if functional:
+            self.dirname = "ftest"
+        else:
+            self.dirname = "test"
+
+    def visit(self, rx, dir, files):
+        if os.path.split(dir)[1] != self.dirname:
+            return
+        # ignore tests that aren't in packages
+        if not "__init__.py" in files:
+            if not files or files == ["CVS"]:
+                return
+            print "not a package", dir
+            return
+
+        # Put matching files in matches.  If matches is non-empty,
+        # then make sure that the package is importable.
+        matches = []
+        for file in files:
+            if file.startswith('test') and os.path.splitext(file)[-1] == '.py':
+                path = os.path.join(dir, file)
+                if match(rx, path):
+                    matches.append(path)
+
+        # ignore tests when the package can't be imported, possibly due to
+        # dependency failures.
+        pkg = dir[self._plen:].replace(os.sep, '.')
+        try:
+            __import__(pkg)
+        # We specifically do not want to catch ImportError since that's useful
+        # information to know when running the tests.
+        except RuntimeError, e:
+            if VERBOSE:
+                print "skipping %s because: %s" % (pkg, e)
+            return
+        else:
+            self.files.extend(matches)
+
+    def module_from_path(self, path):
+        """Return the Python package name indicated by the filesystem path."""
+        assert path.endswith(".py")
+        path = path[self._plen:-3]
+        mod = path.replace(os.sep, ".")
+        return mod
+
+def walk_with_symlinks(top, func, arg):
+    """Like os.path.walk, but follows symlinks on POSIX systems.
+
+    This could theoreticaly result in an infinite loop, if you create symlink
+    cycles in your Zope sandbox, so don't do that.
+    """
+    try:
+        # Prevent 'hidden' files (those starting with '.') from being considered.
+        names = [f for f in os.listdir(top) if not f.startswith('.')]
+    except os.error:
+        return
+    func(arg, top, names)
+    exceptions = ('.', '..')
+    for name in names:
+        if name not in exceptions:
+            name = os.path.join(top, name)
+            if os.path.isdir(name):
+                walk_with_symlinks(name, func, arg)
+
+
+def check_test_dir():
+    global test_dir
+    if test_dir and not os.path.exists(test_dir):
+        d = pathinit.libdir
+        d = os.path.join(d, test_dir)
+        if os.path.exists(d):
+            if not os.path.isdir(d):
+                raise ValueError(
+                    "%s does not exist and %s is not a directory"
+                    % (test_dir, d)
+                    )
+            test_dir = d
+        else:
+            raise ValueError("%s does not exist!" % test_dir)
+
+
+def find_tests(rx):
+    global finder
+    finder = TestFileFinder(pathinit.libdir)
+
+    check_test_dir()
+    walkdir = test_dir or pathinit.libdir
+    walk_with_symlinks(walkdir, finder.visit, rx)
+    return finder.files
+
+def package_import(modname):
+    mod = __import__(modname)
+    for part in modname.split(".")[1:]:
+        mod = getattr(mod, part)
+    return mod
+
+def get_suite(file):
+    modname = finder.module_from_path(file)
+    try:
+        mod = package_import(modname)
+    except ImportError, err:
+        # print traceback
+        print "Error importing %s\n%s" % (modname, err)
+        traceback.print_exc()
+        if debug:
+            raise
+        return None
+    try:
+        suite_func = mod.test_suite
+    except AttributeError:
+        print "No test_suite() in %s" % file
+        return None
+    return suite_func()
+
+def filter_testcases(s, rx):
+    new = unittest.TestSuite()
+    for test in s._tests:
+        # See if the levels match
+        dolevel = (level == 0) or level >= getattr(test, "level", 0)
+        if not dolevel:
+            continue
+        if isinstance(test, unittest.TestCase):
+            name = test.id() # Full test name: package.module.class.method
+            name = name[1 + name.rfind("."):] # extract method name
+            if not rx or match(rx, name):
+                new.addTest(test)
+        else:
+            filtered = filter_testcases(test, rx)
+            if filtered:
+                new.addTest(filtered)
+    return new
+
+def gui_runner(files, test_filter):
+    if build_inplace:
+        utildir = os.path.join(os.getcwd(), "utilities")
+    else:
+        utildir = os.path.join(os.getcwd(), "..", "utilities")
+    sys.path.append(utildir)
+    import unittestgui
+    suites = []
+    for file in files:
+        suites.append(finder.module_from_path(file) + ".test_suite")
+
+    suites = ", ".join(suites)
+    minimal = (GUI == "minimal")
+    # unittestgui apparently doesn't take the minimal flag anymore
+    unittestgui.main(suites)
+
+class TrackRefs:
+    """Object to track reference counts across test runs."""
+
+    def __init__(self):
+        self.type2count = {}
+        self.type2all = {}
+
+    def update(self):
+        obs = sys.getobjects(0)
+        type2count = {}
+        type2all = {}
+        for o in obs:
+            all = sys.getrefcount(o)
+            t = type(o)
+            if t in type2count:
+                type2count[t] += 1
+                type2all[t] += all
+            else:
+                type2count[t] = 1
+                type2all[t] = all
+
+        ct = [(type2count[t] - self.type2count.get(t, 0),
+               type2all[t] - self.type2all.get(t, 0),
+               t)
+              for t in type2count.iterkeys()]
+        ct.sort()
+        ct.reverse()
+        for delta1, delta2, t in ct:
+            if delta1 or delta2:
+                print "%-55s %8d %8d" % (t, delta1, delta2)
+
+        self.type2count = type2count
+        self.type2all = type2all
+
+def runner(files, test_filter, debug):
+    runner = ImmediateTestRunner(verbosity=VERBOSE, debug=debug,
+        progress=progress)
+    suite = unittest.TestSuite()
+    for file in files:
+        s = get_suite(file)
+        # See if the levels match
+        dolevel = (level == 0) or level >= getattr(s, "level", 0)
+        if s is not None and dolevel:
+            s = filter_testcases(s, test_filter)
+            suite.addTest(s)
+    try:
+        r = runner.run(suite)
+        if timesfn:
+            r.print_times(open(timesfn, "w"))
+            if VERBOSE:
+                print "Wrote timing data to", timesfn
+        if timetests:
+            r.print_times(sys.stdout, timetests)
+    except:
+        if debugger:
+            print "%s:" % (sys.exc_info()[0], )
+            print sys.exc_info()[1]
+            pdb.post_mortem(sys.exc_info()[2])
+        else:
+            raise
+
+def remove_stale_bytecode(arg, dirname, names):
+    names = map(os.path.normcase, names)
+    for name in names:
+        if name.endswith(".pyc") or name.endswith(".pyo"):
+            srcname = name[:-1]
+            if srcname not in names:
+                fullname = os.path.join(dirname, name)
+                print "Removing stale bytecode file", fullname
+                os.unlink(fullname)
+
+def main(module_filter, test_filter, libdir):
+    if not keepStaleBytecode:
+        os.path.walk(os.curdir, remove_stale_bytecode, None)
+
+    # Get the log.ini file from the current directory instead of possibly
+    # buried in the build directory.  XXX This isn't perfect because if
+    # log.ini specifies a log file, it'll be relative to the build directory.
+    # Hmm...
+    logini = os.path.abspath("log.ini")
+
+    # Initialize the path and cwd
+    global pathinit
+    pathinit = PathInit(build, build_inplace, libdir)
+
+    # Initialize the logging module.
+
+    import logging.config
+    logging.basicConfig()
+
+    level = os.getenv("LOGGING")
+    if level:
+        level = int(level)
+    else:
+        level = logging.CRITICAL
+    logging.root.setLevel(level)
+
+    if os.path.exists(logini):
+        logging.config.fileConfig(logini)
+
+    files = find_tests(module_filter)
+    files.sort()
+
+    if GUI:
+        gui_runner(files, test_filter)
+    elif LOOP:
+        if REFCOUNT:
+            rc = sys.gettotalrefcount()
+            track = TrackRefs()
+        while 1:
+            runner(files, test_filter, debug)
+            gc.collect()
+            if gc.garbage:
+                print "GARBAGE:", len(gc.garbage), gc.garbage
+                return
+            if REFCOUNT:
+                prev = rc
+                rc = sys.gettotalrefcount()
+                print "totalrefcount=%-8d change=%-6d" % (rc, rc - prev)
+                track.update()
+    else:
+        runner(files, test_filter, debug)
+
+
+def process_args(argv=None):
+    import getopt
+    global module_filter
+    global test_filter
+    global VERBOSE
+    global LOOP
+    global GUI
+    global TRACE
+    global REFCOUNT
+    global debug
+    global debugger
+    global build
+    global level
+    global libdir
+    global timesfn
+    global timetests
+    global progress
+    global build_inplace
+    global keepStaleBytecode
+    global functional
+    global test_dir
+
+    if argv is None:
+        argv = sys.argv
+
+    module_filter = None
+    test_filter = None
+    VERBOSE = 2
+    LOOP = 0
+    GUI = 0
+    TRACE = 0
+    REFCOUNT = 0
+    debug = 0 # Don't collect test results; simply let tests crash
+    debugger = 0
+    build = 0
+    build_inplace = 0
+    gcthresh = None
+    gcdebug = 0
+    gcflags = []
+    level = 1
+    libdir = '.'
+    progress = 0
+    timesfn = None
+    timetests = 0
+    keepStaleBytecode = 0
+    functional = 0
+    test_dir = None
+
+    try:
+        opts, args = getopt.getopt(argv[1:], "a:bBcdDfg:G:hLmprtTuv",
+                                   ["all", "help", "libdir=", "times=",
+                                    "keepbytecode", "dir=", "build"])
+    except getopt.error, msg:
+        print msg
+        print "Try `python %s -h' for more information." % argv[0]
+        sys.exit(2)
+
+    for k, v in opts:
+        if k == "-a":
+            level = int(v)
+        elif k == "--all":
+            level = 0
+            os.environ["COMPLAIN_IF_TESTS_MISSED"]='1'
+        elif k in ("-b", "--build"):
+            build = 1
+        elif k == "-B":
+             build = build_inplace = 1
+        elif k == "-c":
+            # make sure you have a recent version of pychecker
+            if not os.environ.get("PYCHECKER"):
+                os.environ["PYCHECKER"] = "-q"
+            import pychecker.checker
+        elif k == "-d":
+            debug = 1
+        elif k == "-D":
+            debug = 1
+            debugger = 1
+        elif k == "-f":
+            functional = 1
+        elif k in ("-h", "--help"):
+            print __doc__
+            sys.exit(0)
+        elif k == "-g":
+            gcthresh = int(v)
+        elif k == "-G":
+            if not v.startswith("DEBUG_"):
+                print "-G argument must be DEBUG_ flag, not", repr(v)
+                sys.exit(1)
+            gcflags.append(v)
+        elif k == '--keepbytecode':
+            keepStaleBytecode = 1
+        elif k == '--libdir':
+            libdir = v
+        elif k == "-L":
+            LOOP = 1
+        elif k == "-m":
+            GUI = "minimal"
+        elif k == "-p":
+            progress = 1
+        elif k == "-r":
+            if hasattr(sys, "gettotalrefcount"):
+                REFCOUNT = 1
+            else:
+                print "-r ignored, because it needs a debug build of Python"
+        elif k == "-T":
+            TRACE = 1
+        elif k == "-t":
+            if not timetests:
+                timetests = 50
+        elif k == "-u":
+            GUI = 1
+        elif k == "-v":
+            VERBOSE += 1
+        elif k == "--times":
+            try:
+                timetests = int(v)
+            except ValueError:
+                # must be a filename to write
+                timesfn = v
+        elif k == '--dir':
+            test_dir = v
+
+    if gcthresh is not None:
+        if gcthresh == 0:
+            gc.disable()
+            print "gc disabled"
+        else:
+            gc.set_threshold(gcthresh)
+            print "gc threshold:", gc.get_threshold()
+
+    if gcflags:
+        val = 0
+        for flag in gcflags:
+            v = getattr(gc, flag, None)
+            if v is None:
+                print "Unknown gc flag", repr(flag)
+                print gc.set_debug.__doc__
+                sys.exit(1)
+            val |= v
+        gcdebug |= v
+
+    if gcdebug:
+        gc.set_debug(gcdebug)
+
+    if build:
+        # Python 2.3 is more sane in its non -q output
+        if sys.hexversion >= 0x02030000:
+            qflag = ""
+        else:
+            qflag = "-q"
+        cmd = sys.executable + " setup.py " + qflag + " build"
+        if build_inplace:
+            cmd += "_ext -i"
+        if VERBOSE:
+            print cmd
+        sts = os.system(cmd)
+        if sts:
+            print "Build failed", hex(sts)
+            sys.exit(1)
+
+    if VERBOSE:
+        kind = functional and "functional" or "unit"
+        if level == 0:
+            print "Running %s tests at all levels" % kind
+        else:
+            print "Running %s tests at level %d" % (kind, level)
+
+    # XXX We want to change *visible* warnings into errors.  The next
+    # line changes all warnings into errors, including warnings we
+    # normally never see.  In particular, test_datetime does some
+    # short-integer arithmetic that overflows to long ints, and, by
+    # default, Python doesn't display the overflow warning that can
+    # be enabled when this happens.  The next line turns that into an
+    # error instead.  Guido suggests that a better to get what we're
+    # after is to replace warnings.showwarning() with our own thing
+    # that raises an error.
+##    warnings.filterwarnings("error")
+    warnings.filterwarnings("ignore", module="logging")
+
+    if args:
+        if len(args) > 1:
+            test_filter = args[1]
+        module_filter = args[0]
+    try:
+        if TRACE:
+            # if the trace module is used, then we don't exit with
+            # status if on a false return value from main.
+            coverdir = os.path.join(os.getcwd(), "coverage")
+            import trace
+            ignoremods = ["os", "posixpath", "stat"]
+            tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
+                                 ignoremods=ignoremods,
+                                 trace=0, count=1)
+
+            tracer.runctx("main(module_filter, test_filter, libdir)",
+                          globals=globals(), locals=vars())
+            r = tracer.results()
+            path = "/tmp/trace.%s" % os.getpid()
+            import cPickle
+            f = open(path, "wb")
+            cPickle.dump(r, f)
+            f.close()
+            print path
+            r.write_results(show_missing=1, summary=1, coverdir=coverdir)
+        else:
+            bad = main(module_filter, test_filter, libdir)
+            if bad:
+                sys.exit(1)
+    except ImportError, err:
+        print err
+        print sys.path
+        raise
+
+
+if __name__ == "__main__":
+    process_args()
diff --git a/.svn/text-base/setup.py.svn-base b/.svn/text-base/setup.py.svn-base
new file mode 100644 (file)
index 0000000..5908f97
--- /dev/null
@@ -0,0 +1,138 @@
+#! /usr/bin/env python
+#
+# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
+# This module is free software, and you may redistribute it and/or modify
+# under the same terms as Python, so long as this copyright message and
+# disclaimer are retained in their original form.
+#
+# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
+# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
+# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE.  THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
+# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
+# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+#
+
+
+from roundup.dist.command.build_doc import build_doc
+from roundup.dist.command.build_scripts import build_scripts
+from roundup.dist.command.build_py import build_py
+from roundup.dist.command.build import build, list_message_files
+from roundup.dist.command.bdist_rpm import bdist_rpm
+from distutils.core import setup
+
+import sys, os
+from glob import glob
+
+# patch distutils if it can't cope with the "classifiers" keyword
+from distutils.dist import DistributionMetadata
+if not hasattr(DistributionMetadata, 'classifiers'):
+    DistributionMetadata.classifiers = None
+    DistributionMetadata.download_url = None
+
+def include(d, e):
+    """Generate a pair of (directory, file-list) for installation.
+
+    'd' -- A directory
+
+    'e' -- A glob pattern"""
+
+    return (d, [f for f in glob('%s/%s'%(d, e)) if os.path.isfile(f)])
+
+def scriptname(path):
+    """ Helper for building a list of script names from a list of
+        module files.
+    """
+    script = os.path.splitext(os.path.basename(path))[0]
+    script = script.replace('_', '-')
+    return script
+
+def main():
+    # template munching
+    packages = [
+        'roundup',
+        'roundup.anypy',
+        'roundup.cgi',
+        'roundup.cgi.PageTemplates',
+        'roundup.cgi.TAL',
+        'roundup.cgi.ZTUtils',
+        'roundup.backends',
+        'roundup.scripts',
+    ]
+    py_modules = ['roundup.demo',]
+
+    # build list of scripts from their implementation modules
+    scripts = [scriptname(f) for f in glob('roundup/scripts/[!_]*.py')]
+
+    data_files = [
+        ('share/roundup/cgi-bin', ['frontends/roundup.cgi']),
+    ]
+    # install man pages on POSIX platforms
+    if os.name == 'posix':
+        data_files.append(include('share/man/man1', '*'))
+
+    # add the templates to the data files lists
+    from roundup.init import listTemplates
+    templates = [t['path']
+                 for t in listTemplates('share/roundup/templates').values()]
+    for tdir in templates:
+        for idir in '. detectors extensions html'.split():
+            data_files.append(include(os.path.join(tdir, idir), '*'))
+
+    # add message files
+    for (_dist_file, _mo_file) in list_message_files():
+        data_files.append((os.path.dirname(_mo_file),
+                           [os.path.join("build", _mo_file)]))
+
+    # add docs
+    data_files.append(include('share/doc/roundup/html', '*'))
+
+    # perform the setup action
+    from roundup import __version__
+
+    setup(name='roundup',
+          version=__version__,
+          author="Richard Jones",
+          author_email="richard@users.sourceforge.net",
+          description="A simple-to-use and -install issue-tracking system"
+            " with command-line, web and e-mail interfaces. Highly"
+            " customisable.",
+          long_description=open('doc/announcement.txt').read(),
+          url='http://www.roundup-tracker.org',
+          download_url='http://pypi.python.org/pypi/roundup',
+          classifiers=['Development Status :: 5 - Production/Stable',
+                       'Environment :: Console',
+                       'Environment :: Web Environment',
+                       'Intended Audience :: End Users/Desktop',
+                       'Intended Audience :: Developers',
+                       'Intended Audience :: System Administrators',
+                       'License :: OSI Approved :: Python Software Foundation License',
+                       'Operating System :: MacOS :: MacOS X',
+                       'Operating System :: Microsoft :: Windows',
+                       'Operating System :: POSIX',
+                       'Programming Language :: Python',
+                       'Topic :: Communications :: Email',
+                       'Topic :: Office/Business',
+                       'Topic :: Software Development :: Bug Tracking',
+                       ],
+
+          # Override certain command classes with our own ones
+          cmdclass= {'build_doc': build_doc,
+                     'build_scripts': build_scripts,
+                     'build_py': build_py,
+                     'build': build,
+                     'bdist_rpm': bdist_rpm,
+                     },
+          packages=packages,
+          py_modules=py_modules,
+          scripts=scripts,
+          data_files=data_files)
+
+if __name__ == '__main__':
+    main()
+
+# vim: set filetype=python sts=4 sw=4 et si :
diff --git a/2to3-done.txt b/2to3-done.txt
new file mode 100644 (file)
index 0000000..5aeb5fa
--- /dev/null
@@ -0,0 +1,159 @@
+CAN'T VERIFY
+
+./roundup/backends/back_mysql.py
+./roundup/backends/back_tsearch2.py
+
+TODO
+
+./roundup/cgi/exceptions.py
+./roundup/cgi/form_parser.py
+./roundup/cgi/MultiMapping.py
+./roundup/cgi/PageTemplates/__init__.py
+./roundup/cgi/PageTemplates/Expressions.py
+./roundup/cgi/PageTemplates/GlobalTranslationService.py
+./roundup/cgi/PageTemplates/MultiMapping.py
+./roundup/cgi/PageTemplates/PageTemplate.py
+./roundup/cgi/PageTemplates/PathIterator.py
+./roundup/cgi/PageTemplates/PythonExpr.py
+./roundup/cgi/PageTemplates/TALES.py
+./roundup/cgi/TAL/__init__.py
+./roundup/cgi/TAL/DummyEngine.py
+./roundup/cgi/TAL/HTMLParser.py
+./roundup/cgi/TAL/HTMLTALParser.py
+./roundup/cgi/TAL/markupbase.py
+./roundup/cgi/TAL/TALDefs.py
+./roundup/cgi/TAL/TALGenerator.py
+./roundup/cgi/TAL/talgettext.py
+./roundup/cgi/TAL/TALInterpreter.py
+./roundup/cgi/TAL/TALParser.py
+./roundup/cgi/TAL/TranslationContext.py
+./roundup/cgi/TAL/XMLParser.py
+./roundup/cgi/templating.py
+./roundup/cgi/TranslationService.py
+./roundup/cgi/wsgi_handler.py
+./roundup/cgi/zLOG.py
+./roundup/cgi/ZTUtils/__init__.py
+./roundup/cgi/ZTUtils/Batch.py
+./roundup/cgi/ZTUtils/Iterator.py
+./roundup/configuration.py
+./roundup/date.py
+./roundup/dist/__init__.py
+./roundup/dist/command/__init__.py
+./roundup/dist/command/bdist_rpm.py
+./roundup/dist/command/build.py
+./roundup/dist/command/build_doc.py
+./roundup/dist/command/build_py.py
+./roundup/dist/command/build_scripts.py
+./roundup/exceptions.py
+./roundup/hyperdb.py
+./roundup/i18n.py
+./roundup/init.py
+./roundup/install_util.py
+./roundup/instance.py
+./roundup/mailer.py
+./roundup/mailgw.py
+./roundup/msgfmt.py
+./roundup/password.py
+./roundup/rfc2822.py
+./roundup/roundupdb.py
+./roundup/scripts/__init__.py
+./roundup/scripts/roundup_admin.py
+./roundup/scripts/roundup_demo.py
+./roundup/scripts/roundup_gettext.py
+./roundup/scripts/roundup_mailgw.py
+./roundup/scripts/roundup_server.py
+./roundup/scripts/roundup_xmlrpc_server.py
+./roundup/security.py
+./roundup/support.py
+./roundup/token.py
+./roundup/version_check.py
+./roundup/xmlrpc.py
+./run_tests.py
+./scripts/copy-user.py
+./scripts/imapServer.py
+./scripts/import_sf.py
+./scripts/schema_diagram.py
+./setup.py
+./share/roundup/templates/classic/detectors/messagesummary.py
+./share/roundup/templates/classic/detectors/nosyreaction.py
+./share/roundup/templates/classic/detectors/statusauditor.py
+./share/roundup/templates/classic/detectors/userauditor.py
+./share/roundup/templates/classic/initial_data.py
+./share/roundup/templates/classic/schema.py
+./share/roundup/templates/minimal/detectors/userauditor.py
+./share/roundup/templates/minimal/initial_data.py
+./share/roundup/templates/minimal/schema.py
+./test/__init__.py
+./test/benchmark.py
+./test/db_test_base.py
+./test/memorydb.py
+./test/mocknull.py
+./test/session_common.py
+./test/test_actions.py
+./test/test_anydbm.py
+./test/test_anypy_hashlib.py
+./test/test_cgi.py
+./test/test_dates.py
+./test/test_hyperdbvals.py
+./test/test_indexer.py
+./test/test_locking.py
+./test/test_mailer.py
+./test/test_mailgw.py
+./test/test_mailsplit.py
+./test/test_memorydb.py
+./test/test_multipart.py
+./test/test_mysql.py
+./test/test_postgresql.py
+./test/test_rfc2822.py
+./test/test_schema.py
+./test/test_security.py
+./test/test_sqlite.py
+./test/test_templating.py
+./test/test_textfmt.py
+./test/test_token.py
+./test/test_tsearch2.py
+./test/test_userauditor.py
+./test/test_xmlrpc.py
+./test.py
+./tools/fixroles.py
+./tools/load_tracker.py
+./tools/migrate-queries.py
+./tools/pygettext.py
+./frontends/ZRoundup/__init__.py
+./frontends/ZRoundup/ZRoundup.py
+
+
+DONE
+
+./doc/conf.py
+./roundup/admin.py
+./roundup/backends/__init__.py
+./roundup/backends/back_anydbm.py
+./roundup/backends/back_postgresql.py
+./roundup/backends/back_sqlite.py
+./roundup/backends/indexer_common.py
+./roundup/backends/indexer_dbm.py
+./roundup/backends/indexer_rdbms.py
+./roundup/backends/locking.py
+./roundup/backends/portalocker.py
+./roundup/backends/rdbms_common.py
+./roundup/backends/sessions_dbm.py
+./roundup/backends/sessions_rdbms.py
+./roundup/cgi/accept_language.py
+./roundup/cgi/actions.py
+./roundup/cgi/cgitb.py
+
+
+NOTHING DONE
+
+./roundup/__init__.py
+./roundup/actions.py
+./roundup/anypy/__init__.py
+./roundup/anypy/hashlib_.py
+./roundup/anypy/sets_.py
+./roundup/backends/blobfiles.py
+./roundup/backends/indexer_xapian.py
+./roundup/backends/tsearch2_setup.py
+./roundup/cgi/__init__.py
+./roundup/cgi/apache.py
+./roundup/cgi/client.py
diff --git a/BUILD.txt b/BUILD.txt
new file mode 100644 (file)
index 0000000..029e46e
--- /dev/null
+++ b/BUILD.txt
@@ -0,0 +1,54 @@
+Building Releases
+=================
+
+Roundup is currently a source-only release - it has no binary components. I
+want it to stay that way, too. This document describes how to build a
+source release. Users of Roundup should read the doc/installation.txt file
+to find out how to install this software.
+
+Building and distributing a release of Roundup is done by running:
+
+1.  Make sure the unit tests run! "./run_tests.py"
+2.  Edit roundup/__init__.py and doc/announcement.txt to reflect the new
+    version and appropriate announcements. Add truncated announcement to
+    setup.py description field.
+3.  Note the SVN revision in the CHANGES.txt file.
+4.  Clean out all *.orig, *.rej, .#* files from the source.
+5.  python setup.py clean --all
+6.  Edit setup.py to ensure that all information therein (version, contact
+    information etc) is correct.
+7.  python setup.py sdist --manifest-only
+8.  Check the MANIFEST to make sure that any new files are included. If
+    they are not, edit MANIFEST.in to include them. "Documentation" for
+    MANIFEST.in may be found in disutils.filelist._parse_template_line.
+9.  python setup.py sdist
+    (if you find sdist a little verbose, add "--quiet" to the end of the
+     command)
+10. Unpack the new dist file in /tmp then a) run_test.py and b) demo.py
+    with all available Python versions.
+11. Assuming all is well tag the release in SVN::
+
+      svn cp https://roundup.svn.sourceforge.net/svnroot/roundup/roundup/trunk \
+      https://roundup.svn.sourceforge.net/svnroot/roundup/roundup/tags/release-1.4.12
+
+11. python setup.py bdist_rpm
+12. python setup.py bdist_wininst
+13. Send doc/announcement.txt to python-announce@python.org and
+    roundup-users@lists.sourceforge.net and
+    roundup-devel@lists.sourceforge.net
+
+So, those commands in a nice, cut'n'pasteable form::
+
+ find . -name '*.orig' -exec rm {} \;
+ find . -name '*.rej' -exec rm {} \;
+ find . -name '.#*' -exec rm {} \;
+ python setup.py clean --all
+ python setup.py sdist --manifest-only
+ python setup.py sdist --quiet
+ python setup.py bdist_rpm
+ python setup.py bdist_wininst
+ python setup.py register
+ python setup.py sdist upload --sign
+ python setup.py bdist_wininst upload --sign
+
+(if the last two fail make sure you're using python2.5+)
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644 (file)
index 0000000..29bb127
--- /dev/null
@@ -0,0 +1,2325 @@
+This file contains the changes to the Roundup system over time. The entries
+are given with the most recent entry first.
+
+2010-??0?? 1.5.1
+
+Fixed:
+- Handle multiple @action values from broken trackers.
+- Accept single-character subject lines
+- xmlrpc handling of unicode characters and binary values, see
+  http://thread.gmane.org/gmane.comp.bug-tracking.roundup.user/10040
+  thanks to Hauke Duden for reporting these.
+- frontends/roundup.cgi got out of sync with the roundup.cgi.Client API
+- Default to "text/plain" if no Content-Type header is present in email
+  (thanks Hauke Duden)
+- Small documentation update regarding debugging aids (Bernhard Reiter)
+
+
+2010-02-23 1.5.0
+
+Fixed:
+- The email for the first message on an issue was having its In-Reply-To
+  set to itself (thanks Eric Kow)
+
+
+2010-02-19 1.4.13
+
+Fixed:
+- Multilink edit fields lose their values (thanks Will Maier)
+
+
+2010-02-09 1.4.12 (r4455)
+
+Features:
+- Support IMAP CRAM-MD5, thanks Jochen Maes
+
+Fixes:
+- Proper handling of 'Create' permissions in both mail gateway (earlier
+  commit r4405 by Richard), web interface, and xmlrpc. This used to
+  check 'Edit' permission previously. See
+  http://thread.gmane.org/gmane.comp.bug-tracking.roundup.devel/5133
+  Add regression tests for proper handling of 'Create' and 'Edit'
+  permissions.
+- Fix handling of non-ascii in realname in the nosy mailer, this used to
+  mangle the email address making it unusable when replying. Thanks to
+  intevation for funding the fix.
+- Fix documentation on user required to run the tests, fixes 
+  issue2550618, thanks to Chris aka 'radioking'
+- Add simple doc about translating customised tracker content
+- Add "flup" setup documentation, thanks Christian Glass
+- Fix "Web Access" permission check to allow serving of static files to
+  Anonymous again
+- Add check for "Web Access" permission in all web templating permission
+  checks
+- Improvements in upgrading documentation, thanks Christian Glass
+- Display 'today' in the account user's timezone, thanks David Wolever
+- Fix file handle leak in some web interfaces with logging turned on,
+  fixes issue1675845
+- Attempt to generate more human-readable addresses in email, fixes
+  issue2550632
+- Allow value to be specified to multilink form element templating, fixes
+  issue2550613, thanks David Wolever
+- Fix thread safety with stdin in roundup-server, fixes issue2550596
+  (thanks Werner Hunger)
+
+
+2009-12-21 1.4.11 (r4413)
+
+Features:
+- Generic class editor may now restore retired items (thanks Ralf Hemmecke)
+
+Fixes:
+- Fix security hole allowing user permission escalation (thanks Ralf
+  Schlatterbeck)
+- More SSL fixes. SSL wants the underlying socket non-blocking. So we
+  don't call socket.setdefaulttimeout in case of SSL. This apparently
+  never raises a WantReadError from SSL.
+  This also fixes a case where a WantReadError is raised and apparently
+  the bytes already read are dropped (seems the WantReadError is really
+  an error, not just an indication to retry).
+- Correct initial- and end-handshakes for SSL
+- Update FAQ to mention infinite redirects with pathological settings of
+  the tracker->web variable. Closes issue2537286, thanks to "stuidge"
+  for reporting.
+- Fix some format errors in italian translation file
+- Some bugs issue classifiers were causing database lookup errors
+- Fix security-problem: If user hasn't permission on a message (notably
+  files and content properties) and is on the nosy list, the content was
+  sent via email. We now check that user has permission on the message
+  content and files properties. Thanks to Intevation for funding this
+  fix.
+- Fix traceback on .../msgN/ url, this requests the file content and for
+  apache mod_wsgi produced a traceback because the mime type is None for
+  messages, fixes issue2550586, thanks to Thomas Arendsen Hein for
+  reporting and to Intevation for funding the fix.
+- Handle OPTIONS http request method in wsgi handler, fixes issue2550587.
+  Thanks to Thomas Arendsen Hein for reporting and to Intevation for
+  funding the fix.
+- Add documentation for migrating to the Register permission and
+  fix mailgw to use Register permission, fixes issue2550599
+- Fix styling of calendar to make it more usable, fixes issue2550608
+- Fix typo in email section of user guide, fixes issue2550607
+- Fix WSGI response code (thanks Peter Pöml)
+- Fix linking of an existing item to a newly created item, e.g.
+  edit action in web template is name="issue-1@link@msg" value="msg1"
+  would trigger a traceback about an unbound variable.
+  Add new regression test for this case. May be related to (now closed)
+  issue1177477. Thanks to Intevation for funding the fix.
+- Clean up all the places where role processing occurs. This is now in a
+  central place in hyperdb.Class and is used consistently throughout.
+  This also means now a template can override the way role processing
+  occurs (e.g. for elaborate permission schemes). Thanks to intevation
+  for funding the change.
+- Fix issue2550606 (german translation bug) "an hour" is only used in
+  the context "in an hour" or "an hour ago" which translates to german
+  "in einer Stunde" or "vor einer Stunde".  So "an hour" is translated
+  "einer Stunde" (which sounds wrong at first).  Also note that date.py
+  already has a comment saying "XXX this is internationally broken" --
+  but at least there's a workaround for german :-) Thanks to Chris
+  (radioking) for reporting.
+
+
+2009-10-09 1.4.10 (r4374)
+
+Fixes:
+- Minor update of doc/developers.txt to point to the new resources
+  on www.roundup-tracker.org (Bernhard Reiter)
+- Small CSS improvements regaring the search box (thanks Thomas Arendsen Hein)
+  (issue 2550589)
+- Indexers behaviour made more consistent regarding length of indexed words
+  and stopwords (thanks Thomas Arendsen Hein, Bernhard Reiter)(issue 2550584)
+- fixed typos in the installation instructions (thanks Thomas Arendsen Hein)
+  (issue 2550573) 
+- New config option csv_field_size: Pythons csv module (which is used
+  for export/import) has a new field size limit starting with python2.5.
+  We now issue a warning during export if the limit is too small and use
+  the csv_field_size configuration during import to set the limit for
+  the csv module. (Ralf Schlatterbeck)
+- Small fix for CGI-handling of XMLRPC requests for python2.4, this
+  worked only for 2.5 and beyond due to a change in the xmlrpc interface
+  in python (Ralf Schlatterbeck)
+- Document filter method of xmlrpc interface (Ralf Schlatterbeck)
+- Fix interaction of SSL and XMLRPC, now XMLRPC works with SSL 
+  (Ralf Schlatterbeck)
+
+2009-08-10 1.4.9 (r4346)
+
+Fixes:
+- fixed action taken in response to invalid GET request
+- fixed classic tracker template to submit POST requests when appropriate
+- fix problems with french and german locale files (issue 2550546)
+- Run each message of the mail-gateway in a separate transaction,
+  see http://thread.gmane.org/gmane.comp.bug-tracking.roundup.user/9500
+- fix problem with bounce-message if incoming mail has insufficient
+  privilege, e.g., user not existing (issue 2550534)
+- fix construction of individual messages to nosy recipents with
+  attachments (issue 2550568)
+- re-order sqlite imports to handle multiple installed versions (issue
+  2550570)
+- don't show entire history by default
+  (fixes http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=540629)
+- remove use of string exception
+
+
+2009-03-18 1.4.8 (r4209)
+
+Fixes:
+- bug introduced into hyperdb filter (issue 2550505)
+- bug introduced into CVS export and view (issue 2550529)
+- bugs introduced in the migration to the email package (issue 2550531)
+- handle bogus pagination values (issue 2550530)
+- fix TLS handling with some SMTP servers (issues 2484879 an