= InterTrac Extension for TracLinks = ''This is a proposal for implementing #234'' ''I think it's now ready for testing (see r1912)'' == Definitions == An InterTrac link is used for referring to a Trac object (Wiki page, changeset, ticket, ...) located in another Trac environment. == Link Syntax == {{{ : }}} The link is composed by the target environment name, followed by a colon (e.g. {{{trac:}}}), followed by a regular TracLinks, of any flavor. That target environment name is either the real name of the environment, or an alias for it. The aliases are defined in {{{trac.ini}}} (see below). The prefix is case insensitive. For convenience, there's also an alternative short-hand form, where one can use an alias as an immediate prefix for the identifier of a ticket, changeset or report: (e.g. {{{#T234}}}, {{{[T1508]}}}...) That alias must be at most 3 letters long. == Examples == Besides the other environments run by the same server process (called ''sibling'' environments), which are automatically detected, (''Note: currently only in {{{tracd}}}''), it is necessary to setup a configuration for the InterTrac facility: * in order to refer to a remote Trac * for defining environment aliases This is done quite simply in an {{{[intertrac]}}} section within the {{{trac.ini}}} file. Example configuration: {{{ ... [intertrac] ## -- Example of setting up an alias: t.key = trac ## -- Link to an external Trac: trac.title = Edgewall's Trac for Trac trac.url = http://projects.edgewall.com/trac #trac.svn = http://repos.edgewall.com/projects/trac # Hint: .svn information could be used in the future to support svn:externals... }}} Now, given this configuration, one could create the following links: * to the current InterTrac page: * {{{trac:wiki:InterTrac}}} -> [http://projects.edgewall.com/trac/wiki/InterTrac trac:wiki:InterTrac] * {{{t:wiki:InterTrac}}} -> [http://projects.edgewall.com/trac/wiki/InterTrac t:wiki:InterTrac] * Keys are case insensitive: {{{T:wiki:InterTrac}}} -> [http://projects.edgewall.com/trac/wiki/InterTrac T:wiki:InterTrac] * to the ticket #234: * {{{trac:ticket:234}}} -> [http://projects.edgewall.com/trac/ticket/234 trac:ticket:234] * {{{trac:#234}}} -> [http://projects.edgewall.com/trac/ticket/234 trac:#234] * {{{#T234}}} -> [http://projects.edgewall.com/trac/ticket/234 #T234] * to the changeset [1912]: * {{{trac:changeset:1912}}} -> [http://projects.edgewall.com/trac/changeset/1912 trac:changeset:1912] * {{{trac:[1912]}}} [http://projects.edgewall.com/trac/changeset/1912 trac:[1912]] * {{{[T1912]}}} -> [http://projects.edgewall.com/trac/changeset/1912 [T1912]] {{{ #!comment To wjl@icecavern.net: The link values you modified were actually matching the current implementation: * {{{trac:[1912]}}} [http://projects.edgewall.com/trac/search?q=1912 trac:[1912]] * {{{trac:#234}}} -> [http://projects.edgewall.com/trac/search?q=234 trac:#234] In short: one can't assume the local Trac knows about all of the shortcut syntax used by the remote Trac. Anything not given as explicit links (intertrac_prefix:module:id) has to be interpreted by the remote Trac, relying on its quickjump facility. }}} See also: TracLinks, InterWiki ---- == Implementation Notes == Currently, the {{{[intertrac]}}} configuration has to be repeated for each Trac environment, but there's work in progress concerning a [ticket:1051 centralized trac.ini], which would help greatly here. This idea was first proposed as a patch for #234, and has been implemented in the following branch: source:branches/cboos-dev/intertrac-branch In particular, [1912] should implement the behavior described in version 9 of this page. The general idea is that any {{{[a-zA-Z][a-zA-Z0-9]*:}}} prefix, followed by anything which is not a space, has to be interpreted as: 1. maybe an alias to something else; it yes, it is dereferenced before going on 1. either a link prefix given by an IWikiSyntaxProvider component 1. if not found, an environment name (!InterTrac link) 1. if not found, an external system name (!InterWiki link) 1. if not found, it is left unchanged This order enables one to configure Trac for using another ticket system: first disable the {{{[ticket]}}} component and setup a {{{ticket}}} !InterWiki link pointing to the other BugTrackingSystem.