Bug 41331 - [Watch/Edit] Files loose 'edit' state on cvs server after first compare with HEAD
Summary: [Watch/Edit] Files loose 'edit' state on cvs server after first compare with ...
Status: RESOLVED WONTFIX
Alias: None
Product: Platform
Classification: Eclipse Project
Component: CVS (show other bugs)
Version: 2.1.1   Edit
Hardware: PC Windows 2000
: P3 critical with 1 vote (vote)
Target Milestone: ---   Edit
Assignee: platform-cvs-inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: helpwanted, readme
: 110099 130513 (view as bug list)
Depends on:
Blocks:
 
Reported: 2003-08-08 10:17 EDT by Eric Box CLA
Modified: 2009-08-30 02:19 EDT (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eric Box CLA 2003-08-08 10:17:32 EDT
At the moment you open the Compare editor after a "Compare With", "Latest from
HEAD", the opened file looses its 'edit' state on the CVS server.

How to reproduce:
1. Modify (edit notification sent to the server) and save a file.
2. Select the modified file (right click) and "Compare With", "Latest from HEAD".
3. Double click the file in CVS Compare window.

At the moment you perform item 3, the server looses the 'edit' state. This
happens, because it sends 0 bytes for the file and uses the -C argument for the
update. Together they cause the server to think the locally modified file was
overwritten and it removes the 'edit' state.
Eclipse however did not overwrite the local file, it only uses it for the
comparison somehow.
This happens only on the first compare, any succeeding compare from within
Eclipse does not use this update command. It looks like the file is cached
somewhere.

Find below the request (>) and response (<) for the one time update that occurs.
>Root /data/cvs/test
>Global_option -r
>Argument -r
>Argument 1.1
>Argument -C
>Argument -d
>Argument -P
>Directory .
>/data/cvs/test/tzt
>Entry /JustAClass.java/1.1//-ko/
>Modified JustAClass.java
>u=rw,g=rw,o=r
>0
>Argument JustAClass.java
>Directory .
>/data/cvs/test/tzt
>update
<New-entry ./
</data/cvs/test/tzt/JustAClass.java
</JustAClass.java/1.1//-ko/T1.1
<M U JustAClass.java
<Update-existing ./
</data/cvs/test/tzt/JustAClass.java
</JustAClass.java/1.1//-ko/T1.1
<u=r,g=r,o=r
<29
<public class JustAClass {
<
<}
<ok

This has been tested and found with the following combinations:
Eclipse (win32)  cvs (server), RedHat8
2.1              1.11.5
2.1.1            1.11.5
2.1.1            1.11.6

The project uses Watch/Edit and "Send a cvs edit notification to the server".
Comment 1 Jean-Michel Lemieux CLA 2004-06-11 16:51:46 EDT
Post 3.0
Comment 2 Rolf Wilms CLA 2005-06-23 12:58:15 EDT
Just a small observation:

I can reproduce this problem as described using CVS 1.12.9 via pserver on 
debian sarge.

But I can not reproduce it using CVSNT 2.0.9 on Win2K.
Comment 3 Michael Valenta CLA 2005-10-04 14:01:08 EDT
*** Bug 110099 has been marked as a duplicate of this bug. ***
Comment 4 Michael Valenta CLA 2006-03-06 08:49:54 EST
*** Bug 130513 has been marked as a duplicate of this bug. ***
Comment 5 Chris Nappin CLA 2006-03-06 09:09:28 EST
I am suprised that such a serious fault has been open for such a long time. Can I suggest that the severity of this bug is increased to Critical? For users that use CVS Watch/Edit functionality for enforcing informal exclusive locking (as CVS offers no other alternatives) this fault is a major cause of data loss! 
Comment 6 Michael Valenta CLA 2006-03-06 09:43:17 EST
You are free to set the severity if you like. The component committers don't set severity.

As for your other point, there are a couple of reasons why this bug has not been addressed. The main reason is that the solution to the problem is not obvious. The Eclipse CVS client does a bunch of things that the basic command line client does not (e.g. Synchronization, Comparisons). The implementation of these features uses the "cvs update" command on a fake sandbox which seems to fake out the server into thinking that the user is no longer editing the file. Possible solutions could be:

1) Come up with another way to get the advanced funtionality
2) Track the edited files on the server and re-edit them when the edit state is lost
3) Add support to the CVS server for the advanced Eclipse functionality
4) Remove the advanced funtionality from Eclipse

