Summary:
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.Last Modified: April 17, 2003
Table of Contents:
Team Plugin
Resources Plugin
UI Plugin
Team APIs
Target Management
Enhanced collaboration support
What's next for CVS
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:
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 Expanded Collaboration Support 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:
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.
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.
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.
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..
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.
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.
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.
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.
If there any push for making this prototype real we would have to:
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.
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.
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:
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.
Resources can either have their content changed or naming. The support for tracking these changes could be investigated.
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.
This is a summarized list of issues with the current sync view and associated bug reports:
Structure compare part has many usability problems
Finding the outgoing changes requires a long running operation
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.
Synchronization view doesn't fit with workbench view/editor paradigm
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?
Background fetching of remote state
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.
Java text merge editor isn't real
Would like to use real editors for merging instead of the neutered 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.
Compare editors (merge/compare) versus sync view
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. (35577)
Comparison criteria is not well integrated into compare
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. (24887, 21612, 28143)
[CVS] Synchronizing against an existing project is not well supported
This is somewhat of a CVS problem but relates to the more general issue of when to change the comparison criteria. (21612)