= Trac Object Model Proposal = == Introduction == Trac is a ''a minimalistic approach to web-based software project management''. To that end, it features ''an enhanced wiki and issue tracking system''. In addition, it also features: * An overview of all the events that happened in the project, by the way of the ''Timeline'' * A structured definition of the ''Roadmap'' for future evolutions of the software * A sophisticated Subversion repository browser * A search facility that covers all the text content of Trac The integration is achieved by several means: * tracking of a single software repository * using a simple relational database to store all the informations about tickets, milestones, changesets and wiki pages. * using a unified ''language'' to talk about objects in the system, by the way a wiki syntax (TacLinks) which can be used nearly everywhere: * in Subversion commit log messages * in Ticket descriptions and comments * in Wiki pages and change descriptions * in attachments descriptions * ... This unique approach enables a powerful structuring of the information in the system, yet this can be achieved in a very flexible and informal way thanks to that feature. In this light, Trac is a semi-structured Wiki, where one can create and modify ''objects'' and talk about them == Trac Objects == What can be consider as being a Trac object (''TracObject'') are: * a wiki page (''WikiPage'') * a changeset (''Changeset'') * a ticket (''Ticket'') * a milestone (''Milestone'') * an attachment (''Attachment'') === Current State === Today, the various Trac objects are quite distinct objects. There is no code sharing between what defines objects and also not so much in the related Modules that manipulates objects. Indeed, to those objects correspond some distinct features. But it strikes me that some degree of unification actually makes a lot of sense, both in term of increased functionality and decreased code complexity. === Toward an Unification === What would be a generic Trac object? * It would have a unique identity in the system * It would have some wiki syntax to describe it (a ''canonical'' form and also a shortcut form if possible) * There would be obviously a Wiki description of it * There would be some properties attached to it: * Some would be universal: * an author * a time of creation * Some would be always there for the particular type of object considered * Some would be ''custom'' properties * One would want to be able to attach files to that object * The content of the object could be modified, so there would be an history of changes, the possibility to make diffs between revisions of the object (see also TighterSubversionIntegration) * In addition to the main wiki content, linear (or even hierachical!) contributions in the form of short comments could be added Let's cross these generic feature with the current Trac objects, and see to what existing functionality it can be related, and what additional functionality and uses it would provide. ==== WikiPage ==== * The unique identity is the Wiki page name. * The wiki syntax is the one described in WikiPageNames. * The Wiki description would be actually the content of the Wiki page itself. * The universal properties (author and creation time) are there, but there would be no specific properties for Wiki. ''custom'' properties could make sense, but as usual with ''custom'' properties, their presence and pertinence is site-dependant. * Wiki attachments * Wiki history and revision diffs * Wiki comments would make sense, as highlighted in the Enhancement Request #xxx (TODO) ==== Changeset ==== ''(Sorry, work in progress, hang on...)'' ''--ChristianBoos''