Back to Archived Releases
CVS platform cvs support |
Last Modified: $Date: 2006/06/09 18:53:05 $
When you are browsing in the CVS Repositories view, you may expect to see branch and version tags which you have previously created. In CVS, such tags are stored on individual files rather than on projects or folders. Rather than scan every file in the repository, Eclipse only scans one well-known file, .project, which should exist in every Eclipse project. It is possible that you have other interesting tags that do not appear on .project but which you would like to show up in the CVS Repositories view.
To make these tags appear, do the following:
Some modules are not expandable because their definition is complex and difficult to parse on the client. These modules can still be checked out properly using the "Check Out Module" menu command from the module's context menu.
If you also see messages from the server like "-f server: ...", this indicates that your CVS server has not been configured properly. Here is the line as it should appear in the "/etc/inetd.conf" file (example from AIX but the problem has also been seen on Solaris):
The key is the 2nd copy of "cvs". The online cvs book at http://cvsbook.red-bean.com/cvsbook.html has it right (although I thought it was a typo so never tried it). Look for "The pserver access method is not working" section. Part of the reason I got this wrong is that the linux xinetd configuration does not duplicate the name of the program. At one point I just copied the fields from the linux config into the fields in the AIX inetd.conf file. Now that I know what to look for, the other entries in the inetd.conf file have the program name duplicated.
In 3.0, Eclipse supports CVS version 1.11.1p1 or higher, running on a Linux or UNIX server and CVSNT 2.0.58d or later, when properly configured. Eclipse 2.1.2 and before does not work with CVS versions greater than 1.11.6 (see next point). CVSNT versions prior to 2.0.58d are not supported but some versions have been reported to work with few problems. There have also been some problems reported with HPUX and Solaris version (see above).
There are also cases where newer server versions are required for some functionality. For instance, incoming change sets in the synchronize view require CVS version 1.11.5 or beyond to work properly (see bug 81960)
Most of the interesting Eclipse CVS functionality relies on the format of the messages and the change in format made in 1.11.7 breaks the parsing in Eclipse versions prior to 2.1.3. Most of the incompatibilities for 1.11.x were addressed in 2.1.3. See bugs 46655 and 49056 for patches and workarounds for previous versions of Eclipse or remaining incompatibilities. As for 1.12.x releases of CVS, Eclipse 2.1.x is not compatible with this server version. Eclipse 3.0 is compatible with 1.12.7 but future releases of CVS may cause similar breakages. In such cases, Team>Update and Team>Commit should still work but the more advanced work flows (e.g. synchronizing) may not be reliable.
The reason older CVSNT versions aren't supported is because traditionally its development effort had been smaller and has lagged behind that of CVS Linux, thus its quality tends to be of issue. That has changed as of version 2.0.58d which is now supported (when properly configured) on Eclipse 3.0 and beyond.
CVS for UNIX can be downloaded by going to http://www.cvshome.org. CVSNT can be downloaded by going to http://www.cvsnt.org.
The CVS manual can be found by going to http://www.cvshome.org.
This error indicates that your server version is CVS 1.10 or before. The -C option was introduced in version 1.11. See above for supported CVS versions.
This error indicates that your server version is CVS 1.11 which has a bug when replacing a locally dirty file. See above for supported CVS versions.
Eclipse sometime performs multiple commands within a single connection to the server. This may cause problems with CVS server that are running server scripts in reponse to certain commands.
Eclipse does not support the use of the local connection method as this requires a CVS client that also includes the CVS server code in it. Command line cvs uses the same executable for the client and the server whereas Eclipse is a client only. Since the repository is on the same machine as the client, you should be able to use pserver.
This problem has several causes. One is the use of a backslash (\) in the repository path instead of a slash (/). Another can be a mismatch in the case of the letters in the repository path. See bug 56635 for more details.
The problem is that CVSNT (as of 1.11.1.3) only supports using the local connection method with network drives and Eclipse does not support this connection method (see above).
I think the problem is that of user rights on the machine CVSNT is running on. You might try one or more of the following options:
CVSNT has a separate option called Emulate "-n checkout" bug that must be enabled for Eclipse to work properly. This is because the "bug" in question is the behavior of a 1.11.x server which Eclipse requires.
CVSNT has a non-standard way of dealing with keyword substitution so you will need to use a CVSNT specific client to modify the keyword substitution mode.
The pserver protocol sends passwords over the network in plaintext. Many people prefer to establish a secure connection using SSH. Eclipse supports two methods of connecting to CVS repositories using SSH.
To use the Eclipse's built-in SSH support, simply specify "extssh" as the connection method type when creating the repository connection.
To use SSH support from an external tool, you must:
C:\plink.exe
" or "/usr/local/bin/ssh
").
Also specify the name and location of the CVS binary on the server.
The default value is often correct.Note: In Eclipse 2.1, you can also specify (on the Ext Connection Method preference page) the parameters to be passed to the SSH client, including the password.
The extssh connection method uses a built-in SSH client. The ext connection method allows you to specify an external SSH client to use. For extssh to work with Eclipse 2.1.x and before, the server must be running an SSH server with SSH1 protocol compatibility. If extssh does not work, it is possible that the server is running only the SSH2 protocol. If this is the case, you must configure the ext connection method with an external SSH client. In Eclipse 3.0 and beyond, extssh does support SSH2.
The steps for setting up public-key authentication vary depending on your SSH client. However, they all follow this set of common steps:
/home/user/.ssh/authorized_keys
.This often happens when using SourceForge projects for the first time, but may occur on other servers as well. You must manually log in to the server, using an interactive SSH session, in order to create your home directory for the first time. After this, you will be able to log in successfully.
Use your SSH client to connect to the server (e.g. cvs.sourceforge.net) and log in with your username and password. Your home directory will be created for you.
A problem has been reported that involves the Cygwin SSH client (see bug 21180). Try using another SSH client such as Putty or OpenSSH.
Putty's private key is encrypted by AES, but JCE (Java Crtptgraphy Extension) included in J2SE 1.4.x does not support AES. So, at present time, there is no plan to support it. Of course, JSch (the SSH2 client used in Eclipse) may support Putty's key by using the latest J2SE in the near future, but Eclipse 3.0/3.1 will not be able to use it because they must run on J2SE 1.4.0. This is explained more in bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=84281.
There is an issue with Sun's JDK 1.4.2 and Fedora Core 4 that causes extssh connections to fail with the message:
CVS Communication error: org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection$SSH2IOException: Invalid argument or cannot assign requested addressThe issue seems to be related to both IPv6 and IPv4 being available in FC4. The solution is to add
-Djava.net.preferIPv4Stack=truewith the -vmargs option when eclipse is started.
This problem has been seen on servers that have a problems in a particular authentication method. This will cause extssh to believe that there has been an authentication failure which trigger a password prompt. See bug 119008 for details.
IMPORTANT: Before upgrading from Eclipse 1.0 to 2.0, make sure you release all your changes to the repository using Eclipse 1.0. Although it is possible to submit the changes using Eclipse 2.0 after you upgrade, to do so is not straight forward due to a change in how the synchronization information for each project is stored.
Team support changed drastically between Eclipse 1.0 and 2.0. As such, the method of sharing projects with the repository changed as well. We have tried to make it relatively easy for you to migrate, however. You will notice that your previously shared projects only have "Share Project" in the Team menu. If you select that option, a wizard will guide you through the migration process. When you are finished, your project will be shared and the Synchronize view will open. You will see conflicting changes on every file - this is due to changes in the way sync information is stored between 1.0 and 2.0. If you do not have any outgoing changes (which you shouldn't have if you committed all your outgoing changes before upgrading as recommended above), then you can simply select the project in the Synchronize view and select "Override and Update" which will load the current contents from the server. If you do have outgoing changes, you can pull down the triangle menu in the Synchronize view and select "Compare File Contents". After some work, the Synchronize view will show you only the files which are actually different. You can then use the Synchronize view to resolve these conflicts.
Any file checked into a CVS repository from Eclipse 1.0 was marked as binary. This means that end-of-line conversions will not occur on checkout, and some features of CVS (such as auto-mergeable conflicts) will not apply to these files. As such, it may be desirable to change some of these files from binary to text. To change the file types, do the following:
In an effort to move away from generic terminology that applies to all repository providers, and toward provider-specific terminologies and workflows, many terms, menu items and labels have changed in 2.0. Here is a brief list of some of the changes. For more detailed information, please see the Eclise CVS documentation.
Eclipse 1.0 | Eclipse 2.0 | Comments |
Stream | Branch | The CVS terminology "Branch" replaces "Stream" |
Catchup | Update | "Update" refers to the standard CVS method of retrieving remote contents. For more details on Update, see the Eclipse CVS documentation. |
Release | Commit | These terms are equivalent. |
Add to Workspace | Check Out as Project | The CVS terminology "Check Out" replaces "Add to Workspace". |
None | Tag | In CVS, a Tag refers to either a Branch Tag or a Version Tag. Branches and versions together are referred to as Tags. |
In Eclipse 1.0, meta-information about a project was stored in .vcm_meta. In Eclipse 2.0, this mechanism was made more general and the data was moved to the .project file. As such, the .vcm_meta file is now unneeded. The Eclipse CVS client will warn you of this state by placing a warning in the task list. If you still have people on your team who are using Eclipse 1.0 for development with your repository, then you should not delete the .vcm_meta file. If all members of your team are using Eclipse 2.0, then you can safely delete the .vcm_meta file and commit the deletion to the repository.
Eclipse makes use of information in the .project file to determine if a project is a Java project. If the project you have checked out does not have a .project file, Eclipse will not mark it properly. If you use "Checkout As..." instead of "Checkout As Project" in the Repositories view, then you will be given an opportunity to specify Java as the project type and provide Java specific configuration information.
Eclipse's Java development tools create and maintain a special file, .classpath, in the root of each Java project. This file contains information about the project's classpath, including references to other projects, external jars, and the project's own source path. If you are working on a team with other developers that use Eclipse, you probably want to commit this file to the repository so that others can benefit from correct classpath settings. If the other developers on your team do not use Eclipse, you may still want to commit the .classpath file so that your settings are persisted - this should not affect the users that are not using Eclipse.
If the name of the CVS module is part of the package name of Java files, you will encounter problems. For example, if the module you check out is called "test", and it contains a folder called "code" which contains Java files that claim to be in the package "test.code", Eclipse will not be able to compile these Java classes. There are several solutions to this problem:
Source folders must always begin beneath the project, not above it. See the Eclipse Java Development Tools documentation for more information on source folders.
To check out a module that is defined in the CVSROOT/modules file as a Java project, you may have to pre-create the target project as a java project in the workspace before performing the "Check Out Module".
JDT marks most of its build output as being derived resources so that CVS and other repository types can easily ignore these resources from version control. However, if you define custom source and build output folders, the newly created build output folder will not be marked as derived. In many cases the root build output folder is named bin. To ignore this folder, select it in the navigator and choose Team > Add to .cvsignore, then commit the .cvsignore file to the repository so that the bin folder will be ignored at all times for that project.
If a resources whose name matches a pattern in the .cvsignore also exists in the repository, then this resource is not ignored. For the case of the bin folder, chances are that the bin folder was committed to the repository at some point. The solution is to purge this directory from the repository.
Substitute the usual keyword (e.g. $Revision: 1.1 $) with the $ escaped version (e.g. $$Revision: 1.1 $$).
The easiest way to address this problem is to create a project in the repository whose purpose is to hold the .project and .classpath files for your module. For example, if your module definition is my-module &sub-dir1 &sub-dir2 you could change it to my-module my-module-project &sub-dir1 $sub-dir2 where my-module-project is an new folder on the CVS server. Committing the .project and .classpath files would create the files in this folder.
No. Eclipse implements a CVS client in Java that talks directly to the server using the documented CVS protocol. No external CVS client is required.
Eclipse stores CVS sync information in CVS/ folders in the same way as the command-line CVS client does. However, you rarely see these folders within Eclipse. They are marked using a Core facility called "team-private" which causes them to be hidden from view. If you open a (non-Eclipse) file explorer you will see that these directories and their contents appear on the file system.
Eclipse Team CVS stores its meta information in a format that is compatible with the command-line CVS client. Thus you should be able to use a CVS command line client against Eclipse workspace files on disk. Please note that this support is experimental, and you may run into problems. However, we are very interested in making this work, so please report any bugs you find.
Whenever you use external tools to modify workspace files, you must perform a Refresh from within Eclipse to make the workspace aware of the changes.
You may encounter unexpected behaviour when using the command-line CVS client in conjunction with deleted folders. Eclipse's CVS support keeps track of deleted folders and their contents so that, on the next synchronization, the Synchronize view can properly report on the changes. This information is kept outside of the CVS meta folder structure. This is because in CVS you normally inform the repository of deletions prior to deleting them locally, which is a different workflow than we like to support in the Synchronization view. Thus it is recommended that you do not use the command-line CVS client while you have pending deletions to commit. In some circumstances it could cause the Synchronize view to display incorrect contents, although it should not cause any lost work.
Yes you can. However, you may encounter errors from the builder related to the copying of the CVS folders. This can have two causes. The first is when the project is imported before the CVS plugin is loaded. To avoid this problem, make sure you open one of the CVS views before importing the project. The second is due to a "race" on import between the CVS plugin and other plugins that react to the import. If the CVS plugin wins the race, then the CVS folders are hidden but if another plugin discovers the CVS folders first, it may cause the workbench to "know" about them and perform inappropriate actions on them. The best way to solve the problem is to run a Team>Update on the project and then shutdown and restart Eclipse (although closing and reopening the view in which the CVS folders appear may work as well). If this fails, you may need to check the projects out from your repository using Eclipse instead of the command line client.
There is a plugin named org.eclipse.team.cvs.delta available on the Development Resources page that loads on startup and ensures that CVS folders are properly hidden. If you import CVS projects often, you may want to use this plugin.
This problem is caused by the keyword substitution mode assigned to the file on the server. Any binary files must be marked as -kb. The default for CVS is to mark unknown file types as text. CVS provides cvswrappers and the cvs admin command to set file types.
There are some cases where CVS folders are not hidden from the UI as the user would expect. For instance, CVS folders will appear if a user imports a CVS project into Eclipse before the CVS plug-in is loaded. To avoid this, open the CVS Repositories view (thus loading the CVS plug-in) before importing CVS projects into Eclipse. There is also a plugin available here that will ensure that the CVS folders are properly hidden even if the CVS plugin is not loaded.
This occurs when files that are resources in Eclipse are modified outside of Eclipse. One solution is to perform a refresh (available from a resource's popup menu) on any resources or projects that where modified outside of Eclipse. There is also an "auto-refresh" plugin available from Platform Core (click here to go to there).
If you have modified a project that you checked out from CVS, you may want to send those changes to someone else. This often occurs when you do not have commit rights, but want to send the changes to someone who does. To create a patch file:
To apply a patch, such as one generated in the previous step, do the following:
Problems have been reported in this area using IBM JRE 1.3.0 on Linux. The solution is to upgrade your JRE to version 1.3.1.
The problem may be the encoding in /etc/sysconfig/i18n file. If the language encoding is
LANG="en_US.UTF-8"changing it to
LANG="en_US"should fix the problem.
Instances of this have been reported that involve the NDIS.sys driver and particular brands of network cards (see bug 21276).
Instances of this have been reported that involve the VIA on-board network cards (see bug 27077). Changing the network card fixed the problem.
I have a large number of entries in my hosts file for anti-ad software - and when I'm connected, name resolution (even to localhost) slows to a crawl. When I'm not connected, localhost gets resolved at normal speed. I think this might be a "feature" of 2000/XP - it didn't happen in NT.
The CVS plugin uses timestamps of the files on disk to track the modification state of versioned files. As a result, there are some cases where Windows users may find that as a result of either (1) an automatic daylight savings change or (2) moving files between file systems, that all the files show up as outgoing changes. See Bug 5337 for an explanation of the problem and workarounds.
Thers is a utility action that will reset the timestamps so the files are in-sync with CVS. Be warned however that this utility resets the timestamps for any file whose timestamp differs from the sync timestamp by 1 hour. There is a possibility that this could reset a file that is really dirty. Use at your own risk. To use the action, install the plugin found here and them run the CVS Util/Fix Timestamps command available from the context menu of the Resource Navigator.
Yes, there are tracing facilities in Eclipse that will allow you to see what messages are being communicated between the CVS client and server. Here's how:
org.eclipse.team.cvs.core/debug=true
org.eclipse.team.cvs.core/cvsprotocol=true
C:\eclipse\eclipse.exe
-vm C:\jre\bin\java.exe
-data C:\eclipse\workspace
-debug
-consolelog
CMD> cvs -n update -d "."
...
update
E cvs server: Updating .
E cvs server: New directory `CVSROOT' -- ignored
E cvs server: New directory `jdt-core-home' -- ignored
E cvs server: New directory `jdt-debug-home' -- ignored
...
The .project file is created and maintained by Eclipse. It stores meta-information about the project, such as which projects it references and what type of project it is. If other members of your team will be using Eclipse to check out this project from CVS, you almost certainly want to release the .project file to CVS. Even if other members of your team are not using Eclipse, you may still want to release the .project file so that the information is persisted for you.
In some circumstances, depending on permissions on the server, you may not be able to browse the repository in the CVS Repositories view. In this case, it may still be possible to check out the project you want.
The project in your workspace is now shared with the CVS repository, and contains the remote contents.
There is a bug in the CVS server related to some compression levels. If you get this error, change the compression level on the CVS preferences page and see if that helps.
There is a bug in the CVS client in Eclipse 2.0 that will not purge the CVS folders properly if a folder under CVS control is moved into a folder that is not under CVS control. If this occurs, you will need to delete the CVS folders manually.
The particular method you have chosen to populate your workspace (i.e. create a new project and then sync against a large existing one) happens to be one of the most ineffiecient operations in the Eclipse CVS client. The CVS protocol does not support this type of operation directly which results in the ineffiecient, communication intensive operation. The proper way to populate your workspace is to use "Checkout as Project" from the CVS Repositories view. Once the project and its contents exists locally, the synchronize operatons should be much faster.
Eclipse 2.1 supports CVS Edit/Unedit. In 2.0, you can use the following workaround:
Run->External Tools->Configure...->New
Name: CVS Watchers
Tool Location: C:\cygwin\bin\cvs.exe
Tool arguments: watchers
Working directory: ${container_loc}
After running, refresh: Nothing
Check Show Execution Log on Console
OK
New
Name: CVS Edit
Tool Location: C:\cygwin\bin\cvs.exe
Tool arguments: edit ${resource_name}
Working directory: ${container_loc}
After running, refresh: Nothing
Check Show Execution Log on Console
OK
Unedit works the same as Edit, Editors works the same way as
Watchers. To use the tools, highlight the file or directory on which to
execute the CVS command, then select Run->External Tools->
The problem is that the CVS server communicates the error details as M messages instead of E messages and so the error handling in Eclipse doesn't display them. Eclipse has a CVS console which you can open from the Window>Show View>Other menu command. If this view is open and you run the failing commit, it will show you the error details.
There are some quirks with some firewalls. See bug 133930 for details