blob: edbfaa1920c7c6ed45d3efb9458e0d3155842478 [file] [log] [blame]
<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 &gt; 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&gt;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 &quot;variants&quot; 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>