GenericTrac Data Model
This is an experimental branch for trying out the various ideas exposed in the recent proposals:
- TracDev/Proposals/DataModel
- TracDev/Proposals/Journaling
- WikiContext are used as resource descriptors and have a .resource field which enables one to fetch the corresponding data model instance
See also this mail.
Design Notes
As this will be a major redesign of the data model, it will also be a good opportunity to tackle the multiple project support in Trac (#130).
Each resource related table should probably get a project identifier field.
Current Status
TODO
- modify the Milestone module so that it uses the new proposed datamodel. See #TheMilestoneExample.
- experiment new tabbed view for the milestone (View, Discussion, History). See TracProject/UiGuidelines.
- milestone should be able to have attachments, too (#3068)
- adapt the Roadmap module to the new model
- adapt the Milestone admin component to the new model
Once this is complete, validate the genericity by promoting the components to be first class resources as well (#1233).
Working on the generic aspect of Trac should also make it possible to implement various generic operations on Trac resources as plugins, mainly being able to (re-)implement TracCrossReferences as a plugin.
DONE
- Not yet started
The Milestone Example
The proposed data model would be:
-- record Milestone current properties -- create table milestone_prop ( project text, id text, -- name text, value text ); create index milestone_idx on milestone_prop (id, name); -- record Milestone change metadata -- create table milestone_revision ( tid int primary key, -- date int, authname text, author text, ip text, authenticated int ); create index milestone_date_idx on milestone_revision ( date ); create index milestone_authname_idx on milestone_revision ( authname, authenticated ); -- Track changes of Milestone properties -- create table milestone_change ( tid int, project text, id text, -- name text, value text, unique (tid, project, id) ); -- record Milestone metadata -- create table milestone_schema ( project text, name text, -- revprop char, type text, detail text, value text, order int, unique (project, name) );
The existing milestone table can be kept, it will simply not be used anymore. This will allow to test the branch within existing environments.
The name is not unique in milestone_change, to allow multiple values (#918)
Related Tickets
- Data model issues:
- Resource related:
- #454
- Edit ticket comments
- #918
- [patch] Custom Ticket Fields should support the multiple selection type
- #2035
- Changeset commenting
- #150
- User-centric storage. Last-viewed information and 'intelligent' followup
- #221
- Creating TR for multiple components
- #695
- Keywords for wiki pages
- #1233
- Descriptions of Components
- #1267
- leave Document Management System
- #1386
- Adding properties to Wiki Pages
- #1395
- Text box for duplicate when a bug is a duplicate
- #1673
- History for milestone description text
- #1678
- Show component view in timeline view for checkins
- #1835
- Add a discussion tab for Trac resources
- #2344
- sub milestone
- #2464
- Conditional fields in tickets
- #2465
- Add "custom query" functionality for changesets
- #2530
- Search doesn't work on custom fields
- #2662
- assign tickets to multiple users
- #2961
- custom comment fields
- #3003
- milestone could be a ticket
- #3080
- Custom field sorts only as text
- #3281
- make Keywords field optional
- #3718
- Trac should use HTTP 301 Moved when milestones get renamed
- #3776
- wiki-behaviour of roadmap pages
- #3911
- implement an object system (xwiki, roundup)
- #4582
- Renaming a milestone doesn't update ticket history
- #4588
- User Page: trac links to these pages
- #787
- Change attachment description
- #1113
- Show milestone changes in timeline
- #2467
- Link user name in reports to custom query showing that user's open tickets
- #2839
- require username, comment when changing stuff
- #4883
- Automatic feature list of the software being developed through commit logs
- #5211
- Ticket - Wiki Integration enhancement/suggestion