I think that point 2 is impossible and point 3 will never happen. We couldn't do point 4 since the majority of our customers use this funtionality. That leaves point 1 and unfortunately, I don't know how we would accomplish this. That's not to say it's impossible but the solution isn't obvious.
Comment 7 Chris Nappin CLA 2006-03-06 10:08:36 EST
Michael, thanks for the reply - I did attempt to set the severity but BugZilla doesn't appear to allow this on a bug I don't own and didn't raise. Obviously as an end user I was hoping such a severity would translate into an increased priority!

You seem to be saying that the Watch/Edit functionality has never and will never work properly, so I'm suprised it has ever been included in Eclipse. I've never seen any warnings or disclaimers about this functionality?

From your brief description it does sound like the Eclipse CVS client code's design has some fundamental flaws, but surely a work around can be found? For example, whenever it invokes an "update -C" it could then re-invoke the Edit functionality afterwards? Perhaps it isn't that simple, and it would probably have a performance cost, but the client knows which files are being compared? Alternatively I'm sure there are other ways of getting a specific/latest version of a file in CVS other than "update -C" (although I don't pretend to be a CVS expert).

Comment 8 Michael Valenta CLA 2006-03-06 10:24:52 EST
I didn't realize that there were restrictions on who could set the severity. I've set the severity as you requested.

As for the Watch/Edit support, I didn't say it would never work, I said that you can't use Synchronize or Compare if you don't want the edit state lost. You can still use the basic update and commit workflows. As for why Watch/Edit is included, the answer is simple: Eclipse is open source and most of the watch/edit support was contributed by community members. Your point about documenting the shortcomings is well taken. We should add an entry to the readme file.

As for your proposal, I would be happy if someone could tell me a reliable and efficient way to get contents without using update. It would be possible to get synchronizations and comparisons using "cvs diff" but this will only work for some files. If we need to use diff for some files and update for others, there wil be a noticable performance impact.
Comment 9 Chris Nappin CLA 2006-03-06 11:25:49 EST
Thanks for updating the severity - I hope this will to more time being spent looking at it.

I understand your comments about why the Watch/Edit code was originally included, however isolating it as "highly experimental" might have been a good idea at the time. Not being able to take CVS updates in a controlled manner (synchronise) or double check what has been edited before committing a change(compare) are (IMHO) essential uses cases without which we (as a team) would not be able to use CVS.

Restricting compare to text files (supported by cvs diff) sounds a perfectly reasonable solution if it means Watch/Edit will function correctly.
Comment 10 Chris Nappin CLA 2006-03-07 04:11:00 EST
Here is an update to help focus investigation of this issue - on Eclipse 3.1.2 on Windows XP, JDK 1.4.2 and CVS 1.11.18 (on Linux) the "synchronise" functionality itself doesn't cause this fault to be triggered, only the various "compare" options:

- Compare with latest from Head
- Double click on a file in Team Synchronizing Perspective
- Compare with specific revision or version 
Comment 11 Michael Valenta CLA 2006-06-14 14:22:10 EDT
There is no plan to address this item.
Comment 12 Chris Nappin CLA 2006-06-15 03:48:59 EDT
I'm very disappointed to learn that you have no plans to resolve such a long-standing critical fault in the Eclipse CVS plugin.

This will force my company, and any others that need some sort of locking in CVS, to move away from Eclipse to alternatives such as NetBeans.

That is a shame.
Comment 13 Michael Valenta CLA 2006-06-15 10:11:40 EDT
What it really boils down to is priorities. We have limited resources and a lot of work items to be addressed in 3.3. Our main focus is to support the developement of Eclipse.org projects but we do want to support other workflows if the amount of effort is reasonable. My feeling is that addressing this bug would be a considerable amount of work and would require us to drop higher priority items.

Traditionaly, it has been the community that has provided patches for the Watch/Edit support. Are you willing to help out with this in some form? If so, we would be willing to reconsider. Perhaps we would be able to come up with a reasonable solution that is not a major rework of how comparisons are done.
Comment 14 Denis Roy CLA 2009-08-30 02:19:17 EDT
As of now 'LATER' and 'REMIND' resolutions are no longer supported.
Please reopen this bug if it is still valid for you.