Search code examples
pythontracpython-sphinxrestructuredtext

Sphinx - generate automatic references to Trac tickets and changesets


Is Sphinx, is there way to automatically link text like #112 or r1023 to the corresponding tickets/changesets in Trac?

For eg:

#112  -> http://mytracsite/tickets/112
r1023 -> http://mytracsite/changeset/1023

See TracLinks for more examples.


Solution

  • If you put this in your config.py

    
    trac_url = 'http://mytratsite/'
    
    from docutils import nodes, utils
    from docutils.parsers.rst import roles
    import urllib
    
    def trac_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
      ref = trac_url + '/intertrac/' + urllib.quote(text, safe='')
      node = nodes.reference(rawtext, utils.unescape(text), refuri=ref, **options)
      return [node],[]
    
    roles.register_canonical_role('trac', trac_role)
    

    Then you can use :trac:`#123` and :trac:`r1023` in your documents.

    This is probably the easiest way to make quick links to a trac site. It automatically works for all kinds of TracLinks because it uses the intertrac mechanism for the links.