SQLite format 3@ 1e 9indexsession_last_visit_idxsession CREATE INDEX session_last_visit_idx ON session (last_visit)}tablesessionsessionCREATE TABLE session ( sid text, authenticated integer, last_visit integer, UNIQUE (sid,authenticated) )-Aindexsqlite_autoindex_session_1session ##tableauth_cookieauth_cookieCREATE TABLE auth_cookie ( cookie text, name text, ipnr text, time integer, UNIQUE (cookie,ipnr,name) )5I#indexsqlite_autoindex_auth_cookie_1auth_cookie}!!EtablepermissionpermissionCREATE TABLE permission ( username text, action text, UNIQUE (username,action) )3G!indexsqlite_autoindex_permission_1permissionZtablesystemsystemCREATE TABLE system ( name text PRIMARY KEY, value text )+?indexsqlite_auto&% ``t%youngest_rev501C)qrepository_dirsvn:9cc76755-d610-4521-9f6e-822262be07e6:/svn-repo youngest_rev=initial_database_version22-database_version22 )repository_dir%youngest_rev=initial_database_version-database_version iP3qU=% v_J3!fdanieliTRAC_ADMIN'usersTIMELINE_VIEW#usersREPORT_VIEW'usersREPORT_CREATEusersWIKI_VIEWpcarratudeveloper%ideiudicibusdeveloper'developerTIMELINE_VIEW%developerREPORT_ADMIN+developerMILESTONE_ADMIN%developerTICKET_ADMIN!developerWIKI_ADMIN!francescotrac-admin)anonymousMILESTONE_VIEW%anonymousROADMAP_VIEW)anonymousCHANGESET_VIEW 'anonymousTIMELINE_VIEW %anonymousBROWSER_VIEW ''authenticatedTICKET_MODIFY ''authenticatedTICKET_CREATE #anonymousTICKET_VIEW+anonymousREPORT_SQL_VIEW#anonymousREPORT_VIEW#anonymousSEARCH_VIEW'#authenticatedWIKI_MODIFY'#authenticatedWIKI_CREATEanonymousWIKI_VIEWanonymousFILE_VIEWanonymousLOG_VIEW }E+Ibc},qE/]!fdanieliTRAC_ADMIN'usersTIMELINE_VIEW#usersREPORT_VIEW'usersREPORT_CREATEusersWIKI_VIEWpcarratudeveloper%ideiudicibusdeveloper'developerTIMELINE_VIEW%developerREPORT_ADMIN+developerMILESTONE_ADMIN%developerTICKET_ADMIN!developerWIKI_ADMIN!francescotrac-admin)anonymousMILESTONE_VIEW%anonymousROADMAP_VIEW)anonymousCHANGESET_VIEW'anonymousTIMELINE_VIEW %anonymousBROWSER_VIEW ''authenticatedTICKET_MODIFY ''authenticatedTICKET_CREATE #anonymousTICKET_VIEW +anonymousREPORT_SQL_VIEW#anonymousREPORT_VIEW#anonymousSEARCH_VIEW'#authenticatedWIKI_MODIFY'#authenticatedWIKI_CREATEanonymousWIKI_VIEWanonymousFILE_VIEWanonymousLOG_VIEW %%d357e20e8aef07d82be1ec2ee3d6d9a3ideiudicibus82.187.12.26Ju>)eed2ea075328a33bddcec520c312fc2epcarratu212.110.19.158Jy\)%f5091747a6fbd6145fd92f7d8f5740c4gvalli93.41.211.97Jx#1f958b021d812fd356d5e697be893fb0pcarratu87.3.146.76Jxi?~%7f24cbe55a9e674a7a4a4f27e59571a0fdanieli82.187.12.26K?%1134041dab9b17f347e7e2f188ad7563fdanieli82.187.12.26K i%d357e20e8aef07d82be1ec2ee3d6d9a382.187.12.26ideiudicibus*eed2ea075328a33bddcec520c312fc2e212.110.19.158pcarratuf5091747a6fbd6145fd92f7d8f5740c493.41.211.97gvalli1f958b021d812fd356d5e697be893fb087.3.146.76pcarratu;v7f24cbe55a9e674a7a4a4f27e59571a082.187.12.26fdanieli;1134041dab9b17f347e7e2f188ad756382.187.12.26fdanieli F5R|i5#04f05e0a5F$agramigniJ{F7ac709f2d4FfdanieliKVgvalliJx 9bbc42%ideiudicibusKY`pcarratuJxiXfdanieliKS  agramigniKɈj"francescfrancescoM7francescoN% ignazioM giorgioKߝ b&&GU604f05e0a5eagramigni ignazio 4e7 giorgio gvalli9bbc4242055d354e72a091e3pcarratufdanieli%ideiudicibusfrancesco>11eb4bce720a028b7861b39109006506467822a53a2d9269  J{  KVJxKY`JxiXKS KɈj M N%Kߝ      OOW-d)K ZtablesystemsystemCREATE TABLE system ( name text PRIMARY KEY, value text )+?indexsqlite_autoindex_system_1system}!!EtablepermissionpermissionCREATE TABLE permission ( username text, action text, UNIQUE (username,action) )3G!indexsqlite_autoindex_permission_1permission##tableauth_cookieauth_cookieCREATE TABLE auth_cookie ( cookie text, name text, ipnr text, time integer, UNIQUE (cookie,ipnr,name) )5I#indexsqlite_autoindex_auth_cookie_1auth_cookie}tablesessionsessionCREATE TABLE session ( sid text, authenticated integer, last_visit integer, UNIQUE (sid,authenticated) )-Aindexsqlite_autoindex_session_1session e 9indexsession_last_visit_idxsession CREATE INDEX session_last_visit_idx ON session (last_visit)n ?indexsession_authenticated_idxsession CREATE INDEX session_authenticated_idx ON session (authenticated)&:c~U-%|%/ideiudicibustimeline.daysback30&{%!!ideiudicibusquery_time1274698089z- agramignitimeline.authors"y/agramignitimeline.daysback30,q'/fdanieliquery_tickets11 14 15 16 17 18pp!;fdanieliquery_href/projects/query?status=accepted&status=assigned&status=new&status=reopened&group=component&component=Todo+List&order=priority&col=id&col=summary&col=component&col=status&col=type&col=priority&col=milestone&report=10xo/=fdanieliquery_constraints{'status': [u'accepted', u'assigned', u'new', u'reopened'], 'component': [u'Todo List']}n- fdanielitimeline.authors!m/fdanielitimeline.daysback30"l!!fdanieliquery_time1257170364&%'#pcarratuquery_tickets2 1 3 4 5 6A$!_pcarratuquery_href/projects/katalys/report/1?max=100&page=1'francescoquery_tickets1francescolanguageit-ITB!_francescoquery_href/projects/katalys/report/1?max=100&page=1- francescotimeline.authors"/francescotimelin! a@("Fber.P!fdanieliquery_hrefa -ignaziochrome.notices.0'francescoquery_tickets!francescoquery_href'giorgioquery_tickets!giorgioquery_href /giorgioquery_constraints!giorgioquery_time!%'ideiudicibusquery_tickets!%'ideiudicibuswiki_editrows%%/ideiudicibusquery_constraints~$%-ideiudicibustimeline.authors}%%/ideiudicibustimeline.daysback|!-agramignitimeline.authorsz"/agramignitimeline.daysbacky!fdanieliquery_href!fdanieliquery_time"/francescoquery_constraints!-francescotimeline.authors"/francescotimeline.daysbackfrancescolanguage!francescoquery_time%!ideiudicibusquery_time{'fdanieliquery_tickets!/fdanieliquery_constraints -fdanielitimeline.authors!/fdanielitimeline.daysback%!ideiudicibusquery_hrefsk!pcarratuquery_href'pcarratuquery_tickets D,= //)tablesession_attributesession_a= //)tablesession_attributesession_attribute CREATE TABLE session_attribute ( sid text, authenticated integer, name text, value text, UNIQUE (sid,authenticated,name) )A U/indexsqlite_autoindex_session_attribute_1session_attribute] tablecachecacheCREATE TABLE cache ( id text PRIMARY KEY, generation integer ))=indexsqlite_autoindex_cache_1cachec!!tableattachmentattachmentCREATE TABLE attachment ( type text, id text, filename text, size integer, time integer, description text, author text, ipnr text, UNIQUE (type,id,filename) )3G!indexsqlite_autoindex_attachment_1attachmentQtablewikiwikiCREATE TABLE wiki ( name text, version integer, time integer, author text, ipnr text, text text, comment text, readonly integer, UNIQUE (name,version) ) 'Strac.ticket.api.TicketSystem.fields"Itrac.wiki.api.WikiSystem.pagesN 'Strac.ticket.api.TicketSystem.fields"Itrac.wiki.api.WikiSystem.pages^iK ? %%wikicrinali/calcolo_interessiuml.gif0Jvideiudicibus82.187.12.26 3A]%%wikicrinali/e-injuctionscheda_Uff_Contenzioso.docJdescrizione progetto ufficio contenziosoideiudicibus82.187.12.26o +#i%wikiserver_settingsclient.conf JSample file per OpenVPN (CAMBIARE NOME CHIAVI)fdanieli82.187.12.26  ? %%wikiprince_filiera_della_modaDOCUMENTO DI ANALISI E DISEGNO DEI REQUISITI_PRINCE_v3.7_Finale.doc{J"Eideiudicibus82.187.12.26[ )M%wikihoruspacchetti.listJZPacchetti installati al 03/09/09fdanieli82.187.12.26 ?Eu%%wikiprince_filiera_della_moda15091-FunzioneProduzione.pdfJxgdescrizione produzione qualità totale disinta baseideiudicibus82.187.12.26 ?A]%%wikiprince_filiera_della_moda07- Es.1 Distinta base.pptJxgdescrizione distinta base in modello E-Rideiudicibus82.187.12.26 ?wA%%wikiprince_filiera_della_modaDOCUMENTO DI ANALISI E DISEGNO DEI REQUISITI_v2.5.docQ<JxFtdocumentazione di progettoideiudicibus82.187. ZF Zi)~)!7wikiopensourceosi-when-possible.gif 5?1wikicrinali/calcolo_interessiuser_interface.vsd 5?1wikicrinali/calcolo_interessiuser_interface.gif *?wikicrinali/calcolo_interessiuml.vsd *?wikicrinali/calcolo_interessiuml.gif73Awikicrinali/e-injuctionscheda_Uff_Contenzioso.doc$+#wikiserver_settingsclient.confg?wikiprince_filiera_della_modaDOCUMENTO DI ANALISI E DISEGNO DEI REQUISITI_PRINCE_v3.7_Finale.doc)wikihoruspacchetti.list??Ewikiprince_filiera_della_moda15091-FunzioneProduzione.pdf=?Awikiprince_filiera_della_moda07- Es.1 Distinta base.pptX?wwikiprince_filiera_della_modaDOCUMENTO DI ANALISI E DISEGNO DEI REQUISITI_v2.5.docn-~ytoje`[VQLGB=83.)$ {uoic]WQKE?93-'! U )cTracNavigationJs%trac127.0.0.1= Trac Navigation = Starting with Trac 0.11, it is now possible to customize the main and meta navigation ent&ʁK&āI&G&F&D&B&A&>&=&<&:!8!S4!R3 2 1., +*&#"!ځ $  ߁ށ~ } | C{ Bz >x ;u :s 6r 2q 1p 0o ,n[mZjYiXhWfSdPbMaK`J^F\C[BZ9X.U-S QNLJ E@b:]7\5X4O3C1>/,.+-, * )(&%#"! o c LIHA]R  C  {*fH2Uux#WikiNewPage.#TracUpgrade-#TracFastCgi,;TracTicketsCustomFields+?WikiRestructuredTextLinks* ATracFineGrainedPermissions)TracGuide(TracQuery'1TracSyntaxColoring&#TracModWSGI%!WikiMacros$#InterMapTxt#5WikiRestructuredText"/TracAccessibility!InterTrac )TracStandalone TracCgi!TracImportTracLinks ATracInterfaceCustomization#TracReportsWikiHtml!TracBackup'TracChangeset)WikiDeletePage!TracSearch#TracRoadmap%TracTimelineWikiStartTracAdmin+TracEnvironment'PageTemplatesTracWiki+TracPermissions 'TracModPython 'RecentChanges )WikiFormatting #TracBrowser !TitleIndex#TracUG9horus/virtualizzazioni!?prince_filiera_della_modaH.!cheatsheet-#TracUnicode!ypg^ULC:1( }tkbYPG>5,#xof]TKB90' J\J[J0ZJYJXJqWJKVJ UJnTJ,SJRJnQJxfPJxfOJxfNJxbMMJxb0LJxb KJx]JJx]IJxOMHJxO6GJxD=FJxBEJxBDJxAfCJx@Jx1E=Jx1<<Jx1 ;Jx.:Jx.h9Js%8Js%7Js%6Js%5Js%4Js%3Js%2Js%1Js%0Js%/Js%.Js%-Js%,Js%+Js%*Js%)Js%(Js%'Js%&Js%%Js%$Js%#Js%"Js%!Js% Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js%Js% Js% Js% Js% Js% Js%Js%Js%Js%Js%I JXHJxD=F > >hO##etablenode_changenode_changeCREATE TABLE node_change ( rev text, path text, node_type text, change_type text, base_path text, base_rev';indexsqlite_autoindex_wiki_1wikiF'_indexwiki_time_idxwikiCREATE INDEX wiki_time_idx ON wiki (time)[tablerevisionrevisionCREATE TABLE revision ( rev text PRIMARY KEY, time integer, author text, message text )/Cindexsqlite_autoindex_revision_1revisionV/oindexrevision_time_idxrevisionCREATE INDEX revision_time_idx ON revision (time)O##etablenode_changenode_changeCREATE TABLE node_change ( rev text, path text, node_type text, change_type text, base_path text, base_rev text, UNIQUE (rev,path,change_type) )5I#indexsqlite_autoindex_node_change_1node_change_3#windexnode_change_rev_idxnode_changeCREATE INDEX node_change_rev_idx ON node_change (rev)4-%21JTideiudicibus--7%M20JTideiudicibusmigrate to 0.1 no snaspshot deps%19JTideiudicibus--7%M18JTideiudicibusmigrate to 0.1 no snaspshot deps%17JTideiudicibus--% 16JTPideiudicibus1%A15JTideiudicibusupdate dependencies to 0.1%14JTideiudicibus--7 %M13JTideiudicibusmigrate to 0.1 no snaspshot depsK %u12JR;|ideiudicibusservices per configurazione application server jboss3 %E11JR:ideiudicibuskatalys-bandi-private webapp2 %C10JR:iideiudicibuskatalys-bandi-public webapp0 %A9JR7fideiudicibuskatalys-aste-public webapp% 8JR6`ideiudicibus% 7JR5ideiudicibus% 6JR5ideiudicibus% 5JR0ideiudicibus2%E4JR+ideiudicibusadded shared lib for webapps?%_3JR*ideiudicibusbuild.xml used for deploying in localhostC4 `-}E)1&Ѓ&x&t\!A!,!{ ցx\D܁/ȁ E+n'^T:4$ }vohaZSLE>70)" zsle^WPIB;4-& ~wpib[T112p111o110n109m108l107k106j105i104h103g102f101e100d99c98b97a96`95_94^93]92\91[90Z89Y88X87W86V85U84T83S82R81Q80P79O78N77M76L75K74J73I72H71G70F69E68D67C66B65A64@63?62>61=60<59;58:57956855754653552451350249148047/46.45-44,43+42*41)40(39'38&37%36$35#34"33!32 31302928272625242322212019181716151413 12 1&47/!401327G G251 F17649ypg^ULC:1( }tkbYPG>5,#xof]TKB90' J \J[J*ZJcOYJsXJWJ4VJUJTJRSJ|TRJzQJy PJyksOJxR NJwMJpLJo^GKJnVJJm{IJmHJiKGJi FJiEJińDJiFCJiBJiĊAJib@Ji?Jid>Ji=Ji<Ji;JiO:Ji^9Ji8Ji7Ji6Ji'5Jir4Ji>3Ji2Ji1Ji0Ji/JiI.Ji-JiX,JiF+JiS*Ji)Ji(JiX'Jiq&Ji\%J^$J^#J^"J^v!JZ JZ0JWE JWDJWDJWD!JW2JW2JVJTJTJTJTJTJTJTJTPJTJTJT JR;| JR: JR:+z MW& L!z K57 J * J)J|TR>`72xqjc\UNG@92+$|ung`ysmga[UOIC=71+% }wqke_YSMGA;5/)#FA-1Qω)͉"ˉʉlj ʼnˆxmaYRJB;3,&  ysmg`YTLF@:4.("{yw us~pxnqljjbfZeQ0G(4#+#6cw5x4A3L3P2?1m0Y/ȃg.H.'1-X`,&+C*߃?* L)<|(eK'w&f%߂+%$@+#m."!Ƃ% ꂟ# _*9GNx~ف\ 9<-qD9ց-Y86e|ǁ %^'S J 2E Kk ^ w}gО^aܒdՎ(Ԉ;1_;^u?w11better/trunk/katalys-band3[107katalys-a450eurekast,xc450eurekastreams/trunk/web/src/main/java/org/eurekastreams/web/client/events/data/ResourceLikeChangeEvent.javaAKK 412ccn-site/trunk/src/main/webapp/plupload/docs/api/css/reset.cssA]/204informale_crm/include/fckeditor/editor/skins/silver/images/toolbar.arrowright.gifAm Z)125better/branches/ccn-frascati/lib/symfony/validator/sfValidatorString.class.phpA0p{k107katalys-alfresco/trunk/alfresco-repo/target/war/work/org.alfresco/alfresco/images/icons/opensearch_controls.gifA!107katalys-alfresco/trunk/alfresco-repo/target/war/work/org.alfresco/alfresco/WEB-INF/classes/alfresco/messages/copy-service_en_US.propertiesA)?s107katalys-alfresco/trunk/alfresco-repo/target/alfresco-repo-0.1-SNAPSHOT/WEB-INF/classes/alfresco/templates/webscripts/org/alfresco/repository/wcm/membership/membership.get.desc.xmlA  ^4Vzl^XK>1$ {naTG:- wj]PC6)%10795[5554Oi25c11 107107u107#107107107-z107_107C1077+107107107A107107107K107107t107U_107J1073107_107 107107i107107 107 s107 !107 q107 }\107 +D107 (107  107 5107 107 107 ?}107 [107 7107 I107107107S107107y107]^0 453,$ 450( 412%a 397r"T 302 261Jo204|f202f200Q1818\VPhb2,&  Z Y X W V U TSRQ P O N MLKJI H G F E DCBA@?>=<;:987654321 0 /.-,+*)('&%$#"!       Zypg^ULC:1( }tkbYPG>5,#xof]TKB90' JC1ZJBRYJBRXJBRWJ(VJ(UJ(TJSJRJQJiPJiOJiNJyMJ$LJ$KJ$JJ$IJ$"HJ$"GJ$"FJvEJvDJCJBJAJ@J?J>J=J<J;J:J9JB8JB7JB6J5J4J3J2J1J0J/Jz.Jz-Jz,Jzd+Jzd*Jy]^)Jy]'(Jy\'Jy\&Jy\_%Jy\_$Jy\_#Jy\_"Jx!Jx JxJxjJxjJxT3JxT3JxSJxSJxSJxS8JxS8JxRJxRJxRJxRJxRJxRJxRJxR`JxR` JxR` JxI JxI JxI JxDJxDJxDJxDJxDJxDJxDJxD <<\'qtablemilestonemilestone-CREATE TABLE milestone ( name k 9'indexticket_change_time_idxticket_change%CREATE INDEX ticket_change_time_idx ON ticket_change (time)!''atableticket_customticket_custom'CREATE TABLE ticket_custom ( tiq=' indexticket_change_ticket_idxticket_change$CREATE INDEX ticket_change_ticket_idx ON ticket_change (ticket)k 9'indexticket_change_time_idxticket_change%CREATE INDEX ticket_change_time_idx ON ticket_change (time)!''atableticket_customticket_custom'CREATE TABLE ticket_custom ( ticket integer, name text, value text, UNIQUE (ticket,name) )9"M'indexsqlite_autoindex_ticket_custom_1ticket_custom(o#Atableenumenum)CREATE TABLE enum ( type text, name text, value text, UNIQUE (type,name) )'$;indexsqlite_autoindex_enum_1enum*y%Atablecomponentcomponent+CREATE TABLE component ( name text PRIMARY KEY, owner text, description text )   oXD0!resolutionNeed_Test6 #ticket_typetask3 ##ticket_typeenhancement2 #ticket_typedefect1 prioritytrivial5 priorityminor4prioritymajor3prioritycritical2priorityblocker1!!resolutionworksforme5!resolutionduplicate4!resolutionwontfix3!resolutioninvalid2!resolutionfixed1 u_L9$ !resolutionNeed_Test#ticket_typetask ##ticket_typeenhancement #ticket_typedefect prioritytrivial priorityminor prioritymajorprioritycriticalpriorityblocker!!resolutionworksforme!resolutionduplicate!resolutionwontfix!resolutioninvalid!resolutionfixed  Todo Listfdanieli- documenti_princepcarratuo!component2somebody!component1somebody  Todo List-documenti_prince!component2!component1 Vk<3IMarca-Temporale-POCJϲ`realizzazione di una applicazione web che realizzi un meccanismo di protocollo "digitale" basato su marca temporale. L'applicativo deve: * Associare una marca temporale [/wiki/marca_temporale RFC] ad un file * Archiviare la marca temporale e il file * Garantire la verifica del file a fronte della marca temporale * Visualizzare la marca temporale a fronte di un file per il quale essa già esiste. z=Amodifica better infocertintegrazione better con servizi infocert per aumentare la sicurezza delle gare telematichediagrammi umlG!mprince_1.0J`JĉProduzione diagrammi uml per il progetto prince.!milestone4!milestone33 better-ccn-frascatiJƒ` 3Marca-Temporale-POC3better-ccn-frascati!prince_1.0!milestone4!milestone3=modifica better infocert 2.01.0 2.01.0 `'Z+tablereportreport2CREATE TABLE report ( id integer PRIMARY KEY, author text, title text, query text, description text )1&Eindexsqlite_autoindex_component_1component,'qtablemilestonemilestone-CREATE TABLE milestone ( name text PRIMARY KEY, due integer, completed integer, description text )1(Eindexsqlite_autoindex_milestone_1milestone.u)Atableversionversion/CREATE TABLE version ( name text PRIMARY KEY, time integer, description text )-*Aindexsqlite_autoindex_version_1version0l))Active Tickets SELECT p.value AS __color__, id AS ticket, summary, component, version, milestone, t.type AS type, owner, status, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status <> 'closed' ORDER BY CAST(p.value AS int), milestone, t.type, time * List all active tickets by priorit: 9876543 l))Active Tickets SELECT p.value AS __color__, id AS ticket, summary, component, version, milestone, t.type AS type, owner, status, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status <> 'closed' ORDER BY CAST(p.value AS int), milestone, t.type, time * List all active tickets by priority. * Color each row based on priority. ww?Y Active Tickets by Version SELECT p.value AS __color__, version AS __group__, id AS ticket, summary, component, version, t.type AS type, owner, status, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status <> 'closed' ORDER BY (version IS NULL),version, CAST(p.value AS int), t.type, time This report shows how to color results by priority, while grouping results by version. Last modification time, description and reporter are included as hidden fields for useful RSS export. ^^CActive Tickets by Milestone SELECT p.value AS __color__, 'Milestone '||milestone AS __group__, id AS ticket, summary, component, version, t.type AS type, owner, status, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status <> 'closed' ORDER BY (milestone IS NULL),milestone, CAST(p.value AS int), t.type, time This report shows how to color results by priority, while grouping results by milestone. Last modification time, description and reporter are included as hidden fields for useful RSS export. jO Accepted, Active Tickets by Owner SELECT p.value AS __color__, owner AS __group__, id AS ticket, summary, component, milestone, t.type AS type, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status = 'accepted' ORDER BY owner, CAST(p.value AS int), t.type, time List accepted tickets, group by ticket owner, sorted by priority. u WAccepted, Active Tickets by Owner (Full Description) SELECT p.value AS __color__, owner AS __group__, id AS ticket, summary, component, milestone, t.type AS type, time AS created, description AS _description_, changetime AS _changetime, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status = 'accepted' ORDER BY owner, CAST(p.value AS int), t.type, time List tickets accepted, group by ticket owner. This report demonstrates the use of full-row display.  e= All Tickets By Milestone (Including closed) SELECT p.value AS __color__, t.milestone AS __group__, (CASE status WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;' ELSE (CASE owner WHEN $USER THEN 'font-weight: bold' END) END) AS __style__, id AS ticket, summary, component, status, resolution,version, t.type AS type, priority, owner, changetime AS modified, time AS _time,reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed'), (CASE status WHEN 'closed' THEN changetime ELSE (-1) * CAST(p.value AS int) END) DESC A more complex example to show how to make advanced reports. YY$! 3My Tickets SELECT p.value AS __color__, (CASE status WHEN 'accepted' THEN 'Accepted' ELSE 'Owned' END) AS __group__, id AS ticket, summary, component, version, milestone, t.type AS type, priority, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE t.status <> 'closed' AND owner = $USER ORDER BY (status = 'accepted') DESC, CAST(p.value AS int), milestone, t.type, time This report demonstrates the use of the automatically set USER dynamic variable, replaced with the username of the logged in user when executed. ]W 3 Search by Componentquery:?status=%21closed & order=priority & owner=fdanieli A3cActive Tickets, Mine first SELECT p.value AS __color__, (CASE owner WHEN $USER THEN 'My Tickets' ELSE 'Active Tickets' END) AS __group__, id AS ticket, summary, component, version, milestone, t.type AS type, owner, status, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter FROM ticket t LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority' WHERE status <> 'closed' ORDER BY (COALESCE(owner, '') = $USER) DESC, CAST(p.value AS int), milestone, t.type, time * List all active tickets by priority. * Show all tickets owned by the logged in user in a group first. allocated to projects based on need, and since plugins occupy a place in Python's module system, the first version of any given plugin to be loaded will be used for all the projects. In other words, you cannot use different versions of a single plugin in two projects of a multi-project setup. It may be safer to install plugins for all projects (see below) and then enable them selectively on a project-by-project basis. === For All Projects === ==== With an .egg file ==== Some plugins (such as [trac:SpamFilter SpamFilter]) are downloadable as a `.egg` file which can be installed with the `easy_install` program: {{{ easy_install TracSpamFilter }}} If `easy_install` is not on your system see the Requirements section above to install it. Windows users will need to add the `Scripts` directory of their Python installation (for example, `C:\Python23\Scripts`) to their `PATH` environment variable (see [http://peak.telecommunity.com/DevCenter/EasyInstall#windows-notes easy_install Windows notes] for more info?rmation). If Trac reports permission errors after installing a zipped egg and you would rather not bother providing a egg cache directory writable by the web server, you can get around it by simply unzipping the egg. Just pass `--always-unzip` to `easy_install`: {{{ easy_install --always-unzip TracSpamFilter-0.2.1dev_r5943-py2.4.egg }}} You should end up with a directory having the same name as the zipped egg (complete with `.egg` extension) and containing its uncompressed contents. Trac also searches for globally installed plugins ''(since 0.10)'', see TracIni#GlobalConfiguration. ==== From source ==== `easy_install` makes installing from source a snap. Just give it the URL to either a Subversion repository or a tarball/zip of the source: {{{ easy_install http://svn.edgewall.com/repos/trac/sandbox/spam-filter }}} ==== Enabling the plugin ==== Unlike plugins installed per-environment, you'll have to explicitly enable globally installed plugins via [wiki:TracIni trac.ini]. This also applies to plugins@ installed in the path specified in the `[inherit] plugins_dir` configuration option. This is done in the `[components]` section of the configuration file, for example: {{{ [components] tracspamfilter.* = enabled }}} The name of the option is the Python package of the plugin. This should be specified in the documentation of the plugin, but can also be easily discovered by looking at the source (look for a top-level directory that contains a file named `__init__.py`.) Note: After installing the plugin, you need to restart your web server. ==== Uninstalling ==== `easy_install` or `python setup.py` does not have an uninstall feature. Hower, it is usually quite trivial to remove a globally installed egg and reference: 1. Do `easy_install -m [plugin name]` to remove references from `$PYTHONLIB/site-packages/easy-install.pth` when the plugin installed by setuptools. 1. Delete executables from `/usr/bin`, `/usr/local/bin` or `C:\\Python*\Scripts`. For search what executables are there, you may refer to `[cAonsole-script]` section of `setup.py`. 1. Delete the .egg file or folder from where it is installed, usually inside `$PYTHONLIB/site-packages/`. 1. Restart web server. If you are uncertain about the location of the egg, here is a small tip to help locate an egg (or any package) - replace `myplugin` with whatever namespace the plugin uses (as used when enabling the plugin): {{{ >>> import myplugin >>> print myplugin.__file__ /opt/local/python24/lib/site-packages/myplugin-0.4.2-py2.4.egg/myplugin/__init__.pyc }}} == Setting up the Plugin Cache == Some plugins will need to be extracted by the Python eggs runtime (`pkg_resources`), so that their contents are actual files on the file system. The directory in which they are extracted defaults to '.python-eggs' in the home directory of the current user, which may or may not be a problem. You can however override the default location using the `PYTHON_EGG_CACHE` environment variable. To do this from the Apache configuration, use the `SetEnv` directive as foBllows: {{{ SetEnv PYTHON_EGG_CACHE /path/to/dir }}} This works whether you are using the [wiki:TracCgi CGI] or the [wiki:TracModPython mod_python] front-end. Put this directive next to where you set the path to the [wiki:TracEnvironment Trac environment], i.e. in the same `` block. For example (for CGI): {{{ SetEnv TRAC_ENV /path/to/projenv SetEnv PYTHON_EGG_CACHE /path/to/dir }}} or (for mod_python): {{{ SetHandler mod_python ... SetEnv PYTHON_EGG_CACHE /path/to/dir }}} ''Note: !SetEnv requires the `mod_env` module which needs to be activated for Apache. In this case the !SetEnv directive can also be used in the `mod_python` Location block.'' For [wiki:TracFastCgi FastCGI], you'll need to `-initial-env` option, or whatever is provided by your web server for setting environment variables. ''Note: that if you already use -initial-env to set the project directory for either a single project or parent you will neeCd to add an additional -initial-env directive to the !FastCgiConfig directive. I.e. {{{ FastCgiConfig -initial-env TRAC_ENV=/var/lib/trac -initial-env PYTHON_EGG_CACHE=/var/lib/trac/plugin-cache }}} === About hook scripts === If you have set up some subversion hook scripts that call the Trac engine - such as the post-commit hook script provided in the `/contrib` directory - make sure you define the `PYTHON_EGG_CACHE` environment variable within these scripts as well. == Troubleshooting == === Is setuptools properly installed? === Try this from the command line: {{{ $ python -c "import pkg_resources" }}} If you get '''no output''', setuptools '''is''' installed. Otherwise, you'll need to install it before plugins will work in Trac. === Did you get the correct version of the Python egg? === Python eggs have the Python version encoded in their filename. For example, `MyPlugin-1.0-py2.4.egg` is an egg for Python 2.4, and will '''not''' be loaded if you're running a different Python version (such as 2D.3 or 2.5). Also, verify that the egg file you downloaded is indeed a ZIP archive. If you downloaded it from a Trac site, chances are you downloaded the HTML preview page instead. === Is the plugin enabled? === If you install a plugin globally (i.e. ''not'' inside the `plugins` directory of the Trac project environment) you will have to explicitly enable it in [TracIni trac.ini]. Make sure that: * you actually added the necessary line(s) to the `[components]` section * the package/module names are correct * the value is “enabled", not e.g. “enable” === Check the permissions on the egg file === Trac must be able to read the file. === Check the log files === Enable [wiki:TracLogging logging] and set the log level to `DEBUG`, then watch the log file for messages about loading plugins. === Verify you have proper permissions === Some plugins require you have special permissions in order to use them. [trac:WebAdmin WebAdmin], for example, requires the user to have TRAC_ADMIN permissions for Eit to show up on the navigation bar. === Is the wrong version of the plugin loading? === If you put your plugins inside plugins directories, and certainly if you have more than one project, you need to make sure that the correct version of the plugin is loading. Here are some basic rules: * Only one version of the plugin can be loaded for each running Trac server (ie. each Python process). The Python namespaces and module list will be shared, and it cannot handle duplicates. Whether a plugin is `enabled` or `disabled` makes no difference. * A globally installed plugin (typically `setup.py install`) will override any version in global or project plugins directories. A plugin from the global plugins directory will be located before any project plugins directory. * If your Trac server hosts more than one project (as with `TRAC_ENV_PARENT_DIR` setups), then having two versions of a plugin in two different projects will give uncertain results. Only one of them will load, and the one loaded will be shared by both projects. Trac will load the first found - basically from the project that receives the first request. * Having more than one version listed inside Python site-packages is fine (ie. installed with `setup.py install`) - setuptools will make sure you get the version installed most recently. However, don't store more than one version inside a global or project plugins directory - neither version number nor installed date will matter at all. There is no way to determine which one will be located first when Trac searches the directory for plugins. === If all of the above failed === OK, so the logs don't mention plugins, the egg is readable, the python version is correct ''and'' the egg has been installed globally (and is enabled in the trac.ini) and it still doesn't work or give any error messages or any other indication as to why? Hop on the [trac:IrcChannel IrcChannel] and ask away. ---- See also TracGuide, [trac:PluginList plugin list], [trac:TracDev/ComponentArchitecture component architecture]sible for the current user. `[metanav]` corresponds to the '''meta navigation bar''', by default positioned above the main navigation bar and below the ''Search'' box. It contains the ''Log in'', ''Logout'', ''Help/Guide'' etc. entries. This navigation bar is meant to access some global information about the Trac project and the current user. Note that it is still not possible to customize the '''contextual navigation bar''', i.e. the one usually placed below the main navigation bar. === Example === In the following example, we rename the link to the Wiki start "Home", and hide the "Help/Guide" link. We also make the "View Tickets" entry link to a specific report. Relevant excerpt from the TracIni: {{{ [mainnav] wiki.label = Home tickets.href = /report/24 [metanav] help = disabled }}} ---- See also: TracInterfaceCustomization, and the [http://trac-hacks.org/wiki/NavAddPlugin TracHacks:NavAddPlugin] or [http://trac-hacks.org/wiki/MenusPlugin TracHacks:MenusPlugin] (still needed for adding entries) ds space characters * or simply: ["WikiPageName"]s (!MoinMoin's internal free links style) }}} This will be rendered as: * [wiki:Wiki_page], [wiki:ISO9000] * [wiki:"Space Matters"] that page name embeds space characters * or simply: ["WikiPageName"]s (!MoinMoin's internal free links style) Starting with Trac 0.11, it's also possible to link to a specific ''version'' of a Wiki page, as you would do for a specific version of a file, for example: WikiStart@1. See also TracLinks#QuotingspaceinTracLinks. Finally, and as exemplified in the line above, one can also append an anchor to a Wiki page name, in order to link to a specific section within that page. The anchor can easily be seen by hovering the mouse over a section heading, then clicking on the [[html(¶)]] sign that appears at its end. The anchor is usually generated automatically, but it's also possible to specify it explicitly: see WikiFormatting#using-explicit-id-in-heading. ---- See also: WikiNewPage, WikiFormatting, TracWiki, TracLinks zU )cTracNavigationJs%trac127.0.0.1= Trac Navigation = Starting with Trac 0.11, it is now possible to customize the main and meta navigation entries in some basic ways. The new `[mainnav]` and `[metanav]` configuration sections can now be used to customize the text and link used for the navigation items, or even to disable them. `[mainnav]` corresponds to the '''main navigation bar''', the one containing entries such as ''Wiki'', ''Timeline'', ''Roadmap'', ''Browse Source'' and so on. This navigation bar is meant to access the default page of the main modules enabled in Trac and accesFS #cTracPluginsJs%trac127.0.0.1= Trac Plugins = [[TracGuideToc]] Since version 0.9, Trac supports [trac:PluginList pl; _ 'yWikiPageNamesJs%trac127.0.0.1= Wiki Page Names = [[TracGuideToc]] Wiki page names commonly use the CamelCase convention. Within wiki text, any word in CamelCase automatically becomes a hyperlink to the wiki page with that name. CamelCase page names must follow these rules: 1. The name must consist of '''alphabetic characters only'''. No digits, spaces, punctuation, or underscores are allowed. 2. A name must have at least two capital letters. 3. The first character must be capitalized. 4. Every capital letter must be followed by one or more lower-case letters. 5. The use of slash ( / ) is permitted in page names (possibly representing a hierarchy). If you want to create a wiki page that doesn't follow CamelCase rules you can use the following syntax: {{{ * [wiki:Wiki_page], [wiki:ISO9000] * [wiki:"Space Matters"] that page name embeGKcIni#logging-section trac.ini]. '''stderr''':: Output all log entries to console ([wiki:TracStandalone tracd] only). '''syslog''':: (UNIX) Send all log messages to the local syslogd via named pipe `/dev/log`. By default, syslog will write them to the file /var/log/messages. '''eventlog''':: (Windows) Use the system's NT Event Log for Trac logging. == Log Levels == The verbosity level of logged messages can be set using the `log_level` option in [wiki:TracIni#logging-section trac.ini]. The log level defines the minimum level of urgency required for a message to be logged, and those levels are: '''CRITICAL''':: Log only the most critical (typically fatal) errors. '''ERROR''':: Log failures, bugs and errors. '''WARN''':: Log warnings, non-interrupting events. '''INFO''':: Diagnostic information, log information about all processing. '''DEBUG''':: Trace messages, profiling, etc. == Log Format == Starting with Trac 0.10.4 (see #2844), it is possible to set the output format for log entries. This can be done through the `log_format` option in [wiki:TracIni#logging-section trac.ini]. The format is a string which can contain any of the [http://docs.python.org/lib/node422.html Python logging Formatter variables]. Additonally, the following Trac-specific variables can be used: '''$(basename)s''':: The last path component of the current environment. '''$(path)s''':: The absolute path for the current environment. '''$(project)s''':: The originating project's name. Note that variables are identified using a dollar sign (`$(...)s`) instead of percent sign (`%(...)s`). The default format is: {{{ log_format = Trac[$(module)s] $(levelname)s: $(message)s }}} In a multi-project environment where all logs are sent to the same place (e.g. `syslog`), it makes sense to add the project name. In this example we use `basename` since that can generally be used to identify a project: {{{ log_format = Trac[$(basename)s:$(module)s] $(levelname)s: $(message)s }}} ---- See also: TracIni, TracGuide, TracEnvironment LL| %3TracWorkflowJs%trac127.0.0.1= The Trac Ticket Workflow System = [[TracGuideToc]] The Trac issue database provides a configurable workflow. == The Default TicSv 3TracIniJs%trac127.0.0.1= The Trac Configuration File = [[TracGuideToc]] Trac configuration is done by editing the '''`trac.ini`''M] #yTracLoggingJs%trac127.0.0.1= Trac Logging = [[TracGuideToc]] Trac supports logging of system messages using the standard [http://docs.python.org/lib/module-logging.html logging module] that comes with Python. Logging is configured in the `[logging]` section in [wiki:TracIni#logging-section trac.ini]. == Supported Logging Methods == The log method is set using the `log_type` option in [wiki:TracIni#logging-section trac.ini], which takes any of the following values: '''none'':: Suppress all log messages. '''file''':: Log messages to a file, specified with the `log_file` option in [wiki:TraJN' config file, located in `/conf/trac.ini`. Changes to the configuration are usually reflected immediately, though changes to the `[components]` or `[logging]` sections will require restarting the web server. You may also need to restart the web server after creating a global configuration file when none was previously present. == Global Configuration == In versions prior to 0.11, the global configuration was by default located in `$prefix/share/trac/conf/trac.ini` or sometimes /etc/trac/trac.ini depending on the distribution. If you're upgrading, you may want to specify that file to inherit from. Literally, when you're upgrading to 0.11, you have to add an `inherit`-section to your project's `trac.ini` file. Additionally you have to move your customized templates and common images from `$prefix/share/trac/...` to the new location. Global options will be merged with the environment-specific options, where local options override global options. The options file is specified as follows: {{{ O[inherit] file = /usr/share/trac/conf/trac.ini }}} Note that you can also specify a global option file when creating a new project, by adding the option `--inherit=/path/to/global/options` to [TracAdmin trac-admin]'s `initenv` command. If you would not do this but nevertheless intend to use a global option file with your new environment, you would have to go through the newly generated conf/trac.ini file and delete the entries that would otherwise override those set in the global file. == Reference == This is a brief reference of available configuration options. [[TracIni()]] == [components] == #components-section This section is used to enable or disable components provided by plugins, as well as by Trac itself. The component to enable/disable is specified via the name of the option. Whether its enabled is determined by the option value; setting the value to `enabled` or `on` will enable the component, any other value (typically `disabled` or `off`) will disable the component. The option name iPs either the fully qualified name of the components or the module/package prefix of the component. The former enables/disables a specific component, while the latter enables/disables any component in the specified package/module. Consider the following configuration snippet: {{{ [components] trac.ticket.report.ReportModule = disabled webadmin.* = enabled }}} The first option tells Trac to disable the [wiki:TracReports report module]. The second option instructs Trac to enable all components in the `webadmin` package. Note that the trailing wildcard is required for module/package matching. See the ''Plugins'' page on ''About Trac'' to get the list of active components (requires `CONFIG_VIEW` [wiki:TracPermissions permissions].) See also: TracPlugins == [ticket-custom] == #ticket-custom-section In this section, you can define additional fields for tickets. See TracTicketsCustomFields for more details. == [ticket-workflow] == #ticket-workflow-section ''(since 0.11)'' The workflow for tickets is contrQolled by plugins. By default, there's only a `ConfigurableTicketWorkflow` component in charge. That component allows the workflow to be configured via this section in the trac.ini file. See TracWorkflow for more details. == [milestone-groups] == #milestone-groups-section ''(since 0.11)'' As the workflow for tickets is now configurable, there can be many ticket states, and simply displaying closed tickets vs. all the others is maybe not appropriate in all cases. This section enables one to easily create ''groups'' of states that will be shown in different colors in the milestone progress bar. Example configuration (the default only has closed and active): {{{ closed = closed closed.order = 0 # sequence number in the progress bar closed.query_args = group=resolution # optional extra param for the query closed.overall_completion = true # indicates groups that count for overall completion percentage new = new new.order = 1 new.css_class = new new.label = new active = * R # one catch-all group is allowed active.order = 1 active.css_class = open # CSS class for this interval active.label = in progress # Displayed label for this group }}} The definition consists in a comma-separated list of accepted status. Also, '*' means any status and could be used to associate all remaining states to one catch-all group. The CSS class can be one of: new (yellow), open (no color) or closed (green). New styles can easily be added using the following selector: `table.progress td.` == [svn:externals] == #svn:externals-section ''(since 0.11)'' The TracBrowser for Subversion can interpret the `svn:externals` property of folders out of the box. However, if those externals are ''not'' using the `http:` protocol, or if a link to a different repository browser (such another Trac or [http://www.viewvc.org/ ViewVC]) is desired, then Trac needs to be able to map an external prefix to this other URL. This mapping is done in the `[svn:externals]` section of the TracIni Example: {{{ [svn:externals] 1 = svn://server/repos1 http://trac/proj1/browser/$path?rev=$rev 2 = svn://server/repos2 http://trac/proj2/browser/$path?rev=$rev 3 = http://theirserver.org/svn/eng-soft http://ourserver/viewvc/svn/$path/?pathrev=25914 4 = svn://anotherserver.com/tools_repository http://ourserver/trac/support/browser/$path?rev=$rev }}} With the above, the `svn://anotherserver.com/tools_repository/tags/1.1/tools` external will be mapped to `http://ourserver/trac/support/browser/tags/1.1/tools?rev=` (and `rev` will be set to the appropriate revision number if the external additionally specifies a revision, see the [http://svnbook.red-bean.com/en/1.4/svn.advanced.externals.html SVN Book on externals] for more details). Note that the number used as a key in the above section is purely used as a place holder, as the URLs themselves can't be used as a key due to various limitations in the configuration file parser. ---- See also: TracGuide, TracAdmin, TracEnvironment Tket Workflow == === Environments upgraded from 0.10 === When you run `trac-admin upgrade`, your `trac.ini` will be modified to include a `[ticket-workflow]` section. The workflow configured in this case is the original workflow, so that ticket actions will behave like they did in 0.10. Graphically, that looks like this: [[Image(htdocs:../common/guide/original-workflow.png)]] There are some significant "warts" in this; such as accepting a ticket sets it to 'assigned' state, and assigning a ticket sets it to 'new' state. Perfectly obvious, right? So you will probably want to migrate to "basic" workflow; [trac:source:trunk/contrib/workflow/migrate_original_to_basic.py contrib/workflow/migrate_original_to_basic.py] may be helpful. === Environments created with 0.11 === When a new environment is created, a default workflow is configured in your trac.ini. This workflow is the basic workflow (described in `basic-workflow.ini`), which is somewhat different from the workflow of the 0.10 releases. GrapUhically, it looks like this: [[Image(htdocs:../common/guide/basic-workflow.png)]] == Additional Ticket Workflows == There are several example workflows provided in the Trac source tree; look in [trac:source:trunk/contrib/workflow contrib/workflow] for `.ini` config sections. One of those may be a good match for what you want. They can be pasted into the `[ticket-workflow]` section of your `trac.ini` file. Here are some [http://trac.edgewall.org/wiki/WorkFlow/Examples diagrams] of the above examples. == Basic Ticket Workflow Customization == Note: Ticket "statuses" or "states" are not separately defined. The states a ticket can be in are automatically generated by the transitions defined in a workflow. Therefore, creating a new ticket state simply requires defining a state transition in the workflow that starts or ends with that state. Create a `[ticket-workflow]` section in `trac.ini`. Within this section, each entry is an action that may be taken on a ticket. For example, consider the `accept` aVction from `simple-workflow.ini`: {{{ accept = new,accepted -> accepted accept.permissions = TICKET_MODIFY accept.operations = set_owner_to_self }}} The first line in this example defines the `accept` action, along with the states the action is valid in (`new` and `accepted`), and the new state of the ticket when the action is taken (`accepted`). The `accept.permissions` line specifies what permissions the user must have to use this action. The `accept.operations` line specifies changes that will be made to the ticket in addition to the status change when this action is taken. In this case, when a user clicks on `accept`, the ticket owner field is updated to the logged in user. Multiple operations may be specified in a comma separated list. The available operations are: - del_owner -- Clear the owner field. - set_owner -- Sets the owner to the selected or entered owner. - ''actionname''`.set_owner` may optionally be set to a comma delimited list or a single value. - set_owner_to_self -- Sets the Wowner to the logged in user. - del_resolution -- Clears the resolution field - set_resolution -- Sets the resolution to the selected value. - ''actionname''`.set_resolution` may optionally be set to a comma delimited list or a single value. {{{ Example: resolve_new = new -> closed resolve_new.name = resolve resolve_new.operations = set_resolution resolve_new.permissions = TICKET_MODIFY resolve_new.set_resolution = invalid,wontfix }}} - leave_status -- Displays "leave as " and makes no change to the ticket. '''Note:''' Specifying conflicting operations (such as `set_owner` and `del_owner`) has unspecified results. {{{ resolve_accepted = accepted -> closed resolve_accepted.name = resolve resolve_accepted.permissions = TICKET_MODIFY resolve_accepted.operations = set_resolution }}} In this example, we see the `.name` attribute used. The action here is `resolve_accepted`, but it will be presented to the user as `resolve`. For actions that should be available in all states, `*` may beX used in place of the state. The obvious example is the `leave` action: {{{ leave = * -> * leave.operations = leave_status leave.default = 1 }}} This also shows the use of the `.default` attribute. This value is expected to be an integer, and the order in which the actions are displayed is determined by this value. The action with the highest `.default` value is listed first, and is selected by default. The rest of the actions are listed in order of decreasing `.default` values. If not specified for an action, `.default` is 0. The value may be negative. There are a couple of hard-coded constraints to the workflow. In particular, tickets are created with status `new`, and tickets are expected to have a `closed` state. Further, the default reports/queries treat any state other than `closed` as an open state. While creating or modifying a ticket workfow, `contrib/workflow/workflow_parser.py` may be useful. It can create `.dot` files that [http://www.graphviz.org GraphViz] understands to provide a vYisual description of the workflow. This can be done as follows (your install path may be different). {{{ cd /var/local/trac_devel/contrib/workflow/ sudo ./showworkflow /srv/trac/PlannerSuite/conf/trac.ini }}} And then open up the resulting `trac.pdf` file created by the script (it will be in the same directory as the `trac.ini` file). After you have changed a workflow, you need to restart apache for the changes to take effect. This is important, because the changes will still show up when you run your script, but all the old workflow steps will still be there until the server is restarted. == Example: Adding optional Testing with Workflow == By adding the following to your [ticket-workflow] section of trac.ini you get optional testing. When the ticket is in new, accepted or needs_work status you can choose to submit it for testing. When it's in the testing status the user gets the option to reject it and send it back to needs_work, or pass the testing and send it along to closed. If they accept it Zthen it gets automatically marked as closed and the resolution is set to fixed. Since all the old work flow remains, a ticket can skip this entire section. {{{ testing = new,accepted,needs_work,assigned,reopened -> testing testing.name = Submit to reporter for testing testing.permissions = TICKET_MODIFY reject = testing -> needs_work reject.name = Failed testing, return to developer pass = testing -> closed pass.name = Passes Testing pass.operations = set_resolution pass.set_resolution = fixed }}} == Example: Add simple optional generic review state == Sometimes Trac is used in situations where "testing" can mean different things to different people so you may want to create an optional workflow state that is between the default workflow's `assigned` and `closed` states, but does not impose implementation-specific details. The only new state you need to add for this is a `reviewing` state. A ticket may then be "submitted for review" from any state that it can be reassigned. If a review passes, you c[an re-use the `resolve` action to close the ticket, and if it fails you can re-use the `reassign` action to push it back into the normal workflow. The new `reviewing` state along with its associated `review` action looks like this: {{{ review = new,assigned,reopened -> reviewing review.operations = set_owner review.permissions = TICKET_MODIFY }}} Then, to integrate this with the default Trac 0.11 workflow, you also need to add the `reviewing` state to the `accept` and `resolve` actions, like so: {{{ accept = new,reviewing -> assigned […] resolve = new,assigned,reopened,reviewing -> closed }}} Optionally, you can also add a new action that allows you to change the ticket's owner without moving the ticket out of the `reviewing` state. This enables you to reassign review work without pushing the ticket back to the `new` status. {{{ reassign_reviewing = reviewing -> * reassign_reviewing.name = reassign review reassign_reviewing.operations = set_owner reassign_reviewing.permissions = TICKET_MODIFY }}} \ The full `[ticket-workflow]` configuration will thus look like this: {{{ [ticket-workflow] accept = new,reviewing -> assigned accept.operations = set_owner_to_self accept.permissions = TICKET_MODIFY leave = * -> * leave.default = 1 leave.operations = leave_status reassign = new,assigned,reopened -> new reassign.operations = set_owner reassign.permissions = TICKET_MODIFY reopen = closed -> reopened reopen.operations = del_resolution reopen.permissions = TICKET_CREATE resolve = new,assigned,reopened,reviewing -> closed resolve.operations = set_resolution resolve.permissions = TICKET_MODIFY review = new,assigned,reopened -> reviewing review.operations = set_owner review.permissions = TICKET_MODIFY reassign_reviewing = reviewing -> * reassign_reviewing.operations = set_owner reassign_reviewing.name = reassign review reassign_reviewing.permissions = TICKET_MODIFY }}} == Example: Limit the resolution options for a new ticket == The above resolve_new operation allows you to set the possible resolutions for a] new ticket. By modifying the existing resolve action and removing the new status from before the `->` we then get two resolve actions. One with limited resolutions for new tickets, and then the regular one once a ticket is accepted. {{{ resolve_new = new -> closed resolve_new.name = resolve resolve_new.operations = set_resolution resolve_new.permissions = TICKET_MODIFY resolve_new.set_resolution = invalid,wontfix,duplicate resolve = assigned,accepted,reopened -> closed resolve.operations = set_resolution resolve.permissions = TICKET_MODIFY }}} == Advanced Ticket Workflow Customization == If the customization above is not extensive enough for your needs, you can extend the workflow using plugins. These plugins can provide additional operations for the workflow (like code_review), or implement side-effects for an action (such as triggering a build) that may not be merely simple state changes. Look at [trac:source:trunk/sample-plugins/workflow sample-plugins/workflow] for a few simple examples to ge^t started. But if even that is not enough, you can disable the !ConfigurableTicketWorkflow component and create a plugin that completely replaces it. == Adding Workflow States to Milestone Progress Bars == If you add additional states to your workflow, you may want to customize your milestone progress bars as well. See [TracIni#milestone-groups-section TracIni]. == some ideas for next steps == New enhancement ideas for the workflow system should be filed as enhancement tickets against the `ticket system` component. If desired, add a single-line link to that ticket here. Also look at the [th:wiki:AdvancedTicketWorkflowPlugin] as it provides experimental operations. If you have a response to the comments below, create an enhancement ticket, and replace the description below with a link to the ticket. * the "operation" could be on the nodes, possible operations are: * '''preops''': automatic, before entering the state/activity * '''postops''': automatic, when leaving the state/activity * '''actions''': can be chosen by the owner in the list at the bottom, and/or drop-down/pop-up together with the default actions of leaving the node on one of the arrows. ''This appears to add complexity without adding functionality; please provide a detailed example where these additions allow something currently impossible to implement.'' * operations could be anything: sum up the time used for the activity, or just write some statistical fields like ''A workflow plugin can add an arbitrary workflow operation, so this is already possible.'' * set_actor should be an operation allowing to set the owner, e.g. as a "preop": * either to a role, a person * entered fix at define time, or at run time, e.g. out of a field, or select. ''This is either duplicating the existing `set_owner` operation, or needs to be clarified.'' * Actions should be selectable based on the ticket type (different Workflows for different tickets) ''Look into the [th:wiki:AdvancedTicketWorkflowPlugin]'s `triage` operation.'' ` Internal processing of text uses true Unicode representations. As such, it supports most (all?) commonly used character encodings. If your encoding is not UTF-8, you can use [wiki:TracModPython mod_python] to handle it. For example, if your local encoding is gbk, you can set default_charset = gbk in trac.ini. You also must make sure that your [trac:DatabaseBackend database backend] stores its data in UTF-8; otherwise strange things will happen. To convert your database to UTF-8, the easiest way is to dump the database, convert the dump into UTF-8 and then import the converted dump back into the database.[[BR]] You can use [http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html iconv] to convert the dump. == Examples == === Arabic === تراك يقوم بحفظ كل الكلمات باستخدام صيغة UTF-8، بما في ذلك الكلمات المستخدمة في صفحات التيكت والويكي. === Bulgarian === Българският език работи aи? === Česky === Čeština v kódování UTF-8, žádný problém. === Chinese === Traditional: 繁體中文, 漢字測試; Simplified: 简体中文,汉字测试 === Croatian === Ako podržava srpski i slovenski mora podržavati i Hrvatski - čćžšđ ČĆŽŠĐ === English === Yes indeed, Trac supports English. Fully. === Français === Il est possible d'écrire en Français : à, ç, û, ... === German === Trac-Wiki muß auch deutsche Umlaute richtig anzeigen: ö, ä, ü, Ä, Ö, Ü; und das scharfe ß === Greek === Τα Ελληνικά υποστηρίζονται επαρκώς επίσης. === Hebrew === אני יכול לאכול זכוכית וזה לא מזיק לי === Hindi === अब हिन्दी में। === Hungarian === Árvíztűrő tükörfúrógép === Icelandic === Ævar sagði við ömmu sína: Sjáðu hvað ég er stór! === Japanese === 漢字 ひらがな カタカナ ハンカクカナ 日本語試験 === Korean === 이번에는 한글로 써보겠습b다. 잘 보이나요? 한글 === Latvian === Latviešu valoda arī strādā! === Lithuanian === Sudalyvaukime ir mes. Ar veikia lietuviškos raidės? ąčęėįšųūž ĄČĘĖĮŠŲŪŽ Žinoma, kad veikia :) Kas tie mes? === Persian (Farsi) === این یک متن فارسی است ولی امکان نوشتن مستقیم فارسی نیست چون حالت متن از راست به چپ و جود ندارد برای فارسی نوشتن باید از HTML استفاده کنید. {{{ #!html
}}} این نمونه یک متن از راست به چپ فارسی است که در HTML نوشته شده تا اعداد 12345 و حروف لاتین ABCDEF در محل خودشان نمایش داده شوند. {{{ #!html
}}} === Polish === Pchnąć w tę łódź jeża lub osiem skrzyń fig; Nocna gżegżółka zawsze dzienną przekuka. === Portuguese === É possível guardar caracteres especias da língua portuguesa, incluindo o símbolo da moeda européia '€', trema 'ü', crase 'à', agudos 'áéíóú', circunflexos 'âêô', til 'ãõ', cedilha 'ç', ordinais 'ªº', grau '°¹²³'. === Russian === Проверка русского языка: кажется работает... И буква "ё" есть... === Serbian === Podržan, uprkos činjenici da se za njegovo pisanje koriste чак два алфабета. === Slovenian === Ta suhi škafec pušča vodo že od nekdaj! === Spanish === Esto es un pequeño texto en Español, donde el veloz murciélago hindú comía cardlllo y kiwi === Swedish === Räven raskar över isen med luva på. === Thai === Trac แสดงภาษาไทยได้อย่างถูกต้อง! === Ukrainian === Перевірка української мови... === Urdu === ٹریک اردو بھی سپورٹ کرتا ہے۔ === Vietnamese === Viết tiếng Việt cũng được. Nhưng search từ tiếng Việt thì không bôi vàng được. (Keyword(s) in Vietnamese search result can not be hightlighted !!!!). P5 #)TracBrowserJs%trac127.0.0.1= The Trac Repository Browser = [[TracGuideToc]] The Trac repository browser can be used to browse directories and specific revisions of files stored ind !QTitleIndexJs%trac127.0.0.1''' Index by Title ''' | ''' [RecentChanges Index by Date] ''' [[TitleIndex(format=group,min=4)]] #qTracUnicodeJs%trac127.0.0.1= Unicode Support in Trac = [[TracGuideToc]] Trac stores all text using UTF-8 encoding, including text in tickets and wiki pages._e the repository of the configured version control system. Directory entries are displayed in a list with sortable columns. The list entries can be sorted by ''name'', ''size'' or ''age'' by clicking on the column headers. The sort order can be reversed by clicking on a given column header again. The browser can be used to navigate through the directory structure by clicking on the directory names. Clicking on a file name will show the contents of the file. Clicking on the revision number of a file or directory will take you to the TracRevisionLog for that file. Note that there's also a ''Revision Log'' navigation link that will do the same for the path currently being examined. It's also possible to browse directories or files as they were in history, at any given repository revision. The default behavior is to display the latest revision but another revision number can easily be selected using the ''View revision'' input field at the top of the page. ''(since 0.11)'': The color bar next to the Agef column gives a visual indication of the age of the last change to a file or directory. In the default configuration, blue is older and red is newer, but this can be [TracIni#browser-section configured]. At the top of the browser page, there's a drop-down menu which you can use to select some interesting places in the repository, for example branches or tags. This is sometimes referred to as the ''browser quickjump'' facility. The precise meaning and content of this menu depends on your backend. For Subversion, this list contains by default a few branches (`trunk` and any sub-folder of the latest `branches` top-level folder) and a few tags (any sub-folder of the latest `tags` top-level folder). This can be [TracIni#svn-section configured] for more advanced cases. If you're using a Javascript enabled brower, you'll be able to expand and collapse folders in-place by clicking on the arrow head at the right side of a folder. Alternatively, the [trac:TracKeys keyboard] can also be used for this: use 'j' and 'k' to go to the next or previous entry, and 'o' (or 'Enter') to toggle between expanded and collapsed state of the selected folder or for visiting the selected file. For the Subversion backend, some additional features are available: - Support for the `svn:needs-lock` property - Support for the `svn:externals` property (which can be [TracIni#svn:externals-section configured]) - The `svn:mime-type` property is used to select the syntax highlighter for rendering the file. For example, setting `svn:mime-type` to `text/html` will ensure the file is highlighted as HTML, regardless of the file extension. It also allows selecting the character encoding used in the file content. For example, if the file content is encoded in UTF-8, set `svn:mime-type` to `text/html;charset=utf-8`. The `charset=` specification overrides the default encoding defined in the `default_charset` option of the `[trac]` section of [TracIni#trac-section trac.ini]. ---- See also: TracGuide, TracChangeset, TracFineGrainedPermissions h', '''!''' can be bold too''', and '''! ''' * ''italic'' * '''''bold italic''''' * __underline__ * {{{monospace}}} or `monospace` * ~~strike-through~~ * ^superscript^ * ,,subscript,, }}} Display: * '''bold''', '''!''' can be bold too''', and '''! ''' * ''italic'' * '''''bold italic''''' * __underline__ * {{{monospace}}} or `monospace` * ~~strike-through~~ * ^superscript^ * ,,subscript,, Notes: * `{{{...}}}` and {{{`...`}}} commands not only select a monospace font, but also treat their content as verbatim text, meaning that no further wiki processing is done on this text. * {{{ ! }}} tells wiki parser to not take the following characters as wiki format, so pay attention to put a space after !, e.g. when ending bold. == Headings == You can create heading by starting a line with one up to five ''equal'' characters ("=") followed by a single space and the headline text. The line should end with a space followed by the same number of ''='' characters. The heading might optionally be foillowed by an explicit id. If not, an implicit but nevertheless readable id will be generated. Example: {{{ = Heading = == Subheading == === About ''this'' === === Explicit id === #using-explicit-id-in-heading }}} Display: = Heading = == Subheading == === About ''this'' === === Explicit id === #using-explicit-id-in-heading == Paragraphs == A new text paragraph is created whenever two blocks of text are separated by one or more empty lines. A forced line break can also be inserted, using: {{{ Line 1[[BR]]Line 2 }}} Display: Line 1[[BR]]Line 2 == Lists == The wiki supports both ordered/numbered and unordered lists. Example: {{{ * Item 1 * Item 1.1 * Item 1.1.1 * Item 1.1.2 * Item 1.1.3 * Item 1.2 * Item 2 1. Item 1 a. Item 1.a a. Item 1.b i. Item 1.b.i i. Item 1.b.ii 1. Item 2 And numbered lists can also be given an explicit number: 3. Item 3 }}} Display: * Item 1 * Item 1.1 * Item 1.1.1 * Item 1.1.2 * Item 1.1.3 * Item 1.j2 * Item 2 1. Item 1 a. Item 1.a a. Item 1.b i. Item 1.b.i i. Item 1.b.ii 1. Item 2 And numbered lists can also be given an explicit number: 3. Item 3 Note that there must be one or more spaces preceding the list item markers, otherwise the list will be treated as a normal paragraph. == Definition Lists == The wiki also supports definition lists. Example: {{{ llama:: some kind of mammal, with hair ppython:: some kind of reptile, without hair (can you spot the typo?) }}} Display: llama:: some kind of mammal, with hair ppython:: some kind of reptile, without hair (can you spot the typo?) Note that you need a space in front of the defined term. == Preformatted Text == Block containing preformatted text are suitable for source code snippets, notes and examples. Use three ''curly braces'' wrapped around the text to define a block quote. The curly braces need to be on a separate line. Example: {{{ {{{ def HelloWorld(): print "Hello World" }}} k}}} Display: {{{ def HelloWorld(): print "Hello World" }}} == Blockquotes == In order to mark a paragraph as blockquote, indent that paragraph with two spaces. Example: {{{ This text is a quote from someone else. }}} Display: This text is a quote from someone else. == Discussion Citations == To delineate a citation in an ongoing discussion thread, such as the ticket comment area, e-mail-like citation marks (">", ">>", etc.) may be used. Example: {{{ >> Someone's original text > Someone else's reply text My reply text }}} Display: >> Someone's original text > Someone else's reply text My reply text ''Note: Some WikiFormatting elements, such as lists and preformatted text, are lost in the citation area. Some reformatting may be necessary to create a clear citation.'' == Tables == Simple tables can be created like this: {{{ ||Cell 1||Cell 2||Cell 3|| ||Cell 4||Cell 5||Cell 6|| }}} Display: ||Cell 1||Cell 2||Cell 3|| ||Cell 4||Cell 5||Cell 6|| Note that more complex tables can be lcreated using [wiki:WikiRestructuredText#BiggerReSTExample reStructuredText]. == Links == Hyperlinks are automatically created for WikiPageNames and URLs. !WikiPageLinks can be disabled by prepending an exclamation mark "!" character, such as {{{!WikiPageLink}}}. Example: {{{ TitleIndex, http://www.edgewall.com/, !NotAlink }}} Display: TitleIndex, http://www.edgewall.com/, !NotAlink Links can be given a more descriptive title by writing the link followed by a space and a title and all this inside square brackets. If the descriptive title is omitted, then the explicit prefix is discarded, unless the link is an external link. This can be useful for wiki pages not adhering to the WikiPageNames convention. Example: {{{ * [http://www.edgewall.com/ Edgewall Software] * [wiki:TitleIndex Title Index] * [wiki:ISO9000] }}} Display: * [http://www.edgewall.com/ Edgewall Software] * [wiki:TitleIndex Title Index] * [wiki:ISO9000] == Trac Links == Wiki pages can link directly to other parts of the Tramc system. Pages can refer to tickets, reports, changesets, milestones, source files and other Wiki pages using the following notations: {{{ * Tickets: #1 or ticket:1 * Reports: {1} or report:1 * Changesets: r1, [1] or changeset:1 * ... }}} Display: * Tickets: #1 or ticket:1 * Reports: {1} or report:1 * Changesets: r1, [1] or changeset:1 * ... There are many more flavors of Trac links, see TracLinks for more in-depth information. == Escaping Links and WikiPageNames == You may avoid making hyperlinks out of TracLinks by preceding an expression with a single "!" (exclamation mark). Example: {{{ !NoHyperLink !#42 is not a link }}} Display: !NoHyperLink !#42 is not a link == Images == Urls ending with `.png`, `.gif` or `.jpg` are no longer automatically interpreted as image links, and converted to `` tags. You now have to use the ![[Image]] macro. The simplest way to include an image is to upload it as attachment to the current page, and put the filename in a macro call like `[[Imange(picture.gif)]]`. In addition to the current page, it is possible to refer to other resources: * `[[Image(wiki:WikiFormatting:picture.gif)]]` (referring to attachment on another page) * `[[Image(ticket:1:picture.gif)]]` (file attached to a ticket) * `[[Image(htdocs:picture.gif)]]` (referring to a file inside project htdocs) * `[[Image(source:/trunk/trac/htdocs/trac_logo_mini.png)]]` (a file in repository) Example display: [[Image(htdocs:../common/trac_logo_mini.png)]] See WikiMacros for further documentation on the `[[Image()]]` macro. == Macros == Macros are ''custom functions'' to insert dynamic content in a page. Example: {{{ [[RecentChanges(Trac,3)]] }}} Display: [[RecentChanges(Trac,3)]] See WikiMacros for more information, and a list of installed macros. == Processors == Trac supports alternative markup formats using WikiProcessors. For example, processors are used to write pages in [wiki:WikiRestructuredText reStructuredText] or [wiki:WikiHtml HTML]. Example 1: {{{ #!html {{{ #!html <h1 style="text-align: right; color: blue">HTML Test</h1> }}} }}} Display: {{{ #!html

