├── .gitattributes ├── .github ├── posix-prepare.sh ├── posix-test-minimum.sh ├── posix-test.sh ├── release-upload.sh ├── release.sh ├── requirements-minimum.txt ├── requirements.txt ├── svn-py312.patch ├── svn-swig41.patch ├── vcpkg.txt ├── windows-prepare.ps1 ├── windows-test-minimum.ps1 ├── windows-test.ps1 └── workflows │ └── build.yml ├── .gitignore ├── .hgeol ├── .hgignore ├── .tx └── config ├── AUTHORS ├── COPYING ├── ChangeLog ├── INSTALL.rst ├── Makefile ├── Makefile.cfg.sample ├── README.rst ├── RELEASE.rst ├── THANKS ├── UPGRADE.rst ├── contrib ├── README ├── checksum.py ├── checkwiki.py ├── htdigest.py ├── htpasswd.py ├── jinjachecker.py ├── l10n_diff_index.py ├── l10n_reset_en_GB.py ├── l10n_revert_lineno_conflicts.py ├── make_status.py ├── merge_catalog.py ├── trac-pre-commit-hook ├── trac-svn-hook ├── trac-svn-post-commit-hook.cmd ├── wiki2rst.py └── workflow │ ├── README │ ├── enterprise-workflow.ini │ ├── migrate_original_to_basic.py │ ├── opensource-workflow.ini │ ├── showworkflow │ ├── simple-workflow.ini │ ├── trivial-workflow.ini │ └── workflow_parser.py ├── doc ├── README ├── api │ ├── index.rst │ ├── trac_about.rst │ ├── trac_admin_api.rst │ ├── trac_admin_console.rst │ ├── trac_admin_web_ui.rst │ ├── trac_attachment.rst │ ├── trac_cache.rst │ ├── trac_config.rst │ ├── trac_core.rst │ ├── trac_db_api.rst │ ├── trac_db_mysql_backend.rst │ ├── trac_db_pool.rst │ ├── trac_db_postgres_backend.rst │ ├── trac_db_schema.rst │ ├── trac_db_sqlite_backend.rst │ ├── trac_db_util.rst │ ├── trac_dist.rst │ ├── trac_env.rst │ ├── trac_loader.rst │ ├── trac_log.rst │ ├── trac_mimeview.rst │ ├── trac_notification_api.rst │ ├── trac_notification_mail.rst │ ├── trac_perm.rst │ ├── trac_prefs_api.rst │ ├── trac_prefs_web_ui.rst │ ├── trac_resource.rst │ ├── trac_search_api.rst │ ├── trac_search_web_ui.rst │ ├── trac_ticket_admin.rst │ ├── trac_ticket_api.rst │ ├── trac_ticket_batch.rst │ ├── trac_ticket_default_workflow.rst │ ├── trac_ticket_model.rst │ ├── trac_ticket_notification.rst │ ├── trac_ticket_query.rst │ ├── trac_ticket_report.rst │ ├── trac_ticket_roadmap.rst │ ├── trac_ticket_web_ui.rst │ ├── trac_timeline_api.rst │ ├── trac_timeline_web_ui.rst │ ├── trac_util.rst │ ├── trac_util_autoreload.rst │ ├── trac_util_compat.rst │ ├── trac_util_concurrency.rst │ ├── trac_util_daemon.rst │ ├── trac_util_datefmt.rst │ ├── trac_util_html.rst │ ├── trac_util_presentation.rst │ ├── trac_util_text.rst │ ├── trac_util_translation.rst │ ├── trac_versioncontrol_admin.rst │ ├── trac_versioncontrol_api.rst │ ├── trac_versioncontrol_cache.rst │ ├── trac_versioncontrol_diff.rst │ ├── trac_versioncontrol_svn_authz.rst │ ├── trac_versioncontrol_web_ui_browser.rst │ ├── trac_versioncontrol_web_ui_changeset.rst │ ├── trac_versioncontrol_web_ui_log.rst │ ├── trac_versioncontrol_web_ui_util.rst │ ├── trac_web_api.rst │ ├── trac_web_auth.rst │ ├── trac_web_chrome.rst │ ├── trac_web_href.rst │ ├── trac_web_main.rst │ ├── trac_web_session.rst │ ├── trac_web_standalone.rst │ ├── trac_web_wsgi.rst │ ├── trac_wiki_admin.rst │ ├── trac_wiki_api.rst │ ├── trac_wiki_formatter.rst │ ├── trac_wiki_intertrac.rst │ ├── trac_wiki_interwiki.rst │ ├── trac_wiki_macros.rst │ ├── trac_wiki_model.rst │ ├── trac_wiki_parser.rst │ ├── trac_wiki_web_api.rst │ ├── trac_wiki_web_ui.rst │ ├── tracopt_perm_authz_policy.rst │ ├── tracopt_perm_config_perm_provider.rst │ ├── tracopt_ticket_clone.rst │ ├── tracopt_ticket_commit_updater.rst │ ├── tracopt_ticket_deleter.rst │ ├── tracopt_versioncontrol_git_PyGIT.rst │ ├── tracopt_versioncontrol_git_git_fs.rst │ ├── tracopt_versioncontrol_svn_svn_fs.rst │ └── tracopt_versioncontrol_svn_svn_prop.rst ├── conf.py ├── dev │ ├── testing-core.rst │ ├── testing-database.rst │ ├── testing-environment.rst │ ├── testing-intro.rst │ ├── testing-plugins.rst │ └── testing.rst ├── glossary.rst ├── images │ ├── bkgnd_pattern.png │ ├── trac_logo.png │ └── vertbars.png ├── index.rst ├── todo.rst └── utils │ ├── checkapidoc.py │ ├── epydoc.conf │ ├── epydoc.css │ ├── python.txt │ ├── runepydoc.py │ ├── trac_dev_pdf.style │ └── tracsphinx.css ├── messages-js.cfg ├── messages.cfg ├── requirements-release.txt ├── sample-plugins ├── HelloWorld.py ├── Timestamp.py ├── milestone_to_version.py ├── permissions │ ├── debug_perm.py │ ├── public_wiki_policy.py │ └── vulnerability_tickets.py ├── revision_links.py └── workflow │ ├── CodeReview.py │ ├── DeleteTicket.py │ ├── MilestoneOperation.py │ ├── StatusFixer.py │ ├── VoteOperation.py │ └── enterprise-review-workflow.ini ├── setup.cfg ├── setup.py ├── setup_wininst.bmp ├── trac ├── __init__.py ├── about.py ├── admin │ ├── __init__.py │ ├── api.py │ ├── console.py │ ├── templates │ │ ├── admin.html │ │ ├── admin_basics.html │ │ ├── admin_logging.html │ │ ├── admin_perms.html │ │ └── admin_plugins.html │ ├── test.py │ ├── tests │ │ ├── __init__.py │ │ ├── console-tests.txt │ │ ├── console.py │ │ ├── functional.py │ │ └── web_ui.py │ └── web_ui.py ├── api.py ├── attachment.py ├── cache.py ├── config.py ├── core.py ├── db │ ├── __init__.py │ ├── api.py │ ├── convert.py │ ├── mysql_backend.py │ ├── pool.py │ ├── postgres_backend.py │ ├── schema.py │ ├── sqlite_backend.py │ ├── tests │ │ ├── __init__.py │ │ ├── api.py │ │ ├── functional.py │ │ ├── mysql_test.py │ │ ├── postgres_test.py │ │ ├── schema.py │ │ ├── sqlite_test.py │ │ └── util.py │ └── util.py ├── db_default.py ├── dist.py ├── env.py ├── htdocs │ ├── README │ ├── asc.png │ ├── attachment.png │ ├── batchmodify.png │ ├── changeset.png │ ├── closedticket.png │ ├── collapsed.png │ ├── css │ │ ├── admin.css │ │ ├── browser.css │ │ ├── changeset.css │ │ ├── code.css │ │ ├── diff.css │ │ ├── jquery-ui-addons.css │ │ ├── jquery-ui │ │ │ ├── images │ │ │ │ ├── ui-bg_diagonals-thick_18_ffddcc_40x40.png │ │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ │ │ ├── ui-bg_highlight-soft_30_303030_1x100.png │ │ │ │ ├── ui-bg_highlight-soft_75_c0f0c0_1x100.png │ │ │ │ ├── ui-bg_highlight-soft_80_ffffdd_1x100.png │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ ├── ui-icons_444444_256x240.png │ │ │ │ ├── ui-icons_4b954f_256x240.png │ │ │ │ ├── ui-icons_505050_256x240.png │ │ │ │ ├── ui-icons_555555_256x240.png │ │ │ │ ├── ui-icons_707070_256x240.png │ │ │ │ ├── ui-icons_777620_256x240.png │ │ │ │ ├── ui-icons_777777_256x240.png │ │ │ │ ├── ui-icons_9b081d_256x240.png │ │ │ │ ├── ui-icons_b00000_256x240.png │ │ │ │ ├── ui-icons_cc0000_256x240.png │ │ │ │ ├── ui-icons_d7d7d7_256x240.png │ │ │ │ └── ui-icons_ffffff_256x240.png │ │ │ └── jquery-ui.css │ │ ├── prefs.css │ │ ├── report.css │ │ ├── roadmap.css │ │ ├── search.css │ │ ├── ticket.css │ │ ├── timeline.css │ │ ├── trac.css │ │ └── wiki.css │ ├── desc.png │ ├── dots.gif │ ├── download.png │ ├── draft.png │ ├── edit_toolbar.png │ ├── editedticket.png │ ├── envelope.png │ ├── expanded.png │ ├── expander_normal.png │ ├── expander_normal_hover.png │ ├── expander_open.png │ ├── expander_open_hover.png │ ├── extlink.gif │ ├── feed.png │ ├── file.png │ ├── folder.png │ ├── grip.png │ ├── guide │ │ ├── admin-permissions-TICKET_ADMIN.png │ │ ├── admin-permissions.png │ │ ├── admin.png │ │ ├── basic-workflow.png │ │ └── original-workflow.png │ ├── ics.png │ ├── imggrid.png │ ├── inreply.png │ ├── js │ │ ├── admin_enums.js │ │ ├── auto_preview.js │ │ ├── babel.js │ │ ├── blame.js │ │ ├── diff.js │ │ ├── expand_dir.js │ │ ├── folding.js │ │ ├── jquery-ui-addons.js │ │ ├── jquery-ui-i18n.js │ │ ├── jquery-ui.js │ │ ├── jquery.js │ │ ├── keyboard_nav.js │ │ ├── log_graph.js │ │ ├── noconflict.js │ │ ├── query.js │ │ ├── resizer.js │ │ ├── search.js │ │ ├── threaded_comments.js │ │ ├── timeline_multirepos.js │ │ ├── trac.js │ │ ├── wiki.js │ │ ├── wikitoolbar.js │ │ └── workflow_graph.js │ ├── loading.gif │ ├── lock-locked.png │ ├── milestone.png │ ├── newticket.png │ ├── parent.png │ ├── python.png │ ├── topbar_gradient.png │ ├── topbar_gradient2.png │ ├── trac.ico │ ├── trac_banner.png │ ├── trac_logo_mini.png │ ├── vgradient.png │ └── wiki.png ├── loader.py ├── locale │ ├── ar │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── bs │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── ca │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── cs │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── da │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── de │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── el │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── en_GB │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── en_US │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── eo │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── es │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── es_AR │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── es_MX │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── et │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── fa │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── fi │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── fr │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── gl │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── he │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── hu │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── hy │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── it │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── ja │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── ko │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── messages-js.pot │ ├── messages.pot │ ├── nb │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── nl │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── pl │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── pt │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── pt_BR │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── ro │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── ru │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── sl │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── sq │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── sv │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── tr │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── tracini.pot │ ├── uk │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── vi │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ ├── zh_CN │ │ └── LC_MESSAGES │ │ │ ├── messages-js.po │ │ │ ├── messages.po │ │ │ └── tracini.po │ └── zh_TW │ │ └── LC_MESSAGES │ │ ├── messages-js.po │ │ ├── messages.po │ │ └── tracini.po ├── log.py ├── mimeview │ ├── __init__.py │ ├── api.py │ ├── patch.py │ ├── pygments.py │ ├── rst.py │ ├── templates │ │ └── prefs_pygments.html │ ├── tests │ │ ├── __init__.py │ │ ├── api.py │ │ ├── functional.py │ │ ├── patch.data │ │ ├── patch.py │ │ ├── pygments.data │ │ ├── pygments.py │ │ ├── rst.py │ │ └── txtl.py │ └── txtl.py ├── notification │ ├── __init__.py │ ├── api.py │ ├── mail.py │ ├── model.py │ ├── prefs.py │ ├── templates │ │ └── prefs_notification.html │ └── tests │ │ ├── __init__.py │ │ ├── api.py │ │ ├── mail.py │ │ ├── model.py │ │ └── prefs.py ├── perm.py ├── prefs │ ├── __init__.py │ ├── api.py │ ├── templates │ │ ├── prefs.html │ │ ├── prefs_advanced.html │ │ ├── prefs_general.html │ │ ├── prefs_localization.html │ │ └── prefs_userinterface.html │ ├── tests │ │ ├── __init__.py │ │ ├── functional.py │ │ └── web_ui.py │ └── web_ui.py ├── resource.py ├── search │ ├── __init__.py │ ├── api.py │ ├── templates │ │ ├── opensearch.xml │ │ └── search.html │ ├── tests │ │ ├── __init__.py │ │ ├── functional.py │ │ └── web_ui.py │ └── web_ui.py ├── templates │ ├── README │ ├── about.html │ ├── attach_file_form.html │ ├── attachment.html │ ├── author_or_creator.rss │ ├── diff_div.html │ ├── diff_options.html │ ├── diff_view.html │ ├── environment_info.html │ ├── error.html │ ├── history_view.html │ ├── index.html │ ├── layout.html │ ├── list_of_attachments.html │ ├── macros.html │ ├── page_index.html │ ├── preview_file.html │ ├── progress_bar.html │ ├── progress_bar_grouped.html │ └── theme.html ├── test.py ├── tests │ ├── __init__.py │ ├── _aiosmtpd.py │ ├── _smtpd.py │ ├── allwiki.py │ ├── attachment-console-tests.txt │ ├── attachment.py │ ├── compat.py │ ├── config.py │ ├── console-tests.txt │ ├── contentgen.py │ ├── core.py │ ├── env.py │ ├── figleaf-exclude │ ├── functional │ │ ├── __init__.py │ │ ├── better_twill.py │ │ ├── compat.py │ │ ├── svntestenv.py │ │ ├── testcases.py │ │ ├── testenv.py │ │ ├── tester.py │ │ ├── xhtml-lat1.ent │ │ ├── xhtml-special.ent │ │ ├── xhtml-symbol.ent │ │ └── xhtml1-strict.dtd │ ├── loader.py │ ├── notification.py │ ├── perm.py │ ├── random_words.txt │ ├── resource.py │ └── wikisyntax.py ├── ticket │ ├── __init__.py │ ├── admin.py │ ├── api.py │ ├── batch.py │ ├── default_workflow.py │ ├── model.py │ ├── notification.py │ ├── query.py │ ├── report.py │ ├── roadmap.py │ ├── templates │ │ ├── admin_components.html │ │ ├── admin_enums.html │ │ ├── admin_milestones.html │ │ ├── admin_versions.html │ │ ├── batch_modify.html │ │ ├── batch_ticket_notify_email.txt │ │ ├── milestone_delete.html │ │ ├── milestone_edit.html │ │ ├── milestone_edit_form.html │ │ ├── milestone_view.html │ │ ├── query.html │ │ ├── query.rss │ │ ├── query_results.html │ │ ├── report.rss │ │ ├── report_delete.html │ │ ├── report_edit.html │ │ ├── report_list.html │ │ ├── report_list.rss │ │ ├── report_view.html │ │ ├── roadmap.html │ │ ├── ticket.html │ │ ├── ticket.rss │ │ ├── ticket_box.html │ │ ├── ticket_change.html │ │ ├── ticket_notify_email.txt │ │ ├── ticket_preview.html │ │ └── ticket_workflow.html │ ├── test.py │ ├── tests │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── batch.py │ │ ├── console-tests.txt │ │ ├── console.py │ │ ├── conversion.py │ │ ├── default_workflow.py │ │ ├── functional │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── default_workflow.py │ │ │ └── main.py │ │ ├── model.py │ │ ├── notification.py │ │ ├── query.py │ │ ├── report.py │ │ ├── roadmap.py │ │ ├── web_ui.py │ │ └── wikisyntax.py │ ├── web_ui.py │ └── workflows │ │ ├── basic-workflow.ini │ │ └── original-workflow.ini ├── timeline │ ├── __init__.py │ ├── api.py │ ├── templates │ │ ├── timeline.html │ │ └── timeline.rss │ ├── tests │ │ ├── __init__.py │ │ ├── functional.py │ │ ├── web_ui.py │ │ └── wikisyntax.py │ └── web_ui.py ├── upgrades │ ├── __init__.py │ ├── db10.py │ ├── db11.py │ ├── db12.py │ ├── db13.py │ ├── db14.py │ ├── db15.py │ ├── db16.py │ ├── db17.py │ ├── db18.py │ ├── db19.py │ ├── db20.py │ ├── db21.py │ ├── db22.py │ ├── db23.py │ ├── db24.py │ ├── db25.py │ ├── db26.py │ ├── db27.py │ ├── db28.py │ ├── db29.py │ ├── db3.py │ ├── db30.py │ ├── db31.py │ ├── db32.py │ ├── db33.py │ ├── db34.py │ ├── db35.py │ ├── db36.py │ ├── db37.py │ ├── db38.py │ ├── db39.py │ ├── db4.py │ ├── db40.py │ ├── db41.py │ ├── db42.py │ ├── db43.py │ ├── db44.py │ ├── db45.py │ ├── db5.py │ ├── db6.py │ ├── db7.py │ ├── db8.py │ ├── db9.py │ └── tests │ │ ├── __init__.py │ │ ├── db31.py │ │ ├── db32.py │ │ ├── db39.py │ │ ├── db41.py │ │ ├── db42.py │ │ ├── db44.py │ │ └── db45.py ├── util │ ├── __init__.py │ ├── autoreload.py │ ├── compat.py │ ├── concurrency.py │ ├── daemon.py │ ├── datefmt.py │ ├── dist.py │ ├── html.py │ ├── presentation.py │ ├── tests │ │ ├── __init__.py │ │ ├── concurrency.py │ │ ├── datefmt.py │ │ ├── html.py │ │ ├── presentation.py │ │ ├── text.py │ │ └── translation.py │ ├── text.py │ └── translation.py ├── versioncontrol │ ├── __init__.py │ ├── admin.py │ ├── api.py │ ├── cache.py │ ├── diff.py │ ├── svn_authz.py │ ├── templates │ │ ├── admin_repositories.html │ │ ├── browser.html │ │ ├── changeset.html │ │ ├── changeset_content.html │ │ ├── diff_form.html │ │ ├── dir_entries.html │ │ ├── dirlist_thead.html │ │ ├── path_links.html │ │ ├── repository_index.html │ │ ├── revisionlog.html │ │ ├── revisionlog.rss │ │ ├── revisionlog.txt │ │ └── sortable_th.html │ ├── tests │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── cache.py │ │ ├── console-tests.txt │ │ ├── console.py │ │ ├── diff.py │ │ ├── functional.py │ │ └── svn_authz.py │ └── web_ui │ │ ├── __init__.py │ │ ├── browser.py │ │ ├── changeset.py │ │ ├── log.py │ │ ├── tests │ │ ├── __init__.py │ │ ├── browser.py │ │ ├── changeset.py │ │ ├── log.py │ │ ├── util.py │ │ └── wikisyntax.py │ │ └── util.py ├── web │ ├── __init__.py │ ├── _fcgi.py │ ├── api.py │ ├── auth.py │ ├── cgi_frontend.py │ ├── chrome.py │ ├── fcgi_frontend.py │ ├── href.py │ ├── main.py │ ├── modpython_frontend.py │ ├── session.py │ ├── standalone.py │ ├── templates │ │ ├── deploy_trac.cgi │ │ ├── deploy_trac.fcgi │ │ └── deploy_trac.wsgi │ ├── tests │ │ ├── __init__.py │ │ ├── api.py │ │ ├── auth.py │ │ ├── cgi_frontend.py │ │ ├── chrome.py │ │ ├── console-tests.txt │ │ ├── href.py │ │ ├── main.py │ │ ├── session.py │ │ └── wikisyntax.py │ └── wsgi.py └── wiki │ ├── __init__.py │ ├── admin.py │ ├── api.py │ ├── default-pages │ ├── CamelCase │ ├── InterMapTxt │ ├── InterTrac │ ├── InterWiki │ ├── PageTemplates │ ├── RecentChanges │ ├── SandBox │ ├── TicketQuery │ ├── TitleIndex │ ├── TracAccessibility │ ├── TracAdmin │ ├── TracBackup │ ├── TracBatchModify │ ├── TracBrowser │ ├── TracCgi │ ├── TracChangeLog │ ├── TracChangeset │ ├── TracEnvironment │ ├── TracFastCgi │ ├── TracFineGrainedPermissions │ ├── TracGuide │ ├── TracImport │ ├── TracIni │ ├── TracInstall │ ├── TracInterfaceCustomization │ ├── TracLinks │ ├── TracLogging │ ├── TracModPython │ ├── TracModWSGI │ ├── TracNavigation │ ├── TracNotification │ ├── TracPermissions │ ├── TracPlugins │ ├── TracQuery │ ├── TracReports │ ├── TracRepositoryAdmin │ ├── TracRevisionLog │ ├── TracRoadmap │ ├── TracRss │ ├── TracSearch │ ├── TracStandalone │ ├── TracSupport │ ├── TracSyntaxColoring │ ├── TracTickets │ ├── TracTicketsCustomFields │ ├── TracTimeline │ ├── TracUnicode │ ├── TracUpgrade │ ├── TracWiki │ ├── TracWorkflow │ ├── WikiDeletePage │ ├── WikiFormatting │ ├── WikiHtml │ ├── WikiMacros │ ├── WikiNewPage │ ├── WikiPageNames │ ├── WikiProcessors │ ├── WikiRestructuredText │ ├── WikiRestructuredTextLinks │ └── WikiStart │ ├── formatter.py │ ├── intertrac.py │ ├── interwiki.py │ ├── macros.py │ ├── model.py │ ├── parser.py │ ├── templates │ ├── wiki_delete.html │ ├── wiki_diff.html │ ├── wiki_edit.html │ ├── wiki_edit_comment.html │ ├── wiki_edit_form.html │ ├── wiki_page_path.html │ ├── wiki_rename.html │ └── wiki_view.html │ ├── test.py │ ├── tests │ ├── __init__.py │ ├── admin.py │ ├── console-tests.txt │ ├── formatter.py │ ├── functional.py │ ├── intertrac.py │ ├── macros.py │ ├── model.py │ ├── web_api.py │ ├── web_ui.py │ ├── wiki-tests.txt │ ├── wikicreole-tests.txt │ └── wikisyntax.py │ ├── web_api.py │ └── web_ui.py ├── tracini.cfg └── tracopt ├── __init__.py ├── perm ├── __init__.py ├── authz_policy.py ├── config_perm_provider.py └── tests │ ├── __init__.py │ └── authz_policy.py ├── ticket ├── __init__.py ├── clone.py ├── commit_updater.py ├── deleter.py ├── htdocs │ ├── ticketclone.coffee │ ├── ticketclone.js │ ├── ticketdeleter.coffee │ └── ticketdeleter.js ├── templates │ └── ticket_delete.html └── tests │ ├── __init__.py │ └── commit_updater.py └── versioncontrol ├── __init__.py ├── git ├── PyGIT.py ├── __init__.py ├── git_fs.py └── tests │ ├── PyGIT.py │ ├── __init__.py │ └── git_fs.py └── svn ├── __init__.py ├── svn_fs.py ├── svn_prop.py └── tests ├── __init__.py ├── svn_fs.py └── svnrepos.dump /.gitattributes: -------------------------------------------------------------------------------- 1 | tracopt/versioncontrol/svn/tests/svnrepos.dump eol=lf 2 | -------------------------------------------------------------------------------- /.github/posix-test-minimum.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -ex 4 | 5 | venvdir="$HOME/venv" 6 | python -m venv "$venvdir" 7 | . "$venvdir/bin/activate" 8 | python="$venvdir/bin/python" 9 | "$python" -m pip install --upgrade pip setuptools 10 | pip install -r .github/requirements-minimum.txt 11 | pip list --format=freeze 12 | { 13 | echo '.uri =' 14 | echo 'pythonopts = -Wdefault' 15 | } >Makefile.cfg 16 | make Trac.egg-info 17 | rc=0 18 | make unit-test || rc=$? 19 | if [ "$MATRIX_TESTS" = functional ]; then 20 | make functional-test testopts=-v || rc=$? 21 | fi 22 | exit $rc 23 | -------------------------------------------------------------------------------- /.github/release-upload.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -ex 4 | 5 | keyfile="$GITHUB_WORKSPACE/edgewall_github_key" 6 | known_hosts="$GITHUB_WORKSPACE/edgewall_host_key" 7 | 8 | if [ -n "$EDGEWALL_KEY_BASE64" ]; then 9 | echo "$EDGEWALL_KEY_BASE64" | base64 -d >"$keyfile" 10 | echo "$EDGEWALL_HOST_KEY" >"$known_hosts" 11 | chmod 0600 "$keyfile" 12 | scp -i "$keyfile" -o "UserKnownHostsFile $known_hosts" \ 13 | dist/trac-* github@edgewall.org:/var/ftp/pub/trac/incoming 14 | else 15 | echo "::warning:: Skipped uploading package files to edgewall.org" 1>&2 16 | fi 17 | -------------------------------------------------------------------------------- /.github/release.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | set -ex 4 | 5 | venvdir="$HOME/venv" 6 | python -m venv "$venvdir" 7 | . "$venvdir/bin/activate" 8 | python -m pip install --upgrade pip setuptools 9 | pip install -r requirements-release.txt 10 | pip install setuptools-git 11 | make compile sdist wheel 12 | -------------------------------------------------------------------------------- /.github/requirements-minimum.txt: -------------------------------------------------------------------------------- 1 | Jinja2 2 | multipart; python_version>='3.11' 3 | aiosmtpd; python_version>='3.10' 4 | selenium!=4.10.0 5 | pytidylib 6 | passlib; python_version>='3.11' or python_version<'3.7' or platform_system=='Darwin' or platform_system=='Windows' 7 | bcrypt<4.1.0; python_version>='3.11' or python_version<'3.7' or platform_system=='Darwin' or platform_system=='Windows' 8 | -------------------------------------------------------------------------------- /.github/requirements.txt: -------------------------------------------------------------------------------- 1 | Jinja2 2 | multipart; python_version>='3.11' 3 | aiosmtpd; python_version>='3.10' 4 | selenium!=4.10.0 5 | pytidylib 6 | Babel 7 | Pygments 8 | docutils 9 | textile 10 | pytz 11 | PyMySQL 12 | cryptography 13 | psycopg2 14 | passlib; python_version>='3.11' or python_version<'3.7' or platform_system=='Darwin' or platform_system=='Windows' 15 | bcrypt<4.1.0; python_version>='3.11' or python_version<'3.7' or platform_system=='Darwin' or platform_system=='Windows' 16 | -------------------------------------------------------------------------------- /.github/svn-swig41.patch: -------------------------------------------------------------------------------- 1 | Index: subversion/bindings/swig/include/proxy.swg 2 | =================================================================== 3 | --- subversion/bindings/swig/include/proxy.swg (revision 1905172) 4 | +++ subversion/bindings/swig/include/proxy.swg (revision 1905173) 5 | @@ -66,7 +66,6 @@ 6 | fn() 7 | 8 | %} 9 | -#if defined(SWIGPYTHON_PY3) 10 | #if SWIG_VERSION >= 0x040000 11 | %pythoncode %{ 12 | # -classic and -modern options have been dropped and this variable 13 | @@ -76,7 +75,7 @@ 14 | _set_instance_attr = _swig_setattr_nondynamic_instance_variable(object.__setattr__) 15 | 16 | %} 17 | -#else 18 | +#elif defined(SWIGPYTHON_PY3) 19 | %pythoncode %{ 20 | # SWIG classes generated with -modern do not define this variable 21 | try: 22 | @@ -90,7 +89,6 @@ 23 | _set_instance_attr = _swig_setattr_nondynamic_method(object.__setattr__) 24 | 25 | %} 26 | -#endif 27 | #else 28 | %pythoncode %{ 29 | # SWIG classes generated with -classic do not define this variable, 30 | -------------------------------------------------------------------------------- /.github/vcpkg.txt: -------------------------------------------------------------------------------- 1 | apr 2 | apr-util 3 | zlib 4 | -------------------------------------------------------------------------------- /.github/windows-test-minimum.ps1: -------------------------------------------------------------------------------- 1 | $venvdir = "$($env:LocalAppData)\venv" 2 | & python -m venv $venvdir 3 | $python = "$venvdir\scripts\python.exe" 4 | & "$venvdir\scripts\activate.ps1" 5 | & $python -m pip install --upgrade pip setuptools 6 | & $python -m pip install -r .github\requirements-minimum.txt 7 | & $python -m pip list --format=freeze 8 | 9 | & choco install -y --no-progress html-tidy 10 | Get-ChildItem -Path "$($env:ProgramData)\chocolatey\lib\html-tidy\tools" ` 11 | -Filter '*.dll' -Recurse ` 12 | | Copy-Item -Destination "$venvdir\scripts" -Verbose 13 | 14 | $env:PYTHONWARNINGS = 'default' 15 | Set-Content -Path Makefile.cfg '.uri =' 16 | & make.exe status Trac.egg-info 17 | if ($LASTEXITCODE) { 18 | Write-Error "'make.exe status Trac.egg-info' exited with $LASTEXITCODE" 19 | exit 1 20 | } 21 | $rc = 0 22 | & make.exe unit-test 23 | if ($LASTEXITCODE) { 24 | Write-Warning "'make.exe unit-test' exited with $LASTEXITCODE" 25 | $rc = 1 26 | } 27 | if ($env:MATRIX_TESTS -eq 'functional') { 28 | & make.exe functional-test testopts=-v 29 | if ($LASTEXITCODE) { 30 | Write-Warning "'make.exe functional-test testopts=-v' exited with $LASTEXITCODE" 31 | $rc = 1 32 | } 33 | } 34 | exit $rc 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .*.sw[op] 3 | *.orig 4 | .svn 5 | .hg 6 | build 7 | dist 8 | Trac.egg-info 9 | *.py[co] 10 | testenv 11 | testing.log 12 | functional-testing.log 13 | trac/test.db 14 | geckodriver.log 15 | html 16 | htmlcov 17 | .coverage 18 | Makefile.cfg 19 | doc/.build 20 | *.mo 21 | trac/htdocs/js/messages/*.js 22 | .idea 23 | .project 24 | .pydevproject 25 | .settings 26 | -------------------------------------------------------------------------------- /.hgeol: -------------------------------------------------------------------------------- 1 | [patterns] 2 | contrib/trac-svn-hook = LF 3 | **.cmd = CRLF 4 | ** = native 5 | -------------------------------------------------------------------------------- /.hgignore: -------------------------------------------------------------------------------- 1 | syntax: glob 2 | *~ 3 | .*.sw[op] 4 | *.orig 5 | .svn 6 | .git 7 | build 8 | dist 9 | Trac.egg-info 10 | *.py[co] 11 | testenv 12 | testing.log 13 | functional-testing.log 14 | trac/test.db 15 | geckodriver.log 16 | html 17 | htmlcov 18 | .coverage 19 | Makefile.cfg 20 | doc/.build 21 | *.mo 22 | trac/htdocs/js/messages/*.js 23 | .idea 24 | .project 25 | .pydevproject 26 | .settings 27 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | 4 | [o:cboos:p:trac:r:trunk-messages-js-pot] 5 | file_filter = trac/locale//LC_MESSAGES/messages-js.po 6 | source_file = trac/locale/messages-js.pot 7 | source_lang = en 8 | 9 | [o:cboos:p:trac:r:trunk-messages-pot] 10 | file_filter = trac/locale//LC_MESSAGES/messages.po 11 | source_file = trac/locale/messages.pot 12 | source_lang = en 13 | 14 | [o:cboos:p:trac:r:trunk-tracini-pot] 15 | file_filter = trac/locale//LC_MESSAGES/tracini.po 16 | source_file = trac/locale/tracini.pot 17 | source_lang = en 18 | 19 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | * Jonas Borgström 2 | * Daniel Lundin 3 | * Rocky Burt 4 | * Christopher Lenz 5 | * Francois Harvey 6 | * Mark Rowe 7 | * Matthew Good 8 | * Christian Boos 9 | * Emmanuel Blot 10 | * Alec Thomas 11 | * Tim Hatch 12 | * Eli Carter 13 | * Noah Kantrowitz 14 | * Jeroen Ruigrok van der Werven 15 | * Odd Simon Simonsen 16 | * Remy Blank 17 | * Jun Omae 18 | * Peter Suter 19 | * Ryan Ollos 20 | 21 | See also THANKS for people who have contributed to the project. 22 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | Copyright (C) 2003-2023 Edgewall Software 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions 6 | are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in 12 | the documentation and/or other materials provided with the 13 | distribution. 14 | 3. The name of the author may not be used to endorse or promote 15 | products derived from this software without specific prior 16 | written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 19 | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 22 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 24 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 26 | IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27 | OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 28 | IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /ChangeLog: -------------------------------------------------------------------------------- 1 | The ChangeLog can be viewed: 2 | * On the web at https://trac.edgewall.org/wiki/TracChangeLog 3 | * In the source at trac/wiki/default-pages/TracChangeLog 4 | * By navigating to the TracChangeLog page after installing or upgrading Trac. You must upgrade the wiki to get the latest TracChangeLog. 5 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | About Trac 2 | ========== 3 | 4 | Trac is a minimalistic web-based software project management and 5 | bug/issue tracking system. It provides an interface to the Git and 6 | Subversion revision control systems, an integrated wiki, flexible 7 | issue tracking and convenient report facilities. 8 | 9 | Trac is distributed using the modified BSD License. 10 | 11 | * For installation instructions, please see INSTALL.rst or the 12 | trac/wiki/default-pages/TracInstall page for complete, up-to-date 13 | instructions 14 | 15 | * If you are upgrading from a previous Trac version, please read 16 | UPGRADE.rst or the trac/wiki/default-pages/TracUpgrade page for 17 | complete, up-to-date instructions 18 | 19 | You might also want to take a look at the RELEASE.rst and ChangeLog files 20 | for more information about this release. 21 | 22 | Otherwise, the primary source of information is the main Trac web site: 23 | 24 | 25 | 26 | We hope you enjoy it, 27 | 28 | /The Trac Team 29 | -------------------------------------------------------------------------------- /RELEASE.rst: -------------------------------------------------------------------------------- 1 | Release Notes for Trac 1.6 'Py3' Release 2 | =========================================== 3 | September 23, 2023 4 | 5 | Highlights 6 | ---------- 7 | * Supports Python 3.5 and later. 8 | * Drop support for Python 2. 9 | 10 | Detailed User Visible Changes 11 | ----------------------------- 12 | 13 | A detailed view of the changes since 1.4.x can be found in 14 | https://trac.edgewall.org/wiki/TracDev/ReleaseNotes/1.6 15 | 16 | Developer-visible changes 17 | ------------------------- 18 | 19 | A detailed view of the API changes since 1.4.x can be found in 20 | https://trac.edgewall.org/wiki/TracDev/ApiChanges/1.6 21 | 22 | Acknowledgements 23 | ---------------- 24 | 25 | Many thanks to the growing number of people who have, and continue to, 26 | support the project. Also our thanks to all people providing feedback 27 | and bug reports that helps us making Trac better, easier to use and 28 | more effective. Starting with the 0.12 release, special thanks go to 29 | our many translators. Without your invaluable help, Trac would not 30 | evolve. Thank you all. 31 | 32 | Finally, we hope that Trac will prove itself useful to like-minded 33 | programmers around the world, and that this release will prove an 34 | improvement over the last version. 35 | 36 | Please let us know. :-) 37 | 38 | /The Trac Team https://trac.edgewall.org/ 39 | -------------------------------------------------------------------------------- /contrib/README: -------------------------------------------------------------------------------- 1 | This directory contains useful contributed scripts and programs for Trac. 2 | 3 | Please note that these scripts are provided AS-IS are NOT tested to the same 4 | extent as the main sources. They are usually maintained by the original 5 | author, typically listed at the top of the source file. 6 | 7 | See ../THANKS for a list of contributors. -------------------------------------------------------------------------------- /contrib/checksum.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # Copyright (C) 2017-2023 Edgewall Software 5 | # All rights reserved. 6 | # 7 | # This software is licensed as described in the file COPYING, which 8 | # you should have received as part of this distribution. The terms 9 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 10 | # 11 | # This software consists of voluntary contributions made by many 12 | # individuals. For the exact contribution history, see the revision 13 | # history and logs, available at https://trac.edgewall.org/. 14 | 15 | import hashlib 16 | import io 17 | import sys 18 | 19 | 20 | def main(): 21 | args = sys.argv[1:] 22 | if not args: 23 | sys.stderr.write('Usage: %s algorithm files...\n' % sys.argv[0]) 24 | return 2 25 | algorithms = args.pop(0).replace(':', ' ').split() 26 | for algorithm in algorithms: 27 | for filename in args: 28 | m = hashlib.new(algorithm) 29 | with io.open(filename, 'rb') as f: 30 | while True: 31 | data = f.read(4096) 32 | if not data: 33 | break 34 | m.update(data) 35 | print('%s *%s' % (m.hexdigest(), filename)) 36 | 37 | if __name__ == '__main__': 38 | sys.exit(main() or 0) 39 | -------------------------------------------------------------------------------- /contrib/workflow/README: -------------------------------------------------------------------------------- 1 | There are two more workflows available, original-workflow and basic-workflow. 2 | Look in trac/ticket/workflows for them. (They are used internally by Trac, so 3 | they aren't here in the contrib tree.) 4 | -------------------------------------------------------------------------------- /contrib/workflow/migrate_original_to_basic.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # Copyright (C) 2007-2023 Edgewall Software 5 | # Copyright (C) 2007 Eli Carter 6 | # All rights reserved. 7 | # 8 | # This software is licensed as described in the file COPYING, which 9 | # you should have received as part of this distribution. The terms 10 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 11 | # 12 | # This software consists of voluntary contributions made by many 13 | # individuals. For the exact contribution history, see the revision 14 | # history and logs, available at https://trac.edgewall.org/. 15 | 16 | import sys 17 | 18 | import trac.env 19 | from trac.ticket.default_workflow import load_workflow_config_snippet 20 | 21 | 22 | def main(): 23 | """Rewrite the ticket-workflow section of the config; and change all 24 | 'assigned' tickets to 'accepted'. 25 | """ 26 | if len(sys.argv) != 2: 27 | print("Usage: %s path_to_trac_environment" % sys.argv[0]) 28 | sys.exit(1) 29 | tracdir = sys.argv[1] 30 | trac_env = trac.env.open_environment(tracdir) 31 | 32 | # Update the config... 33 | old_workflow = trac_env.config.options('ticket-workflow') 34 | for name, value in old_workflow: 35 | trac_env.config.remove('ticket-workflow', name) 36 | load_workflow_config_snippet(trac_env.config, 'basic-workflow.ini') 37 | trac_env.config.save() 38 | 39 | # Update the ticket statuses... 40 | trac_env.db_transaction(""" 41 | UPDATE ticket SET status = 'accepted' WHERE status = 'assigned' 42 | """) 43 | 44 | if __name__ == '__main__': 45 | main() 46 | -------------------------------------------------------------------------------- /contrib/workflow/showworkflow: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | # -*- coding: utf-8 -*- 3 | # 4 | # Copyright (C) 2007-2013 Edgewall Software 5 | # Copyright (C) 2007 Eli Carter 6 | # All rights reserved. 7 | # 8 | # This software is licensed as described in the file COPYING, which 9 | # you should have received as part of this distribution. The terms 10 | # are also available at https://trac.edgewall.com/license.html. 11 | # 12 | # This software consists of voluntary contributions made by many 13 | # individuals. For the exact contribution history, see the revision 14 | # history and logs, available at https://trac.edgewall.org/. 15 | 16 | basedir=`dirname $0` 17 | options="" 18 | while [ $# -gt 1 ]; do 19 | options="$options $1" 20 | shift 21 | done 22 | config="$1" 23 | if [ ! -e "$config" ]; then 24 | echo "Syntax error: requires a .ini file to work with." >&2 25 | exit 1 26 | fi 27 | 28 | dot=`echo "$config" | sed 's/\.ini$/.dot/g'` 29 | ps=`echo "$config" | sed 's/\.ini$/.ps/g'` 30 | pdf=`echo "$config" | sed 's/\.ini$/.pdf/g'` 31 | png=`echo "$config" | sed 's/\.ini$/.png/g'` 32 | 33 | $basedir/workflow_parser.py $options "$config" "$dot" 34 | if [ $? -ne 0 ]; then 35 | echo "Failed to parse \"$config\", exiting." >&2 36 | exit 1 37 | fi 38 | 39 | cat "$dot" 40 | if [ "$OSTYPE" = cygwin ]; then 41 | dot -T png -o "$png" "$dot" 42 | cmd /c start $png 43 | else 44 | dot -T ps -o "$ps" "$dot" 45 | dot -T pdf -o "$pdf" "$dot" 46 | # attempt to find a Linux pdf viewer 47 | for viewer in kpdf okular evince; do 48 | if which $viewer >/dev/null 2>&1; then 49 | break 50 | fi 51 | done 52 | $viewer "$pdf" 53 | fi 54 | -------------------------------------------------------------------------------- /contrib/workflow/simple-workflow.ini: -------------------------------------------------------------------------------- 1 | [ticket-workflow] 2 | ; simple-workflow.ini 3 | 4 | ; This is action-centric 5 | leave = * -> * 6 | leave.operations = leave_status 7 | leave.default = 1 8 | 9 | create = -> new 10 | 11 | resolve_new = new -> closed 12 | resolve_new.label = resolve 13 | resolve_new.permissions = TICKET_MODIFY 14 | resolve_new.operations = set_owner_to_self,set_resolution 15 | 16 | accept = new,accepted -> accepted 17 | accept.permissions = TICKET_MODIFY 18 | accept.operations = set_owner_to_self 19 | 20 | resolve_accepted = accepted -> closed 21 | resolve_accepted.label = resolve 22 | resolve_accepted.permissions = TICKET_MODIFY 23 | resolve_accepted.operations = set_resolution 24 | 25 | unaccept = accepted -> new 26 | unaccept.permissions = TICKET_MODIFY 27 | unaccept.operations = del_owner 28 | 29 | reopen = closed -> new 30 | reopen.permissions = TICKET_CREATE 31 | reopen.operations = del_resolution 32 | -------------------------------------------------------------------------------- /contrib/workflow/trivial-workflow.ini: -------------------------------------------------------------------------------- 1 | [ticket-workflow] 2 | ; trivial-workflow.ini 3 | 4 | create = -> new 5 | 6 | resolve = new -> closed 7 | resolve.permissions = TICKET_MODIFY 8 | resolve.operations = set_resolution 9 | 10 | reopen = closed -> new 11 | reopen.permissions = TICKET_CREATE 12 | reopen.operations = del_resolution 13 | 14 | leave = * -> * 15 | leave.operations = leave_status 16 | leave.default = 1 17 | -------------------------------------------------------------------------------- /doc/README: -------------------------------------------------------------------------------- 1 | See the toplevel Makefile (make help). 2 | -------------------------------------------------------------------------------- /doc/api/index.rst: -------------------------------------------------------------------------------- 1 | ============= 2 | API Reference 3 | ============= 4 | 5 | .. toctree:: 6 | :maxdepth: 1 7 | :glob: 8 | 9 | trac_* 10 | tracopt_* 11 | -------------------------------------------------------------------------------- /doc/api/trac_about.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.about` 2 | ================= 3 | 4 | .. automodule :: trac.about 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_admin_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.admin.api` -- Trac Administration panels 2 | =================================================== 3 | 4 | .. module :: trac.admin.api 5 | 6 | Primary interface for managing administration panels. 7 | 8 | 9 | Interfaces 10 | ---------- 11 | 12 | .. autoclass :: IAdminPanelProvider 13 | :members: 14 | 15 | See also :extensionpoints:`trac.admin.api.IAdminPanelProvider` 16 | 17 | .. autoclass :: IAdminCommandProvider 18 | 19 | See also :extensionpoints:`trac.admin.api.IAdminCommandProvider` 20 | 21 | Exceptions 22 | ---------- 23 | 24 | .. autoclass :: AdminCommandError 25 | :members: 26 | 27 | Components 28 | ---------- 29 | 30 | .. autoclass :: AdminCommandManager 31 | :members: 32 | 33 | Classes 34 | ------- 35 | 36 | .. autoclass :: PathList 37 | :members: 38 | 39 | .. autoclass :: PrefixList 40 | :members: 41 | 42 | Helper Functions 43 | ---------------- 44 | 45 | .. autofunction :: get_console_locale 46 | .. autofunction :: get_dir_list 47 | -------------------------------------------------------------------------------- /doc/api/trac_admin_console.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.admin.console` 2 | ========================= 3 | 4 | .. automodule :: trac.admin.console 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_admin_web_ui.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.admin.web_ui` 2 | ======================== 3 | 4 | .. automodule :: trac.admin.web_ui 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_attachment.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.attachment` -- Attachments for Trac resources 2 | ======================================================== 3 | 4 | .. module :: trac.attachment 5 | 6 | This module contains the `Attachment` model class and the 7 | `AttachmentModule` component which manages file attachments for any 8 | kind of Trac resources. Currently, the wiki pages, tickets and 9 | milestones all support file attachments. You can use the same utility 10 | methods from the `AttachmentModule` as they do for easily adding 11 | attachments to other kinds of resources. 12 | 13 | See also the 14 | :download:`attach_file_form.html <../../trac/templates/attach_file_form.html>` 15 | and 16 | :download:`attachment.html <../../trac/templates/attachment.html>` templates 17 | which can be used to display the attachments. 18 | 19 | 20 | Interfaces 21 | ---------- 22 | 23 | .. autoclass :: IAttachmentChangeListener 24 | :members: 25 | 26 | See also :extensionpoints:`trac.attachment.IAttachmentChangeListener` 27 | 28 | .. autoclass :: IAttachmentManipulator 29 | :members: 30 | 31 | See also :extensionpoints:`trac.attachment.IAttachmentManipulator` 32 | 33 | .. autoclass :: ILegacyAttachmentPolicyDelegate 34 | :members: 35 | 36 | See also :extensionpoints:`trac.attachment.ILegacyAttachmentPolicyDelegate` 37 | 38 | 39 | Classes 40 | ------- 41 | 42 | .. autoclass :: Attachment 43 | :members: 44 | 45 | Components 46 | ---------- 47 | 48 | .. autoclass :: AttachmentModule 49 | :members: 50 | 51 | .. autoclass :: AttachmentAdmin 52 | :members: 53 | -------------------------------------------------------------------------------- /doc/api/trac_config.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.config` 2 | ================== 3 | 4 | .. automodule :: trac.config 5 | :members: 6 | 7 | .. autoclass :: UnicodeConfigParser 8 | :members: 9 | 10 | .. autoclass :: Section 11 | :members: 12 | 13 | .. autofunction :: get_configinfo 14 | 15 | 16 | Components 17 | ---------- 18 | 19 | .. autoclass :: ConfigurationAdmin 20 | -------------------------------------------------------------------------------- /doc/api/trac_db_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.db.api` -- Trac database abstraction layer 2 | ===================================================== 3 | 4 | .. module :: trac.db.api 5 | 6 | 7 | Interfaces 8 | ---------- 9 | 10 | .. autoclass :: IDatabaseConnector 11 | :members: 12 | 13 | See also :extensionpoints:`trac.db.api.IDatabaseConnector`. 14 | 15 | 16 | Classes 17 | ------- 18 | 19 | The following classes are not meant to be used directly, but rather 20 | via the `~trac.env.Environment` methods 21 | `~trac.env.Environment.db_transaction` and 22 | `~trac.env.Environment.db_query`. 23 | 24 | .. autoclass :: QueryContextManager 25 | :show-inheritance: 26 | :members: 27 | 28 | .. autoclass :: TransactionContextManager 29 | :show-inheritance: 30 | :members: 31 | 32 | The above are both subclasses of `DbContextManager`: 33 | 34 | .. autoclass :: DbContextManager 35 | :members: 36 | 37 | The API of database backend specific connection classes (like 38 | `~trac.db.api.SQLiteConnection`) is specified and documented in a base 39 | class, the `ConnectionBase`. 40 | 41 | .. autoclass :: ConnectionBase 42 | :members: 43 | 44 | 45 | Components 46 | ---------- 47 | 48 | .. autoclass :: DatabaseManager 49 | :members: 50 | 51 | 52 | Functions 53 | --------- 54 | 55 | .. autofunction :: get_column_names 56 | 57 | .. autofunction :: parse_connection_uri 58 | 59 | 60 | See also 61 | -------- 62 | 63 | :teo:`wiki/TracDev/DatabaseApi` 64 | 65 | -------------------------------------------------------------------------------- /doc/api/trac_db_mysql_backend.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.db.mysql_backend` 2 | ============================ 3 | 4 | .. automodule :: trac.db.mysql_backend 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_db_pool.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.db.pool` 2 | =================== 3 | 4 | .. automodule :: trac.db.pool 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_db_postgres_backend.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.db.postgres_backend` 2 | =============================== 3 | 4 | .. automodule :: trac.db.postgres_backend 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_db_schema.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.db.schema` 2 | ===================== 3 | 4 | .. automodule :: trac.db.schema 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_db_sqlite_backend.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.db.sqlite_backend` 2 | ============================= 3 | 4 | .. automodule :: trac.db.sqlite_backend 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_dist.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.dist` 2 | ================ 3 | 4 | .. automodule :: trac.dist 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_env.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.env` -- Trac Environment model and APIs 2 | ================================================== 3 | 4 | .. module :: trac.env 5 | 6 | Interfaces 7 | ---------- 8 | 9 | .. autoclass :: trac.env.IEnvironmentSetupParticipant 10 | :members: 11 | 12 | See also :extensionpoints:`trac.env.IEnvironmentSetupParticipant` 13 | 14 | .. autoclass :: trac.env.ISystemInfoProvider 15 | :members: 16 | 17 | See also :extensionpoints:`trac.env.ISystemInfoProvider` 18 | 19 | 20 | Components 21 | ---------- 22 | 23 | The `Environment` is special in the sense it is not only a 24 | `Component`, but also a `trac.core.ComponentManager`. 25 | 26 | .. autoclass :: trac.env.Environment 27 | :members: 28 | 29 | .. autoclass :: EnvironmentAdmin 30 | :members: 31 | 32 | 33 | Functions 34 | --------- 35 | 36 | .. autofunction :: trac.env.open_environment 37 | 38 | 39 | Exceptions 40 | ---------- 41 | 42 | .. autoexception :: BackupError 43 | :members: 44 | -------------------------------------------------------------------------------- /doc/api/trac_loader.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.loader` 2 | ================== 3 | 4 | .. automodule :: trac.loader 5 | :members: 6 | 7 | .. autofunction :: get_plugin_info 8 | .. autofunction :: load_eggs 9 | .. autofunction :: load_py_files 10 | .. autofunction :: match_plugins_to_frames 11 | 12 | -------------------------------------------------------------------------------- /doc/api/trac_log.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.log` 2 | =============== 3 | 4 | .. automodule :: trac.log 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_notification_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.notification.api` -- Trac notification system 2 | ======================================================== 3 | 4 | .. module :: trac.notification.api 5 | 6 | Interfaces 7 | ---------- 8 | 9 | .. autoclass:: INotificationDistributor 10 | :members: 11 | 12 | .. autoclass:: INotificationFormatter 13 | :members: 14 | 15 | .. autoclass:: INotificationSubscriber 16 | :members: 17 | 18 | .. autoclass:: IEmailAddressResolver 19 | :members: 20 | 21 | .. autoclass:: IEmailDecorator 22 | :members: 23 | 24 | .. autoclass:: IEmailSender 25 | :members: 26 | 27 | Classes 28 | ------- 29 | 30 | .. autoclass:: NotificationEvent 31 | :members: 32 | 33 | Components 34 | ---------- 35 | 36 | .. autoclass:: NotificationSystem 37 | :members: 38 | 39 | Functions 40 | --------- 41 | .. autofunction:: parse_subscriber_config 42 | 43 | .. autofunction:: get_target_id 44 | -------------------------------------------------------------------------------- /doc/api/trac_perm.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.perm` -- the Trac permission system 2 | ============================================== 3 | 4 | .. automodule :: trac.perm 5 | :exclude-members: PermissionError, IPermissionRequestor, IPermissionStore, 6 | IPermissionGroupProvider, IPermissionPolicy, 7 | PermissionSystem 8 | 9 | 10 | Interfaces 11 | ---------- 12 | 13 | .. autoclass :: IPermissionRequestor 14 | :members: 15 | 16 | .. autoclass :: IPermissionStore 17 | :members: 18 | 19 | .. autoclass :: IPermissionGroupProvider 20 | :members: 21 | 22 | .. autoclass :: IPermissionPolicy 23 | :members: 24 | 25 | 26 | Components 27 | ---------- 28 | 29 | .. autoclass :: PermissionSystem 30 | :members: 31 | 32 | .. autoclass :: DefaultPermissionGroupProvider 33 | :members: 34 | 35 | .. autoclass :: DefaultPermissionPolicy 36 | :members: 37 | 38 | .. autoclass :: DefaultPermissionStore 39 | :members: 40 | 41 | .. autoclass :: PermissionAdmin 42 | :members: 43 | 44 | 45 | Exceptions 46 | ---------- 47 | 48 | .. autoexception :: PermissionError 49 | :members: 50 | 51 | .. autoexception :: PermissionExistsError 52 | :members: 53 | 54 | 55 | Miscellaneous 56 | ------------- 57 | 58 | .. autoclass :: PermissionCache 59 | :members: 60 | 61 | -------------------------------------------------------------------------------- /doc/api/trac_prefs_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.prefs.api` -- Trac Administration panels 2 | =================================================== 3 | 4 | .. module :: trac.prefs.api 5 | 6 | Primary interface for managing preference panels (tabs). 7 | 8 | 9 | Interfaces 10 | ---------- 11 | 12 | .. autoclass :: IPreferencePanelProvider 13 | :members: 14 | 15 | See also :extensionpoints:`trac.prefs.api.IPreferencePanelProvider` 16 | -------------------------------------------------------------------------------- /doc/api/trac_prefs_web_ui.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.prefs.web_ui` 2 | ======================== 3 | 4 | .. automodule :: trac.prefs.web_ui 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_resource.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.resource` 2 | ==================== 3 | 4 | .. automodule :: trac.resource 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_search_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.search.api` 2 | ====================== 3 | 4 | .. automodule :: trac.search.api 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_search_web_ui.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.search.web_ui` 2 | ========================= 3 | 4 | .. automodule :: trac.search.web_ui 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_admin.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.admin` 2 | ======================== 3 | 4 | .. automodule :: trac.ticket.admin 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.api` 2 | ====================== 3 | 4 | .. automodule :: trac.ticket.api 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_batch.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.batch` 2 | ======================== 3 | 4 | .. automodule :: trac.ticket.batch 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_default_workflow.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.default_workflow` 2 | =================================== 3 | 4 | .. automodule :: trac.ticket.default_workflow 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_model.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.model` 2 | ======================== 3 | 4 | .. automodule :: trac.ticket.model 5 | :members: 6 | 7 | Components 8 | ---------- 9 | 10 | .. autoclass :: MilestoneCache 11 | :members: 12 | :exclude-members: factory 13 | 14 | .. automethod :: 15 | factory(name_due_completed_description_tuple, milestone_component=None) 16 | 17 | .. autoclass :: Component 18 | :members: 19 | 20 | .. autoclass :: Milestone 21 | :members: 22 | 23 | .. autoclass :: Priority 24 | :members: 25 | 26 | .. autoclass :: Report 27 | :members: 28 | 29 | .. autoclass :: Resolution 30 | :members: 31 | 32 | .. autoclass :: Severity 33 | :members: 34 | 35 | .. autoclass :: Type 36 | :members: 37 | 38 | .. autoclass :: Version 39 | :members: 40 | 41 | Miscellaneous 42 | ------------- 43 | 44 | .. autofunction :: simplify_whitespace 45 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_notification.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.notification` 2 | =============================== 3 | 4 | .. automodule :: trac.ticket.notification 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_query.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.query` 2 | ======================== 3 | 4 | .. automodule :: trac.ticket.query 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_report.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.report` 2 | ========================= 3 | 4 | .. automodule :: trac.ticket.report 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_ticket_web_ui.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.ticket.web_ui` 2 | ========================= 3 | 4 | .. automodule :: trac.ticket.web_ui 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_timeline_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.timeline.api` 2 | ======================== 3 | 4 | .. automodule :: trac.timeline.api 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_timeline_web_ui.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.timeline.web_ui` 2 | =========================== 3 | 4 | .. automodule :: trac.timeline.web_ui 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_util_autoreload.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.util.autoreload` 2 | =========================== 3 | 4 | .. automodule :: trac.util.autoreload 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_util_compat.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.util.compat` 2 | ======================= 3 | 4 | .. automodule :: trac.util.compat 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_util_concurrency.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.util.concurrency` 2 | ============================ 3 | 4 | .. automodule :: trac.util.concurrency 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_util_daemon.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.util.daemon` 2 | ======================= 3 | 4 | .. automodule :: trac.util.daemon 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_util_presentation.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.util.presentation` -- Utilities for dynamic content generation 2 | ========================================================================= 3 | 4 | .. module :: trac.util.presentation 5 | 6 | .. autofunction :: jinja2_update 7 | 8 | We define a few Jinja2 custom filters_. 9 | 10 | .. autofunction :: flatten_filter 11 | .. autofunction :: groupattr_filter 12 | .. autofunction :: htmlattr_filter 13 | .. autofunction :: max_filter 14 | .. autofunction :: min_filter 15 | .. autofunction :: trim_filter 16 | 17 | We also define a few Jinja2 custom tests_. 18 | 19 | .. autofunction :: is_greaterthan 20 | .. autofunction :: is_greaterthanorequal 21 | .. autofunction :: is_lessthan 22 | .. autofunction :: is_lessthanorequal 23 | .. autofunction :: is_not_equalto 24 | .. autofunction :: is_not_in 25 | .. autofunction :: istext 26 | 27 | The following utilities are all available within Jinja2 templates. 28 | 29 | .. autofunction :: captioned_button 30 | .. autofunction :: first_last 31 | .. autofunction :: group 32 | .. autofunction :: istext 33 | .. autofunction :: paginate 34 | .. autofunction :: separated 35 | .. autofunction :: to_json 36 | 37 | Modules generating paginated output will be happy to use a rich 38 | pagination controller. See *Query*, *Report* and *Search* modules for 39 | example usage. 40 | 41 | .. autoclass :: Paginator 42 | 43 | 44 | .. _filters: http://jinja.pocoo.org/docs/dev/api/#custom-filters 45 | .. _tests: http://jinja.pocoo.org/docs/dev/api/#custom-tests 46 | -------------------------------------------------------------------------------- /doc/api/trac_util_translation.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.util.translation` 2 | ============================ 3 | 4 | .. automodule :: trac.util.translation 5 | :members: 6 | 7 | Functions 8 | --------- 9 | 10 | .. autofunction :: deactivate 11 | .. autofunction :: reactivate 12 | .. autofunction :: make_activable 13 | .. autofunction :: get_available_locales 14 | .. autofunction :: domain_functions 15 | .. autofunction :: s_dgettext 16 | .. autofunction :: s_gettext 17 | 18 | Internals 19 | --------- 20 | 21 | .. autoclass :: NullTranslationsBabel 22 | 23 | .. autoclass :: TranslationsProxy 24 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_admin.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.admin` 2 | ================================ 3 | 4 | .. automodule :: trac.versioncontrol.admin 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_cache.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.cache` 2 | ================================ 3 | 4 | .. automodule :: trac.versioncontrol.cache 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_diff.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.diff` -- Utilities for generation of diffs 2 | ==================================================================== 3 | 4 | .. module :: trac.versioncontrol.diff 5 | 6 | Synopsis 7 | -------- 8 | 9 | `get_filtered_hunks`, `get_hunks` are low-level wrappers for Python's 10 | `difflib.SequenceMatcher`, and they generate groups of opcodes 11 | corresponding to diff "hunks". 12 | 13 | `get_change_extent` is a low-level utility used when marking 14 | intra-lines differences. 15 | 16 | `diff_blocks` is used at a higher-level to fill the template data 17 | needed by the "diff_div.html" template. 18 | 19 | `unified_diff` is also a higher-level function returning differences 20 | following the `unified diff`_ file format. 21 | 22 | Finally, `get_diff_options` is an utility for retrieving user diff 23 | preferences from a `~trac.web.api.Request`. 24 | 25 | .. _unified diff: http://www.gnu.org/software/hello/manual/diff/Detailed-Unified.html 26 | 27 | Function Reference 28 | ------------------ 29 | 30 | .. autofunction :: get_change_extent 31 | .. autofunction :: get_filtered_hunks 32 | .. autofunction :: get_hunks 33 | .. autofunction :: diff_blocks 34 | .. autofunction :: unified_diff 35 | .. autofunction :: get_diff_options 36 | .. autofunction :: filter_ignorable_lines 37 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_svn_authz.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.svn_authz` 2 | ==================================== 3 | 4 | .. automodule :: trac.versioncontrol.svn_authz 5 | :members: 6 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_web_ui_browser.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.web_ui.browser` 2 | ========================================= 3 | 4 | .. automodule :: trac.versioncontrol.web_ui.browser 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_web_ui_changeset.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.web_ui.changeset` 2 | =========================================== 3 | 4 | .. automodule :: trac.versioncontrol.web_ui.changeset 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_web_ui_log.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.web_ui.log` 2 | ===================================== 3 | 4 | .. automodule :: trac.versioncontrol.web_ui.log 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_versioncontrol_web_ui_util.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.versioncontrol.web_ui.util` 2 | ====================================== 3 | 4 | .. automodule :: trac.versioncontrol.web_ui.util 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_web_auth.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.web.auth` -- Trac Authentication 2 | =========================================== 3 | 4 | .. module :: trac.web.auth 5 | 6 | This module deals with web request authentication, and provides the 7 | default implementation for the `~trac.web.api.IAuthenticator` 8 | interface. 9 | 10 | 11 | Component 12 | --------- 13 | 14 | .. autoclass :: LoginModule 15 | :members: 16 | 17 | 18 | Support Classes 19 | --------------- 20 | 21 | A few classes are provided for directly computing the REMOTE_USER 22 | information from the HTTP headers for Basic or Digest authentication. 23 | This will be used by the 24 | `~trac.web.standalone.AuthenticationMiddleware`. 25 | 26 | .. autoclass :: BasicAuthentication 27 | :members: 28 | 29 | .. autoclass :: DigestAuthentication 30 | :members: 31 | 32 | -------------------------------------------------------------------------------- /doc/api/trac_web_href.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.web.href` -- Creation of URLs 2 | ======================================== 3 | 4 | .. module :: trac.web.href 5 | 6 | This module mainly proposes the following class: 7 | 8 | .. autoclass :: trac.web.href.Href 9 | :members: 10 | -------------------------------------------------------------------------------- /doc/api/trac_web_main.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.web.main` -- Trac Web Entry Point 2 | ============================================ 3 | 4 | .. module :: trac.web.main 5 | 6 | Entry point for dispatching web requests. 7 | 8 | 9 | `trac.web.dispatch_request` 10 | --------------------------- 11 | 12 | The WSGI compliant callable. It adapts the ``environ`` information 13 | passed from the WSGI gateway and retrieve the appropriate 14 | `~trac.env.Environment` from it, creates a `~trac.web.api.Request` 15 | instance and let the `RequestDispatcher` component forward it to the 16 | component implementing a matching `~trac.web.api.IRequestHandler`. 17 | 18 | .. autofunction :: dispatch_request 19 | 20 | 21 | Components 22 | ---------- 23 | 24 | .. autoclass :: RequestDispatcher 25 | :members: 26 | 27 | 28 | Classes 29 | ------- 30 | 31 | .. autoclass :: RequestWithSession 32 | 33 | 34 | Helper Functions 35 | ---------------- 36 | 37 | .. autofunction :: get_environments 38 | .. autofunction :: get_tracignore_patterns 39 | 40 | 41 | Miscellaneous 42 | ------------- 43 | 44 | .. autodata :: default_tracker 45 | -------------------------------------------------------------------------------- /doc/api/trac_web_session.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.web.session` 2 | ======================= 3 | 4 | .. automodule :: trac.web.session 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_web_standalone.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.web.standalone` 2 | ========================== 3 | 4 | .. automodule :: trac.web.standalone 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_web_wsgi.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.web.wsgi` 2 | ==================== 3 | 4 | .. automodule :: trac.web.wsgi 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_admin.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.admin` 2 | ====================== 3 | 4 | .. automodule :: trac.wiki.admin 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_formatter.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.formatter` 2 | ========================== 3 | 4 | .. automodule :: trac.wiki.formatter 5 | :members: 6 | 7 | Components 8 | ---------- 9 | 10 | .. autoclass :: HtmlFormatter 11 | :members: 12 | 13 | .. autoclass :: InlineHtmlFormatter 14 | :members: 15 | 16 | .. autoclass :: LinkFormatter 17 | :members: 18 | 19 | .. autoclass :: OneLinerFormatter 20 | :members: 21 | 22 | .. autoclass :: OutlineFormatter 23 | :members: 24 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_intertrac.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.intertrac` 2 | ========================== 3 | 4 | .. automodule :: trac.wiki.intertrac 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_interwiki.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.interwiki` 2 | ========================== 3 | 4 | .. automodule :: trac.wiki.interwiki 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_macros.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.macros` -- The standard set of Wiki macros 2 | ========================================================== 3 | 4 | .. module :: trac.wiki.macros 5 | 6 | The standard set of components corresponding to Wiki macros are not 7 | meant to be used directly from the API. You may study their 8 | implementation though, for getting inspiration. In particular, you'll 9 | see they all subclass the `WikiMacroBase` class, which provides a 10 | convenient way to implement a new `~trac.wiki.api.IWikiMacroProvider` 11 | interface. 12 | 13 | .. autoclass :: WikiMacroBase 14 | :members: 15 | 16 | See also :teo:`wiki/WikiMacros#DevelopingCustomMacros`. 17 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_model.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.model` 2 | ====================== 3 | 4 | .. automodule :: trac.wiki.model 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_parser.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.parser` 2 | ======================= 3 | 4 | .. automodule :: trac.wiki.parser 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_web_api.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.web_api` 2 | ======================== 3 | 4 | .. automodule :: trac.wiki.web_api 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/trac_wiki_web_ui.rst: -------------------------------------------------------------------------------- 1 | :mod:`trac.wiki.web_ui` 2 | ======================= 3 | 4 | .. automodule :: trac.wiki.web_ui 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_perm_authz_policy.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.perm.authz_policy` 2 | ================================ 3 | 4 | .. automodule :: tracopt.perm.authz_policy 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_perm_config_perm_provider.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.perm.config_perm_provider` 2 | ======================================== 3 | 4 | .. automodule :: tracopt.perm.config_perm_provider 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_ticket_clone.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.ticket.clone` 2 | =========================== 3 | 4 | .. automodule :: tracopt.ticket.clone 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_ticket_commit_updater.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.ticket.commit_updater` 2 | ==================================== 3 | 4 | .. automodule :: tracopt.ticket.commit_updater 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_ticket_deleter.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.ticket.deleter` 2 | ============================= 3 | 4 | .. automodule :: tracopt.ticket.deleter 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_versioncontrol_git_PyGIT.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.versioncontrol.git.PyGIT` 2 | ======================================= 3 | 4 | .. automodule :: tracopt.versioncontrol.git.PyGIT 5 | :members: 6 | 7 | .. autofunction :: parse_commit 8 | 9 | .. autoclass :: GitCore 10 | :members: 11 | 12 | .. autoclass :: SizedDict 13 | :members: 14 | -------------------------------------------------------------------------------- /doc/api/tracopt_versioncontrol_git_git_fs.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.versioncontrol.git.git_fs` 2 | ======================================== 3 | 4 | .. automodule :: tracopt.versioncontrol.git.git_fs 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/api/tracopt_versioncontrol_svn_svn_fs.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.versioncontrol.svn.svn_fs` -- Subversion backend for Trac 2 | ======================================================================= 3 | 4 | This module can be considered to be private. However, it can serve as 5 | an example implementation of a version control backend. 6 | 7 | Speaking of Subversion, we use its ``svn.fs`` layer mainly, which 8 | means we need direct (read) access to the repository content. 9 | 10 | Though there's no documentation for the Python API per se, the doxygen 11 | documentation for the `C libraries`_ are usually enough. Another 12 | possible source of inspiration are the `examples`_ and the helper 13 | classes in the `bindings`_ themselves. 14 | 15 | .. _C libraries: http://svn.collab.net/svn-doxygen/files.html 16 | .. _examples: http://svn.apache.org/viewvc/subversion/trunk/tools/examples/ 17 | .. _bindings: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/svn/ 18 | 19 | .. automodule :: tracopt.versioncontrol.svn.svn_fs 20 | 21 | 22 | Components 23 | ---------- 24 | 25 | .. autoclass :: SubversionConnector 26 | :members: 27 | 28 | Concrete classes 29 | ---------------- 30 | 31 | .. autoclass :: SubversionRepository 32 | :members: 33 | 34 | .. autoclass :: SubversionNode 35 | :members: 36 | 37 | .. autoclass :: SubversionChangeset 38 | :members: 39 | 40 | Miscellaneous 41 | ------------- 42 | 43 | .. autoclass :: Pool 44 | :members: 45 | 46 | .. autoclass :: SvnCachedRepository 47 | :members: 48 | -------------------------------------------------------------------------------- /doc/api/tracopt_versioncontrol_svn_svn_prop.rst: -------------------------------------------------------------------------------- 1 | :mod:`tracopt.versioncontrol.svn.svn_prop` 2 | ========================================== 3 | 4 | .. automodule :: tracopt.versioncontrol.svn.svn_prop 5 | :members: 6 | 7 | -------------------------------------------------------------------------------- /doc/dev/testing-environment.rst: -------------------------------------------------------------------------------- 1 | Test Environment Helpers 2 | ======================== 3 | 4 | Functional Test Environment 5 | --------------------------- 6 | 7 | .. automodule :: trac.tests.functional.testenv 8 | :members: 9 | 10 | .. _functional-tester: 11 | 12 | Functional Tester 13 | ----------------- 14 | 15 | .. automodule :: trac.tests.functional.tester 16 | :members: 17 | 18 | -------------------------------------------------------------------------------- /doc/dev/testing.rst: -------------------------------------------------------------------------------- 1 | Testing in Trac 2 | =============== 3 | 4 | So, you'd like to make sure Trac works in your configuration. 5 | Excellent. Here's what you need to know. 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | 10 | testing-intro 11 | testing-core 12 | testing-environment 13 | testing-database 14 | testing-plugins 15 | 16 | .. todo :: write more, with testing-specific steps. 17 | -------------------------------------------------------------------------------- /doc/glossary.rst: -------------------------------------------------------------------------------- 1 | ======== 2 | Glossary 3 | ======== 4 | 5 | .. glossary:: 6 | :sorted: 7 | 8 | VCS 9 | Version Control System, what you use for versioning your source code 10 | -------------------------------------------------------------------------------- /doc/images/bkgnd_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/doc/images/bkgnd_pattern.png -------------------------------------------------------------------------------- /doc/images/trac_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/doc/images/trac_logo.png -------------------------------------------------------------------------------- /doc/images/vertbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/doc/images/vertbars.png -------------------------------------------------------------------------------- /doc/index.rst: -------------------------------------------------------------------------------- 1 | ================================ 2 | Trac |version| API Documentation 3 | ================================ 4 | 5 | :Release: |release| 6 | :Date: |today| 7 | 8 | *This is work in progress. The API is not yet fully covered, but what 9 | you'll find here should be accurate, otherwise it's a bug and you're 10 | welcome to open a ticket for reporting the problem.* 11 | 12 | Content 13 | ======= 14 | 15 | .. toctree:: 16 | :maxdepth: 1 17 | 18 | api/index 19 | dev/testing 20 | 21 | .. toctree:: 22 | :hidden: 23 | 24 | glossary 25 | 26 | .. ifconfig:: devel 27 | 28 | .. toctree:: 29 | :hidden: 30 | 31 | todo 32 | 33 | 34 | Indices and tables 35 | ================== 36 | 37 | * :ref:`General Index ` 38 | * :ref:`modindex` 39 | * :ref:`search` 40 | * :doc:`glossary` 41 | 42 | .. ifconfig:: devel 43 | 44 | * :doc:`todo` 45 | 46 | -------------------------------------------------------------------------------- /doc/todo.rst: -------------------------------------------------------------------------------- 1 | Documentation TODO 2 | ================== 3 | 4 | .. todolist:: 5 | -------------------------------------------------------------------------------- /doc/utils/python.txt: -------------------------------------------------------------------------------- 1 | Undocumented Python objects 2 | =========================== 3 | trac.ticket.roadmap 4 | ------------------- 5 | Classes: 6 | * MilestoneModule -- missing methods: 7 | 8 | - resource_exists 9 | 10 | trac.wiki.api 11 | ------------- 12 | Classes: 13 | * WikiSystem -- missing methods: 14 | 15 | - get_resource_description 16 | - resource_exists 17 | 18 | -------------------------------------------------------------------------------- /doc/utils/trac_dev_pdf.style: -------------------------------------------------------------------------------- 1 | # This rst2pdf stylesheet, written in RSON format (http://code.google.com/p/rson/) 2 | # 3 | # Some guidelines: 4 | # - the base styles are defined in conf.py in pdf_stylesheets, the main one 5 | # being the 'sphinx' stylesheet, look at it to see what can be adapted (see 6 | # http://rst2pdf.googlecode.com/svn/tags/0.16/rst2pdf/styles/sphinx.style) 7 | # - the numerical color specifications need to have 6 hex digits 8 | # (i.e. #A00 won't work) 9 | 10 | fontsAlias: 11 | stdFont: Helvetica 12 | stdBold: Helvetica-Bold 13 | stdItalic: Helvetica-Oblique 14 | stdBoldItalic: Helvetica-BoldOblique 15 | stdSans: Helvetica 16 | stdSansBold: Helvetica-Bold 17 | stdSansItalic: Helvetica-Oblique 18 | stdSansBoldItalic: Helvetica-BoldOblique 19 | stdMono: Courier 20 | stdMonoItalic: Courier-Oblique 21 | stdMonoBold: Courier-Bold 22 | stdMonoBoldItalic: Courier-BoldOblique 23 | stdSerif: Times-Roman 24 | # Note: not using a predefined font results in extremely slow runtime on Windows 25 | # so please stick with Helvetica, Courier and the like for now 26 | 27 | linkColor: #B00000 28 | # The "standard" Trac color for links 29 | 30 | styles: 31 | admonition-heading: {fontSize: 80%, textColor: #A00000} 32 | code: 33 | backColor: #F5F5DC 34 | borderColor: #D5D5CC 35 | borderPadding: [6, 0, 6, 4] 36 | spaceBefore: 2 37 | heading: 38 | backColor: #F2F2F2 39 | borderColor: #CCCCCC 40 | borderPadding: [6, 0, 2, 10] 41 | borderWidth: 0.3 42 | fontName: stdSansBold 43 | fontSize: 10 44 | leading: 10 45 | leftIndent: 0 46 | spaceBefore: 16 47 | textColor: #303050 48 | # Some styles missing in sphinx.style: 49 | file: 50 | fontName: stdMono 51 | function: 52 | fontName: stdMonoItalic 53 | -------------------------------------------------------------------------------- /messages-js.cfg: -------------------------------------------------------------------------------- 1 | # mapping file for extracting messages from javascript files into 2 | # trac/locale/messages-js.pot (see setup.cfg) 3 | [extractors] 4 | javascript_script = trac.dist:extract_javascript_script 5 | 6 | [ignore: **/htdocs/js/jquery.js] 7 | [ignore: **/htdocs/js/jquery-ui.js] 8 | [ignore: **/htdocs/js/jquery-ui-addons.js] 9 | [ignore: **/htdocs/js/babel.js] 10 | [ignore: **/htdocs/js/excanvas.js] 11 | [ignore: **/htdocs/js/messages/*.js] 12 | [javascript: **.js] 13 | [javascript_script: **.html] 14 | 15 | -------------------------------------------------------------------------------- /messages.cfg: -------------------------------------------------------------------------------- 1 | # mapping file for extracting messages from Jinja2 templates into 2 | # trac/locale/messages.pot (see setup.cfg) 3 | 4 | [ignore: **/tests/**] 5 | 6 | [python: **.py] 7 | 8 | [html: **/templates/**.html] 9 | variable_start_string = ${ 10 | variable_end_string = } 11 | line_statement_prefix = # 12 | line_comment_prefix = ## 13 | trim_blocks = yes 14 | lstrip_blocks = yes 15 | newstyle_gettext = yes 16 | silent = no 17 | 18 | [text: **/templates/**.txt] 19 | variable_start_string = ${ 20 | variable_end_string = } 21 | line_statement_prefix = # 22 | line_comment_prefix = ## 23 | trim_blocks = yes 24 | lstrip_blocks = yes 25 | newstyle_gettext = yes 26 | silent = no 27 | 28 | [extractors] 29 | python = trac.dist:extract_python 30 | html = trac.dist:extract_html 31 | text = trac.dist:extract_text 32 | -------------------------------------------------------------------------------- /requirements-release.txt: -------------------------------------------------------------------------------- 1 | # Packages needed to create a release. 2 | setuptools>=75.3.1 3 | wheel 4 | jinja2 5 | babel 6 | setuptools_subversion 7 | twine 8 | pypandoc 9 | -------------------------------------------------------------------------------- /sample-plugins/Timestamp.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2007-2023 Edgewall Software 4 | # Copyright (C) 2007 Christian Boos 5 | # All rights reserved. 6 | # 7 | # This software is licensed as described in the file COPYING, which 8 | # you should have received as part of this distribution. The terms 9 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 10 | # 11 | # This software consists of voluntary contributions made by many 12 | # individuals. For the exact contribution history, see the revision 13 | # history and logs, available at https://trac.edgewall.org/. 14 | 15 | """Inserts the current time (in seconds) into the wiki page.""" 16 | 17 | from trac.util.datefmt import datetime_now, format_datetime, utc 18 | from trac.util.html import tag 19 | from trac.wiki.macros import WikiMacroBase 20 | 21 | revision = "$Rev$" 22 | url = "$URL$" 23 | 24 | 25 | class TimestampMacro(WikiMacroBase): 26 | _description = "Inserts the current time (in seconds) into the wiki page." 27 | 28 | def expand_macro(self, formatter, name, content, args=None): 29 | t = datetime_now(utc) 30 | return tag.strong(format_datetime(t, '%c')) 31 | -------------------------------------------------------------------------------- /sample-plugins/permissions/debug_perm.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2007-2023 Edgewall Software 4 | # Copyright (C) 2007 Christian Boos 5 | # All rights reserved. 6 | # 7 | # This software is licensed as described in the file COPYING, which 8 | # you should have received as part of this distribution. The terms 9 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 10 | # 11 | # This software consists of voluntary contributions made by many 12 | # individuals. For the exact contribution history, see the revision 13 | # history and logs, available at https://trac.edgewall.org/. 14 | 15 | from trac.core import * 16 | from trac.perm import IPermissionPolicy, PermissionCache 17 | from trac.resource import Resource 18 | 19 | revision = "$Rev$" 20 | url = "$URL$" 21 | 22 | class DebugPolicy(Component): 23 | """Verify the well-formedness of the permission checks. 24 | 25 | **This plugin is only useful for Trac Development.** 26 | 27 | Once this plugin is enabled, you'll have to insert it at the appropriate 28 | place in your list of permission policies, e.g. 29 | {{{ 30 | [trac] 31 | permission_policies = DebugPolicy, SecurityTicketsPolicy, AuthzPolicy, 32 | DefaultPermissionPolicy, LegacyAttachmentPolicy 33 | }}} 34 | """ 35 | 36 | implements(IPermissionPolicy) 37 | 38 | # IPermissionPolicy methods 39 | 40 | def check_permission(self, action, username, resource, perm): 41 | if resource: 42 | assert resource is None or isinstance(resource, Resource) 43 | assert isinstance(perm, PermissionCache) 44 | self.log.info("does '%s' have %s on %r?", username, action, resource) 45 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # Copyright (C) 2003-2023 Edgewall Software 5 | # All rights reserved. 6 | # 7 | # This software is licensed as described in the file COPYING, which 8 | # you should have received as part of this distribution. The terms 9 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 10 | # 11 | # This software consists of voluntary contributions made by many 12 | # individuals. For the exact contribution history, see the revision 13 | # history and logs, available at https://trac.edgewall.org/log/. 14 | 15 | import sys 16 | 17 | from setuptools import setup 18 | 19 | 20 | min_python = (3, 5) 21 | if sys.version_info < min_python: 22 | print("Trac requires Python %d.%d or later" % min_python) 23 | sys.exit(1) 24 | 25 | extra = {} 26 | 27 | try: 28 | import babel 29 | except ImportError: 30 | pass 31 | else: 32 | from trac.dist import get_l10n_trac_cmdclass 33 | extra['cmdclass'] = get_l10n_trac_cmdclass() 34 | 35 | try: 36 | import jinja2 37 | except ImportError: 38 | print("Jinja2 is needed by Trac setup, pre-installing") 39 | # give some context to the warnings we might get when installing Jinja2 40 | 41 | 42 | setup(**extra) 43 | -------------------------------------------------------------------------------- /setup_wininst.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/setup_wininst.bmp -------------------------------------------------------------------------------- /trac/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2003-2023 Edgewall Software 4 | # All rights reserved. 5 | # 6 | # This software is licensed as described in the file COPYING, which 7 | # you should have received as part of this distribution. The terms 8 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 9 | # 10 | # This software consists of voluntary contributions made by many 11 | # individuals. For the exact contribution history, see the revision 12 | # history and logs, available at https://trac.edgewall.org/log/. 13 | 14 | from pkg_resources import DistributionNotFound, get_distribution 15 | 16 | try: 17 | __version__ = get_distribution('Trac').version 18 | except DistributionNotFound: 19 | __version__ = '1.7.1' 20 | -------------------------------------------------------------------------------- /trac/admin/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2006-2023 Edgewall Software 4 | # All rights reserved. 5 | # 6 | # This software is licensed as described in the file COPYING, which 7 | # you should have received as part of this distribution. The terms 8 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 9 | # 10 | # This software consists of voluntary contributions made by many 11 | # individuals. For the exact contribution history, see the revision 12 | # history and logs, available at https://trac.edgewall.org/log/. 13 | 14 | from trac.admin.api import * 15 | -------------------------------------------------------------------------------- /trac/admin/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2005-2023 Edgewall Software 4 | # All rights reserved. 5 | # 6 | # This software is licensed as described in the file COPYING, which 7 | # you should have received as part of this distribution. The terms 8 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 9 | # 10 | # This software consists of voluntary contributions made by many 11 | # individuals. For the exact contribution history, see the revision 12 | # history and logs, available at https://trac.edgewall.org/log/. 13 | 14 | import unittest 15 | 16 | from trac.admin.tests import console, web_ui 17 | from trac.admin.tests.functional import functionalSuite 18 | 19 | 20 | def test_suite(): 21 | 22 | suite = unittest.TestSuite() 23 | suite.addTest(console.test_suite()) 24 | suite.addTest(web_ui.test_suite()) 25 | return suite 26 | 27 | if __name__ == '__main__': 28 | unittest.main(defaultTest='test_suite') 29 | -------------------------------------------------------------------------------- /trac/db/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2005-2023 Edgewall Software 4 | # All rights reserved. 5 | # 6 | # This software is licensed as described in the file COPYING, which 7 | # you should have received as part of this distribution. The terms 8 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 9 | # 10 | # This software consists of voluntary contributions made by many 11 | # individuals. For the exact contribution history, see the revision 12 | # history and logs, available at https://trac.edgewall.org/log/. 13 | 14 | from trac.db.api import * 15 | from trac.db.schema import * 16 | -------------------------------------------------------------------------------- /trac/db/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2005-2023 Edgewall Software 4 | # All rights reserved. 5 | # 6 | # This software is licensed as described in the file COPYING, which 7 | # you should have received as part of this distribution. The terms 8 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 9 | # 10 | # This software consists of voluntary contributions made by many 11 | # individuals. For the exact contribution history, see the revision 12 | # history and logs, available at https://trac.edgewall.org/log/. 13 | 14 | import unittest 15 | 16 | from trac.db.tests import api, mysql_test, postgres_test, schema, \ 17 | sqlite_test, util 18 | from trac.db.tests.functional import functionalSuite 19 | 20 | 21 | def test_suite(): 22 | suite = unittest.TestSuite() 23 | suite.addTest(api.test_suite()) 24 | suite.addTest(mysql_test.test_suite()) 25 | suite.addTest(postgres_test.test_suite()) 26 | suite.addTest(sqlite_test.test_suite()) 27 | suite.addTest(schema.test_suite()) 28 | suite.addTest(util.test_suite()) 29 | return suite 30 | 31 | if __name__ == '__main__': 32 | unittest.main(defaultTest='test_suite') 33 | -------------------------------------------------------------------------------- /trac/db/tests/functional.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | # 4 | # Copyright (C) 2009-2023 Edgewall Software 5 | # All rights reserved. 6 | # 7 | # This software is licensed as described in the file COPYING, which 8 | # you should have received as part of this distribution. The terms 9 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 10 | # 11 | # This software consists of voluntary contributions made by many 12 | # individuals. For the exact contribution history, see the revision 13 | # history and logs, available at https://trac.edgewall.org/log/. 14 | 15 | import os 16 | import unittest 17 | 18 | from trac.tests.functional import FunctionalTestCaseSetup 19 | 20 | 21 | class DatabaseBackupTestCase(FunctionalTestCaseSetup): 22 | def runTest(self): 23 | """Testing backup""" 24 | env = self._testenv.get_trac_environment() 25 | # raises TracError if backup fails 26 | backup_file = env.backup() 27 | self.assertTrue(os.path.exists(backup_file), 28 | 'Backup file was not created.') 29 | self.assertNotEqual(os.path.getsize(backup_file), 0, 30 | 'Backup file is zero length.') 31 | 32 | 33 | def functionalSuite(suite=None): 34 | if not suite: 35 | import trac.tests.functional 36 | suite = trac.tests.functional.functionalSuite() 37 | suite.addTest(DatabaseBackupTestCase()) 38 | return suite 39 | 40 | 41 | test_suite = functionalSuite 42 | 43 | 44 | if __name__ == '__main__': 45 | unittest.main(defaultTest='test_suite') 46 | -------------------------------------------------------------------------------- /trac/db/tests/schema.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # Copyright (C) 2016-2023 Edgewall Software 4 | # All rights reserved. 5 | # 6 | # This software is licensed as described in the file COPYING, which 7 | # you should have received as part of this distribution. The terms 8 | # are also available at https://trac.edgewall.org/wiki/TracLicense. 9 | # 10 | # This software consists of voluntary contributions made by many 11 | # individuals. For the exact contribution history, see the revision 12 | # history and logs, available at https://trac.edgewall.org/log/. 13 | 14 | import unittest 15 | 16 | from trac.db.schema import Column, Table 17 | from trac.test import makeSuite 18 | 19 | 20 | class TableTestCase(unittest.TestCase): 21 | 22 | def test_remove_columns(self): 23 | """Method removes columns and key entries from Table object.""" 24 | table = Table('table1', key=['col1', 'col2'])[ 25 | Column('col1'), 26 | Column('col2'), 27 | Column('col3'), 28 | Column('col4'), 29 | ] 30 | 31 | table.remove_columns(('col2', 'col3')) 32 | 33 | self.assertEqual(2, len(table.columns)) 34 | self.assertEqual('col1', table.columns[0].name) 35 | self.assertEqual('col4', table.columns[1].name) 36 | self.assertEqual([], table.key) 37 | 38 | 39 | def test_suite(): 40 | suite = unittest.TestSuite() 41 | suite.addTest(makeSuite(TableTestCase)) 42 | return suite 43 | 44 | 45 | if __name__ == '__main__': 46 | unittest.main(defaultTest='test_suite') 47 | -------------------------------------------------------------------------------- /trac/htdocs/README: -------------------------------------------------------------------------------- 1 | This directory contains files used by Trac's default Genshi templates. 2 | 3 | Local modifications to these files might be lost during the installation of 4 | a new Trac version. This can be avoided by making a copy of this entire 5 | directory before beginning modifications. 6 | -------------------------------------------------------------------------------- /trac/htdocs/asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/asc.png -------------------------------------------------------------------------------- /trac/htdocs/attachment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/attachment.png -------------------------------------------------------------------------------- /trac/htdocs/batchmodify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/batchmodify.png -------------------------------------------------------------------------------- /trac/htdocs/changeset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/changeset.png -------------------------------------------------------------------------------- /trac/htdocs/closedticket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/closedticket.png -------------------------------------------------------------------------------- /trac/htdocs/collapsed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/collapsed.png -------------------------------------------------------------------------------- /trac/htdocs/css/changeset.css: -------------------------------------------------------------------------------- 1 | /* Changeset overview */ 2 | #overview .files { padding: 1px 0 } 3 | #overview .files ul { margin: 0; padding: 0 } 4 | #overview .files li { list-style-type: none } 5 | #overview .files li .comment { display: none } 6 | #overview .files li div { 7 | border: 1px solid #999; 8 | float: left; 9 | margin: .2em .5em 0 0; 10 | overflow: hidden; 11 | width: .8em; height: .8em; 12 | } 13 | 14 | #overview .changeset { padding: 0 0 1px } 15 | #overview dd.changeset p { 16 | margin-bottom: 0; 17 | margin-top: 0; 18 | } 19 | #content.changeset p.message { margin-left: 8.5em; } 20 | 21 | .diff ul.props { 22 | font-size: 90%; 23 | list-style: disc; 24 | margin: .5em 0 0; 25 | padding: 0 .5em 1em 2em; 26 | } 27 | .diff ul.props li { margin: 0; padding: 0 } 28 | -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-bg_diagonals-thick_18_ffddcc_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-bg_diagonals-thick_18_ffddcc_40x40.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-bg_highlight-soft_30_303030_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-bg_highlight-soft_30_303030_1x100.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-bg_highlight-soft_75_c0f0c0_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-bg_highlight-soft_75_c0f0c0_1x100.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-bg_highlight-soft_80_ffffdd_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-bg_highlight-soft_80_ffffdd_1x100.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_444444_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_444444_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_4b954f_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_4b954f_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_505050_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_505050_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_555555_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_555555_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_707070_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_707070_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_777620_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_777620_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_777777_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_777777_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_9b081d_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_9b081d_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_b00000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_b00000_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_cc0000_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_cc0000_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_d7d7d7_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_d7d7d7_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/jquery-ui/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/css/jquery-ui/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /trac/htdocs/css/prefs.css: -------------------------------------------------------------------------------- 1 | #content.prefs #tabs { 2 | list-style: none; 3 | margin: 2em 1em 0; 4 | padding: 1px; 5 | } 6 | #content.prefs #tabs li { 7 | background: #e6e6e6; 8 | border: 1px solid; 9 | border-color: #ccc #666 #ccc #ccc; 10 | border-top-left-radius: .5em; 11 | border-top-right-radius: .5em; 12 | color: #666; 13 | position: relative; 14 | bottom: -1px; 15 | float: left; 16 | font-size: 90%; 17 | margin: 0 .3em; 18 | padding: .2em 1em .3em; 19 | } 20 | #content.prefs #tabs :link, #content.prefs #tabs :visited { 21 | border: none; 22 | color: #999; 23 | } 24 | #content.prefs #tabs :link:hover, #content.prefs #tabs :visited:hover { 25 | background: transparent; 26 | color: #333; 27 | } 28 | #content.prefs #tabs li.active { 29 | background: #fff; 30 | border-bottom: 1px solid #fff; 31 | } 32 | #content.prefs #tabs #tab_advanced { float: right; } 33 | #content.prefs #tabcontent { 34 | background: url(../vgradient.png) 0 1px repeat-x; 35 | border-top: 1px solid #ccc; 36 | clear: left; 37 | padding: 20px 5px; 38 | } 39 | * html #content.prefs #tabcontent { padding-top: 0; } 40 | 41 | #content.prefs div.field { margin-bottom: 1em; } 42 | #content.prefs tr.field th { 43 | text-align: right; 44 | vertical-align: middle; 45 | white-space: nowrap; 46 | } 47 | #content.prefs tr.field { height: 30px; } 48 | 49 | #content.prefs div.prefs_child { 50 | margin-bottom: 4em; 51 | margin-top: 4em; 52 | } 53 | #content.prefs div.prefs_child h2 { 54 | border-bottom: 1px solid #ddd; 55 | box-shadow: .1em .4em .7em 0 #f2f2f2; 56 | padding: 0.2em .3em .1em; 57 | } 58 | 59 | table.subscription-rules { border-collapse: collapse } 60 | table.subscription-rules .ui-sortable .rule-label { cursor: move } 61 | table.subscription-rules .ui-sortable-helper { opacity: 0.2; alpha(opacity=20) } 62 | -------------------------------------------------------------------------------- /trac/htdocs/css/search.css: -------------------------------------------------------------------------------- 1 | #content.search .filters { color: #333; font-size: 85%; } 2 | 3 | #content.search form { margin: 1em 0 0 } 4 | #content.search form p { margin: .5em 0 } 5 | #content.search hr { clear: left; margin-bottom: 0 } 6 | #content.search #notfound { margin: 2em; font-size: 110% } 7 | 8 | #content.search #results { margin-right: 3em } 9 | #content.search #results dt { margin: 1.5em 0 0 } 10 | #content.search #results dt a { color: #33c } 11 | #content.search #results dd { font-size: 80%; margin: 0; padding: 0 } 12 | #content.search #results .trac-author, #results .date { color: #090; } 13 | 14 | #content.search #quickjump { font-style: italic; font-weight: bold; } 15 | -------------------------------------------------------------------------------- /trac/htdocs/desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/desc.png -------------------------------------------------------------------------------- /trac/htdocs/dots.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/dots.gif -------------------------------------------------------------------------------- /trac/htdocs/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/download.png -------------------------------------------------------------------------------- /trac/htdocs/draft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/draft.png -------------------------------------------------------------------------------- /trac/htdocs/edit_toolbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/edit_toolbar.png -------------------------------------------------------------------------------- /trac/htdocs/editedticket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/editedticket.png -------------------------------------------------------------------------------- /trac/htdocs/envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/envelope.png -------------------------------------------------------------------------------- /trac/htdocs/expanded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/expanded.png -------------------------------------------------------------------------------- /trac/htdocs/expander_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/expander_normal.png -------------------------------------------------------------------------------- /trac/htdocs/expander_normal_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/expander_normal_hover.png -------------------------------------------------------------------------------- /trac/htdocs/expander_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/expander_open.png -------------------------------------------------------------------------------- /trac/htdocs/expander_open_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/expander_open_hover.png -------------------------------------------------------------------------------- /trac/htdocs/extlink.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/extlink.gif -------------------------------------------------------------------------------- /trac/htdocs/feed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/feed.png -------------------------------------------------------------------------------- /trac/htdocs/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/file.png -------------------------------------------------------------------------------- /trac/htdocs/folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/folder.png -------------------------------------------------------------------------------- /trac/htdocs/grip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/grip.png -------------------------------------------------------------------------------- /trac/htdocs/guide/admin-permissions-TICKET_ADMIN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/guide/admin-permissions-TICKET_ADMIN.png -------------------------------------------------------------------------------- /trac/htdocs/guide/admin-permissions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/guide/admin-permissions.png -------------------------------------------------------------------------------- /trac/htdocs/guide/admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/guide/admin.png -------------------------------------------------------------------------------- /trac/htdocs/guide/basic-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/guide/basic-workflow.png -------------------------------------------------------------------------------- /trac/htdocs/guide/original-workflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/guide/original-workflow.png -------------------------------------------------------------------------------- /trac/htdocs/ics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/ics.png -------------------------------------------------------------------------------- /trac/htdocs/imggrid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/imggrid.png -------------------------------------------------------------------------------- /trac/htdocs/inreply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/edgewall/trac/0dde63bb84da28ad87f1a3d3d7bea7b55d415620/trac/htdocs/inreply.png -------------------------------------------------------------------------------- /trac/htdocs/js/log_graph.js: -------------------------------------------------------------------------------- 1 | // Log graph painting 2 | 3 | (function($){ 4 | 5 | $.paintLogGraph = function(graph, canvas) { 6 | var ctx = canvas.getContext('2d'); 7 | ctx.scale(-canvas.width / graph.columns, 8 | canvas.height / graph.vertices.length); 9 | ctx.translate(-graph.columns + 0.5, 0.5) 10 | 11 | // Paint threads 12 | ctx.lineWidth = graph.line_width; 13 | ctx.lineCap = 'round'; 14 | ctx.lineJoin = 'round'; 15 | var threads = graph.threads; 16 | for (var i = 0; i < threads.length; ++i) { 17 | var thread = threads[i]; 18 | ctx.strokeStyle = graph.colors[i % graph.colors.length]; 19 | ctx.beginPath(); 20 | for (var j = 0; j < thread.length; ++j) { 21 | var item = thread[j]; 22 | if (item[0] == 0) 23 | ctx.moveTo(item[1], item[2]); 24 | else if (item[0] == 1) 25 | ctx.lineTo(item[1], item[2]); 26 | } 27 | ctx.stroke(); 28 | } 29 | 30 | // Paint dots 31 | ctx.lineWidth = 0; 32 | var vertices = graph.vertices; 33 | for (var i = 0; i < vertices.length; ++i) { 34 | var vertice = vertices[i]; 35 | ctx.fillStyle = graph.colors[vertice[1] % graph.colors.length]; 36 | ctx.beginPath(); 37 | ctx.arc(vertice[0], i, graph.dot_radius, 0, 2 * Math.PI, true); 38 | ctx.fill(); 39 | } 40 | 41 | return canvas; 42 | }; 43 | 44 | })(jQuery); 45 | -------------------------------------------------------------------------------- /trac/htdocs/js/noconflict.js: -------------------------------------------------------------------------------- 1 | jQuery.noConflict(); // jQuery is now removed from the $ namespace 2 | // to use the $ shorthand, use (function($){ ... })(jQuery); 3 | // and for the onload handler: jQuery(function($){ ... }); -------------------------------------------------------------------------------- /trac/htdocs/js/resizer.js: -------------------------------------------------------------------------------- 1 | // Allow resizing