blob: 2a594ae0c676c19819435b7c475e53d9b590ed1d [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Team Synchronizing</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
</head>
<body bgcolor="#ffffff" text="#000000">
<table border="0" cellspacing="5" cellpadding="2" width="100%">
<tbody>
<tr>
<td align="left" valign="top" bgcolor="#0080c0"> <b><font color="#ffffff" face="Arial,Helvetica">
Improving the synchronize view - Eclipse 3.0</font></b> </td>
</tr>
</table>
<p>Why change it? Because there were many <a href="https://bugs.eclipse.org/bugs/buglist.cgi?short_desc_type=allwordssubstr&short_desc=Sync%2BView&product=Platform&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&keywords_type=allwords&keywords=&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&changedin=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&namedcmd=All%2BOpen%2BVCM%2BP1P3&newqueryname=&order=Reuse%2Bsame%2Bsort%2Bas%2Blast%2Btime&field0-0-0=noop&type0-0-0=noop&value0-0-0=">open</a>
bugs relating to the synchronize view, there was no public API for repository
providers to use it, and we felt that we could to better. </p>
<h1>Problems</h1>
<p>In brackets is the 3.0 milestone build where the problem has been addressed.</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>) [<strong><em>M2</em></strong>]
</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>)
<strong> <em>[M2]</em></strong> </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. [<strong><em>M2</em></strong>]</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? [<strong><em>M2</em></strong>]</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. <em><strong>[M2]</strong></em></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>)
[<strong><em>M2</em></strong>] </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>)
<em> <strong>[M3]</strong></em> </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>
<h1>Solution</h1>
<p>In the 3.0 M2 release a new Synchronize view will be made available. Not only
does the view look different but synchronization workflows have changed, we
hope for the better, based on the feedback that we have received over the last
two years. Here is a summary of the features of the new sync view:</p>
<p><strong>General features</strong></p>
<ul>
<li>The old sync view used to be static, you would synchronize a project(s)
and the sync view would display the resources of interest. The new view is
dynamic that listens to changes in the workspace and updates the synchronization
states of local resources automatically.</li>
<li>The old sync view would only allow one 'type' of projects to be shown at
a time, and switching between them would require a long running operation.
For example, if you you were using FTP and CVS you would and only wanted to
see your local changes you had to pick the projects and synchronize them seperatly
with each provider. Now, both are registered with the sync view and can be
toggled quickly.</li>
<li>Can show the changes in either a table and tree view.</li>
<li>Instead of embedding the compare views into the sync view, file comparisons
are shown in a compare editor. Clean compare editors are re-used so that your
editor space is not overloaded and dirty compare editors are left untouched.
This switch allows you to have multiple changed compare editors open without
being forced to save automatically. This wasn't possible in the old sync view.</li>
<li>Merges are shown in the sync view. This simplifies the merge actions and
allows for merges to be long lived. For example, in CVs wihle working in a
branch you can setup to merge the changes in HEAD into your branch. This merge
configuration will be saved between sessions and you can easily keep your
branch up-to-date with changes in HEAD. When then merge is complete you can
Cancel the merge from the views pulldown menu.</li>
<li>Synchronizations are performed in the background and scheduled refreshes
can be configured.</li>
<li>The changes available in a workspace are shown in the view's title bar.
This can help the user be more resources aware and understand if the active
filter is filtering out changes.</li>
<li>There is a Team Synchronizing perspective which helps users who used the
sync view as a fast view.</li>
</ul>
<p><strong>CVS features</strong></p>
<ul>
<li>You can perform any of the Team &gt; CVS operations on the elements in the
sync view (e.g. create patch, replace with remote, show history)</li>
<li>Simpler operations in the sync view. You can update/commit in any mode.
The prompts will give you more information about what files will be overwritten.</li>
<li>CVS merges now appear in the sync view and will be persisted between sessions
until the merge is cancelled.</li>
<li>Team &gt; Synchronize with Repository creates a light weight working set
and enables for the sync view. This allows selecting a subset of resources
to be shown in the sync view.</li>
</ul>
<p><strong>Issues</strong></p>
<ul>
<li>There are two CVS Update/Commit actions in the context menu. Use
those at the first level since the onces under Team won't do the right
thing. This will be fixed when UI supports actions override for contexts.</li>
<li>Revision numbers aren't shown in the compare editor.</li>
<li>Better multiple selection support</li>
<li>Support for basic navigator actions (e.g. rename, delete...)</li>
</ul>
<p><strong>Upcomming features</strong></p>
<ul>
<li>Have the compare editor display the structure diff in an outline window.</li>
<li>Key bindings for CVS actions</li>
<li>Object contribution override will be supported so only one Update/Commit
will be shown</li>
<li>FTP and Dav plugins will be migrated to the new sync view.</li>
<li>It would be cool to have the comment and user name shown for incoming changes</li>
</ul>
<h1><strong>Where to go from here?</strong></h1>
<ul>
<li>A <a href="#new">prototype</a> has been released with the goal of removing
the existing Team &gt; Synchronize actions by the M2 milestone</li>
<li>Incorporate feedback into new sync view</li>
<li>Continue to solve the <a href="#issues">issues</a> listed below</li>
<li>By M3 have ISVs that where using the internal API over to the new public
API</li>
</ul>
</body>
</html>