HTML Test

}}} Example: {{{ #!html
{{{
#!python
class Test:

    def __init__(self):
        print "Hello World"
if __name__ == '__main__':
   Test()
}}}
}}} Display: {{{ #!python class Test: def __init__(self): print "Hello World" if __name__ == '__main__': Test() }}} Perl: {{{ #!perl my ($test) = 0; if ($test > 0) { print "hello"; } }}} See WikiProcessors for more information. == Comments == Comments can be added to the plain text. These will not be rendered and will not display in any other format than plain text. {{{ {{{ #!comment Your comment here }}} }}} == Miscellaneous == Four or more dashes will be replaced by a horizontal line (
) Example: {{{ ---- }}} Display: ---- ---- See also: TracLinks, TracGuide, WikiHtml, WikiMacros, WikiProcessors, TracSyntaxColoring. n-nw ''TracModPythonJs%trac127.0.0.1= Trac and mod_python = [[TracGuideToc]] Trac supports [http://www.modpython.org/ mod_python], which speeds up Trac's response times considepw ')RecentChangesJs%trac127.0.0.1''' [TitleIndex Index by Title] ''' | ''' Index by Date ''' [[RecentChanges]]3 )WikiFormattingJs%trac127.0.0.1= WikiFormatting = [[TracGuideToc]] Wiki markup is a core feature in Trac, tightly integrating all the other parts of Trac into a flexible and powerful whole. Trac has a built in small and powerful wiki rendering engine. This wiki engine implements an ever growing subset of the commands from other popular Wikis, especially [http://moinmoin.wikiwikiweb.de/ MoinMoin]. This page demonstrates the formatting syntax available anywhere WikiFormatting is allowed. == Font Styles == The Trac wiki supports the following font styles: {{{ * '''bold''gqrably, especially compared to [TracCgi CGI], and permits use of many Apache features not possible with [wiki:TracStandalone tracd]/mod_proxy. These instructions are for Apache 2; if you are still using Apache 1.3, you may have some luck with [wiki:TracModPython2.7 TracModPython2.7]. == Simple configuration == If you just installed mod_python, you may have to add a line to load the module in the Apache configuration: {{{ LoadModule python_module modules/mod_python.so }}} ''Note: The exact path to the module depends on how the HTTPD installation is laid out.'' On Debian using apt-get {{{ apt-get install libapache2-mod-python libapache2-mod-python-doc }}} (Still on Debian) after you have installed mod_python, you must enable the modules in apache2 (equivalent of the above Load Module directive): {{{ a2enmod mod_python }}} On Fedora use, using yum: {{{ yum install mod_python }}} You can test your mod_python installation by adding the following to your httpd.conf. You should remove this when you are doner testing for security reasons. Note: mod_python.testhandler is only available in mod_python 3.2+. {{{ #!xml SetHandler mod_python PythonInterpreter main_interpreter PythonHandler mod_python.testhandler }}} A simple setup of Trac on mod_python looks like this: {{{ #!xml SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /var/trac/myproject PythonOption TracUriRoot /projects/myproject }}} The option '''`TracUriRoot`''' may or may not be necessary in your setup. Try your configuration without it; if the URLs produced by Trac look wrong, if Trac does not seem to recognize URLs correctly, or you get an odd "No handler matched request to..." error, add the '''`TracUriRoot`''' option. You will notice that the `Location` and '''`TracUriRoot`''' have the same path. The options available are {{{ # For a single project PythonOption TracEnvs /var/trac/myproject # For multiple projects PythonOption TracEnvParentDir /var/trac/myprojects # For the index of multiple projects PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_template.html # A space delimitted list, with a "," between key and value pairs. PythonOption TracTemplateVars key1,val1 key2,val2 # Useful to get the date in the wanted order PythonOption TracLocale en_GB.UTF8 # See description above PythonOption TracUriRoot /projects/myproject }}} === Python Egg Cache === Compressed python eggs like Genshi are normally extracted into a directory named `.python-eggs` in the users home directory. Since apache's home usually is not writable an alternate egg cache directory can be specified like this: {{{ PythonOption PYTHON_EGG_CACHE /var/trac/myprojects/egg-cache }}} === Configuring Authentication === Creating password files and configuring authentication works similar to the process for [wiki:TracCgi#AddingAuthentication CtGI]: {{{ #!xml AuthType Basic AuthName "myproject" AuthUserFile /var/trac/myproject/.htpasswd Require valid-user }}} Configuration for mod_ldap authentication in Apache is a bit tricky (httpd 2.2.x and OpenLDAP: slapd 2.3.19) 1. You need to load the following modules in Apache httpd.conf {{{ LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so }}} 2. Your httpd.conf also needs to look something like: {{{ #!xml SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /home/trac/ PythonOption TracUriRoot /trac/ Order deny,allow Deny from all Allow from 192.168.11.0/24 AuthType Basic AuthName "Trac" AuthBasicProvider "ldap" AuthLDAPURL "ldap://127.0.0.1/dc=example,dc=co,dc=ke?uid?sub?(objectClass=inetOrgPerson)" authzldapauthoritative Off require valid-user }}} Or the LDAP interfaceu to a Microsoft Active Directory: {{{ #!xml SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /home/trac/ PythonOption TracUriRoot /trac/ Order deny,allow Deny from all Allow from 192.168.11.0/24 AuthType Basic AuthName "Trac" AuthBasicProvider "ldap" AuthLDAPURL "ldap://adserver.company.com:3268/DC=company,DC=com?sAMAccountName?sub?(objectClass=user)" AuthLDAPBindDN ldap-auth-user@company.com AuthLDAPBindPassword "the_password" authzldapauthoritative Off # require valid-user require ldap-group CN=Trac Users,CN=Users,DC=company,DC=com }}} Note 1: This is the case where the LDAP search will get around the multiple OUs, conecting to Global Catalog Server portion of AD (Notice the port is 3268, not the normal LDAP 389). The GCS is basically a "flattened" tree which allows searching for a user without knowing to which OU they belong. Note 2: Active Directory requires avn authenticating user/password to access records (AuthLDAPBindDN and AuthLDAPBindPassword). Note 3: The directive "require ldap-group ..." specifies an AD group whose members are allowed access. === Setting the !PythonPath === If the Trac installation isn't installed in your Python path, you'll have to tell Apache where to find the Trac mod_python handler using the `PythonPath` directive: {{{ #!xml ... PythonPath "sys.path + ['/path/to/trac']" ... }}} Be careful about using the !PythonPath directive, and ''not'' `SetEnv PYTHONPATH`, as the latter won't work. == Setting up multiple projects == The Trac mod_python handler supports a configuration option similar to Subversion's `SvnParentPath`, called `TracEnvParentDir`: {{{ #!xml SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/trac PythonOption TracUriRoot /projects }}} wWhen you request the `/projects` URL, you will get a listing of all subdirectories of the directory you set as `TracEnvParentDir` that look like Trac environment directories. Selecting any project in the list will bring you to the corresponding Trac environment. If you don't want to have the subdirectory listing as your projects home page you can use a {{{ #!xml }}} This will instruct Apache to use mod_python for all locations different from root while having the possibility of placing a custom home page for root in your !DocumentRoot folder. You can also use the same authentication realm for all of the projects using a `` directive: {{{ #!xml AuthType Basic AuthName "Trac" AuthUserFile /var/trac/.htpasswd Require valid-user }}} == Virtual Host Configuration == Below is the sample configuration required to set up your trac as a virtual server (i.e. when you access it at the URLs like !http://trac.myxcompany.com): {{{ #!xml DocumentRoot /var/www/myproject ServerName trac.mycompany.com SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /var/trac/myproject PythonOption TracUriRoot / AuthType Basic AuthName "MyCompany Trac Server" AuthUserFile /var/trac/myproject/.htpasswd Require valid-user }}} This does not seem to work in all cases. What you can do if it does not: * Try using `` instead of `` * may, in your server setup, refer to the complete host instead of simple the root of the server. This means that everything (including the login directory referenced below) will be sent to python and authentication does not work (i.e. you get the infamous Authentication information missing error). If this applies to you, tryy using a sub-directory for trac instead of the root (i.e. /web/ and /web/login instead of / and /login). For a virtual host that supports multiple projects replace "`TracEnv`" /var/trac/myproject with "`TracEnvParentDir`" /var/trac/ Note: !DocumentRoot should not point to your Trac project env. As Asmodai wrote on #trac: "suppose there's a webserver bug that allows disclosure of !DocumentRoot they could then leech the entire Trac environment". == Troubleshooting == In general, if you get server error pages, you can either check the Apache error log, or enable the `PythonDebug` option: {{{ #!xml ... PythonDebug on }}} For multiple projects, try restarting the server as well. === Expat-related segmentation faults === #expat This problem will most certainly hit you on Unix when using Python 2.4. In Python 2.4, some version of Expat (an XML parser library written in C) is used, and if Apache is using another version, this results in segmentation faults. zAs Trac 0.11 is using Genshi, which will indirectly use Expat, that problem can now hit you even if everything was working fine before with Trac 0.10. See Graham Dumpleton's detailed [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash explanation and workarounds] for the issue. === Form submission problems === If you're experiencing problems submitting some of the forms in Trac (a common problem is that you get redirected to the start page after submission), check whether your {{{DocumentRoot}}} contains a folder or file with the same path that you mapped the mod_python handler to. For some reason, mod_python gets confused when it is mapped to a location that also matches a static resource. === Problem with virtual host configuration === If the directive is used, setting the `DocumentRoot` may result in a ''403 (Forbidden)'' error. Either remove the `DocumentRoot` directive, or make sure that accessing the directory it points is allowed (in a corresponding `` block). Using together with `SetHandler` resulted in having everything handled by mod_python, which leads to not being able download any CSS or images/icons. I used `SetHandler None` to circumvent the problem, though I do not know if this is the most elegant solution. === Using .htaccess === Although it may seem trivial to rewrite the above configuration as a directory in your document root with a `.htaccess` file, this does not work. Apache will append a "/" to any Trac URLs, which interferes with its correct operation. It may be possible to work around this with mod_rewrite, but I failed to get this working. In all, it is more hassle than it is worth. Stick to the provided instructions. :) A success story: For me it worked out-of-box, with following trivial config: {{{ SetHandler mod_python PythonInterpreter main_interpreter PythonHandler trac.web.modpython_frontend PythonOption TracEnv /system/path/to/this/directory PythonOption TracUriRoot /path/on/a|pache AuthType Basic AuthName "ProjectName" AuthUserFile /path/to/.htpasswd Require valid-user }}} The TracUriRoot is obviously the path you need to enter to the browser to get to the trac (e.g. domain.tld/projects/trac) === Additional .htaccess help === If you are using the .htaccess method you may have additional problems if your trac directory is inheriting .htaccess directives from another. This may also help to add to your .htaccess file: {{{ RewriteEngine Off }}} === Win32 Issues === If you run trac with mod_python < 3.2 on Windows, uploading attachments will '''not''' work. This problem is resolved in mod_python 3.1.4 or later, so please upgrade mod_python to fix this. === OS X issues === When using mod_python on OS X you will not be able to restart Apache using `apachectl restart`. This is apparently fixed in mod_python 3.2, but there's also a patch available for earlier versions [http://www.dscpl.com.au/projects/vampire/patches.html here]. === SE}Linux issues === If Trac reports something like: ''Cannot get shared lock on db.lock'' The security context on the repository may need to be set: {{{ chcon -R -h -t httpd_sys_content_t PATH_TO_REPOSITORY }}} See also [[http://subversion.tigris.org/faq.html#reposperms]] === FreeBSD issues === Pay attention to the version of the installed mod_python and sqlite packages. Ports have both the new and old ones, but earlier versions of pysqlite and mod_python won't integrate as the former requires threaded support in python, and the latter requires a threadless install. If you compiled and installed apache2, apache wouldn´t support threads (cause it doesn´t work very well on FreeBSD). You could force thread support when running ./configure for apache, using --enable-threads, but this isn´t recommendable. The best option [[http://modpython.org/pipermail/mod_python/2006-September/021983.html seems to be]] adding to /usr/local/apache2/bin/ennvars the line {{{ export LD_PRELOAD=/usr/lib/libc_r.so }}} === ~Subversion issues === If you get the following Trac Error `Unsupported version control system "svn"` only under mod_python, though it works well on the command-line and even with TracStandalone, chances are that you forgot to add the path to the Python bindings with the [TracModPython#ConfiguringPythonPath PythonPath] directive. (The better way is to add a link to the bindings in the Python `site-packages` directory, or create a `.pth` file in that directory.) If this is not the case, it's possible that you're using Subversion libraries that are binary incompatible with the apache ones (an incompatibility of the `apr` libraries is usually the cause). In that case, you also won't be able to use the svn modules for Apache (`mod_dav_svn`). You also need a recent version of `mod_python` in order to avoid a runtime error ({{{argument number 2: a 'apr_pool_t *' is expected}}}) due to the default usage of multiple sub-interpreters. 3.2.8 ''should'' work, though it's probably better to use the workaround described in #3371, in order to force the use of the main interpreter: {{{ PythonInterpreter main_interpreter }}} This is anyway the recommended workaround for other well-known issues seen when using the Python bindings for Subversion within mod_python (#2611, #3455). See in particular Graham Dumpleton's comment in [comment:ticket:3455:9 #3455] explaining the issue. === Page layout issues === If the formatting of the Trac pages look weird chances are that the style sheets governing the page layout are not handled properly by the web server. Try adding the following lines to your apache configuration: {{{ #!xml Alias /myproject/css "/usr/share/trac/htdocs/css" SetHandler None }}} Note: For the above configuration to have any effect it must be put after the configuration of your project root location, i.e. {{{}}}. === HTTPS issues === If you want to run Trac fully under https you might find that it tries to redirect to plain http. In this case just add the following line to your apache configuration: {{{ #!xml DocumentRoot /var/www/myproject ServerName trac.mycompany.com SetEnv HTTPS 1 .... }}} === Fedora 7 Issues === Make sure you install the 'python-sqlite2' package as it seems to be required for TracModPython but not for tracd === Segmentation fault with php5-mhash or other php5 modules === You may encounter segfaults (reported on debian etch) if php5-mhash module is installed. Try to remove it to see if this solves the problem. See debian bug report [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411487]] Some people also have troubles when using php5 compiled with its own 3rd party libraries instead of system libraries. Check here [[http://www.djangoproject.com/documentation/modpython/#if-you-get-a-segmentation-fault]] ---- See also: TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracFastCgi FastCGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe] ion to these privileges, users can be granted additional individual rights in effect when authenticated and logged into the system. All logged in users belong to the virtual group "authenticated", which inherits permissions from "anonymous". == Graphical Admin Tab == ''This feature is new in version 0.11.'' To access this tab, a user must have `TRAC_ADMIN privileges`. This can be performed as follows (more on the trac-admin script below): {{{ $ trac-admin /path/to/projenv permission add bob TRAC_ADMIN }}} Then, the user will be able to see the Admin tab, and can then access the permissions menu. This menu will allow you to perform all the following actions, but from the browser without requiring root access to the server (just the correct permissions for your user account). An easy way to quickly secure a new Trac install is to run the above command on the anonymous user, install the [http://trac-hacks.org/wiki/AccountManagerPlugin AccountManagerPlugin], create a new admin account graphically and then remove the TRAC_ADMIN permission from the anonymous user. == Available Privileges == To enable all privileges for a user, use the `TRAC_ADMIN` permission. Having `TRAC_ADMIN` is like being `root` on a *NIX system: it will allow you to perform any operation. Otherwise, individual privileges can be assigned to users for the various different functional areas of Trac ('''note that the privilege names are case-sensitive'''): === Repository Browser === || `BROWSER_VIEW` || View directory listings in the [wiki:TracBrowser repository browser] || || `LOG_VIEW` || View revision logs of files and directories in the [wiki:TracBrowser repository browser] || || `FILE_VIEW` || View files in the [wiki:TracBrowser repository browser] || || `CHANGESET_VIEW` || View [wiki:TracChangeset repository check-ins] || === Ticket System === || `TICKET_VIEW` || View existing [wiki:TracTickets tickets] and perform [wiki:TracQuery ticket queries] || || `TICKET_CREATE` || Create new [wiki:TracTickets tickets] || || `TICKET_APPEND` || Add comments or attachments to [wiki:TracTickets tickets] || || `TICKET_CHGPROP` || Modify [wiki:TracTickets ticket] properties (priority, assignment, keywords, etc.) except description field, cc field add/remove when logged in or set email to pref || || `TICKET_MODIFY` || Includes both `TICKET_APPEND` and `TICKET_CHGPROP`, and in addition allows resolving [wiki:TracTickets tickets] || || `TICKET_EDIT_CC` || Full modify cc field || || `TICKET_EDIT_DESCRIPTION` || Modify description field || || `TICKET_ADMIN` || All `TICKET_*` permissions, plus the deletion of ticket attachments and modification of the description field || Attention: the "view tickets" button appears with the `REPORT_VIEW` permission. === Roadmap === || `MILESTONE_VIEW` || View a milestone || || `MILESTONE_CREATE` || Create a new milestone || || `MILESTONE_MODIFY` || Modify existing milestones || || `MILESTONE_DELETE` || Delete milestones || || `MILESTONE_ADMIN` || All `MILESTONE_*` permissions || || `ROADMAP_VIEW` || View the [wiki:TracRoadmap roadmap] page, is not (yet) the same as MILESTONE_VIEW, see #4292 || || `ROADMAP_ADMIN` || to be removed with #3022, replaced by MILESTONE_ADMIN || === Reports === || `REPORT_VIEW` || View [wiki:TracReports reports], i.e. the "view tickets" link. || || `REPORT_SQL_VIEW` || View the underlying SQL query of a [wiki:TracReports report] || || `REPORT_CREATE` || Create new [wiki:TracReports reports] || || `REPORT_MODIFY` || Modify existing [wiki:TracReports reports] || || `REPORT_DELETE` || Delete [wiki:TracReports reports] || || `REPORT_ADMIN` || All `REPORT_*` permissions || === Wiki System === || `WIKI_VIEW` || View existing [wiki:TracWiki wiki] pages || || `WIKI_CREATE` || Create new [wiki:TracWiki wiki] pages || || `WIKI_MODIFY` || Change [wiki:TracWiki wiki] pages || || `WIKI_DELETE` || Delete [wiki:TracWiki wiki] pages and attachments || || `WIKI_ADMIN` || All `WIKI_*` permissions, plus the management of ''readonly'' pages. || === Permissions === || `PERMISSION_GRANT` || add/grant a permission || || `PERMISSION_REVOKE` || remove/revoke a permission || || `PERMISSION_ADMIN` || All `PERMISSION_*` permissions || === Others === || `TIMELINE_VIEW` || View the [wiki:TracTimeline timeline] page || || `SEARCH_VIEW` || View and execute [wiki:TracSearch search] queries || || `CONFIG_VIEW` || Enables additional pages on ''About Trac'' that show the current configuration or the list of installed plugins || || `EMAIL_VIEW` || Shows email addresses even if [wiki:0.11/TracIni `trac show_email_addresses` configuration option is `false`] || == Granting Privileges == You grant privileges to users using [wiki:TracAdmin trac-admin]. The current set of privileges can be listed with the following command: {{{ $ trac-admin /path/to/projenv permission list }}} This command will allow the user ''bob'' to delete reports: {{{ $ trac-admin /path/to/projenv permission add bob REPORT_DELETE }}} The `permission add` command also accepts multiple privilege names: {{{ $ trac-admin /path/to/projenv permission add bob REPORT_DELETE WIKI_CREATE }}} Or add all privileges: {{{ $ trac-admin /path/to/projenv permission add bob TRAC_ADMIN }}} == Permission Groups == There are two built-in groups, "authenticated" and "anonymous".[[BR]] Any user who has not logged in is automatically in the "anonymous" group.[[BR]] Any user who has logged in is also in the "authenticated" group.[[BR]] The "authenticated" group inherits permissions from the "anonymous" group.[[BR]] eg. if the "anonymous" group has permission WIKI_MODIFY, it's not necessary to add the WIKI_MODIFY permisison to the "authenticated" group as well. Custom groups may be defined that inherit permissions from the two built-in groups. Permissions can be grouped together to form roles such as ''developer'', ''admin'', etc. {{{ $ trac-admin /path/to/projenv permission add developer WIKI_ADMIN $ trac-admin /path/to/projenv permission add developer REPORT_ADMIN $ trac-admin /path/to/projenv permission add developer TICKET_MODIFY $ trac-admin /path/to/projenv permission add bob developer $ trac-admin /path/to/projenv permission add john developer }}} Group membership can be checked by doing a {{{permission list}}} with no further arguments; the resulting output will include group memberships. '''Use lowercase for group names, as uppercase is reserved for permissions'''. == Adding a New Group and Permissions == Permission groups can be created by assigning a user to a group you wish to create, then assign permissions to that group. The following will add ''bob'' to the new group called ''beta_testers'' and then will assign WIKI_ADMIN permissions to that group. (Thus, ''bob'' will inherit the WIKI_ADMIN permission) {{{ $ trac-admin /path/to/projenv permission add bob beta_testers $ trac-admin /path/to/projenv permission add beta_testers WIKI_ADMIN }}} == Removing Permissions == Permissions can be removed using the 'remove' command. For example: This command will prevent the user ''bob'' from deleting reports: {{{ $ trac-admin /path/to/projenv permission remove bob REPORT_DELETE }}} Just like `permission add`, this command accepts multiple privilege names. You can also remove all privileges for a specific user: {{{ $ trac-admin /path/to/projenv permission remove bob '*' }}} Or one privilege for all users: {{{ $ trac-admin /path/to/projenv permission remove '*' REPORT_ADMIN }}} == Default Permissions == By default on a new Trac installation, the `anonymous` user will have ''view'' access to everything in Trac, but will not be able to create or modify anything. On the other hand, the `authenticated` users will have the permissions to ''create and modify tickets and wiki pages''. '''anonymous''':: BROWSER_VIEW CHANGESET_VIEW FILE_VIEW LOG_VIEW MILESTONE_VIEW REPORT_SQL_VIEW REPORT_VIEW ROADMAP_VIEW SEARCH_VIEW TICKET_VIEW TIMELINE_VIEW WIKI_VIEW '''authenticated''':: TICKET_CREATE TICKET_MODIFY WIKI_CREATE WIKI_MODIFY ---- See also: TracAdmin, TracGuide and TracFineGrainedPermissions \\} +/TracPermissionsJs%trac127.0.0.1= Trac Permissions = [[TracGuideToc]] Trac uses a simple, case sensitive, permission system to control what users can and can't access. Permission privileges are managed using the [TracAdmin trac-admin] tool or (new in version 0.11) the ''General / Permissions'' panel in the ''Admin'' tab of the web interface. In addition to the default permission policy described in this page, it is possible to activate additional permission policies by enabling plugins and listing them in the `[trac] permission_policies` configuration entry in the TracIni. See TracFineGrainedPermissions for more details. Non-authenticated users accessing the system are assigned the name "anonymous". Assign permissions to the "anonymous" user to set privileges for anonymous/guest users. The parts of Trac that a user does not have the privileges for will not be displayed in the navigation. In additt-paced editing, and distracts from the actual content of the pages. Note though that Trac also supports [wiki:WikiHtml HTML], [wiki:WikiRestructuredText reStructuredText] and [http://www.textism.com/tools/textile/ Textile] as alternative markup formats. The main goal of the wiki is to make editing text easier and ''encourage'' people to contribute and annotate text content for a project. The wiki itself does not enforce any structure, but rather resembles a stack of empty sheets of paper, where you can organize information and documentation as you see fit, and later reorganize if necessary. For more help on editing wiki text, see these pages: * WikiFormatting * WikiPageNames * WikiNewPage * TracLinks * WikiMacros * WikiProcessors * PageTemplates If you want to practice editing, please use the SandBox. Some more information about wiki on the web: * http://wikipedia.org/wiki/Wiki * http://c2.com/cgi/wiki?WikiHistory * http://www.usemod.com/cgi-bin/mb.pl?WhyWikiWorks ---- See also: TracGuide mm UTracWikiJs%trac127.0.0.1= The Trac Wiki Engine = [[TracGuideToc]] Trac has a built-in wiki engine, used for text and documentation throughout the system. WikiFormatting is used in [wiki:TitleIndex wiki pages], [wiki:TracTickets tickets] and [wiki:TracChangeset check-in log messages]. This allows for formatted text and hyperlinks in and between all Trac modules. Editing wiki text is easy, using any web browser and a simple [WikiFormatting formatting system], rather than more complex markup languages like HTML. The reasoning behind its design is that HTML, with its large collection of nestable tags, is too complicated to allow fas ==@ ';PageTemplatesJs%trac127.0.0.1= Wiki Page Templates = ''(since [http://trac.edgewall.org/milestone/0.11 0.11])'' The default content for a new wiki page can be chosen from a list of page templates. That list is made up from all the existing wiki pages having a name starting with ''PageTemplates/''. The initial content of a new page will simply be the content of the chosen template page, or a blank page if the special ''(blank page)'' entry is selected. When there's actually no wiki pages matching that prefix, the initial content will always be the blank page and the list selector will not be shown (i.e. this matches the behavior we had up to now). To create a new template, simply create a new page having a name starting with ''PageTemplates/''. (Hint: one could even create a ''!PageTemplates/Template'' for facilitating the creation of new templates!) Available templates: [[TitleIndex(PageTemplates/)]] ---- See also: TracWikiyou for the name of the project, the database connection string (explained below), and the type and path to your source code repository. ''Note: The web server user will require file system write permission to the environment directory and all the files inside. Please remember to set the appropriate permissions. The same applies to the Subversion repository Trac is eventually using, although Trac will only require read access as long as you're not using the BDB file system. Also, it seems that project names with spaces can be problematic for authentication (see [trac:#7163]).'' == Database Connection Strings == Since version 0.9, Trac supports both [http://sqlite.org/ SQLite] and [http://www.postgresql.org/ PostgreSQL] database backends. Preliminary support for [http://mysql.com/ MySQL] was added in 0.10. The default is to use SQLite, which is probably sufficient for most projects. The database file is then stored in the environment directory, and can easily be [wiki:TracBackup backed up] together with the rest of the environment. === Embedded SQLite Connection String === The connection string for an embedded SQLite database is: {{{ sqlite:db/trac.db }}} === PostgreSQL Connection String === If you want to use PostgreSQL or MySQL instead, you'll have to use a different connection string. For example, to connect to a PostgreSQL database on the same machine called `trac`, that allows access to the user `johndoe` with the password `letmein`, use: {{{ postgres://johndoe:letmein@localhost/trac }}} ''Note that due to the way the above string is parsed, the "/" and "@" characters cannot be part of the password.'' If PostgreSQL is running on a non-standard port (for example 9342), use: {{{ postgres://johndoe:letmein@localhost:9342/trac }}} On UNIX, you might want to select a UNIX socket for the transport, either the default socket as defined by the PGHOST environment variable: {{{ postgres://user:password@/database }}} or a specific one: {{{ postgres://user:password@/database?host=/path/to/socket/dir }}} Note that with PostgreSQL you will have to create the database before running `trac-admin initenv`. See the [http://www.postgresql.org/docs/ PostgreSQL documentation] for detailed instructions on how to administer [http://postgresql.org PostgreSQL]. Generally, the following is sufficient to create a database user named `tracuser`, and a database named `trac`. {{{ createuser -U postgres -E -P tracuser createdb -U postgres -O tracuser -E UTF8 trac }}} When running `createuser` you will be prompted for the password for the user 'tracuser'. This new user will not be a superuser, will not be allowed to create other databases and will not be allowed to create other roles. These privileges are not needed to run a trac instance. If no password is desired for the user, simply remove the `-P` and `-E` options from the `createuser` command. Also note that the database should be created as UTF8. LATIN1 encoding causes errors trac's use of unicode in trac. SQL_ASCII also seems to work. Under some default configurations (debian) one will have run the `createuser` and `createdb` scripts as the `postgres` user. For example: {{{ sudo su - postgres -c 'createuser -U postgres -S -D -R -E -P tracuser' sudo su - postgres -c 'createdb -U postgres -O tracuser -E UTF8 trac' }}} Trac uses the `public` schema by default but you can specify a different schema in the connection string: {{{ postgres://user:pass@server/database?schema=yourschemaname }}} === MySQL Connection String === If you want to use MySQL instead, you'll have to use a different connection string. For example, to connect to a MySQL database on the same machine called `trac`, that allows access to the user `johndoe` with the password `letmein`, the mysql connection string is: {{{ mysql://johndoe:letmein@localhost:3306/trac }}} == Source Code Repository == You'll first have to provide the ''type'' of your repository (e.g. `svn` for Subversion, which is the default), then the ''path'' where the repository is located. If you don't want to use Trac with a source code repository, simply leave the ''path'' empty (the ''type'' information doesn't matter, then). For some systems, it is possible to specify not only the path to the repository, but also a ''scope'' within the repository. Trac will then only show information related to the files and changesets below that scope. The Subversion backend for Trac supports this; for other types, check the corresponding plugin's documentation. Example of a configuration for a Subversion repository: {{{ [trac] repository_type = svn repository_dir = /path/to/your/repository }}} The configuration for a scoped Subversion repository would be: {{{ [trac] repository_type = svn repository_dir = /path/to/your/repository/scope/within/repos }}} == Directory Structure == An environment directory will usually consist of the following files and directories: * `README` - Brief description of the environment. * `VERSION` - Contains the environment version identifier. * `attachments` - Attachments to wiki pages and tickets are stored here. * `conf` * `trac.ini` - Main configuration file. See TracIni. * `db` * `trac.db` - The SQLite database (if you're using SQLite). * `htdocs` - directory containing web resources, which can be referenced in Genshi templates. '''''(since 0.11)''''' * `log` - default directory for log files, if logging is turned on and a relative path is given. * `plugins` - Environment-specific [wiki:TracPlugins plugins] (Python eggs, since [trac:milestone:0.10 0.10]) * `templates` - Custom Genshi environment-specific templates. '''''(since 0.11)''''' * `site.html` - method to customize header, footer, and style, described in TracInterfaceCustomization#SiteAppearance '''Note: don't confuse a Trac environment directory with the source code repository directory. It happens that the above structure is loosely modelled after the Subversion repository directory structure, but they are not and ''must not'' be located at the same place.''' ---- See also: TracAdmin, TracBackup, TracIni, TracGuide x! TracAdminJs%trac127.0.0.1= TracAdmin = [[TracGuideToc]] Trac is distributed with a powerful command-line configuration tool. This tool can be used to configure and customize your Trac-installation to better fit your needs. Some of those operations can also be performed via the ''Admin'' web interface, an updated version of the [http://trac.edgewall.org/wiki/WebAdmin WebAdmin] plugin now integrated within Tri + TracEnvironmentJs%trac127.0.0.1= The Trac Environment = Trac uses a directory structure and a database for storing project data. The directory is referred to as the “environment”. == Creating an Environment == A new Trac environment is created using [wiki:TracAdmin trac-admin]: {{{ $ trac-admin /path/to/myproject initenv }}} [wiki:TracAdmin trac-admin] will ask ac (since version 0.11). == Usage == You can get a comprehensive list of the available options, commands and sub-commands by invoking `trac-admin` with the `help` command:. {{{ trac-admin help }}} Unless you're executing the `help`, `about` or `version` sub-commands, you'll need to specify the path to the TracEnvironment that you want to administer as the first argument, for example: {{{ trac-admin /path/to/projenv wiki list }}} == Interactive Mode == When passing the environment path as the only argument, `trac-admin` starts in interactive mode. Commands can then be executed on the selected environment using the prompt, which offers tab-completion (on non-Windows environments, and when the Python `readline` module is available) and automatic repetition of the last command issued. Once you're in interactive mode, you can also get help on specific commands or subsets of commands: For example, to get an explanation of the `resync` command, run: {{{ > help resync }}} To get help on all the Wiki-related commands, run: {{{ > help wiki }}} == Full Command Reference == [[TracAdminHelp()]] === Notes === The `initenv` also supports an extra `--inherit` option, which can be used to specify the `[inherit] file` option at environment creation time so that only the options ''not'' already specified in the global configuration file will be written in the conf/trac.ini file of the newly created environment. See TracIni#GlobalConfiguration. Note that in version 0.11 of Trac, `initenv` lost an extra last argument ``, which was used in previous versions to point to the `templates` folder. If you are using the one-liner '`trac-admin /path/to/trac/ initenv `' in the above and getting an error that reads ''''`Wrong number of arguments to initenv: 4`'''', then this is because you're using a `trac-admin` script from an '''older''' version of Trac. ---- See also: TracGuide, TracBackup, TracPermissions, TracEnvironment, TracIni, [trac:TracMigrate TracMigrate] ng your web-browser. Simply click on the "Edit this page" link at the bottom of the page. WikiFormatting will give you a detailed description of available Wiki formatting commands. "[wiki:TracAdmin trac-admin] ''yourenvdir'' initenv" created a new Trac environment, containing a default set of wiki pages and some sample data. This newly created environment also contains [wiki:TracGuide documentation] to help you get started with your project. You can use [wiki:TracAdmin trac-admin] to configure [http://trac.edgewall.org/ Trac] to better fit your project, especially in regard to ''components'', ''versions'' and ''milestones''. TracGuide is a good place to start. Enjoy! [[BR]] ''The Trac Team'' == Starting Points == * TracGuide -- Built-in Documentation * [http://trac.edgewall.org/ The Trac project] -- Trac Open Source Project * [http://trac.edgewall.org/wiki/TracFaq Trac FAQ] -- Frequently Asked Questions * TracSupport -- Trac Support For a complete list of local wiki pages, see TitleIndex. ] }WikiStartJs%trac127.0.0.1= Welcome to Trac 0.12dev = Trac is a '''minimalistic''' approach to '''web-based''' management of '''software projects'''. Its goal is to simplify effective tracking and handling of software issues, enhancements and overall progress. All aspects of Trac have been designed with the single goal to '''help developers write great software''' while '''staying out of the way''' and imposing as little as possible on a team's established process and culture. As all Wiki pages, this page is editable, this means that you can modify the contents of this page simply by usih event entry provides a hyperlink to the specific event in question, as well as a brief excerpt of the actual comment or text, if available. The author of the change is also mentioned. It is possible to filter those events by authors. The option panel contains a ''done by'' field which accepts a space-separated list of authors for which events should be included. Alternatively, if the author names are prefixed by a "-" character, then the events having those authors will be excluded, and all the others included. Single or double quotes can be used for specifying author names containing space characters. ''(since 0.12)'' See [wiki:TracIni#timeline TracIni] for timeline configuration options. == RSS Support == The Timeline module supports subscription using RSS 2.0 syndication. To subscribe to project events, click the orange '''XML''' icon at the bottom of the page. See TracRss for more information on RSS support in Trac. ---- See also: TracGuide, TracWiki, WikiFormatting, TracRss, TracNotification Q %_TracTimelineJs%trac127.0.0.1= The Trac Timeline = [[TracGuideToc]] The timeline provides a historic view of the project in a single report. It lists all Trac events that have occurred in chronological order, a brief description of each event and if applicable, the person responsible for the change. The timeline lists these kinds of events: * '''Wiki page events''' -- Creation and changes * '''Ticket events''' -- Creation and resolution/closing (and optionally other changes) * '''Source code changes ''' -- Repository check-ins * '''Milestone ''' -- Milestone completed Eacd resolved tickets is displayed as a milestone progress bar. == The Milestone View == It is possible to drill down into this simple statistic by viewing the individual milestone pages. By default, the active/resolved ratio will be grouped and displayed by component. You can also regroup the status by other criteria, such as ticket owner or severity. Ticket numbers are linked to [wiki:TracQuery custom queries] listing corresponding tickets. == Roadmap Administration == It is possible to add, modify and remove milestones using either TracAdmin or the web interface. '''Note:''' Milestone descriptions can currently only be edited from the web interface. With appropriate permissions, you'll see buttons for milestone management on the roadmap and milestone pages. == iCalendar Support == The Roadmap supports the [http://www.ietf.org/rfc/rfc2445.txt iCalendar] format to keep track of planned milestones and related tickets from your favorite calendar software. Calendar applications supporting the iCalendar specification include [http://www.apple.com/ical/ Apple iCal] for Mac OS X and the cross-platform [http://www.mozilla.org/projects/calendar/ Mozilla Calendar], and [http://chandlerproject.org Chandler]. [http://kontact.kde.org/korganizer/ Korganizer] (the calendar application of the [http://www.kde.org/ KDE] project) and [http://www.novell.com/de-de/products/desktop/features/evolution.html Evolution] also support iCalendar. To subscribe to the roadmap, copy the iCalendar link from the roadmap (found at the bottom of the page) and choose the "Subscribe to remote calendar" action (or similar) of your calendar application, and insert the URL just copied. '''Note:''' For tickets to be included in the calendar as tasks, you need to be logged in when copying the link. You will only see tickets assigned to yourself, and associated with a milestone. More information about iCalendar can be found at [http://en.wikipedia.org/wiki/ICalendar Wikipedia]. ---- See also: TracTickets, TracReports, TracQuery, TracGuide yy !GTracSearchJs%trac127.0.0.1= Using Search = Trac has a built-in search engine to allow finding occurrences of keywords and substrings in wiki pages, tickets and changeset descriptions. Using the Trac search facility is straightforward and its interface should be familiar to most users. Apart from the [search: Search module], you will also find a small search field above the j #TracRoadmapJs%trac127.0.0.1= The Trac Roadmap = [[TracGuideToc]] The roadmap provides a view on the [wiki:TracTickets ticket system] that helps planning and managing the future development of a project. == The Roadmap View == Basically, the roadmap is just a list of future milestones. You can add a description to milestones (using WikiFormatting) describing main objectives, for example. In addition, tickets targeted for a milestone are aggregated, and the ratio between active annavigation bar at all time. It provides convenient access to the search module from all pages. == "Quickjump" searches == For quick access to various project resources, the quick-search field at the top of every page can be used to enter a [TracLinks wiki link], which will take you directly to the resource identified by that link. For example: * ![42] -- Opens change set 42 * !#42 -- Opens ticket number 42 * !{1} -- Opens report 1 * /trunk -- Opens the browser for the `trunk` directory == Advanced == === Disabling Quickjumps === To disable the quickjump feature for a search keyword - for example when searching for occurences of the literal word !TracGuide - begin the query with an exclamation mark (!). === Search Links === From the Wiki, it is possible to link to a specific search, using `search:` links: * `search:?q=crash` will search for the string "crash" * `search:?q=trac+link&wiki=on` will search for "trac" and "link" in wiki pages only ---- See also: TracGuide, TracLinks, TracQuery   )yWikiDeletePageJs%trac127.0.0.1= Deleting a Wiki Page = Existing wiki pages can be completely deleted using the ''Delete Page'' or the ''Delete this Version'' buttons at the bottom of the wiki page. These buttons are only visible for users with `WIKI_DELETE` permissions. '''Note:''' Deleting a wiki page is an irreversible operation. In general, it is recommended to create redirection pages instead of completely deleting an old page, as to not frustrate the visitor with broken links when coming to the site from a search engine. A redirection page is a short page that contains a link such as “See !SomeOtherPage”. However, deleting specific versions or even complete pages can make sense to remove spam or other abusive submissions. ---- See also: TracWiki, TracPermissions iff views''. == Changeset Header == The header shows an overview of the whole changeset. Here you will find information such as: * Timestamp -- When the changeset was commited * Author -- Who commited the changeset * Message -- A brief description from the author (the commit log message) * Files -- A list of files affected by this changeset If more than one revision is involved in the set of changes being displayed, the ''Timestamp'', ''Author'' and ''Message'' fields won't be shown. In front of each listed file, you'll find a colored rectangle. The color indicates how the file is affected by the changeset. * Green: Added * Red: Removed * Yellow: Modified * Blue: Copied * Gray: Moved The color legend is located below the header as a reminder. == Diff Views == Below the header is the main part of the changeset, the diff view. Each file is shown in a separate section, each of which will contain only the regions of the file that are affected by the changeset. There are two different styles of displaying the diffs: ''inline'' or ''side-by-side'' (you can switch between those styles using the preferences form): * The ''inline'' style shows the changed regions of a file underneath each other. A region removed from the file will be colored red, an added region will be colored green. If a region was modified, the old version is displayed above the new version. Line numbers on the left side indicate the exact position of the change in both the old and the new version of the file. * The ''side-by-side'' style shows the old version on the left and the new version on the right (this will typically require more screen width than the inline style.) Added and removed regions will be colored in the same way as with the inline style (green and red, respectively), but modified regions will have a yellow background. In addition, various advanced options are available in the preferences form for adjusting the display of the diffs: * You can set how many lines are displayed before and after every change (if the value ''all'' is used, then the full file will be shown) * You can toggle whether blank lines, case changes and white space changes are ignored, thereby letting you find the functional changes more quickly == The Different Ways to Get a Diff == === Examining a Changeset === When viewing a repository check-in, such as when following a changeset [wiki:TracLinks link] or a changeset event in the [wiki:TracTimeline timeline], Trac will display the exact changes made by the check-in. There will be also navigation links to the ''Previous Changeset'' to and ''Next Changeset''. === Examining Differences Between Revisions === Often you'll want to look at changes made on a file or on a directory spanning multiple revisions. The easiest way to get there is from the TracRevisionLog, where you can select the ''old'' and the ''new'' revisions of the file or directory, and then click the ''View changes'' button. === Examining Differences Between Branches === One of the core features of version control systems is the possibility to work simultaneously on different ''Lines of Developments'', commonly called “branches”. Trac enables you to examine the exact differences between such branches. Using the '''View changes ...''' button in the TracBrowser allows you to enter ''From:'' and ''To:'' path/revision pairs. The resulting set of differences consist of the changes that should be applied to the ''From:'' content in order to get to the ''To:'' content. For convenience, it is possible to invert the roles of the ''old'' and the ''new'' path/revision pairs by clicking the ''Reverse Diff'' link on the changeset page. === Checking the Last Change === The last possibility for examining changes is to use the ''Last Change'' link provided by the TracBrowser. This link will take you to the last change that was made on that path. From there, you can use the ''Previous Change'' and ''Next Change'' links to traverse the change history of the file or directory. ---- See also: TracGuide, TracBrowser 227 ')TracChangesetJs%trac127.0.0.1= Trac Changeset Module = [[TracGuideToc]] Trac has a built-in functionality for visualizing “diffs” - changes to files. There are different kinds of ''change sets''. Some can correspond to revisions made in the repositories, others can aggregate changes made in several revisions, but in the end, any kind of differences can be shown. The changeset view consists of two parts, the ''header'' and the ''d using standard file-based backup tools like `tar` or `dump`/`restore`. Please, note, that hotcopy command does not overwrite target directory and when such exists, hotcopy ends with error: `Command failed: [Errno 17] File exists:` This is discussed in [trac:ticket:3198 #3198]. === Restoring a Backup === Backups are simply a copied snapshot of the entire [wiki:TracEnvironment project environment] directory, including the SQLite database. To restore an environment from a backup, simply stop the process running Trac (i.e. the Web server or [wiki:TracStandalone tracd]), restore the directory structure from the backup and restart the service. ''Note: Automatic backup of environments that don't use SQLite as database backend is not supported at this time. As a workaround, we recommend that you stop the server, copy the environment directory, and make a backup of the database using whatever mechanism is provided by the database system.'' ---- See also: TracAdmin, TracEnvironment, TracGuide, TracMigrate q !#TracBackupJs%trac127.0.0.1= Trac Backup = [[TracGuideToc]] Since Trac uses a database backend, some extra care is required to safely create a backup of a [wiki:TracEnvironment project environment]. Luckily, [wiki:TracAdmin trac-admin] has a command to make backups easier: `hotcopy`. ''Note: Trac uses the `hotcopy` nomenclature to match that of [http://subversion.tigris.org/ Subversion], to make it easier to remember when managing both Trac and Subversion servers.'' == Creating a Backup == To create a backup of a live TracEnvironment, simply run: {{{ $ trac-admin /path/to/projenv hotcopy /path/to/backupdir }}} [wiki:TracAdmin trac-admin] will lock the database while copying.'' The resulting backup directory is safe to handletext-align: right; color: blue">HTML Test }}} Note that Trac sanitizes your HTML code before displaying it. That means that if you try to use potentially dangerous constructs such as Javascript event handlers, those will be removed from the output. Since 0.11, the filtering is done by Genshi, and as such, the produced out will be a well-formed fragment of HTML. In other words, this mean that you can no longer use two HTML blocks, one for opening a
, the second for closing it, in order to wrap arbitrary wiki text. To achieve this, you need now to use the ''div'' Wiki processor: {{{ {{{ #!div class=important style="border: 2pt solid; text-align: center" This is the ''only'' way to go in Trac 0.11 }}} }}} Results in: {{{ #!div class=important style="border: 2pt solid; text-align: center" This is the ''only'' way to go in Trac 0.11 }}} For spans, you should rather use the Macro call syntax: {{{ Hello [[span(''WORLD'' (click [#world-anchor here]), style=color: green; font-size: 120%, id=world-anchor)]]! }}} Results in: Hello [[span(''WORLD'' (click [#world-anchor here]), style=color: green; font-size: 120%, id=world-anchor)]]! == HTML comments == HTML comments are stripped from the output of the `html` processor. To add an HTML comment to a wiki page, use the `htmlcomment` processor (available since 0.12). For example, the following code block: {{{ {{{ #!htmlcomment This block is translated to an HTML comment. It can contain and &entities; that will not be escaped in the output. }}} }}} results in the following block in the HTML output: {{{ }}} Please note that the character sequence "--" is not allowed in HTML comments, and will generate a rendering error. == More Information == * http://www.w3.org/ -- World Wide Web Consortium * http://www.w3.org/MarkUp/ -- HTML Markup Home Page ---- See also: WikiProcessors, WikiFormatting, WikiRestructuredText = ?WikiHtmlJs%trac127.0.0.1= Using HTML in Wiki Text = Trac supports inserting HTML into any wiki context, accomplished using the HTML [wiki:WikiProcessors WikiProcessor]. HTML support is built-in, and does not require installing any additional packages. == How to Use HTML == To inform the wiki engine that a block of text should be treated as HTML, use the ''html'' processor. This example should explain: {{{ #!html
{{{
#!html
<h1 style="text-align: right; color: blue">HTML Test</h1>
}}}
}}} Results in: {{{ #!html

Defaults: Color 1 Color 2 Color 3 Color 4 Color 5

}}} * '''`__style__`''' -- A custom CSS style expression to use for the current row. '''Example:''' ''List active tickets, grouped by milestone, colored by priority'' {{{ SELECT p.value AS __color__, t.milestone AS __group__, (CASE owner WHEN 'daniel' THEN 'font-weight: bold; background: red;' ELSE '' END) AS __style__, t.id AS ticket, summary FROM ticket t,enum p WHERE t.status IN ('new', 'assigned', 'reopened') AND p.name=t.priority AND p.type='priority' ORDER BY t.milestone, p.value, t.severity, t.time }}} '''Note:''' A table join is used to match ''ticket'' priorities with their numeric representation from the ''enum'' table. === Changing layout of report rows === By default, all columns on each row are display on a single row in the HTML report, possibly formatted according to the descriptions above. However, it's also possible to create multi-line report entries. * '''`column_`''' -- ''Break row after this''. By appending an underscore ('_') to the column name, the remaining columns will be be continued on a second line. * '''`_column_`''' -- ''Full row''. By adding an underscore ('_') both at the beginning and the end of a column name, the data will be shown on a separate row. * '''`_column`''' -- ''Hide data''. Prepending an underscore ('_') to a column name instructs Trac to hide the contents from the HTML output. This is useful for information to be visible only if downloaded in other formats (like CSV or RSS/XML). '''Example:''' ''List active tickets, grouped by milestone, colored by priority, with description and multi-line layout'' {{{ SELECT p.value AS __color__, t.milestone AS __group__, (CASE owner WHEN 'daniel' THEN 'font-weight: bold; background: red;' ELSE '' END) AS __style__, t.id AS ticket, summary AS summary_, -- ## Break line here component,version, severity, milestone, status, owner, time AS created, changetime AS modified, -- ## Dates are formatted description AS _description_, -- ## Uses a full row changetime AS _changetime, reporter AS _reporter -- ## Hidden from HTML output FROM ticket t,enum p WHERE t.status IN ('new', 'assigned', 'reopened') AND p.name=t.priority AND p.type='priority' ORDER BY t.milestone, p.value, t.severity, t.time }}} === Reporting on custom fields === If you have added custom fields to your tickets (a feature since v0.8, see TracTicketsCustomFields), you can write a SQL query to cover them. You'll need to make a join on the ticket_custom table, but this isn't especially easy. If you have tickets in the database ''before'' you declare the extra fields in trac.ini, there will be no associated data in the ticket_custom table. To get around this, use SQL's "LEFT OUTER JOIN" clauses. See [trac:TracIniReportCustomFieldSample TracIniReportCustomFieldSample] for some examples. '''Note that you need to set up permissions in order to see the buttons for adding or editing reports.''' ---- See also: TracTickets, TracQuery, TracGuide, [http://www.sqlite.org/lang_expr.html Query Language Understood by SQLite] ""6 A TracInterfaceCustomizationJs%trac127.0.0.1= Customizing the Trac Interface = [[TracGuideToc]] == Introduction == This page is meant to give users suggestions on how they can customize the look of Trac. Topics on this page cover editing the HTML templates and CSS files, but not the program code itself. The topics are intended to showF #ITracReportsJs%trac127.0.0.1= Trac Reports = [[TracGuideToc]] The Trac reports module provides a simple, yet powerful reporting facility to present information about tickets in the Trac database. Rather than have its own report definition format, TracReports relies on standard SQL `SELECT` statements for custom report definition. '''Note:''' ''The report module is being phased out in its current form because it seriously limits the ability of the Trac team to make adjustments to the underlying database schema. We believe that the [wiki:TracQuery query module] is a good replacement that provides more f users how they can modify the look of Trac to meet their specific needs. Suggestions for changes to Trac's interface applicable to all users should be filed as tickets, not listed on this page. == Project Logo and Icon == The easiest parts of the Trac interface to customize are the logo and the site icon. Both of these can be configured with settings in [wiki:TracIni trac.ini]. The logo or icon image should be put in a folder named "htdocs" in your project's environment folder. (''Note: in projects created with a Trac version prior to 0.9 you will need to create this folder'') ''Note: you can actually put the logo and icon anywhere on your server (as long as it's accessible through the web server), and use their absolute or server-relative URLs in the configuration.'' Now configure the appropriate section of your [wiki:TracIni trac.ini]: === Logo === Change the `src` setting to `site/` followed by the name of your image file. The `width` and `height` settings should be modified to match your image's dimensions (the Trac chrome handler uses "`site/`" for files within the project directory `htdocs` and "`common/`" for the common ones). {{{ [header_logo] src = site/my_logo.gif alt = My Project width = 300 height = 100 }}} === Icon === Icons should be a 16x16 image in `.gif` or `.ico` format. Change the `icon` setting to `site/` followed by the name of your icon file. Icons will typically be displayed by your web browser next to the site's URL and in the `Bookmarks` menu. {{{ [project] icon = site/my_icon.ico }}} Note though that this icon is ignored by Internet Explorer, which only accepts a file named ``favicon.ico`` at the root of the host. To make the project icon work in both IE and other browsers, you can store the icon in the document root of the host, and reference it from ``trac.ini`` as follows: {{{ [project] icon = /favicon.ico }}} == Custom Navigation Entries == The new [mainnav] and [metanav] can now be used to customize the text and link used for the navigation items, or even to disable them (but not for adding new ones). In the following example, we rename the link to the Wiki start "Home", and hide the "Help/Guide". We also make the "View Tickets" entry link to a specific report . {{{ [mainnav] wiki.label = Home tickets.href = /report/24 [metanav] help = disabled }}} See also TracNavigation for a more detailed explanation of the mainnav and metanav terms. == Site Appearance == #SiteAppearance Trac is using [http://genshi.edgewall.org Genshi] as the templating engine. Documentation is yet to be written, in the meantime the following tip should work. Say you want to add a link to a custom stylesheet, and then your own header and footer. Save the following content as 'site.html' inside your projects templates directory (each Trac project can have their own site.html), e.g. {{{/path/to/env/templates/site.html}}}: {{{ #!xml ${select('*|comment()|text()')} ${select('*|text()')} }}} Those who are familiar with XSLT may notice that Genshi templates bear some similarities. However, there are some Trac specific features - for example '''${href.chrome('site/style.css')}''' attribute references template placed into environment's ''htdocs/'' In a similar fashion '''${chrome.htdocs_location}''' is used to specify common ''htdocs/'' directory from Trac installation. site.html is one file to contain all your modifications. It usually works by the py:match (element of attribute), and it allows you to modify the page as it renders - the matches hook onto specific sections depending on what it tries to find and modify them. A site.html can contain any number of such py:match sections for whatever you need to modify. This is all [http://genshi.edgewall.org/ Genshi], so the docs on the exact syntax can be found there. Example snippet of adding introduction text to the new ticket form (hide when preview): {{{ #!xml

Please make sure to search for existing tickets before reporting a new one!

${select('*')}
}}} This example illustrates a technique of using '''`req.environ['PATH_INFO']`''' to limit scope of changes to one view only. For instance, to make changes in site.html only for timeline and avoid modifying other sections - use ''`req.environ['PATH_INFO'] == '/timeline'`'' condition in test. If the environment is upgraded from 0.10 and a `site_newticket.cs` file already exists, it can actually be loaded by using a workaround - providing it contains no ClearSilver processing. In addition, as only one element can be imported, the content needs some sort of wrapper such as a `
` block or other similar parent container. The XInclude namespace must be specified to allow includes, but that can be moved to document root along with the others: {{{ #!xml
${select('*')}
}}} Also note that the `site.html` (despite its name) can be put in a common templates directory - see the `[inherit] templates_dir` option. This could provide easier maintainence (and a migration path from 0.10 for larger installations) as one new global `site.html` file can be made to include any existing header, footer and newticket snippets. == Project List == #ProjectList You can use a custom Genshi template to display the list of projects if you are using Trac with multiple projects. The following is the basic template used by Trac to display a list of links to the projects. For projects that could not be loaded it displays an error message. You can use this as a starting point for your own index template. {{{ #!text/html Available Projects

Available Projects

}}} Once you've created your custom template you will need to configure the webserver to tell Trac where the template is located (pls verify ... not yet changed to 0.11): For [wiki:TracFastCgi FastCGI]: {{{ FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects \ -initial-env TRAC_ENV_INDEX_TEMPLATE=/path/to/template }}} For [wiki:TracModPython mod_python]: {{{ PythonOption TracEnvParentDir /parent/dir/of/projects PythonOption TracEnvIndexTemplate /path/to/template }}} For [wiki:TracCgi CGI]: {{{ SetEnv TRAC_ENV_INDEX_TEMPLATE /path/to/template }}} For [wiki:TracStandalone], you'll need to set up the `TRAC_ENV_INDEX_TEMPLATE` environment variable in the shell used to launch tracd: - Unix {{{ #!sh $ export TRAC_ENV_INDEX_TEMPLATE=/path/to/template }}} - Windows {{{ #!sh $ set TRAC_ENV_INDEX_TEMPLATE=/path/to/template }}} == Project Templates == The appearance of each individual Trac environment (that is, instance of a project) can be customized independently of other projects, even those hosted by the same server. The recommended way is to use a `site.html` template (see [#SiteAppearance]) whenever possible. Using `site.html` means changes are made to the original templates as they are rendered, and you should not normally need to redo modifications whenever Trac is upgraded. If you do make a copy of `theme.html` or any other Trac template, you need to migrate your modifiations to the newer version - if not, new Trac features or bug fixes may not work as expected. With that word of caution, any Trac template may be copied and customized. The default Trac templates are located inside the installed Trac egg (`/usr/lib/pythonVERSION/site-packages/Trac-VERSION.egg/trac/templates, .../trac/ticket/templates, .../trac/wiki/templates, ++`). The [#ProjectList] template file is called `index.html`, while the template responsible for main layout is called `theme.html`. Page assets such as images and CSS style sheets are located in the egg's `trac/htdocs` directory. However, do not edit templates or site resources inside the Trac egg - installing Trac again can completely delete your modifications. Instead use one of two alternatives: * For a modification to one project only, copy the template to project `templates` directory. * For a modification shared by several projects, copy the template to a shared location and have each project point to this location using the `[inherit] templates_dir =` trac.ini option. Trac resolves requests for a template by first looking inside the project, then in any inherited templates location, and finally inside the Trac egg. Trac caches templates in memory by default to improve performance. To apply a template you need to restart the server. ---- See also TracGuide, TracIni 2''' * Reports: '''!{1}''' or '''!report:1''' * Changesets: '''!r1''', '''![1]''', '''!changeset:1''' or (restricted) '''![1/trunk]''', '''!changeset:1/trunk''' * Revision log: '''!r1:3''', '''![1:3]''' or '''!log:@1:3''', '''!log:trunk@1:3''', '''![2:5/trunk]''' * Diffs (requires [trac:milestone:0.10 0.10]): '''!diff:@1:3''', '''!diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default''' or '''!diff:trunk/trac@3538//sandbox/vc-refactoring@3539''' * Wiki pages: '''!CamelCase''' or '''!wiki:CamelCase''' * Parent page: '''![..]''' * Milestones: '''!milestone:1.0''' * Attachment: '''!attachment:example.tgz''' (for current page attachment), '''!attachment:attachment.1073.diff:ticket:944''' (absolute path) * Files: '''!source:trunk/COPYING''' * A specific file revision: '''!source:/trunk/COPYING@200''' * A particular line of a specific file revision: '''!source:/trunk/COPYING@200#L25''' Display: * Tickets: #1 or ticket:1 * Ticket comments: comment:1:ticket:2 * Reports: {1} or report:1 * Changesets: r1, [1], changeset:1 or (restricted) [1/trunk], changeset:1/trunk * Revision log: r1:3, [1:3] or log:@1:3, log:trunk@1:3, [2:5/trunk] * Diffs (requires [milestone:0.10 0.10]): diff:@1:3, diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default or diff:trunk/trac@3538//sandbox/vc-refactoring@3539 * Wiki pages: CamelCase or wiki:CamelCase * Parent page: [..] * Milestones: milestone:1.0 * Attachment: attachment:example.tgz (for current page attachment), attachment:attachment.1073.diff:ticket:944 (absolute path) * Files: source:trunk/COPYING * A specific file revision: source:/trunk/COPYING@200 * A particular line of a specific file revision: source:/trunk/COPYING@200#L25 '''Note:''' The wiki:CamelCase form is rarely used, but it can be convenient to refer to pages whose names do not follow WikiPageNames rules, i.e., single words, non-alphabetic characters, etc. See WikiPageNames for more about features specific to links to Wiki page names. Trac links using the full (non-shorthand) notation can also be given a custom link title like this: {{{ [ticket:1 This is a link to ticket number one]. }}} Display: [ticket:1 This is a link to ticket number one]. If the title is omitted, only the id (the part after the colon) is displayed: {{{ [ticket:1] }}} Display: [ticket:1] `wiki` is the default if the namespace part of a full link is omitted (''since version 0.10''): {{{ [SandBox the sandbox] }}} Display: [SandBox the sandbox] TracLinks are a very simple idea, but actually allow quite a complex network of information. In practice, it's very intuitive and simple to use, and we've found the "link trail" extremely helpful to better understand what's happening in a project or why a particular change was made. == Advanced use of TracLinks == === Relative links === To create a link to a specific anchor in a page, use '#': {{{ [#Relativelinks relative links] }}} Displays: [#Relativelinks relative links] Hint: when you move your mouse over the title of a section, a '¶' character will be displayed. This is a link to that specific section and you can use this to copy the `#...` part inside a relative link to an anchor. To create a link to a [trac:SubWiki SubWiki]-page just use a '/': {{{ WikiPage/SubWikiPage or ./SubWikiPage }}} To link from a [trac:SubWiki SubWiki] page to a parent, simply use a '..': {{{ [..] }}} To link from a [trac:SubWiki SubWiki] page to a sibling page, use a '../': {{{ [../Sibling see next sibling] }}} ''(Changed in 0.11)'' Note that in Trac 0.10, using e.g. `[../newticket]` may have worked for linking to the /newticket top-level URL, but now in 0.11 it will stay in the wiki namespace and link to a sibling page. See [#Server-relativelinks] for the new syntax. === InterWiki links === Other prefixes can be defined freely and made to point to resources in other Web applications. The definition of those prefixes as well as the URLs of the corresponding Web applications is defined in a special Wiki page, the InterMapTxt page. Note that while this could be used to create links to other Trac environments, there's a more specialized way to register other Trac environments which offers greater flexibility. === InterTrac links === This can be seen as a kind of InterWiki link specialized for targeting other Trac projects. Any type of Trac links could be written in one Trac environment and actually refer to resources present in another Trac environment, provided the Trac link is prefixed by the name of that other Trac environment followed by a colon. That other Trac environment must be registered, under its name or an alias. See InterTrac for details. A distinctive advantage of InterTrac links over InterWiki links is that the shorthand form of Trac links usually have a way to understand the InterTrac prefixes. For example, links to Trac tickets can be written #T234 (if T was set as an alias for Trac), links to Trac changesets can be written [trac 1508]. === Server-relative links === It is often useful to be able to link to objects in your project that have no built-in Trac linking mechanism, such as static resources, `newticket`, a shared `/register` page on the server, etc. To link to resources inside the project, use either an absolute path from the project root, or a relative link from the URL of the current page (''Changed in 0.11''): {{{ [/newticket Create a new ticket] [/ home] }}} Display: [/newticket newticket] [/ home] To link to another location on the server (outside the project), use the '//location' link syntax (''Changed in 0.11''): {{{ [//register Register Here] }}} Display: [//register Register Here] === Quoting space in TracLinks === Immediately after a TracLinks prefix, targets containing space characters should be enclosed in a pair of quotes or double quotes. Examples: * !wiki:"The whitespace convention" * !attachment:'the file.txt' or * !attachment:"the file.txt" * !attachment:"the file.txt:ticket:123" === Escaping Links === To prevent parsing of a !TracLink, you can escape it by preceding it with a '!' (exclamation mark). {{{ !NoLinkHere. ![42] is not a link either. }}} Display: !NoLinkHere. ![42] is not a link either. === Parameterized Trac links === The Trac links target Trac resources which have generally more than one way to be rendered, according to some extra parameters. For example, a Wiki page can accept a `version` or a `format` parameter, a report can make use of dynamic variables, etc. Any Trac links can support an arbitrary set of parameters, written in the same way as they would be for the corresponding URL. Some examples: - `wiki:WikiStart?format=txt` - `ticket:1?version=1` - `[/newticket?component=module1 create a ticket for module1]` == TracLinks Reference == The following sections describe the individual link types in detail, as well as several notes advanced usage of links. === attachment: links === The link syntax for attachments is as follows: * !attachment:the_file.txt creates a link to the attachment the_file.txt of the current object * !attachment:the_file.txt:wiki:MyPage creates a link to the attachment the_file.txt of the !MyPage wiki page * !attachment:the_file.txt:ticket:753 creates a link to the attachment the_file.txt of the ticket 753 Note that the older way, putting the filename at the end, is still supported: !attachment:ticket:753:the_file.txt. If you'd like to create a direct link to the content of the attached file instead of a link to the attachment page, simply use `raw-attachment:` instead of `attachment:`. This can be useful for pointing directly to an HTML document, for example. Note that for this use case, you'd have to allow the web browser to render the content by setting `[attachment] render_unsafe_content = yes` (see TracIni#attachment-section). Caveat: only do that in environments for which you're 100% confident you can trust the people who are able to attach files, as otherwise this would open up your site to [wikipedia:Cross-site_scripting cross-site scripting] attacks. See also [#export:links]. === comment: links === When you're inside a given tickets, you can simply write e.g. !comment:3 to link to the third change comment. It's also possible to link to a comment of a specific ticket from anywhere using one of the following syntax: - !comment:3:ticket:123 - !ticket:123#comment:3 (note that you can't write !#123#!comment:3!) === query: links === See TracQuery#UsingTracLinks and [#ticket:links]. === search: links === See TracSearch#SearchLinks === ticket: links === Besides the obvious `ticket:id` form, it is also possible to specify a list of tickets or even a range of tickets instead of the `id`. This generates a link to a custom query view containing this fixed set of tickets. Example: - `ticket:5000-6000` - `ticket:1,150` ''(since Trac 0.11)'' === timeline: links === Links to the timeline can be created by specifying a date in the ISO:8601 format. The date can be optionally followed by a time specification. The time is interpreted as being UTC time, but alternatively you can specify your local time, followed by your timezone if you don't want to compute the UTC time. Examples: - `timeline:2008-01-29` - `timeline:2008-01-29T15:48` - `timeline:2008-01-29T16:48Z+01` ''(since Trac 0.11)'' === wiki: links === See WikiPageNames and [#QuotingspaceinTracLinks quoting space in TracLinks] above. === Version Control related links === ==== source: links ==== The default behavior for a source:/some/path link is to open the directory browser if the path points to a directory and otherwise open the log view. It's also possible to link directly to a specific revision of a file like this: - `source:/some/file@123` - link to the file's revision 123 - `source:/some/file@head` - link explicitly to the latest revision of the file If the revision is specified, one can even link to a specific line number: - `source:/some/file@123#L10` - `source:/tag/0.10@head#L10` Finally, one can also highlight an arbitrary set of lines: - `source:/some/file@123:10-20,100,103#L99` - highlight lines 10 to 20, and lines 100 and 103. ''(since 0.11)'' ==== export: links ==== To force the download of a file in the repository, as opposed to displaying it in the browser, use the `export` link. Several forms are available: * `export:/some/file` - get the HEAD revision of the specified file * `export:123:/some/file` - get revision 123 of the specified file * `export:/some/file@123` - get revision 123 of the specified file This can be very useful for displaying XML or HTML documentation with correct stylesheets and images, in case that has been checked in into the repository. Note that for this use case, you'd have to allow the web browser to render the content by setting `[browser] render_unsafe_content = yes` (see TracIni#browser-section), otherwise Trac will force the files to be downloaded as attachments for security concerns. If the path is to a directory in the repository instead of a specific file, the source browser will be used to display the directory (identical to the result of `source:/some/dir`). ==== log: links ==== The `log:` links are used to display revision ranges. In its simplest form, it can link to the latest revisions from the specified path, but it can also support displaying an arbitrary set of revisions. - `log:/` - the latest revisions starting at the root of the repository - `log:/trunk/tools` - the latest revisions in `trunk/tools` - `log:/trunk/tools@10000` - the revisions in `trunk/tools` starting from revision 10000 - `log:@20788,20791:20795` - list revision 20788 and the 20791 to 20795 revision range - `log:/trunk/tools@20788,20791:20795` - list revision 20788 and the revisions from the 20791 to 20795 range which affect the given path There are short forms for revision ranges as well: - `[20788,20791:20795]` - `[20788,20791:20795/trunk/tools]` - `r20791:20795` (but not `r20788,20791:20795` nor `r20791:20795/trunk`) Finally, note that in all of the above, a revision range can be written indifferently `x:y` or `x-y`. ---- See also: WikiFormatting, TracWiki, WikiPageNames, InterTrac, InterWiki # TracLinksJs%trac127.0.0.1= Trac Links = [[TracGuideToc]] TracLinks are a fundamental feature of Trac, because they allow easy hyperlinking between the various entities in the system—such as tickets, reports, changesets, Wiki pages, milestones, and source files—from anywhere WikiFormatting is used. TracLinks are generally of the form '''type:id''' (where ''id'' represents the number, name or path of the item) though some frequently used kinds of items also have short-hand notations. == Where to use TracLinks == You can use TracLinks in: * Source code (Subversion) commit messages * Wiki pages * Full descriptions for tickets, reports and milestones and any other text fields explicitly marked as supporting WikiFormatting. Some examples: * Tickets: '''!#1''' or '''!ticket:1''' * Ticket comments: '''!comment:1:ticket:configuration options can be defined directly in the script. }}} Currently, the following data is imported from Bugzilla: * bugs * bug activity (field changes) * bug attachments * user names and passwords (put into a htpasswd file) The script provides a number of features to ease the conversion, such as: * PRODUCT_KEYWORDS: Trac doesn't have the concept of products, so the script provides the ability to attach a ticket keyword instead. * IGNORE_COMMENTS: Don't import Bugzilla comments that match a certain regexp. * STATUS_KEYWORDS: Attach ticket keywords for the Bugzilla statuses not available in Trac. By default, the 'VERIFIED' and 'RELEASED' Bugzilla statuses are translated into Trac keywords. For more details on the available options, see the configuration section at the top of the script. == Sourceforge == Ticket data can be imported from Sourceforge using the [http://trac.edgewall.org/browser/trunk/contrib/sourceforge2trac.py sourceforge2trac.py] script, available in the contrib/ directory of the Trac distribution. == Mantis == NB! The mantis2trac script now lives at http://trac-hacks.org/wiki/MantisImportScript . You can always get the latest version from http://trac-hacks.org/changeset/latest/mantisimportscript?old_path=/&filename=mantisimportscript&format=zip Mantis bugs can be imported using the attached script. Currently, the following data is imported from Mantis: * bugs * bug comments * bug activity (field changes) * attachments (as long as the files live in the mantis db, not on the filesystem) If you use the script, please read the NOTES section (at the top of the file) and make sure you adjust the config parameters for your environment. mantis2trac.py has the same parameters as the bugzilla2trac.py script: {{{ mantis2trac - Imports a bug database from Mantis into Trac. Usage: mantis2trac.py [options] Available Options: --db - Mantis database --tracenv /path/to/trac/env - Full path to Trac db environment -h | --host - Mantis DNS host name -u | --user - Effective Mantis database user -p | --passwd - Mantis database user password -c | --clean - Remove current Trac tickets before importing --help | help - This help info Additional configuration options can be defined directly in the script. }}} == Other == Since trac uses a SQL database to store the data, you can import from other systems by examining the database tables. Just go into [http://www.sqlite.org/sqlite.html sqlite] command line to look at the tables and import into them from your application. === Using a comma delimited file - CSV === See [http://trac.edgewall.org/attachment/wiki/TracSynchronize/csv2trac.2.py] for details. This approach is particularly useful if one needs to enter a large number of tickets by hand. (note that the ticket type type field, (task etc...) is also needed for this script to work with more recent Trac releases) wwv !-TracImportJs%trac127.0.0.1= Importing ticket data = == Bugzilla == Ticket data can be imported from Bugzilla using the [http://trac.edgewall.org/browser/trunk/contrib/bugzilla2trac.py bugzilla2trac.py] script, available in the contrib/ directory of the Trac distribution. {{{ $ bugzilla2trac.py bugzilla2trac - Imports a bug database from Bugzilla into Trac. Usage: bugzilla2trac.py [options] Available Options: --db - Bugzilla's database --tracenv /path/to/trac/env - full path to Trac db environment -h | --host - Bugzilla's DNS host name -u | --user - effective Bugzilla's database user -p | --passwd - Bugzilla's user password -c | --clean - remove current Trac tickets before importing --help | help - this help info Additional nificantly slower than any other deployment method, such as [TracModPython mod_python] or [TracFastCgi FastCGI] or even [trac:TracOnWindowsIisAjp IIS/AJP] on Windows.'' }}} If you're using [http://httpd.apache.org/ Apache HTTPD], there are a couple ways to do that: 1. Use a `ScriptAlias` to map a URL to the `trac.cgi` script 2. Copy the `trac.cgi` file into the directory for CGI executables used by your web server (commonly named `cgi-bin`). A word of warning, copying the file directly from the repository onto a windows server 2003 machine created difficulties. Rather create a new text file and cut and copy the text into the newly created file. You can also create a symbolic link, but in that case make sure that the `FollowSymLinks` option is enabled for the `cgi-bin` directory. The first option is recommended as it also allows you to map the CGI to a friendly URL. Now, edit the Apache configuration file and add this snippet, file names and locations changed to match your installation: {{{ ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi }}} ''Note that this directive requires the `mod_alias` module to be installed and enabled.'' If you're using Trac with a single project you need to set its location using the `TRAC_ENV` environment variable: {{{ SetEnv TRAC_ENV "/path/to/projectenv" }}} Or to use multiple projects you can specify their common parent directory using the `TRAC_ENV_PARENT_DIR` variable: {{{ SetEnv TRAC_ENV_PARENT_DIR "/path/to/project/parent/dir" }}} ''Note that the `SetEnv` directive requires the `mod_env` module to be installed and enable. If not, you could set TRAC_ENV in trac.cgi. Just add the following code between "try:" and "from trac.web ...":'' {{{ import os os.environ['TRAC_ENV'] = "/path/to/projectenv" }}} '' Or for TRAC_ENV_PARENT_DIR: '' {{{ import os os.environ['TRAC_ENV_PARENT_DIR'] = "/path/to/project/parent/dir" }}} This will make Trac available at `http://yourhost.example.org/trac`. If you are using the [http://httpd.apache.org/docs/suexec.html Apache suEXEC] feature please see [http://trac.edgewall.org/wiki/ApacheSuexec]. On some systems, you ''may'' need to edit the shebang line in the `trac.cgi` file to point to your real Python installation path. On a Windows system you may need to configure Windows to know how to execute a .cgi file (Explorer -> Tools -> Folder Options -> File Types -> CGI). == Mapping Static Resources == Out of the box, Trac will serve static resources such as style sheets or images itself. For a CGI setup, though, this is highly undesirable, because it results in the CGI script being invoked for documents that could be much more efficiently served by the web server directly. Web servers such as [http://httpd.apache.org/ Apache HTTPD] allow you to create “Aliases” to resources, thereby giving them a virtual URL that doesn't necessarily bear any resemblance to the layout of the servers file system. We already used this capability above when defining a `ScriptAlias` for the CGI script, and we'll use it now to map requests to the static resources to the directory on the file system that contains them, thereby bypassing the processing of such requests by the CGI script. Edit the Apache configuration file again and add the following snippet '''before''' the `ScriptAlias` for the CGI script , file names and locations changed to match your installation: {{{ Alias /trac/chrome/common /usr/share/trac/htdocs Order allow,deny Allow from all }}} Note that whatever URL path you mapped the `trac.cgi` script to, the path `/chrome/common` is the path you have to append to that location to intercept requests to the static resources. For example, if Trac is mapped to `/cgi-bin/trac.cgi` on your server, the URL of the Alias should be `/cgi-bin/trac.cgi/chrome/common`. Similarly, if you have static resources in a projects htdocs directory, you can configure apache to serve those resources (again, put this '''before''' the `ScriptAlias` for the CGI script, and adjust names and locations to match your installation): {{{ Alias /trac/chrome/site /path/to/projectenv/htdocs Order allow,deny Allow from all }}} Alternatively, you can set the `htdocs_location` configuration option in [wiki:TracIni trac.ini]: {{{ [trac] htdocs_location = /trac-htdocs }}} Trac will then use this URL when embedding static resources into HTML pages. Of course, you still need to make the Trac `htdocs` directory available through the web server at the specified URL, for example by copying (or linking) the directory into the document root of the web server: {{{ $ ln -s /usr/share/trac/htdocs /var/www/your_site.com/htdocs/trac-htdocs }}} Note that in order to get this `htdocs` directory, you need first to extract the relevant Trac resources using the `deploy` command of TracAdmin: [[TracAdminHelp(deploy)]] == Adding Authentication == The simplest way to enable authentication with Apache is to create a password file. Use the `htpasswd` program to create the password file: {{{ $ htpasswd -c /somewhere/trac.htpasswd admin New password: Re-type new password: Adding password for user admin }}} After the first user, you dont need the "-c" option anymore: {{{ $ htpasswd /somewhere/trac.htpasswd john New password: Re-type new password: Adding password for user john }}} ''See the man page for `htpasswd` for full documentation.'' After you've created the users, you can set their permissions using TracPermissions. Now, you'll need to enable authentication against the password file in the Apache configuration: {{{ AuthType Basic AuthName "Trac" AuthUserFile /somewhere/trac.htpasswd Require valid-user }}} If you're hosting multiple projects you can use the same password file for all of them: {{{ AuthType Basic AuthName "Trac" AuthUserFile /somewhere/trac.htpasswd Require valid-user }}} For better security, it is recommended that you either enable SSL or at least use the “digest” authentication scheme instead of “Basic”. Please read the [http://httpd.apache.org/docs/2.0/ Apache HTTPD documentation] to find out more. For example, on a Debian 4.0r1 (etch) system the relevant section in apache configuration can look like this: {{{ LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so AuthType Digest AuthName "trac" AuthDigestDomain /trac AuthUserFile /somewhere/trac.htpasswd Require valid-user }}} and you'll have to create your .htpasswd file with htdigest instead of htpasswd as follows: {{{ # htdigest /somewhere/trac.htpasswd trac admin }}} where the "trac" parameter above is the same as !AuthName above ("Realm" in apache-docs). ---- See also: TracGuide, TracInstall, wiki:TracModWSGI, TracFastCgi, TracModPython UU )GTracStandaloneJs%trac127.0.0.1= Tracd = Tracd is a lightweight standalone Trac web server. In most cases it's easier to setup and runs faster than the [wiki:TracCgi CGI script]. == Pros == * Fewer dependencies: You don't need to install apache or any other web-server. * Fast: Should be almost as fast as the [wiki:TracModPython mod_python] version (and much faster than the [wiki:TracCgi CGI]). * Automatic r׹U qTracCgiJs%trac127.0.0.1= Installing Trac as CGI = To install Trac as a CGI script, you need to make the `trac.cgi` executable as a CGI by your web server. {{{ #!div class=important ''Please note that using Trac via CGI is sigeloading: For development, Tracd can be used in ''auto_reload'' mode, which will automatically restart the server whenever you make a change to the code (in Trac itself or in a plugin). == Cons == * Fewer features: Tracd implements a very simple web-server and is not as configurable or as scalable as Apache HTTPD. * No native HTTPS support: [http://www.rickk.com/sslwrap/ sslwrap] can be used instead, or [http://trac.edgewall.org/wiki/STunnelTracd stunnel -- a tutorial on how to use stunnel with tracd] or Apache with mod_proxy. == Usage examples == A single project on port 8080. (http://localhost:8080/) {{{ $ tracd -p 8080 /path/to/project }}} Stricly speaking this will make your Trac accessible to everybody from your network rather than ''localhost only''. To truly limit it use ''--hostname'' option. {{{ $ tracd --hostname=localhost -p 8080 /path/to/project }}} With more than one project. (http://localhost:8080/project1/ and http://localhost:8080/project2/) {{{ $ tracd -p 8080 /path/to/project1 /path/to/project2 }}} You can't have the last portion of the path identical between the projects since Trac uses that name to keep the URLs of the different projects unique. So if you use `/project1/path/to` and `/project2/path/to`, you will only see the second project. An alternative way to serve multiple projects is to specify a parent directory in which each subdirectory is a Trac project, using the `-e` option. The example above could be rewritten: {{{ $ tracd -p 8080 -e /path/to }}} To exit the server on Windows, be sure to use {{{CTRL-BREAK}}} -- using {{{CTRL-C}}} will leave a Python process running in the background. == Installing as a Windows Service == To install as a Windows service, get the [http://www.google.com/search?q=srvany.exe SRVANY] utility and run: {{{ C:\path\to\instsrv.exe tracd C:\path\to\srvany.exe reg add HKLM\SYSTEM\CurrentControlSet\Services\tracd\Parameters /v Application /d "\"C:\path\to\python.exe\" \"C:\path\to\python\scripts\tracd-script.py\" " net start tracd }}} '''DO NOT''' use {{{tracd.exe}}}. Instead register {{{python.exe}}} directly with {{{tracd-script.py}}} as a parameter. If you use {{{tracd.exe}}}, it will spawn the python process without SRVANY's knowledge. This python process will survive a {{{net stop tracd}}}. If you want tracd to start automatically when you boot Windows, do: {{{ sc config tracd start= auto }}} The spacing here is important. == Using Authentication == Using tracd with Apache .htpasswd files: To create a .htpasswd file using htpasswd: {{{ sudo htpasswd -c /path/to/env/.htpasswd username }}} then for additional users: {{{ sudo htpasswd /path/to/env/.htpasswd username2 }}} then for starting the tracd: {{{ tracd -p 8080 --basic-auth=environmentname,/fullpath/environmentname/.htpasswd,/fullpath/environmentname /fullpath/environmentname }}} Tracd provides support for both Basic and Digest authentication. The default is to use Digest; to use Basic authentication, replace `--auth` with `--basic-auth` in the examples below. (You must still specify a dialogic "realm", which can be an empty string by trailing the BASICAUTH with a comma.) ''Support for Basic authentication was added in version 0.9.'' The general format for using authentication is: {{{ $ tracd -p port --auth=base_project_dir,password_file_path,realm project_path }}} where: * '''base_project_dir''' is the base directory of the project; note: this doesn't refer to the project name, and it is case-sensitive even for windows environments * '''password_file_path''' path of the password file * '''realm''' realm * '''project_path''' path of the project Example: {{{ $ tracd -p 8080 \ --auth=project1,/path/to/users.htdigest,mycompany.com /path/to/project1 }}} Of course, the digest file can be be shared so that it is used for more than one project: {{{ $ tracd -p 8080 \ --auth=project1,/path/to/users.htdigest,mycompany.com \ --auth=project2,/path/to/users.htdigest,mycompany.com \ /path/to/project1 /path/to/project2 }}} Another way to share the digest file is to specify "*" for the project name: {{{ $ tracd -p 8080 \ --auth="*",/path/to/users.htdigest,mycompany.com \ /path/to/project1 /path/to/project2 }}} If using the `-s` parameter for serving a Trac environment from the root of a domain, one must use `*` for the project name == How to set up an htdigest password file == If you have Apache available, you can use the htdigest command to generate the password file. Type 'htdigest' to get some usage instructions, or read [http://httpd.apache.org/docs/2.0/programs/htdigest.html this page] from the Apache manual to get precise instructions. You'll be prompted for a password to enter for each user that you create. For the name of the password file, you can use whatever you like, but if you use something like `users.htdigest` it will remind you what the file contains. As a suggestion, put it in your /conf folder along with the [TracIni trac.ini] file. Note that you can start tracd without the --auth argument, but if you click on the ''Login'' link you will get an error. == Generating Passwords Without Apache == If you don't have Apache available, you can use this simple Python script to generate your passwords: {{{ #!python from optparse import OptionParser # The md5 module is deprecated in Python 2.5 try: from hashlib import md5 except ImportError: from md5 import md5 realm = 'trac' # build the options usage = "usage: %prog [options]" parser = OptionParser(usage=usage) parser.add_option("-u", "--username",action="store", dest="username", type = "string", help="the username for whom to generate a password") parser.add_option("-p", "--password",action="store", dest="password", type = "string", help="the password to use") parser.add_option("-r", "--realm",action="store", dest="realm", type = "string", help="the realm in which to create the digest") (options, args) = parser.parse_args() # check options if (options.username is None) or (options.password is None): parser.error("You must supply both the username and password") if (options.realm is not None): realm = options.realm # Generate the string to enter into the htdigest file kd = lambda x: md5(':'.join(x)).hexdigest() print ':'.join((options.username, realm, kd([options.username, realm, options.password]))) }}} Note: If you use the above script you must use the --auth option to tracd, not --basic-auth, and you must set the realm in the --auth value to 'trac' (without the quotes). Example usage (assuming you saved the script as trac-digest.py): {{{ python trac-digest.py -u username -p password >> c:\digest.txt tracd --port 8000 --auth=proj_name,c:\digest.txt,trac c:\path\to\proj_name }}} Note: If you would like to use --basic-auth you need to use htpasswd tool from apache server to generate .htpasswd file. The remaining part is similar but make sure to use empty realm (i.e. coma after path). When using on Windows make sure to use -m option for it (did not tested it on *nix, so not sure if that is the case there). If you do not have Apache, [trac:source:/tags/trac-0.11b2/contrib/htpasswd.py htpasswd.py] may help. (Note that it requires a `crypt` or `fcrypt` module; see the source comments for details.) It is possible to use md5sum utility to generate digest-password file using such method: {{{ $ printf "${user}:trac:${password}" | md5sum - >>user.htdigest }}} and manually delete " -" from the end and add "${user}:trac:" to the start of line from 'to-file'. == Tips == === Serving static content === If `tracd` is the only webserver used for the project, it can also be used to distribute static content (tarballs, Doxygen documentation, etc.) This static content should be put in the `$TRAC_ENV/htdocs` folder, and is accessed by URLs like `/chrome/site/...`. Example: given a `$TRAC_ENV/htdocs/software-0.1.tar.gz` file, the corresponding relative URL would be `//chrome/site/software-0.1.tar.gz`, which in turn can be written using the relative link syntax in the Wiki: `[//chrome/site/software-0.1.tar.gz]` The development version of Trac supports a new `htdocs:` TracLinks syntax for the above. With this, the example link above can be written simply `htdocs:software-0.1.tar.gz`. === Using apache rewrite rules === In some situations when you choose to use tracd behind apache, you might experience issues with redirects, like being redirected to URLs with the wrong host or protocol. In this case (and only in this case), setting the `[trac] use_base_url_for_redirect` to `true` can help, as this will force Trac to use the value of `[trac] base_url` for doing the redirects. === Serving a different base path than / === Tracd supports serving projects with different base urls than /. The parameter name to change this is {{{ $ tracd --base-path=/some/path }}} ---- See also: TracInstall, TracCgi, TracModPython, TracGuide, [trac:TracOnWindowsStandalone?version=13#RunningTracdasservice Running tracd.exe as a Windows service] ted in the other environment. {{{ : }}} The other resource is specified using 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 some 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]`, `[trac 1508]`, ...) == Examples == It is necessary to setup a configuration for the InterTrac facility. This configuration has to be done in the TracIni file, `[intertrac]` section. Example configuration: {{{ ... [intertrac] # -- Example of setting up an alias: t = trac # -- Link to an external Trac: trac.title = Edgewall's Trac for Trac trac.url = http://trac.edgewall.org }}} The `.url` is mandatory and is used for locating the other Trac. This can be a relative URL in case that Trac environment is located on the same server. The `.title` information will be used for providing an useful tooltip when moving the cursor over an InterTrac links. Finally, the `.compat` option can be used to activate or disable a ''compatibility'' mode: * If the targeted Trac is running a version below [trac:milestone:0.10 0.10] ([trac:r3526 r3526] to be precise), then it doesn't know how to dispatch an InterTrac link, and it's up to the local Trac to prepare the correct link. Not all links will work that way, but the most common do. This is called the compatibility mode, and is `true` by default. * If you know that the remote Trac knows how to dispatch InterTrac links, you can explicitly disable this compatibility mode and then ''any'' TracLinks can become an InterTrac link. Now, given the above configuration, one could create the following links: * to this InterTrac page: * `trac:wiki:InterTrac` trac:wiki:InterTrac * `t:wiki:InterTrac` t:wiki:InterTrac * Keys are case insensitive: `T:wiki:InterTrac` T:wiki:InterTrac * to the ticket #234: * `trac:ticket:234` trac:ticket:234 * `trac:#234` trac:#234 * `#T234` #T234 * to the changeset [1912]: * `trac:changeset:1912` trac:changeset:1912 * `[T1912]` [T1912] * to the log range [3300:3330]: '''(Note: the following ones need `trac.compat=false`)''' * `trac:log:@3300:3330` trac:log:@3300:3330 * `[trac 3300:3330]` [trac 3300:3330] * finally, to link to the start page of a remote trac, simply use its prefix followed by ':', inside an explicit link. Example: `[th: Trac Hacks]` (''since 0.11; note that the ''remote'' Trac has to run 0.11 for this to work'') The generic form `intertrac_prefix:module:id` is translated to the corresponding URL `/module/id`, shorthand links are specific to some modules (e.g. !#T234 is processed by the ticket module) and for the rest (`intertrac_prefix:something`), we rely on the TracSearch#quickjump facility of the remote Trac. ---- See also: TracLinks, InterWiki ==|! /+TracAccessibilityJs%trac127.0.0.1= Accessibility Support in Trac = Not every user has a graphic environment with a ) InterTracJs%trac127.0.0.1= InterTrac Links = Trac supports a convenient way to refer to resources of other Trac servers, from within the Wiki markup, since version 0.10. == Definitions == An InterTrac link can be seen as a scoped TracLinks. It is used for referring to a Trac resource (Wiki page, changeset, ticket, ...) located in another Trac environment. == List of Active InterTrac Prefixes == [[InterTrac]] == Link Syntax == Simply use the name of the other Trac environment as a prefix, followed by a colon, ending with the resource locamouse or other pointing device. Some users rely on keyboard, alternative keyboard or voice input to navigate links, activate form controls, etc. In Trac, we work to assure users may interact with devices other than a pointing device. Trac supports accessibility keys for the most common operations. On Windows and Linux platforms, press any of the keys listed below in combination with the `` key; on a Mac, use the `` key instead. ''Note that when using Internet Explorer on Windows, you need to hit `` after having used the access key.''[[BR]] ''Note that when using Firefox 2.0 on Windows, you need to hit ` + + `.'' == Global Access Keys == * `1` - WikiStart * `2` - [wiki:TracTimeline Timeline] * `3` - [wiki:TracRoadmap Roadmap] * `4` - [wiki:TracSearch Search] * `6` - [wiki:TracGuide Trac Guide / Documentation] * `7` - [wiki:TracTickets New Ticket] * `9` - [../about About Trac] * `0` - This page * `e` - Edit this page * `f` - Search ---- See also: TracGuided it at the [http://docutils.sourceforge.net/rst.html RST Website]. Install docutils using `easy_install docutils`. Do not use the package manager of your OS (e.g. `apt-get install python-docutils`), because Trac will not find docutils then. === More information on RST === * reStructuredText Website -- http://docutils.sourceforge.net/rst.html * RST Quick Reference -- http://docutils.sourceforge.net/docs/rst/quickref.html ---- == Using RST in Trac == To specify that a block of text should be parsed using RST, use the ''rst'' processor. === TracLinks in reStructuredText === * Trac provides a custom RST directive `trac::` to allow TracLinks from within RST text. Example: {{{ {{{ #!rst This is a reference to |a ticket| .. |a ticket| trac:: #42 }}} }}} * Trac allows an even easier way of creating TracLinks in RST, using the custom `:trac:` role. Example: {{{ {{{ #!rst This is a reference to ticket `#12`:trac: To learn how to use Trac, see `TracGuide`:trac: }}} }}} For a complete example of all uses of the `:trac:` role, please see WikiRestructuredTextLinks. === Syntax highlighting in reStructuredText === There is a directive for doing TracSyntaxColoring in RST as well. The directive is called code-block Example {{{ {{{ #!rst .. code-block:: python class Test: def TestFunction(self): pass }}} }}} Will result in the below. {{{ #!rst .. code-block:: python class Test: def TestFunction(self): pass }}} === Wiki Macros in reStructuredText === For doing [WikiMacros Wiki Macros] in RST you use the same directive as for syntax highlighting i.e code-block. To work you must use a version of trac that has [trac:ticket:801 #801] applied. === Wiki Macro Example === {{{ {{{ #!rst .. code-block:: RecentChanges Trac,3 }}} }}} Will result in the below: [[RecentChanges(Trac,3)]] Or a more concise Wiki Macro like syntax is also available: {{{ {{{ #!rst :code-block:`RecentChanges:Trac,3` }}} }}} === Bigger RST Example === The example below should be mostly self-explanatory: {{{ #!html
{{{
#!rst
FooBar Header
=============
reStructuredText is **nice**. It has its own webpage_.

A table:

=====  =====  ======
   Inputs     Output
------------  ------
  A      B    A or B
=====  =====  ======
False  False  False
True   False  True
False  True   True
True   True   True
=====  =====  ======

RST TracLinks
-------------

See also ticket `#42`:trac:.

.. _webpage: http://docutils.sourceforge.net/rst.html
}}}
}}} Results in: {{{ #!rst FooBar Header ============= reStructuredText is **nice**. It has its own webpage_. A table: ===== ===== ====== Inputs Output ------------ ------ A B A or B ===== ===== ====== False False False True False True False True True True True True ===== ===== ====== RST TracLinks ------------- See also ticket `#42`:trac:. .. _webpage: http://docutils.sourceforge.net/rst.html }}} ---- See also: WikiRestructuredTextLinks, WikiProcessors, WikiFormatting r" 5WikiRestructuredTextJs%trac127.0.0.1= reStructuredText Support in Trac = Trac supports using ''reStructuredText'' (RST) as an alternative to wiki markup in any context WikiFormatting is used. From the reStucturedText webpage: "''reStructuredText is an easy-to-read, what-you-see-is-what-you-get plaintext markup syntax and parser system. It is useful for in-line program documentation (such as Python docstrings), for quickly creating simple web pages, and for standalone documents. reStructuredText is designed for extensibility for specific application domains. ''" === Requirements === Note that to activate RST support in Trac, the python docutils package must be installed. If not already available on your operating system, you can downloaand dynamic way. The code block after the first line separator in this page will be interpreted as a list of !InterWiki specifications: {{{ prefix URL [ # comment] }}} By using `$1`, `$2`, etc. within the URL, it is possible to create InterWiki links which support multiple arguments, e.g. Trac:ticket:40. The URL itself can be optionally followed by a comment, which will subsequently be used for decorating the links using that prefix. New !InterWiki links can be created by adding to that list, in real time. Note however that ''deletions'' are also taken into account immediately, so it may be better to use comments for disabling prefixes. Also note that !InterWiki prefixes are case insensitive. == List of Active Prefixes == [[InterWiki]] ---- == Prefix Definitions == {{{ PEP http://www.python.org/peps/pep-$1.html # Python Enhancement Proposal PythonBug http://bugs.python.org/issue$1 # Python Issue #$1 Trac-ML http://thread.gmane.org/gmane.comp.version-control.subversion.trac.general/ # Message $1 in Trac Mailing List trac-dev http://thread.gmane.org/gmane.comp.version-control.subversion.trac.devel/ # Message $1 in Trac Development Mailing List Mercurial http://www.selenic.com/mercurial/wiki/index.cgi/ # the wiki for the Mercurial distributed SCM RFC http://tools.ietf.org/html/rfc$1 # IETF's RFC $1 ISO http://en.wikipedia.org/wiki/ISO_ # ISO Standard $1 in Wikipedia CheeseShop http://cheeseshop.python.org/pypi/ # Python Package $1 from the Cheese Shop SQLite http://www.sqlite.org/cvstrac/wiki?p= mysql-bugs http://bugs.mysql.com/bug.php?id= # Bug #$1 in MySQL's bug database peak http://peak.telecommunity.com/DevCenter/ # $1 in Python Enterprise Application Kit's Wiki MODPYTHON http://issues.apache.org/jira/browse/MODPYTHON- # Issue $1 in mod_python's JIRA instance SvnWiki http://www.orcaware.com/svn/wiki/ # Subversion Wiki # # A arbitrary pick of InterWiki prefixes... # Acronym http://www.acronymfinder.com/af-query.asp?String=exact&Acronym= C2find http://c2.com/cgi/wiki?FindPage&value= Cache http://www.google.com/search?q=cache: CPAN http://search.cpan.org/perldoc? DebianBug http://bugs.debian.org/ DebianPackage http://packages.debian.org/ Dictionary http://www.dict.org/bin/Dict?Database=*&Form=Dict1&Strategy=*&Query= Google http://www.google.com/search?q= GoogleGroups http://groups.google.com/group/$1/msg/$2 # Message $2 in $1 Google Group JargonFile http://downlode.org/perl/jargon-redirect.cgi?term= MeatBall http://www.usemod.com/cgi-bin/mb.pl? MetaWiki http://sunir.org/apps/meta.pl? MetaWikiPedia http://meta.wikipedia.org/wiki/ MoinMoin http://moinmoin.wikiwikiweb.de/ WhoIs http://www.whois.sc/ Why http://clublet.com/c/c/why? c2Wiki http://c2.com/cgi/wiki? WikiPedia http://en.wikipedia.org/wiki/ }}} H# #OInterMapTxtJs%trac127.0.0.1= InterMapTxt = == This is the place for defining InterWiki prefixes == This page was modelled after the MeatBall:InterMapTxt page. In addition, an optional comment is allowed after the mapping. This page is interpreted in a special way by Trac, in order to support !InterWiki links in a flexible e, such as being able to directly access the HTTP request. === Example === A list of 3 most recently changed wiki pages starting with 'Trac': {{{ [[RecentChanges(Trac,3)]] }}} Display: [[RecentChanges(Trac,3)]] == Available Macros == ''Note that the following list will only contain the macro documentation if you've not enabled `-OO` optimizations, or not set the `PythonOptimize` option for [wiki:TracModPython mod_python].'' [[MacroList]] == Macros from around the world == The [http://trac-hacks.org/ Trac Hacks] site provides a wide collection of macros and other Trac [TracPlugins plugins] contributed by the Trac community. If you're looking for new macros, or have written one that you'd like to share with the world, please don't hesitate to visit that site. == Developing Custom Macros == Macros, like Trac itself, are written in the [http://python.org/ Python programming language]. For more information about developing macros, see the [trac:TracDev development resources] on the main project site. == Implementation == Here are 2 simple examples showing how to create a Macro with Trac 0.11. Also, have a look at [trac:source:tags/trac-0.11/sample-plugins/Timestamp.py Timestamp.py] for an example that shows the difference between old style and new style macros and at the [trac:source:tags/trac-0.11/wiki-macros/README macros/README] which provides a little more insight about the transition. === Macro without arguments === It should be saved as `TimeStamp.py` as Trac will use the module name as the Macro name {{{ #!python from datetime import datetime # Note: since Trac 0.11, datetime objects are used internally from genshi.builder import tag from trac.util.datefmt import format_datetime, utc from trac.wiki.macros import WikiMacroBase class TimeStampMacro(WikiMacroBase): """Inserts the current time (in seconds) into the wiki page.""" revision = "$Rev$" url = "$URL$" def expand_macro(self, formatter, name, args): t = datetime.now(utc) return tag.b(format_datetime(t, '%c')) }}} === Macro with arguments === It should be saved as `HelloWorld.py` (in the plugins/ directory) as Trac will use the module name as the Macro name {{{ #!python from trac.wiki.macros import WikiMacroBase class HelloWorldMacro(WikiMacroBase): """Simple HelloWorld macro. Note that the name of the class is meaningful: - it must end with "Macro" - what comes before "Macro" ends up being the macro name The documentation of the class (i.e. what you're reading) will become the documentation of the macro, as shown by the !MacroList macro (usually used in the WikiMacros page). """ revision = "$Rev$" url = "$URL$" def expand_macro(self, formatter, name, args): """Return some output that will be displayed in the Wiki content. `name` is the actual name of the macro (no surprise, here it'll be `'HelloWorld'`), `args` is the text enclosed in parenthesis at the call of the macro. Note that if there are ''no'' parenthesis (like in, e.g. [[HelloWorld]]), then `args` is `None`. """ return 'Hello World, args = ' + unicode(args) # Note that there's no need to HTML escape the returned data, # as the template engine (Genshi) will do it for us. }}} === {{{expand_macro}}} details === {{{expand_macro}}} should return either a simple Python string which will be interpreted as HTML, or preferably a Markup object (use {{{from trac.util.html import Markup}}}). {{{Markup(string)}}} just annotates the string so the renderer will render the HTML string as-is with no escaping. You will also need to import Formatter using {{{from trac.wiki import Formatter}}}. If your macro creates wiki markup instead of HTML, you can convert it to HTML like this: {{{ #!python text = "whatever wiki markup you want, even containing other macros" # Convert Wiki markup to HTML, new style out = StringIO() Formatter(self.env, formatter.context).format(text, out) return Markup(out.getvalue()) }}} JAJ\% #wTracModWSGIJs%trac127.0.0.1= Trac and mod_wsgi = '''Important note:''' ''Please use either version 1.3 or 2.3 or later of `mod_wsgi`. Version 2.0 has problems with downloading attachments (see [trac:ticket:7205 #7205]).'' [htt($ !WikiMacrosJs%trac127.0.0.1= Trac Macros = [[PageOutline]] Trac macros are plugins to extend the Trac engine with custom 'functions' written in Python. A macro inserts dynamic HTML data in any context supporting WikiFormatting. Another kind of macros are WikiProcessors. They typically deal with alternate markup formats and representation of larger blocks of information (like source code highlighting). == Using Macros == Macro calls are enclosed in two ''square brackets''. Like Python functions, macros can also have arguments, a comma separated list within parentheses. Trac macros can also be written as TracPlugins. This gives them some capabilities that macros do not havp://code.google.com/p/modwsgi/ mod_wsgi] is an Apache module for running WSGI-compatible Python applications directly on top of Apache: The mod_wsgi adapter is an Apache module that provides a WSGI compliant interface for hosting Python based web applications within Apache. The adapter is written completely in C code against the Apache C runtime and for hosting WSGI applications within Apache provides significantly better performance than using existing WSGI adapters for mod_python or CGI. It is already possible to run Trac on top of mod_wsgi. This can be done by writing the following application script, which is just a Python file, though usually saved with a .wsgi extension). {{{ import os os.environ['TRAC_ENV'] = '/usr/local/trac/mysite' os.environ['PYTHON_EGG_CACHE'] = '/usr/local/trac/mysite/eggs' import trac.web.main application = trac.web.main.dispatch_request }}} The {{{TRAC_ENV}}} variable should naturally be the directory for your Trac environment (if you have several Trac environments in a directory, you can also use {{{TRAC_ENV_PARENT_DIR}}} instead), while the {{{PYTHON_EGG_CACHE}}} should be a directory where Python can temporarily extract Python eggs. [[BR]] For clarity, you should give this file a {{{.wsgi}}} extension. You should probably put the file in it's own directory, since you will open up its directory to Apache. You can create a .wsgi files which handles all this for you by running the TracAdmin command {{{deploy}}}. If you have installed trac and eggs in a path different from the standard one you should add that path by adding the following code on top of the wsgi script: {{{ import site site.addsitedir('/usr/local/trac/lib/python2.4/site-packages') }}} Change it according to the path you installed the trac libs at. After you've done preparing your wsgi-script, add the following to your httpd.conf. {{{ WSGIScriptAlias /trac /usr/local/trac/mysite/apache/mysite.wsgi WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all }}} Here, the script is in a subdirectory of the Trac environment. In order to let Apache run the script, access to the directory in which the script resides is opened up to all of Apache. Additionally, the {{{WSGIApplicationGroup}}} directive ensures that Trac is always run in the first Python interpreter created by mod_wsgi; this is necessary because the Subversion Python bindings, which are used by Trac, don't always work in other subinterpreters and may cause requests to hang or cause Apache to crash as a result. After adding this configuration, restart Apache, and then it should work. To test the setup of Apache, mod_wsgi and Python itself (ie. without involving Trac and dependencies), this simple wsgi application can be used to make sure that requests gets served (use as only content in your .wsgi script): {{{ def application(environ, start_response): start_response('200 OK',[('Content-type','text/html')]) return ['Hello World!'] }}} See also the mod_wsgi [http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac installation instructions] for Trac. For troubleshooting tips, see the [TracModPython#Troubleshooting mod_python troubleshooting] section, as most Apache-related issues are quite similar, plus discussion of potential [http://code.google.com/p/modwsgi/wiki/ApplicationIssues application issues] when using mod_wsgi. == Trac with PostgreSQL == When using the mod_wsgi adapter with multiple Trac instances and PostgreSQL (or MySQL?) as a database back-end the server can get a lot of open database connections. (and thus PostgreSQL processes) A workable solution is to disabled connection pooling in Trac. This is done by setting poolable = False in trac.db.postgres_backend on the PostgreSQLConnection class. But it's not necessary to edit the source of trac, the following lines in trac.wsgi will also work: {{{ import trac.db.postgres_backend trac.db.postgres_backend.PostgreSQLConnection.poolable = False }}} Now Trac drops the connection after serving a page and the connection count on the database will be kept minimal. == Getting Trac to work nicely with SSPI and 'Require Group' == If like me you've set Trac up on Apache, Win32 and configured SSPI, but added a 'Require group' option to your apache configuration, then the SSPIOmitDomain option is probably not working. If its not working your usernames in trac are probably looking like 'DOMAIN\user' rather than 'user'. This WSGI script 'fixes' things, hope it helps: {{{ import os import trac.web.main os.environ['TRAC_ENV'] = '/usr/local/trac/mysite' os.environ['PYTHON_EGG_CACHE'] = '/usr/local/trac/mysite/eggs' def application(environ, start_response): if "\\" in environ['REMOTE_USER']: environ['REMOTE_USER'] = environ['REMOTE_USER'].split("\\", 1)[1] return trac.web.main.dispatch_request(environ, start_response) }}} ---- See also: TracGuide, TracInstall, [wiki:TracFastCgi FastCGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe] vercity.sourceforge.net/ SilverCity] * [http://pygments.pocoo.org/ Pygments] (but needs a plugin for 0.10, see [#AboutPygments below]) To activate syntax coloring, simply install either one (or more) of these packages. No additional configuration is required, however to modify the colors, have a look at `trac/htdocs/css/code.css`. If you don't know why trac isnt detecting an installed library, try turning on Trac logging. It actually appears that Trac is broken with SilverCity 0.9.6. Either use the current 0.9.7 or the older 0.9.5 http://trac.edgewall.org/wiki/TracFaq#why-is-my-css-code-not-being-highlighted-even-though-i-have-silvercity-installed When in use, Trac will automatically prioritize !SilverCity highlighting over Enscript if possible, (see note below). If neither package is available, Trac will display the data as plain text. '''Note:''' Enscript supports a greater number of languages, however !SilverCity is generally faster since it is a library and isn't executed in an external process. === About !SilverCity === !SilverCity uses the lexer from [http://www.scintilla.org/ Scintilla]. Scintilla supports more languages than !SilverCity implements. If you want to add a language to !SilverCity supported by Scintilla, it's not very difficult. See [http://trac.edgewall.org/wiki/SilverCityAddLanguage SilverCityAddLanguage] for some information how. === About Pygments === Starting with trac 0.11 [http://pygments.org/ pygments] will be the new default highlighter. It's a highlighting library implemented in pure python, very fast, easy to extend and [http://pygments.org/docs/ well documented]. While it does not support as many languages as Enscript or Scintilla the overall output quality is much better. To use pygments in trac 0.11 you just have to install pygments 0.6 or higher (pygments_default_style = colorful under [mimeviewer] options has to be added).If you want to use it in trac 0.10 too you have to install the [http://trac-hacks.org/wiki/TracPygmentsPlugin TracPygmentsPlugin] from trac hacks. If you encounter any bugs, please file tickets regarding Pygments in [http://dev.pocoo.org/projects/pygments/ the pygments trac]. It's very likely that the list below is outdated because the list of supported pygments lexers is growing weekly. Just have a look at the page of [http://pygments.org/docs/lexers/ supported lexers] on the pygments webpage. == Syntax Coloring Support == || || !SilverCity || Enscript || Pygments || || Ada || || X || || || Asm || || X || || || Apache Conf (htaccess)) || || || X || || * ASP || X || X || || || * C || X || X || X || || * C# || || X(2) || X || || * C++ || X || X || X || || * Java || X(4)|| X || X || || Awk || || X || || || Boo || || || X || || CSS || X || || X || || Python Doctests || || || X || || Diff || || X || X || || Eiffel || || X || || || Elisp || || X || || || Fortran || || X(3) || || || Haskell || || X || X || || Genshi || || || X || || HTML || X || X || X || || IDL || || X || || || INI || || || X || || Javascript || X || X || X || || Lua || || || X || || m4 || || X || || || Makefile || || X || X || || Mako || || || X || || Matlab || || X (5) || || || Mygthy || || || X || || Objective-C|| || X || || || OCaml || || || X || || Pascal || || X || X || || * Perl || X || X || X || || * PHP || X || || X || || PSP || X || || || || Pyrex || || X || || || * Python || X || X || X || || * Ruby || X || X (1) || X || || Scheme || || X || X || || Shell || || X || X || || Smarty || || || X || || SQL || X || X || X || || Troff || || X || X || || TCL || || X || || || Tex || || X || X || || Verilog || X(4) || X || || || VHDL || || X || || || Visual Basic |||| X || X || || VRML || || X || || || XML || X || || X || ''(*) Supported as inline code blocks in [wiki:WikiFormatting Wiki text] using WikiProcessors.'' ''(1) Ruby highlighting is not included in the Enscript distribution. Highlighting rules for Ruby can be obtained from: http://neugierig.org/software/ruby/ ''(2) C# highlighting is not included in the Enscript distribution. Highlighting rules for C# can be obtained from: http://wiki.hasno.info/index.php/Csharp.st ''(3) Fortran: as packaged, Enscript only supports the fixed source form. Highlighting rules for Fortran 90x/2003 can be obtained from: http://wiki.hasno.info/index.php/F90.st ''(4) since Silvercity 0.9.7 released on 2006-11-23 ''(5) By default `.m` files are considered Objective-C files. In order to treat `.m` files as MATLAB files, add "text/x-matlab:m" to the "mime_map" setting in the [wiki:TracIni#mimeviewer-section "[mimeviewer] section of trac.ini"]. == Extra Software == * GNU Enscript -- http://directory.fsf.org/GNU/enscript.html * GNU Enscript for Windows -- http://gnuwin32.sourceforge.net/packages/enscript.htm * !SilverCity -- http://silvercity.sf.net/ * Pygments -- http://pygments.org/ ---- See also: WikiProcessors, WikiFormatting, TracWiki, TracBrowser e& 1{TracSyntaxColoringJs%trac127.0.0.1= Syntax Coloring of Source Code = Trac supports language-specific syntax highlighting of source code in [wiki:WikiFormatting wiki formatted] text and the [wiki:TracBrowser repository browser]. To do this, Trac uses external libraries with support for a great number of programming languages. Currently Trac supports syntax coloring using one or more of the following packages: * [http://www.codento.com/people/mtr/genscript/ GNU Enscript] * [http://sil. Current filters can be removed by clicking the button to the right with the minus sign on the label. New filters are added from the pulldown list in the bottom-right corner of the filters box. Filters with either a text box or a pulldown menu of options can be added multiple times to perform an ''or'' of the criteria. You can use the fields just below the filters box to group the results based on a field, or display the full description for each ticket. Once you've edited your filters click the ''Update'' button to refresh your results. == Navigating Tickets == Clicking on one of the query results will take you to that ticket. You can navigate through the results by clicking the ''Next Ticket'' or ''Previous Ticket'' links just below the main menu bar, or click the ''Back to Query'' link to return to the query page. You can safely edit any of the tickets and continue to navigate through the results using the ''Next/Previous/Back to Query'' links after saving your results. When you return to the query ''any tickets which were edited'' will be displayed with italicized text. If one of the tickets was edited such that [[html(it no longer matches the query criteria )]] the text will also be greyed. Lastly, if '''a new ticket matching the query criteria has been created''', it will be shown in bold. The query results can be refreshed and cleared of these status indicators by clicking the ''Update'' button again. == Saving Queries == While Trac does not yet allow saving a named query and somehow making it available in a navigable list, you can save references to queries in Wiki content, as described below. === Using TracLinks === You may want to save some queries so that you can come back to them later. You can do this by making a link to the query from any Wiki page. {{{ [query:status=new|assigned|reopened&version=1.0 Active tickets against 1.0] }}} Which is displayed as: [query:status=new|assigned|reopened&version=1.0 Active tickets against 1.0] This uses a very simple query language to specify the criteria (see [wiki:TracQuery#QueryLanguage Query Language]). Alternatively, you can copy the query string of a query and paste that into the Wiki link, including the leading `?` character: {{{ [query:?status=new&status=assigned&status=reopened&group=owner Assigned tickets by owner] }}} Which is displayed as: [query:?status=new&status=assigned&status=reopened&group=owner Assigned tickets by owner] === Using the `[[TicketQuery]]` Macro === The [trac:TicketQuery TicketQuery] macro lets you display lists of tickets matching certain criteria anywhere you can use WikiFormatting. Example: {{{ [[TicketQuery(version=0.6|0.7&resolution=duplicate)]] }}} This is displayed as: [[TicketQuery(version=0.6|0.7&resolution=duplicate)]] Just like the [wiki:TracQuery#UsingTracLinks query: wiki links], the parameter of this macro expects a query string formatted according to the rules of the simple [wiki:TracQuery#QueryLanguage ticket query language]. A more compact representation without the ticket summaries is also available: {{{ [[TicketQuery(version=0.6|0.7&resolution=duplicate, compact)]] }}} This is displayed as: [[TicketQuery(version=0.6|0.7&resolution=duplicate, compact)]] Finally if you wish to receive only the number of defects that match the query using the ``count`` parameter. {{{ [[TicketQuery(version=0.6|0.7&resolution=duplicate, count)]] }}} This is displayed as: [[TicketQuery(version=0.6|0.7&resolution=duplicate, count)]] === Customizing the ''table'' format === You can also customize the columns displayed in the table format (''format=table'') by using ''col='' - you can specify multiple fields and what order they are displayed by placing pipes (`|`) between the columns like below: {{{ [[TicketQuery(max=3,status=closed,order=id,desc=1,format=table,col=resolution|summary|owner|reporter)]] }}} This is displayed as: [[TicketQuery(max=3,status=closed,order=id,desc=1,format=table,col=resolution|summary|owner|reporter)]] === Query Language === `query:` TracLinks and the `[[TicketQuery]]` macro both use a mini “query language” for specifying query filters. Basically, the filters are separated by ampersands (`&`). Each filter then consists of the ticket field name, an operator, and one or more values. More than one value are separated by a pipe (`|`), meaning that the filter matches any of the values. The available operators are: || '''`=`''' || the field content exactly matches the one of the values || || '''`~=`''' || the field content contains one or more of the values || || '''`^=`''' || the field content starts with one of the values || || '''`$=`''' || the field content ends with one of the values || All of these operators can also be negated: || '''`!=`''' || the field content matches none of the values || || '''`!~=`''' || the field content does not contain any of the values || || '''`!^=`''' || the field content does not start with any of the values || || '''`!$=`''' || the field content does not end with any of the values || Since 0.12, the date fields `created` and `modified` can be constrained by using the `=` operator and specifying a value containing two dates separated by a semicolon (`;`). Either end of the date range can be left empty, meaning that the corresponding end of the range is open. The date parser understands a few natural date specifications like "3 weeks ago", "last month" and "now", as well as Bugzilla-style date specifications like "1d", "2w", "3m" or "4y" for 1 day, 2 weeks, 3 months and 4 years, respectively. Spaces in date specifications can be left out to avoid having to quote the query string. || '''`created=2007-01-01;2008-01-01`''' || query tickets created in 2007 || || '''`created=lastmonth;thismonth`''' || query tickets created during the previous month || || '''`modified=1weekago;`''' || query tickets that have been modified in the last week || || '''`modified=;30daysago`''' || query tickets that have been inactive for the last 30 days || ---- See also: TracTickets, TracReports, TracGuide M( ]TracGuideJs%trac127.0.0.1= The Trac User and Administration Guide = [[TracGuideToc]] The TracGuide is meant to serve as a starting point for all documentation regarding Trac usage and development. The' oTracQueryJs%trac127.0.0.1= Trac Ticket Queries = [[TracGuideToc]] In addition to [wiki:TracReports reports], Trac provides support for ''custom ticket queries'', used to display lists of tickets meeting a specified set of criteria. To configure and execute a custom query, switch to the ''View Tickets'' module from the navigation bar, and select the ''Custom Query'' link. == Filters == When you first go to the query page the default filters will display all open tickets, or if you're logged in it will display open tickets assigned to you guide is a free document, a collaborative effort, and a part of the [http://trac.edgewall.org Trac Project] itself. == Table of Contents == Currently available documentation: * TracGuide (This page) -- Documentation starting point. * '''Administrator Guide''' * TracInstall -- How to install and run Trac. * TracUpgrade -- How to upgrade existing installations. * TracAdmin -- Administering a Trac project. * TracImport -- Importing tickets from other bug databases. * TracIni -- Trac configuration file reference. * TracPermissions -- Access control and permissions. * TracInterfaceCustomization -- Customizing the Trac interface. * TracPlugins -- Installing and managing Trac extensions. * TracLogging -- The Trac logging facility. * TracNotification -- Email notification. * TracWorkflow -- Configurable Ticket Workflow. * '''User Guide''' * TracWiki -- How to use the built-in Wiki. * TracTimeline -- The timeline provides a historic perspective on a project. * TracRss -- RSS content syndication in Trac. * ''The Version Control Subsystem'' * TracBrowser -- Browsing source code with Trac. * TracChangeset -- Viewing changes to source code. * TracRevisionLog -- Viewing change history. * ''The Ticket Subsystem'' * TracTickets -- Using the issue tracker. * TracReports -- Writing and using reports. * TracQuery -- Executing custom ticket queries. * TracRoadmap -- The roadmap helps tracking project progress. * [trac:TracFaq Trac FAQ] - A collection of Frequently Asked Questions (on the project website). == Support and Other Sources of Information == If you are looking for a good place to ask a question about Trac, look no further than the [http://trac.edgewall.org/wiki/MailingList MailingList]. It provides a friendly environment to discuss openly among Trac users and developers. See also the TracSupport page for more information resources. Finally, developer documentation can be found in [trac:TracDev TracDev] and its sub-pages. le/sample-plugins/permissions/authz_policy.py authz_policy.py] for details (current version requires >= Python 2.4). (See also [trac:source:branches/0.11-stable/sample-plugins/permissions sample-plugins/permissions] for more samples.) - Install [http://www.voidspace.org.uk/python/configobj.html ConfigObj] (required). - Copy authz_policy.py into your plugins directory. - Put a [http://swapoff.org/files/authzpolicy.conf authzpolicy.conf] file somewhere (preferably on a secured location on the server, not readable for others than the webuser. - Update your `trac.ini`: {{{ [trac] ... permission_policies = AuthzPolicy, DefaultPermissionPolicy, LegacyAttachmentPolicy [authz_policy] authz_file = /some/trac/env/conf/authzpolicy.conf [components] ... authz_policy = enabled }}} Note that the order in which permission policies are specified is quite critical, as policies will be examined in the sequence provided. A policy will return either `True`, `False` or `None` for a given permission check. Only if the return value is `None` will the ''next'' permission policy be consulted. If no policy explicitly grants the permission, the final result will be `False` (i.e. no permission). For example, if the `authz_file` contains: {{{ [wiki:WikiStart@*] * = WIKI_VIEW [wiki:PrivatePage@*] john = WIKI_VIEW * = }}} and the default permissions are set like this: {{{ john WIKI_VIEW jack WIKI_VIEW # anonymous has no WIKI_VIEW }}} Then: - All versions of WikiStart will be viewable by everybody (including anonymous) - !PrivatePage will be viewable only by john - other pages will be viewable only by john and jack === mod_authz_svn-like permission policy === At the time of this writing, the old fine grained permissions system from Trac 0.10 and before used for restricting access to the repository has not yet been converted to a permission policy component, but from the user point of view, this makes little if no difference. That kind of fine-grained permission control needs a definition file, w hich is the one used by Subversion's mod_authz_svn. More information about this file format and about its usage in Subversion is available in the [http://svnbook.red-bean.com/svnbook/book.html#svn-ch-6-sect-4.4.2 Subversion Book (Per-Directory Access Control)]. Example: {{{ [/] * = r [/branches/calc/bug-142] harry = rw sally = r [/branches/calc/bug-142/secret] harry = }}} * '''/''' = ''Everyone has read access by default'' * '''/branches/calc/bug-142''' = ''harry has read/write access, sally read only'' * '''/branches/calc/bug-142/secret''' = ''harry has no access, sally has read access (inherited as a sub folder permission)'' ==== Trac Configuration ==== To activate fine grained permissions you __must__ specify the {{{authz_file}}} option in the {{{[trac]}}} section of trac.ini. If this option is set to null or not specified the permissions will not be used. {{{ [trac] authz_file = /path/to/svnaccessfile }}} if you want to support the use of the `[`''modulename''`:/`''some''`/`''path''`]` syntax within the `authz_file`, add {{{ authz_module_name = modulename }}} where ''modulename'' refers to the same repository indicated by the `repository_dir` entry in the `[trac]` section. '''Note:''' Usernames inside the Authz file __must__ be the same as those used inside trac. ==== Subversion Configuration ==== The same access file is typically applied to the corresponding Subversion repository using an Apache directive like this: {{{ DAV svn SVNParentPath /usr/local/svn # our access control policy AuthzSVNAccessFile /path/to/svnaccessfile }}} For information about how to restrict access to entire projects in a multiple project environment see [trac:wiki:TracMultipleProjectsSVNAccess] == Getting TracFineGrainedPermissions to work == Don't forget to restart Trac engine to apply new configuration if you are running tracd standalone server. ---- See also: TracPermissions http://trac-hacks.org/wiki/FineGrainedPageAuthzEditorPlugin for a simple editor plugin. %) AkTracFineGrainedPermissionsJs%trac127.0.0.1= Fine grained permissions = Before Trac 0.11, it was only possible to define fine-grained permissions checks on the repository browser sub-system. Since 0.11, there's a general mechanism in place that allows custom permission policy plugins to grant or deny any action on any kind of Trac resources, even at the level of specific versions of such resources. == Permission Policies == === !AuthzPolicy === An example policy based on an Authz-style system has been added. See [trac:source:branches/0.11-stab fault//tags/trac-0.9.3/wiki-default` or :trac:`diff:trunk/trac@3538//sandbox/vc-refactoring/trac@3539` * Wiki pages: :trac:`CamelCase` or :trac:`wiki:CamelCase` * Milestones: :trac:`milestone:1.0` * Attachment: :trac:`attachment:ticket:944:attachment.1073.diff` * Files: :trac:`source:trunk/COPYING` * A specific file revision: :trac:`source:/trunk/COPYING@200` * A particular line of a specific file revision: :trac:`source:/trunk/COPYING@200#L25` An explicit label can be specified, separated from the link by a space: * See :trac:`#1 ticket 1` and the :trac:`source:trunk/COPYING license`. }}} }}} Provided you have docutils installed, the above block will render as: ---- {{{ #!rst Examples: * Tickets: :trac:`#1` or :trac:`ticket:1` * Ticket comments: :trac:`comment:ticket:1:2` * Reports: :trac:`{1}` or :trac:`report:1` * Changesets: :trac:`r1`, :trac:`[1]` or :trac:`changeset:1` * Revision log: :trac:`r1:3`, :trac:`[1:3]` or :trac:`log:@1:3`, :trac:`log:trunk@1:3` * Diffs (since version 0.10): :trac:`diff:@20:30`, :trac:`diff:tags/trac-0.9.2/wiki-default//tags/trac-0.9.3/wiki-default` or :trac:`diff:trunk/trac@3538//sandbox/vc-refactoring/trac@3539` * Wiki pages: :trac:`CamelCase` or :trac:`wiki:CamelCase` * Milestones: :trac:`milestone:1.0` * Attachment: :trac:`attachment:ticket:944:attachment.1073.diff` * Files: :trac:`source:trunk/COPYING` * A specific file revision: :trac:`source:/trunk/COPYING@200` * A particular line of a specific file revision: :trac:`source:/trunk/COPYING@200#L25` An explicit label can be specified, separated from the link by a space: * See :trac:`#1 ticket 1` and the :trac:`source:trunk/COPYING license`. }}} ---- Note also that any of the above could have been written using substitution references and the `trac::` directive: {{{ {{{ #!rst See |ticket123|. .. |ticket123| trac:: ticket:123 this ticket }}} }}} This renders as: ---- {{{ #!rst See |ticket123|. .. |ticket123| trac:: ticket:123 this ticket }}} ---- See also: WikiRestructuredText, TracLinks D* ?+WikiRestructuredTextLinksJs%trac127.0.0.1= TracLinks in reStructuredText = This document illustrates how to use the `:trac:` role in reStructuredText. The page is written like: {{{ {{{ #!rst Examples: * Tickets: :trac:`#1` or :trac:`ticket:1` * Ticket comments: :trac:`comment:ticket:1:2` * Reports: :trac:`{1}` or :trac:`report:1` * Changesets: :trac:`r1`, :trac:`[1]` or :trac:`changeset:1` * Revision log: :trac:`r1:3`, :trac:`[1:3]` or :trac:`log:@1:3`, :trac:`log:trunk@1:3` * Diffs (since version 0.10): :trac:`diff:@20:30`, :trac:`diff:tags/trac-0.9.2/wiki-de ptions === * '''text''': A simple (one line) text field. * label: Descriptive label. * value: Default value. * order: Sort order placement. (Determines relative placement in forms with respect to other custom fields.) * format: Either `plain` for plain text or `wiki` to interpret the content as WikiFormatting. (''since 0.11.3'') * '''checkbox''': A boolean value check box. * label: Descriptive label. * value: Default value (0 or 1). * order: Sort order placement. * '''select''': Drop-down select box. Uses a list of values. * label: Descriptive label. * options: List of values, separated by '''|''' (vertical pipe). * value: Default value (one of the values from options). * order: Sort order placement. * '''radio''': Radio buttons. Essentially the same as '''select'''. * label: Descriptive label. * options: List of values, separated by '''|''' (vertical pipe). * value: Default value (one of the values from options). * order: Sort order placement. * '''textarea''': Multi-line text area. * label: Descriptive label. * value: Default text. * cols: Width in columns. * rows: Height in lines. * order: Sort order placement. * format: Either `plain` for plain text or `wiki` to interpret the content as WikiFormatting. (''since 0.11.3'') === Sample Config === {{{ [ticket-custom] test_one = text test_one.label = Just a text box test_two = text test_two.label = Another text-box test_two.value = Default [mailto:joe@nospam.com owner] test_two.format = wiki test_three = checkbox test_three.label = Some checkbox test_three.value = 1 test_four = select test_four.label = My selectbox test_four.options = one|two|third option|four test_four.value = two test_five = radio test_five.label = Radio buttons are fun test_five.options = uno|dos|tres|cuatro|cinco test_five.value = dos test_six = textarea test_six.label = This is a large textarea test_six.value = Default text test_six.cols = 60 test_six.rows = 30 }}} ''Note: To make entering an option for a `select` type field optional, specify a leading `|` in the `fieldname.options` option.'' === Reports Involving Custom Fields === Custom ticket fields are stored in the `ticket_custom` table, not in the `ticket` table. So to display the values from custom fields in a report, you will need a join on the 2 tables. Let's use an example with a custom ticket field called `progress`. {{{ #!sql SELECT p.value AS __color__, id AS ticket, summary, owner, c.value AS progress FROM ticket t, enum p, ticket_custom c WHERE status IN ('assigned') AND t.id = c.ticket AND c.name = 'progress' AND p.name = t.priority AND p.type = 'priority' ORDER BY p.value }}} '''Note''' that this will only show tickets that have progress set in them, which is '''not the same as showing all tickets'''. If you created this custom ticket field ''after'' you have already created some tickets, they will not have that field defined, and thus they will never show up on this ticket query. If you go back and modify those tickets, the field will be defined, and they will appear in the query. If that's all you want, you're set. However, if you want to show all ticket entries (with progress defined and without), you need to use a `JOIN` for every custom field that is in the query. {{{ #!sql SELECT p.value AS __color__, id AS ticket, summary, component, version, milestone, severity, (CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner, time AS created, changetime AS _changetime, description AS _description, reporter AS _reporter, (CASE WHEN c.value = '0' THEN 'None' ELSE c.value END) AS progress FROM ticket t LEFT OUTER JOIN ticket_custom c ON (t.id = c.ticket AND c.name = 'progress') JOIN enum p ON p.name = t.priority AND p.type='priority' WHERE status IN ('new', 'assigned', 'reopened') ORDER BY p.value, milestone, severity, time }}} Note in particular the `LEFT OUTER JOIN` statement here. === Updating the database === As noted above, any tickets created before a custom field has been defined will not have a value for that field. Here's a bit of SQL (tested with SQLite) that you can run directly on the Trac database to set an initial value for custom ticket fields. Inserts the default value of 'None' into a custom field called 'request_source' for all tickets that have no existing value: {{{ #!sql INSERT INTO ticket_custom (ticket, name, value) SELECT id AS ticket, 'request_source' AS name, 'None' AS value FROM ticket WHERE id NOT IN ( SELECT ticket FROM ticket_custom ); }}} If you added multiple custom fields at different points in time, you should be more specific in the subquery on table {{{ticket}}} by adding the exact custom field name to the query: {{{ #!sql INSERT INTO ticket_custom (ticket, name, value) SELECT id AS ticket, 'request_source' AS name, 'None' AS value FROM ticket WHERE id NOT IN ( SELECT ticket FROM ticket_custom WHERE name = 'request_source' ); }}} ---- See also: TracTickets, TracIni D, #ETracFastCgiJs%trac127.0.0.1= Trac with FastCGI = Since version 0.9, Trac supports being run through the [http://www.fastcgi.com/ FastCGI] interface. Like [wiki:TracModPython mod_python], this allows Trac to remain resident, and is faster than external CGI interfaces which must start a new process for each request. However, unlike mod_python, it is able to support [http://httpd.ap3+ ; TracTicketsCustomFieldsJs%trac127.0.0.1= Custom Ticket Fields = Trac supports adding custom, user-defined fields to the ticket module. Using custom fields, you can add typed, site-specific properties to tickets. == Configuration == Configuring custom ticket fields is done in the [wiki:TracIni trac.ini] file. All field definitions should be under a section named `[ticket-custom]`. The syntax of each field definition is: {{{ FIELD_NAME = TYPE (FIELD_NAME.OPTION = VALUE) ... }}} The example below should help to explain the syntax. === Available Field Types and Oache.org/docs/suexec.html SuEXEC]. Additionally, it is supported by much wider variety of web servers. '''Note for Windows:''' Trac's FCGI does not run under Windows, as Windows does not implement `Socket.fromfd`, which is used by `_fcgi.py`. If you want to connect to IIS, your choice may be [trac:TracOnWindowsIisAjp AJP]. == Simple Apache configuration == There are two FastCGI modules commonly available for Apache: `mod_fastcgi` and `mod_fcgid`. The `FastCgiIpcDir` and `FastCgiConfig` directives discussed below are `mod_fastcgi` directives; the `DefaultInitEnv` is a `mod_fcgid` directive. For `mod_fastcgi`, add the following to an appropriate Apache configuration file: {{{ # Enable fastcgi for .fcgi files # (If you're using a distro package for mod_fcgi, something like # this is probably already present) AddHandler fastcgi-script .fcgi FastCgiIpcDir /var/lib/apache2/fastcgi LoadModule fastcgi_module /usr/lib/apache2/modules/mod_fastcgi.so }}} Setting `FastCgiIpcDir` is optional if the default is suitable. Note that the `LoadModule` line must be after the `IfModule` group. Configure `ScriptAlias` or similar options as described in TracCgi, but calling `trac.fcgi` instead of `trac.cgi`. You can set up the `TRAC_ENV` as an overall default: {{{ FastCgiConfig -initial-env TRAC_ENV=/path/to/env/trac }}} Or you can serve multiple Trac projects in a directory like: {{{ FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects }}} But neither of these will work for `mod_fcgid`. A similar but partial solution for `mod_fcgid` is: {{{ DefaultInitEnv TRAC_ENV /path/to/env/trac/ }}} But this cannot be used in `Directory` or `Location` context, which makes it difficult to support multiple projects. A better method which works for both of these modules (and for [http://www.lighttpd.net/ lighttpd] and CGI as well), because it involves no server configuration settings for environment variables, is to set one of the variables in `trac.fcgi`, e.g.: {{{ import os os.environ['TRAC_ENV'] = "/path/to/projectenv" }}} or {{{ import os os.environ['TRAC_ENV_PARENT_DIR'] = "/path/to/project/parent/dir" }}} Using this method, different projects can be supported by using different `.fcgi` scripts with different `ScriptAliases`, copying and appropriately renaming `trac.fcgi` and adding the above code to create each such script. See [https://coderanger.net/~coderanger/httpd/fcgi_example.conf this fcgid example config] which uses a !ScriptAlias directive with trac.fcgi with a trailing / like this: {{{ ScriptAlias / /srv/tracsite/cgi-bin/trac.fcgi/ }}} == Simple Cherokee Configuration == The configuration on Cherokee's side is quite simple. You will only need to know that you can spawn Trac as an SCGI process. You can either start it manually, or better yet, automatically by letting Cherokee spawn the server whenever it is down. First set up an information source in cherokee-admin with a local interpreter. {{{ Host: localhost:4433 Interpreter: /usr/bin/tracd —single-env —daemonize —protocol=scgi —hostname=localhost —port=4433 /path/to/project/ }}} If the port was not reachable, the interpreter command would be launched. Note that, in the definition of the information source, you will have to manually launch the spawner if you use a ''Remote host'' as ''Information source'' instead of a ''Local interpreter''. After doing this, we will just have to create a new rule managed by the SCGI handler to access Trac. It can be created in a new virtual server, trac.example.net for instance, and will only need two rules. The '''default''' one will use the SCGI handler associated to the previously created information source. The second rule will be there to serve the few static files needed to correctly display the Trac interface. Create it as ''Directory rule'' for ''/chrome/common'' and just set it to the ''Static files'' handler and with a ''Document root'' that points to the appropriate files: ''/usr/share/trac/htdocs/'' == Simple Lighttpd Configuration == The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.lighttpd.net/ lighttpd]. lighttpd is a secure, fast, compliant and very flexible web-server that has been optimized for high-performance environments. It has a very low memory footprint compared to other web servers and takes care of CPU load. For using `trac.fcgi`(prior to 0.11) / fcgi_frontend.py (0.11) with lighttpd add the following to your lighttpd.conf: {{{ #var.fcgi_binary="/path/to/fcgi_frontend.py" # 0.11 if installed with easy_setup, it is inside the egg directory var.fcgi_binary="/path/to/cgi-bin/trac.fcgi" # 0.10 name of prior fcgi executable fastcgi.server = ("/trac" => ("trac" => ("socket" => "/tmp/trac-fastcgi.sock", "bin-path" => fcgi_binary, "check-local" => "disable", "bin-environment" => ("TRAC_ENV" => "/path/to/projenv") )  ) ) }}} Note that you will need to add a new entry to `fastcgi.server` for each separate Trac instance that you wish to run. Alternatively, you may use the `TRAC_ENV_PARENT_DIR` variable instead of `TRAC_ENV` as described above, and you may set one of the two in `trac.fcgi` instead of in `lighttpd.conf` using `bin-environment` (as in the section above on Apache configuration). For using two projects with lighttpd add the following to your `lighttpd.conf`: {{{ fastcgi.server = ("/first" => ("first" => ("socket" => "/tmp/trac-fastcgi-first.sock", "bin-path" => fcgi_binary, "check-local" => "disable", "bin-environment" => ("TRAC_ENV" => "/path/to/projenv-first") ) ), "/second" => ("second" => ("socket" => "/tmp/trac-fastcgi-second.sock", "bin-path" => fcgi_binary, "check-local" => "disable", "bin-environment" => ("TRAC_ENV" => "/path/to/projenv-second") ) ) ) }}} Note that field values are different. If you prefer setting the environment variables in the `.fcgi` scripts, then copy/rename `trac.fcgi`, e.g., to `first.fcgi` and `second.fcgi`, and reference them in the above settings. Note that the above will result in different processes in any event, even if both are running from the same `trac.fcgi` script. {{{ #!div class=important '''Note''' It's very important the order on which server.modules are loaded, if mod_auth is not loaded '''BEFORE''' mod_fastcgi, then the server will fail to authenticate the user. }}} For authentication you should enable mod_auth in lighttpd.conf 'server.modules', select auth.backend and auth rules: {{{ server.modules = ( ... "mod_auth", ... ) auth.backend = "htpasswd" # Separated password files for each project # See "Conditional Configuration" in # http://trac.lighttpd.net/trac/file/branches/lighttpd-merge-1.4.x/doc/configuration.txt $HTTP["url"] =~ "^/first/" { auth.backend.htpasswd.userfile = "/path/to/projenv-first/htpasswd.htaccess" } $HTTP["url"] =~ "^/second/" { auth.backend.htpasswd.userfile = "/path/to/projenv-second/htpasswd.htaccess" } # Enable auth on trac URLs, see # http://trac.lighttpd.net/trac/file/branches/lighttpd-merge-1.4.x/doc/authentication.txt auth.require = ("/first/login" => ("method" => "basic", "realm" => "First project", "require" => "valid-user" ), "/second/login" => ("method" => "basic", "realm" => "Second project", "require" => "valid-user" ) ) }}} Note that lighttpd (I use version 1.4.3) stopped if password file doesn't exist. Note that lighttpd doesn't support 'valid-user' in versions prior to 1.3.16. Conditional configuration is also useful for mapping static resources, i.e. serving out images and CSS directly instead of through FastCGI: {{{ # Aliasing functionality is needed server.modules += ("mod_alias") # Setup an alias for the static resources alias.url = ("/trac/chrome/common" => "/usr/share/trac/htdocs") # Use negative lookahead, matching all requests that ask for any resource under /trac, EXCEPT in # /trac/chrome/common, and use FastCGI for those $HTTP["url"] =~ "^/trac(?!/chrome/common)" { # Even if you have other fastcgi.server declarations for applications other than Trac, do NOT use += here fastcgi.server = ("/trac" => ("trac" => ("socket" => "/tmp/trac-fastcgi.sock", "bin-path" => fcgi_binary, "check-local" => "disable", "bin-environment" => ("TRAC_ENV" => "/path/to/projenv") )  ) ) } }}} The technique can be easily adapted for use with multiple projects by creating aliases for each of them, and wrapping the fastcgi.server declarations inside conditional configuration blocks. Also there is another way to handle multiple projects and it's to use TRAC_ENV_PARENT_DIR instead of TRAC_ENV and use global auth, let's see an example: {{{ # This is for handling multiple projects alias.url = ( "/trac/" => "/path/to/trac/htdocs/" ) fastcgi.server += ("/projects" => ("trac" => ( "socket" => "/tmp/trac.sock", "bin-path" => fcgi_binary, "check-local" => "disable", "bin-environment" => ("TRAC_ENV_PARENT_DIR" => "/path/to/parent/dir/of/projects/" ) ) ) ) #And here starts the global auth configuration auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/path/to/unique/htpassword/file/trac.htpasswd" $HTTP["url"] =~ "^/projects/.*/login$" { auth.require = ("/" => ( "method" => "basic", "realm" => "trac", "require" => "valid-user" ) ) } }}} Changing date/time format also supported by lighttpd over environment variable LC_TIME {{{ fastcgi.server = ("/trac" => ("trac" => ("socket" => "/tmp/trac-fastcgi.sock", "bin-path" => fcgi_binary, "check-local" => "disable", "bin-environment" => ("TRAC_ENV" => "/path/to/projenv", "LC_TIME" => "ru_RU") ) ) ) }}} For details about languages specification see [trac:TracFaq TracFaq] question 2.13. Other important information like [ht tp://trac.lighttpd.net/trac/wiki/TracInstall this updated TracInstall page], [wiki:TracCgi#MappingStaticResources and this] are useful for non-fastcgi specific installation aspects. If you use trac-0.9, read [http://lists.edgewall.com/archive/trac/2005-November/005311.html about small bug] Relaunch lighttpd, and browse to `http://yourhost.example.org/trac` to access Trac. Note about running lighttpd with reduced permissions: If nothing else helps and trac.fcgi doesn't start with lighttpd settings __server.username = "www-data"__, __server.groupname = "www-data"__, then in the `bin-environment` section set `PYTHON_EGG_CACHE` to the home directory of `www-data` or some other directory accessible to this account for writing. == Simple !LiteSpeed Configuration == The FastCGI front-end was developed primarily for use with alternative webservers, such as [http://www.litespeedtech.com/ LiteSpeed]. !LiteSpeed web server is an event-driven asynchronous Apache replacement designed from the ground-up to be! secure, scalable, and operate with minimal resources. !LiteSpeed can operate directly from an Apache config file and is targeted for business-critical environments. Setup 1) Please make sure you have first have a working install of a Trac project. Test install with “tracd” first. 2) Create a Virtual Host for this setup. From now on we will refer to this vhost as TracVhost. For this tutorial we will be assuming that your trac project will be accessible via: {{{ http://yourdomain.com/trac/ }}} 3) Go “TracVhost → External Apps” tab and create a new “External Application”. {{{ Name: MyTracFCGI Address: uds://tmp/lshttpd/mytracfcgi.sock Max Connections: 10 Environment: TRAC_ENV=/fullpathto/mytracproject/ <--- path to root folder of trac project Initial Request Timeout (secs): 30 Retry Timeout (secs): 0 Persistent Connection Yes Connection Keepalive Timeout: 30 Response Bufferring: No Auto Start: Yes Command: /usr/share/trac/cgi-bin/trac.fcgi <--- path to trac.fcgi Back Log: 50 Instances": 10 }}} 4) Optional. If you need to use htpasswd based authentication. Go to “TracVhost → Security” tab and create a new security “Realm”. {{{ DB Type: Password File Realm Name: MyTracUserDB <--- any name you wish and referenced later User DB Location: /fullpathto/htpasswd <--- path to your htpasswd file }}} If you don’t have a htpasswd file or don’t know how to create the entries within one, go to http://sherylcanter.com/encrypt.php, to generate the user:password combos. 5) Go to “PythonVhost → Contexts” and create a new “FCGI Context”. {{{ URI: /trac/ <--- URI path to bind to python fcgi app we created Fast CGI App: [VHost Level] MyTractFCGI <--- select the trac fcgi extapp we just created Realm: TracUserDB <--- only if (4) is set. select realm created in (4) }}} 6) Modify /fullpathto/mytracproject/conf/trac.ini {{{ #find/set base_rul, url, and link variables base_url = http://yourdomain.com/trac/ <--- ba#se url to generate correct links to url = http://yourdomain.com/trac/ <--- link of project link = http://yourdomain.com/trac/ <--- link of graphic logo }}} 7) Restart !LiteSpeed, “lswsctrl restart”, and access your new Trac project at: {{{ http://yourdomain.com/trac/ }}} === Simple Nginx Configuration === 1) Nginx configuration snippet - confirmed to work on 0.6.32 {{{ server { listen 10.9.8.7:443; server_name trac.example; ssl on; ssl_certificate /etc/ssl/trac.example.crt; ssl_certificate_key /etc/ssl/trac.example.key; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; # (Or ``^/some/prefix/(.*)``. if ($uri ~ ^/(.*)) { set $path_info /$1; } # You can copy this whole location to ``location [/some/prefix]/login`` # an$d remove the auth entries below if you want Trac to enforce # authorization where appropriate instead of needing to authenticate # for accessing the whole site. # (Or ``location /some/prefix``.) location / { auth_basic "trac realm"; auth_basic_user_file /home/trac/htpasswd; # socket address fastcgi_pass unix:/home/trac/run/instance.sock; # python - wsgi specific fastcgi_param HTTPS on; ## WSGI REQUIRED VARIABLES # WSGI application name - trac instance prefix. # (Or ``fastcgi_param SCRIPT_NAME /some/prefix``.) fastcgi_param SCRIPT_NAME ""; fastcgi_param PATH_INFO $path_info; ## WSGI NEEDED VARIABLES - trac warns about them fastcgi_param REQUEST_METHOD $request_method; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PORT $server_port; % fastcgi_param SERVER_PROTOCOL $server_protocol; # for authentication to work fastcgi_param AUTH_USER $remote_user; fastcgi_param REMOTE_USER $remote_user; } } }}} 2) Modified trac.fcgi: {{{ #!/usr/bin/env python import os sockaddr = '/home/trac/run/instance.sock' os.environ['TRAC_ENV'] = '/home/trac/instance' try: from trac.web.main import dispatch_request import trac.web._fcgi fcgiserv = trac.web._fcgi.WSGIServer(dispatch_request, bindAddress = sockaddr, umask = 7) fcgiserv.run() except SystemExit: raise except Exception, e: print 'Content-Type: text/plain\r\n\r\n', print 'Oops...' print print 'Trac detected an internal error:' print print e print import traceback import StringIO tb = StringIO.StringIO() traceback.print_exc(file=tb) print tb.getvalue() }}} 3) reload nginx and launch trac.fcgi like that: {{{ trac@trac.example ~ $ ./trac-standalone-fcgi.py }}} The above assumes that: * There is a user named 'trac' for running trac instances and keeping trac environments in its home directory. * /home/trac/instance contains a trac environment * /home/trac/htpasswd contains authentication information * /home/trac/run is owned by the same group the nginx runs under * and if your system is Linux the /home/trac/run has setgid bit set (chmod g+s run) * and patch from ticket #T7239 is applied, or you'll have to fix the socket file permissions every time Unfortunately nginx does not support variable expansion in fastcgi_pass directive. Thus it is not possible to serve multiple trac instances from one server block. If you worry enough about security, run trac instances under separate users. Another way to run trac as a FCGI external application is offered in ticket #T6224 ---- See also: TracGuide, TracInstall, [wiki:TracModWSGI ModWSGI], [wiki:TracCgi CGI], [wiki:TracModPython ModPython], [trac:TracNginxRecipe TracNginxRecipe] 'hot" upgrades is not advised, especially not on Windows ([trac:ticket:7625 #7265]). You may also want to remove the pre-existing Trac code by deleting the `trac` directory from the Python `lib/site-packages` directory, or remove Trac .eggs from former versions. The location of the site-packages directory depends on the operating system, and the location in which Python was installed. However, the following locations are common: * If you’re using Linux: /usr/lib/python2.X/site-packages * If you’re using Windows: C:\Python2.X\lib\site-packages * If you’re using MacOSX: /Library/Python/2.X/site-packages You may also want to remove the Trac `cgi-bin`, `htdocs`, `templates` and `wiki-default` directories that are commonly found in a directory called `share/trac` (the exact location depends on your platform). This cleanup is not mandatory, but it makes it easier to troubleshoot issues later on, as you won't waste your time looking at code or templates from a previous release that are not being used (anymore... As usual, make a backup before actually deleting things. If you had the webadmin plugin installed, you can now uninstall it as it is now part of the Trac code base. === Upgrade the Trac Environment === After restarting, Trac should show the instances which need a manual upgrade via the automated upgrade scripts to ease the pain. These scripts are run via [TracAdmin trac-admin]: {{{ trac-admin /path/to/projenv upgrade }}} This command will do nothing if the environment is already up-to-date. Note that if you are using a PostgreSQL database, this command will fail with the message that the environment can only be backed up when you use an SQLite database. This means that you will have to backup the repository and the database manually. Then, to perform the actual upgrade, run: {{{ trac-admin /path/to/projenv upgrade --no-backup }}} If you are using custom CSS styles or modified templates in the templates directory of the TracEnvironment, you will need to convert them to the Genshi way of do)ing things. To continue to use your style sheet, follow the instructions at TracInterfaceCustomization#SiteAppearance. === Update the Trac Documentation === Every [TracEnvironment Trac environment] includes a copy of the Trac documentation for the installed version. As you probably want to keep the included documentation in sync with the installed version of Trac, [TracAdmin trac-admin] provides a command to upgrade the documentation: {{{ trac-admin /path/to/projenv wiki upgrade }}} Note that this procedure will of course leave your `WikiStart` page intact. === Site Templates === The templating engine has changed in 0.11, please look at TracInterfaceCustomization for more information. === Trac Macros, Plugins === The Trac macros will need to be adapted, as the old-style wiki-macros are not supported anymore (due to the drop of [trac:ClearSilver ClearSilver] and the HDF); they need to be converted to the new-style macros, see WikiMacros. When they are converted to the new style, they need to be placed* into the plugins directory instead and not wiki-macros, which is no longer scanned for macros or plugins. === For CGI users === For those who run Trac under the CGI environment, run this command in order to obtain the trac.cgi file: {{{ trac-admin /path/to/env deploy /deploy/directory/path }}} This will create a deploy directory with the following two subdirectories: `cgi-bin` and `htdocs`. Then update your Apache configuration file `httpd.conf` with this new `trac.cgi` location and `htdocs` location. === Restart the Web Server === If you are not running [wiki:TracCgi CGI], reload the new Trac code by restarting your web server. == Known Issues == === parent dir === If you use a trac parent env configuration and one of the plugins in one child does not work, none of the children work. === some core modules won't load === This can happen in particular with Python 2.3 on Windows when upgrading without uninstalling first. Some modules were previously capitalized and were changed to lower case, e.g. trac/About.py became trac/about.py. You may find such messages in the Trac log: {{{ ERROR: Skipping "trac.about = trac.about": (can't import "No module named about") }}} Remove the `Lib/site-packages/trac` folder and reinstall. === Wiki Upgrade === `trac-admin` will not delete or remove pages that were in version 0.10 but now are not in version 0.11, such as WikiMacros. == Changing Database Backend == == SQLite to PostgreSQL == The [http://trac-hacks.org/wiki/SqliteToPgScript sqlite2pg] script on [http://trac-hacks.org trac-hacks.org] has been written to assist in migrating a SQLite database to a PostgreSQL database == Older Versions == For upgrades from versions older than Trac 0.10, refer first to trac:wiki:0.10/TracUpgrade. Note that downgrading from Trac 0.11 to Trac 0.10.4 or 0.10.5 is easy, but has to be done manually, e.g. {{{ $ sqlite3 db/trac.db "update system set value=20 where name='database_version'" }}} (upgrade can be redone the normal way later on) ----- See also: TracGuide, TracInstall 66/- #TracUpgradeJs%trac127.0.0.1= Upgrade Instructions = [[TracGuideToc]] A [TracEnvironment Trac environment] needs to be upgraded before it can be used with Trac 0.11. This document describes the steps necessary to upgrade an environment. Environment upgrades are not necessary for minor version releases unless otherwise noted. == Instructions == Typically, there are four steps involved in upgrading to a newer version of Trac: === Update the Trac Code === Get the new version as described in TracInstall, or your operating system specific procedure. If you do a manual (not operating system specific) upgrade, you should also stop any running Trac server before the installation. Doing "& f. # WikiNewPageJs%trac127.0.0.1= Steps to Add a New Wiki Page = [[TracGuideToc]] 1. Choose a name for your new page. See WikiPageNames for naming conventions. 2. Edit an existing page (or any other resources that support WikiFormatting and add a [TracLinks link] to your new page. Save your changes. 3. Follow the link you created to take you to the new page. Trac will display a "describe !PageName here" message. 4. Click the "Edit this page" button to edit and add content to your new page. Save your changes. 5. All done. Your new page is published. You can skip the second step by entering the CamelCase name of the page in the quick-search field at the top of the page. But note that the page will effectively be "orphaned" unless you link to it from somewhere else. ---- See also: TracWiki, PageTemplates, WikiFormatting, TracLinks, WikiDeletePage * -AO`x&7EWx$6L^l}#WiCamelCase2#InterMapTxt#InterTrac InterWiki7'PageTemplates'CamelCase2#InterMapTxt#InterTrac InterWiki7'PageTemplates'RecentChanges SandBox6!TitleIndex/TracAccessibility!TracAdmin!TracBackup#TracBrowser TracCgi'TracChangeset+TracEnvironment#TracFastCgi, ATracFineGrainedPermissions)TracGuide(!TracImport TracIni#TracInstall/ ATracInterfaceCustomizationTracLinks#TracLogging'TracModPython #TracModWSGI%)TracNavigation-TracNotification1+TracPermissions #TracPluginsTracQuery'#TracReports+TracRevisionLog0#TracRoadmap TracRss8!TracSearch)TracStandalone#TracSupport31TracSyntaxColoring&#TracTickets4;TracTicketsCustomFields+%TracTimeline 1.@Ti$4DTdt'8IZk|cheatsheWikiStart#WikiStart"WikiStart!#TracUpgrade-TracWiki%TracWorkflow)WikiDeletePage)WikiFormatting WikiHtml!WikiMacros$#WikiNewPage.'WikiPageNames)WikiProcessors55WikiRestructuredText"?WikiRestructuredTextLinks*WikiStartWikiStart9WikiStart:WikiStart;WikiStart<WikiStart=WikiStart@WikiStartAWikiStart BWikiStart KWikiStart QWikiStart RWikiStart SWikiStartYWikiStart^WikiStart_WikiStarteWikiStartqWikiStarttWikiStart|WikiStart~WikiStartWikiStartWikiStartWikiStartWikiStartWikiStartWikiStartWikiStartWikiStartWikiStartWikiStart WikiStart!WikiStart"WikiStart#WikiStart$ cacti0 be installed without Babel, but then you will only get the english version, as usual. If you're interested in contributing new translations for other languages or enhance the existing translations, then please have a look at ["TracL10N"]. What follows are generic instructions for installing and setting up Trac and its requirements. While you can find instructions for installing Trac on specific systems at TracInstallPlatforms on the main Trac site, please be sure to '''first read through these general instructions''' to get a good understanding of the tasks involved. == Short - Install a released version == For the quick install, make sure you have [http://python.org Python-2.5], [http://peak.telecommunity.com/DevCenter/EasyInstall#installing-easy-install easy_install] and SQlite-3.3.4 installed (or above). (You also might want to install python-dev to build genshi) {{{ sudo easy_install http://svn.edgewall.org/repos/trac/trunk }}} == Requirements - also older versions possible == To install Trac, th1e following software packages must be installed: * [http://www.python.org/ Python], version >= 2.3 * if using mod_python together with xml-related things, use python-2.5. expat is namespaced there and does not cause apache to crash any more(see [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash here] for details). * For RPM-based systems you might also need the `python-devel` and `python-xml` packages. * See instructions in ["TracOnWindows/Python2.5"] * [http://peak.telecommunity.com/DevCenter/setuptools setuptools], version >= 0.6 * [http://genshi.edgewall.org/wiki/Download Genshi], version >= 0.4.1 * You also need a database system and the corresponding python drivers for it. The database can be either SQLite, PostgreSQL or ''MySQL (experimental)''. === For SQLite === * [http://www.sqlite.org/ SQLite], version 3.3.4 and above preferred (note: it is preinstalled in Python 2.5.2). * If not using Python-2.5: [http://pysqlite.org/ PySQLite], version 1.x (for SQLite2 2.x) or version 2.x (for SQLite 3.x), version 2.3.2 preferred. For details see [trac:PySqlite PySqlite] ''Note: It appears that PySQLite 2.x is required if you plan to use the 'trac-post-commit-hook.py' script available from the 'contrib' section of the source repository.'' ''Note: Users of Mac OS X please take care; the Apple-supplied SQLite contains additional code to support file locking on network filesystems like AFP or SMB. This is not presently (3.3.6) in the mainline sources, so if you build your own SQLite from source it will not function correctly on such filesystems - typically it gives the error "{{{database is locked}}}". [http://www.alastairs-place.net/2006/07/sqlite_and_mac/ A patch] is available for version 3.3.6, based on Apple's code, otherwise you're probably best off using the Apple supplied version (presently 3.1.3).'' === For PostgreSQL === * [http://www.postgresql.org/ PostgreSQL] * [http://initd.org/projects/psycopg2 psycopg2] * See [trac:wiki:DatabaseBackend#Postgresql Dat3abaseBackend] '''Warning''': PostgreSQL 8.3 uses a strict type checking mechanism. To use Trac with the 8.3 Version of PostgreSQL, you will need [http://trac.edgewall.org/changeset/6512 trac-0.11] or later. === For MySQL === '''Warning''': MySQL support is currently ''still'' experimental. That means it works for some people, but several issues remain, in particular regarding the use of unicode and the key length in the repository cache. See [trac:MySqlDb MySqlDb] for more detailed information. * [http://mysql.com/ MySQL], version 4.1 or later * [http://sf.net/projects/mysql-python MySQLdb], version 1.2.2 or later === Optional Requirements === ==== Version Control System ==== '''Please note:''' if using Subversion, Trac must be installed on the '''same machine'''. Remote repositories are currently not supported. * [http://subversion.tigris.org/ Subversion], version >= 1.0. (versions recommended: 1.2.4, 1.3.2 or 1.4.2) and the '''''corresponding''''' Python bindings. For troubleshooting, check [4trac:TracSubversion TracSubversion] * Trac uses the [http://svnbook.red-bean.com/svnbook-1.1/ch08s02.html#svn-ch-8-sect-2.3 SWIG] bindings included in the Subversion distribution, '''not''' [http://pysvn.tigris.org/ PySVN] (which is sometimes confused with the standard SWIG bindings). * If Subversion was already installed without the SWIG bindings, on Unix you'll need to re-`configure` Subversion and `make swig-py`, `make install-swig-py`. * There are [http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 pre-compiled bindings] available for win32. * Support for other version control systems is provided via third-parties. See [trac:PluginList PluginList] and [trac:VersioningSystemBackend VersioningSystemBackend]. ==== Web Server ==== * A CGI-capable web server (see TracCgi), or * a [http://www.fastcgi.com/ FastCGI]-capable web server (see TracFastCgi), or * an [http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html AJP]-capable web server (see [trac:TracOnWindowsIisAjp Tra5cOnWindowsIisAjp]), or * [http://httpd.apache.org/ Apache] with [http://code.google.com/p/modwsgi/ mod_wsgi] (see [wiki:TracModWSGI] or http://code.google.com/p/modwsgi/wiki/IntegrationWithTrac) * This should work with Apache 1.3, 2.0 or 2.2 and promises to deliver more performance than using mod_python. A little less mature than mod_python. * [http://httpd.apache.org/ Apache] with [http://modpython.org/ mod_python 3.1.3+] (see TracModPython) * When installing mod_python the development versions of Python and Apache are required (actually the libraries and header files) For those stuck with Apache 1.3, it is also possible to get Trac working with [http://modpython.org/ mod_python 2.7] (see [wiki:TracModPython2.7 TracModPython2.7]). This guide hasn't been updated since 0.84, so it may or may not work. ==== Other Python Utilities ==== * [http://babel.edgewall.org Babel], version >= 0.9.2 for localization support * [http://docutils.sourceforge.net/ docutils], version >= 0.3.9 for WikiRestructur6edText. * [http://pygments.pocoo.org Pygments] for [wiki:TracSyntaxColoring syntax highlighting], also [http://silvercity.sourceforge.net/ SilverCity] and/or [http://gnu.org/software/enscript/enscript.html Enscript] may still be used. * Note that !SilverCity 0.9.6 has a [http://sourceforge.net/tracker/index.php?func=detail&aid=1424436&group_id=45693&atid=443739 bug] that breaks Python syntax highlighting in Trac. Until an update is made available, we recommend using version 0.9.5. * [http://pytz.sf.net pytz] to get a complete list of time zones, otherwise Trac will fall back on a shorter list from an internal time zone implementation. '''Attention''': The various available versions of these dependencies are not necessarily interchangable, so please pay attention to the version numbers above. If you are having trouble getting Trac to work please double-check all the dependencies before asking for help on the [trac:MailingList MailingList] or [trac:IrcChannel IrcChannel]. Please refer to the documen7tation of these packages to find out how they are best installed. In addition, most of the [trac:TracInstallPlatforms platform-specific instructions] also describe the installation of the dependencies. Keep in mind however that the information there ''probably concern older versions of Trac than the one you're installing'' (there are even some pages that are still talking about Trac 0.8!). == Installing Trac == One way to install Trac is using `setuptools`. With setuptools you can install Trac from the subversion repository; for example, to install release version 0.12dev do: {{{ easy_install http://svn.edgewall.org/repos/trac/trunk }}} But of course the python-typical setup at the top of the source directory also works: {{{ $ python ./setup.py install }}} See SubversionRepository for details about getting the source. ''Note 1: you'll need root permissions or equivalent for this step.'' [[br]] ''Note 2: installing from source is the preferred method if you want to have a localized version of Trac'' [[8br]] This will byte-compile the python source code and install it as an .egg file or folder in the `site-packages` directory of your Python installation. The .egg will also contain all other resources needed by standard Trac, such as htdocs and templates. The script will also install the [wiki:TracAdmin trac-admin] command-line tool, used to create and maintain [wiki:TracEnvironment project environments], as well as the [wiki:TracStandalone tracd] standalone server. If you want to make Trac available in other languages, make sure you have installed Babel and then run this additional step before doing the `install` (or simply redo the `install` afterwards): {{{ $ python ./setup.py compile_catalog -f }}} (the `-f` flag is needed as long as some translations are marked ''fuzzy'', i.e. incomplete, which will most probably be the case during the whole development period, as strings are continuously added or modified) === Advanced Options === To install Trac to a custom location, or find out about other a9dvanced installation options, run: {{{ easy_install --help }}} Also see [http://docs.python.org/inst/inst.html Installing Python Modules] for detailed information. Specifically, you might be interested in: {{{ easy_install --prefix=/path/to/installdir }}} or, if installing Trac to a Mac OS X system: {{{ easy_install --prefix=/usr/local --install-dir=/Library/Python/2.5/site-packages }}} The above will place your `tracd` and `trac-admin` commands into `/usr/local/bin` and will install the Trac libraries and dependencies into `/Library/Python/2.5/site-packages`, which is Apple's preferred location for third-party Python application installations. == Creating a Project Environment == A [wiki:TracEnvironment Trac environment] is the backend storage where Trac stores information like wiki pages, tickets, reports, settings, etc. An environment is basically a directory that contains a human-readable configuration file and various other files and directories. A new environment is created using [wiki:TracAdm:in trac-admin]: {{{ $ trac-admin /path/to/myproject initenv }}} [wiki:TracAdmin trac-admin] will prompt you for the information it needs to create the environment, such as the name of the project, the type and the path to an existing [wiki:TracEnvironment#SourceCodeRepository source code repository], the [wiki:TracEnvironment#DatabaseConnectionStrings database connection string], and so on. If you're not sure what to specify for one of these options, just leave it blank to use the default value. The database connection string in particular will always work as long as you have SQLite installed. Leaving the path to the source code repository empty will disable any functionality related to version control, but you can always add that back when the basic system is running. Also note that the values you specify here can be changed later by directly editing the [wiki:TracIni] configuration file. ''Note: The user account under which the web server runs will require write permissions to the environment directo;ry and all the files inside. On Linux, with the web server running as user apache and group apache, enter:'' chown -R apache.apache /path/to/myproject == Running the Standalone Server == After having created a Trac environment, you can easily try the web interface by running the standalone server [wiki:TracStandalone tracd]: {{{ $ tracd --port 8000 /path/to/myproject }}} Then, fire up a browser and visit `http://localhost:8000/`. You should get a simple listing of all environments that tracd knows about. Follow the link to the environment you just created, and you should see Trac in action. If you only plan on managing a single project with trac you can have the standalone server skip the environment list by starting it like this: {{{ $ tracd -s --port 8000 /path/to/myproject }}} == Running Trac on a Web Server == Trac provides three options for connecting to a "real" web server: [wiki:TracCgi CGI], [wiki:TracFastCgi FastCGI] and [wiki:TracModPython mod_python]. For decent performance, it is re