| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
| <meta name="Author" content="Eclipse Project"> |
| <title>Eclipse Team Component Roadmap</title> |
| <link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css"> |
| </head> |
| <h1>Eclipse Team Component Roadmap</h1> |
| <blockquote> |
| <p><strong>Summary</strong>:<br> |
| This document outlines the current problems with Team and CVS support in Eclipse. |
| It also suggests some important new Team features that should be considered |
| for future releases of the platform. This does not represent a commitment |
| to pursue any of the below mentioned areas. It is a draft of potential future |
| areas of focus for the Eclipse Team component.</p> |
| <p>Last Modified: April 17, 2003</p> |
| <p><strong>Table of Contents:</strong></p> |
| <p><a href="#" target="team_plugin">Team Plugin</a><br> |
| <a href="#resourceplugin">Resources Plugin</a><br> |
| <a href="#uiplugin">UI Plugin</a><br> |
| <a href="#api">Team APIs</a><br> |
| <a href="#target">Target Management</a><br> |
| <a href="#collaboration">Enhanced collaboration support</a><br> |
| <a href="#cvs">What's next for CVS</a></p> |
| </blockquote> |
| <hr> |
| <h2><a name="teamplugin">Team Plugin</a></h2> |
| <ol> |
| <li>Dispatching project based resource control extension points</li> |
| <p>The Team plugin currently extends several core extension points for resource |
| management (file modification validator, team hook, move/delete hook). This |
| is a rather piecemeal approach that still does not provide enough control |
| (e.g. copy semantics, missed deltas). These facilities should be consolidated |
| and should provide the repository provider with an increased integration with |
| the resources plugin. Some examples of existing problems:</p> |
| <ul> |
| <li>Until the Team plugin is loaded there are no hooks registered. This is |
| very problematic when you consider that the need for implementing a hook |
| is usually to provide some meta file sanity on the versioned resources. |
| And missing resource changes can result in inconsistent provider meta file |
| state.</li> |
| <li>There are missing cases where the provider needs more control over resources |
| (e.g. copy)</li> |
| <li> Are the hooks really Team specific or should they instead be available |
| to other types of plugins?</li> |
| As a case in point, PDE is currently a repository provider to gain some control |
| over binary projects. |
| </ul> |
| <p></p> |
| <li>Sync view (non-API, usability, threading, pervasive sync)</li> |
| <p>One of the most impressive features of the Team story is the excellent integration |
| with compare technology. CVS users can visually compare, merge, and integrate |
| changes within the workbench. This makes CVS very accessible to many users |
| that never would of though of using CVS via the command line. However, even |
| with the current high level of integration of the compare infrastructure there |
| is much room for improvement. Most of the proposed sync enhancements are meant |
| to improve a user's awareness of what others on their team are doing. With |
| this additional sync awareness and the suggestions mentioned in the <a href="#collaboration">Expanded |
| Collaboration Support</a> section, the Team component will enable a unique |
| and very rich collaboration infrastructure in Eclipse. The appendix contains |
| a detailed list of problems with the sync view but here is how we would like |
| to see the sync view evolve:</p> |
| <ul> |
| <li> Split the current sync view into several pieces that work together. This |
| would include a synchronize view that displays a 'live' sync view of resources |
| in the workspace. And compare editors would be opened to edit sync nodes.</li> |
| <li>There is no API for reporitory providers to re-use the sync view. This |
| inhibits other providers from benefiting from the sync support.</li> |
| <li>Provide a better representation of changes than a full tree view. Possible |
| alternatives could be to use a compact tree or table.</li> |
| <li>Additional information about sync changes should be available to understand |
| how team members are making changes that affect your work (e.g. user names, |
| code changes, comments, activities).</li> |
| <li>There should be different places for showing sync information (tasks in |
| editors, sync view, decorations).</li> |
| <li> The view that shows sync state for changes should be live and show outgoing |
| changes without having to synchronize with the server.</li> |
| <li>Calculate the incoming changes in the background </li> |
| </ul> |
| <p></p> |
| <li>It would be useful for the Team to help the community start a repository |
| provider plugin for Subversion (e.g. the replacement for CVS) and ensure that |
| the ClearCase plugin is as well integrated as CVS.</li> |
| <p></p> |
| <li>Logical to physical mapping has always been an outstanding problem in Eclipse. |
| Here are two examples: |
| <p></p> |
| <ul> |
| <li>In the Java packages explorer if you select a package then perform Team |
| > Commit.. the action will perform the operation on all child resources |
| of the package although visually the package really only contains immediate |
| children. |
| <li>Outgoing dirty indicators contributed by the CVS plugin decorate logical |
| views because the decorator is based on the physical resource model. |
| </ul> |
| </li> |
| <p></p> |
| <li>Better understanding of end to end scenarios as they are and how they should |
| be (roles, editor integration, compare/sync, update, etc). The scenarios to |
| consider are things like: |
| <p></p> |
| <ul> |
| <li>How are projects shared (differs by repository provider)? Do we still |
| need a Team > Share... menu item or are providers using their own mechanisms |
| instead? </li> |
| <li>How are operations performed (main menu, context menu, key-strokes).</li> |
| <li>Where are operations performed (view, editor, perspective, roll)</li> |
| <li>Resource synchronization/merging</li> |
| <li>comparing</li> |
| <li>patching (do others use Team>Apply Patch?)</li> |
| <li>sharing workspace setup (project sets, properties, preferences)</li> |
| <li>sharing project setup (properties, linked resources)</li> |
| <li>transactions (validateSave/Edit)</li> |
| <li>file type management</li> |
| <li>ignored resources</li> |
| </ul> |
| </li> |
| </ol> |
| <hr> |
| <h2>Resources plugin<a name="resourceplugin"></a></h2> |
| <ol> |
| <li>Resource history management in the resources plugin should be reviewed. |
| Currently callers of IResource API decide on the history configuration of |
| a resource and there is no way to impose a workbench wide policy - IResource.setContents(keepHistory). |
| This is a very fragile mechanism because random plugins can delete history |
| and users cannot configure their own versioning based rules. For example, |
| local history could be purged on commit.</li> |
| <br> |
| <br> |
| <li>Permission support is missing from core which makes it impossible for plugins |
| to synchronize the remote permissions with the local. This is really a pain |
| when users put scripts/executables into a remote location as the subsequent |
| retrieval</li> |
| will not have the proper permissions.<br> |
| <br> |
| <li>Workspace locking granularity and deadlocks when plugins use their own locking |
| mechanism. We have had many problems with the decorators with deadlock.</li> |
| <br> |
| <br> |
| <li>Copy semantics need to be integrated into team hooks. For example, most |
| team providers have work to do on copy (e.g. handle meta files...) and are |
| currently not given the chance to do so.</li> |
| <br> |
| <br> |
| <li>Should phantoms be considered as generalized synchronization mechanism and |
| shown by viewers? Or are they a mechanism for synchronization providers. There |
| is a good discussion about the role of phantoms in the platform. Are they |
| a mechanism that plugins can use to store sync info or should they be the |
| imposed method of storing sync info? Having phantoms as a first class synchronization |
| concept in the platform would allow sync information to be available in any |
| resource based view (e.g. the navigator) via phantoms. But realistically it |
| is naive to think that team provider plugins must use phantoms to track synchronization |
| information. </li> |
| <br> |
| <br> |
| <li>Team-private resources marking is problematic because there are cases (e.g. |
| the plugin isn't loaded yet) were this story breaks down. Plugins wanting |
| to mark resources as team-private must be allowed to do so without having |
| to worry about plugin loading issues.</li> |
| <br> |
| <br> |
| <li>Aggressive builds - empty deltas or deltas with non-build specific information |
| like sync changes.</li> |
| <br> |
| <br> |
| <li>Integration of local history and provider history (see <a href="#collaboration">Expanded |
| Collaboration Support</a>)</li> |
| <br> |
| <br> |
| <li>The use of linked resources can break validateSave/Edit and other Core hooks. |
| Consider the scenario involving linking resources from a shared project into |
| a non-shared project. Operations performed on the non-shared project may involve |
| resources that are linked. Non of the Core hooks will be invoked for these |
| resources even though they are under version control in another project.</li> |
| </ol> |
| <hr> |
| <h2>UI plugin<a name="uiplugin"></a></h2> |
| <ol> |
| <li>UI Decorator support currently has several problems. The CVS decorator's |
| performance has degregated from 2.0 to 2.1 and there still seems like there |
| are some important changes required to make the decoration mechanism scalable.</li> |
| <br> |
| <br> |
| <li>Dynamic views or view re-use. Team would like to provide a sync view that |
| can be re-used by several providers simultaneously activated in the workbench. |
| For example, if you had CVS and FTP enabled for a project you would have two |
| sync views.</li> |
| <br> |
| <br> |
| <li>Keyboard bindings for object contributions. Repository provides add their |
| menu items to other views using popup menu object contibutions in plugin.xml. |
| There actions are currently not key-binadable which requires providers to |
| additionaly provide global actions for any key-bindable operations.<br> |
| <br> |
| </li> |
| <li>Access to Team operations from within an editor. Currently the user must perform |
| team operations on a resource that appears in a view. It would simplify the user's workflow |
| if there menu operations were also available in an editor. |
| <br> |
| <br> |
| </li> |
| <li>Password clearing support from the UI. The core password facility is used |
| by several plugins but there is no UI support for clearing the passwords known |
| to the workspace. (Bug 8947)</li> |
| <br> |
| <br> |
| <li>Filter rules applied to object contributions. When an action is run from |
| a view that is currently being filtered the action can only assume that all |
| resources are being shown. For example, if a filter is applied to the navigator |
| view and a users performs a commit on a folder the commit will apply to all |
| children of the folder and not only the visible items.</li> |
| </ol> |
| <hr> |
| <h2>Team APIs<a name="teamapi"></a></h2> |
| <p>There is a long history of VCM APIs in Eclipse :) In the early days of Eclipse |
| we thought that an API was the foundation on which the Eclipse VCM support should |
| be built and spent quite a while trying to realize this. That was Eclipse 1.0. |
| </p> |
| <p>As a result of the 1.0 API, several repositories, including CVS, were forced |
| to bend and contort to implement the API. And what ended up happening was that |
| each repository wasn't able to fully expose their functionality within Eclipse. |
| We had an API, but the repository integration within Eclipse was weak.</p> |
| <p>As part of the 2.0 release we shifted our priority from an API and concentrated |
| instead on providing repositories the mechanisms for rich integration into the |
| workbench (file system hooks, decoration, menu contributions, project association). |
| Our goal was to ensure that any repository provider could integrate easily and |
| show-off their cool features within the workbench. Based on the number of providers |
| that have integrated with Eclipse in such a short period and the small number |
| of questions we feel that we have succeeded. </p> |
| <p>Beyond 2.1 we want to improve and fix the problems with the existing integration |
| mechanisms. In addition we would like to understand the community's need for |
| VCM APIs. So far we aren't sure if people want an API for CVS (e.g. repository |
| specific) or a more general API for VCM. There are obvious use cases that support |
| the need of some flavour of APIs: (a) release engineering needs access to the |
| repository, (b) 3rd parties could extend a repository providers integration |
| by building new cool tools - see Hipikat, bug 24882, Jazz project, and many |
| others, (c) headless control of the repository..</p> |
| <p>Our position on a general API for VCM is that we don't want to be the ones |
| inventing or imposing an API because we know from experience that we shouldn't |
| be in that business. It's up to the repository vendors to prove to us that there |
| is buy in for such an API. Instead, if there was a reference implementation |
| and an Eclipse plugin showing that (a) the API can be implemented, and (b) there |
| is interest from other repository vendors to implement the API, we could then |
| start investigating how to integrate the API into the Eclipse VCM deliverable.</p> |
| <p>The motivation for APIs is no longer based entirely on our desire to build |
| *the* generic Team UI but instead to complement the current Team support (very |
| rich integration story for providers) with an API story that can solve the above |
| issues. We have learned our lesson and know that an API should never be the |
| only option for providers to integrate into Eclipse, but that doesn't mean that |
| it can't become *another* option.</p> |
| <p>The interest in JSR-147 is that it is a repository vendor approved API that |
| is actually close to what we would need for generic access. See http://www.jcp.org/en/jsr/detail?id=147 |
| for more details.</p> |
| <hr> |
| <h2>Target Management/Deployment<a name="target"></a></h2> |
| <p>The Eclipse download page contains a link to a prototype for target management |
| support. It includes ftp and dav as two supported targets. Given the new J2EE |
| requirements we should investigate if there is a need for a real deployment |
| story in Eclipse. </p> |
| <p>If there any push for making this prototype real we would have to:</p> |
| <ul> |
| <li>flush out the relationship between target providers and versioning providers |
| (currently they are completely separate and target is implemented as a copy |
| of the repository provider code).</li> |
| <li>by getting rid of the duplicated target provider mapping code </li> |
| <li>make the ftp and dav plugins product quality.</li> |
| </ul> |
| <hr> |
| <h2>Expanded collaboration support<a name="collaboration"></a></h2> |
| <p>During the 2.0 timeframe the VCM component was renamed to Team to reflect the |
| components problem domain as being more than versioning and configuration management. |
| Unfortunately the only other avenue explored in the 2.0 release was Target Management. |
| In the future the Team component should be the catalyst for platform changes |
| that enable deep collaboration support in Eclipse. There are a number of existing |
| projects that are focused on collaboration support in Eclipse and it isn't our |
| intention of adding all the tools but instead ensuring that the support is available |
| in Eclipse for building the tools. We have compiled the following wish list |
| for expanded collaboration support.</p> |
| <ol> |
| <li> <strong>Resource variant awareness</strong> |
| <p>We should investigate adding the metaphor that every resource has the potential |
| for "variants" to exist. When a team works on a problem together |
| the resources they create will always change over time: you can change a |
| file and save it, add to a repository and someone else can change it, add |
| to a web server via webdav and have someone else change it. We would like |
| to focus increasing the users awareness about the variants and break down |
| the barriers to having every tool that creates variants (local history, |
| cvs, ftp, webdav) use a set of common mechanisms.</p> |
| </li> |
| <li><strong>Editor change awareness and viewing support</strong> |
| <p>To support resource variant awareness editors could be enhancements to |
| support viewing the variants. This would improve on the current problem |
| of having dedicated compare text viewers for looking at changes but not |
| being able to have full editor support in the viewers. Some options for |
| editor support could include:</p> |
| <ul> |
| <li>editor support for comparison via split pane (vertical/horizontal) or |
| text markup (e.g. Word revision markings)</li> |
| <li>use of tasks to mark changes that other team members are making to an |
| opened file</li> |
| <li>use of tasks to mark annotations (comments or other) that other team |
| members are making to an opened file</li> |
| </ul> |
| </li> |
| <br> |
| <li><strong>Combined history support</strong> |
| <p>It should be possible to build views that show the combined list of variants |
| for a resource. The input to the list can be one of many sources of variants. |
| For example, the local history could be combined with the CVS resource history.</p> |
| </li> |
| <li><strong>Support for both content and naming variants</strong></li> |
| <p>Resources can either have their content changed or naming. The support for |
| tracking these changes could be investigated.</li> </p> |
| <li><strong>API to support integration of collaboration tools into Eclipse</strong> |
| <p>Most collaboration tools (e.g. Jazz, Hipikat) built on Eclipse will require |
| access to the variants that are stored in some team location. Currently |
| the collaboration tools rely on the CVS plugin to fetch revision history, |
| previous file contents, user names for resource variants. This makes the |
| collaboration tools incompatible with other resource sharing tools (e.g. |
| ClearCase, ftp, webdav). Having a suitable API for Team would help solve |
| this current problem and help expand collaboration support in Eclipse.</p> |
| </li> |
| </ol> |
| <hr> |
| <h2>What's next for CVS<a name="cvs"></a></h2> |
| <ol> |
| <li>The CVS plugin should not be part of the platform SDK. There should be a |
| CVS component separate from VCM (Team). This would allow CVS to have a top |
| level menu and in general allow other providers to be alone in the workbench.</li> |
| <li>CVS Repositories View and Tag Management</li> |
| <li>Infrastructure to prevent regressions in functionality and performance</li> |
| <li>Implementation of new Sync View APIs</li> |
| <li>Implementation of (if any) generic API</li> |
| <li>Improvement of CVS workflows for Eclipse developers (e.g. integration with |
| Bugzilla and search capabilities)</li> |
| <li>Working with multiple respositories</li> |
| <li>Improved branching/merging support</li> |
| <li>Improved patch support (creating patches from sync view, applying patches |
| via sync view).</li> |
| </ol> |
| <hr> |
| <h1>Appendix<a name="appendix"></a></h1> |
| <p>This is a summarized list of issues with the current sync view and associated |
| bug reports:</p> |
| <p><strong>Structure compare part has many usability problems</strong></p> |
| <ol> |
| <li>The problem is that the things you are interested in (the leaves of the |
| tree) are continually scrolled out of view and separated by a great distance |
| when the tree is expanded, making it hard to see at a glance what has changed. |
| It also makes multi-selection operations very painful, for example comitting |
| a set of related files that should have the same comment. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=12453">12453</a>, |
| <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16249">16249</a>) </li> |
| <li>There are several also several expansion/selection usability problems with |
| the part. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35187">35187</a>, |
| <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=33041">33041</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=4931">4931</a>, |
| <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=5431">5431</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=20847">20847</a>, |
| <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=27237">27237</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=16249">16249</a>)</li> |
| <li>Synchronize view modes (filtering) and conflict workflows must be improved |
| (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=10556">10556</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=9451">9451</a>, |
| <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=139">139</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=19712">19712</a>)</li> |
| </ol> |
| <p><strong>Finding the outgoing changes requires a long running operation</strong></p> |
| <blockquote> |
| <p>To commit outgoing changes you have to hit the server. This is really painful |
| since the list of outgoing changes can be determined without considering the |
| remote files.</p> |
| </blockquote> |
| <p><strong>Synchronization view doesn't fit with workbench view/editor paradigm</strong></p> |
| <blockquote> |
| <p>The sync view is essentially an editor and a view combined. Unfortunatly |
| they don't quite work as any other view/editor combination in the workbench.What |
| would happen if we split the structure compare away and made that a view on |
| the sync states of all resources in the workbench and then allowed opening |
| a compare editor (basically the bottom portion) when merging or viewing changes |
| was required?</p> |
| </blockquote> |
| <p><strong>Background fetching of remote state</strong></p> |
| <blockquote> |
| <p>Currently when a project is synchronized the complete remote tree is fetched |
| and a progress dialog is shown. The user can't perform any other operation |
| while the remote tree is fetched. There is no reason why this couldn't be |
| fetched in the backgroup without blocking the UI and would allow an awareness |
| of what other people in the team are working on and help reduce the time needed |
| to find out what others are doing.</p> |
| </blockquote> |
| <p><strong>Java text merge editor isn't real</strong> </p> |
| <blockquote>Would like to use <em>real</em> editors for merging instead of the |
| <em>neutered</em> ones currently used. For example, the java editor shown in |
| the sync view looks real (e.g. syntax coloring) but is a scaled down java editor. |
| This causes integration and context problems because it is very useful to try |
| and write code in these editors without resorting to opening the file with the |
| real java editor. Then going back to the sync view only to find that the file |
| hasn't refreshed.</blockquote> |
| <p><strong>Compare editors (merge/compare) versus sync view</strong></p> |
| <blockquote> |
| <p>The terminology and look and feel of the merge editor and sync view is different. |
| Basically a merge is the same as synchronizing except for the fact that you |
| can't commit changes. Merging is already a tricky operation and having a conflicting |
| usage model between the sync and merge makes it even harder. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=35577">35577</a>)</p> |
| </blockquote> |
| <p><strong>Comparison criteria is not well integrated into compare</strong> </p> |
| <blockquote> |
| <p>The comparison criteria that is used to calculate the sync state is hidden |
| from the user and it isn't obvious for them when the criteria should be changed |
| and what advantage it will have. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=24887">24887</a>, |
| <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21612">21612</a>, <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=28143">28143</a>)</p> |
| </blockquote> |
| <p><strong>[CVS] Synchronizing against an existing project is not well supported</strong> |
| </p> |
| <blockquote> |
| <p>This is somewhat of a CVS problem but relates to the more general issue of |
| when to change the comparison criteria. (<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=21612">21612)</a></p> |
| </blockquote> |