« Happy Thanksgiving | Main | High-tech Washing »

Eclipse, SVN, Subclipse, and case sensitivity

I don't know what it was about today, but I did something different when setting up a new workspace in Eclipse. We recently branched our code to work on a new feature for the site. I did my usual trick of copying my "Tip of the Tree" Eclipse workspace to a new directory and renaming it. I then launched Eclipse with the new workspace, deleted all of the old projects, and lastly imported the projects for the newly branched code. The problem was this time all of the nice Subclipse icons didn't show up. After repeating this process a couple of times, it finally dawned on me to check the Eclipse .log. It had this lovely message in it:

Provided SVN information does not match that on disk for project

A quick Google search didn't turn up anything helpful. Needless to say after a couple hours of banging of head against the desk I found the problem. Some combination of Eclipse, SVN, and Subclipse was case sensitive. I was saving time when importing the projects and just trying in the path, turns out even on Windows "c:\source\" is different than "c:\Source". The lesson in all of this is to only use the directory browser when selecting projects to import, otherwise the case may haunt you.

Along the way I also upgrade my versions of Subclipse and SVN, that lead to the following message showing up in my Eclipse .log:

!ENTRY org.eclipse.osgi 2005-12-06 12:06:18.377
!MESSAGE While loading class "org.tigris.subversion.svnclientadapter.commandline.Helper", thread "Thread-2" timed out waiting (5000ms) for thread "Worker-0" to finish starting bundle "org.tigris.subversion.subclipse.core". To avoid deadlock, thread "Thread-2" is proceeding but "org.tigris.subversion.svnclientadapter.commandline.Helper" may not be fully initialized.
!STACK 0
java.lang.Exception: Generated exception.
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass(EclipseClassLoader.java:108)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:337)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:389)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:350)
	at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass(AbstractClassLoader.java:78)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	at org.tigris.subversion.svnclientadapter.commandline.CommandLine$CharacterStreamPumper.pumpStream(CommandLine.java:308)
	at org.tigris.subversion.svnclientadapter.commandline.CommandLine$StreamPumper.run(CommandLine.java:245)
	at java.lang.Thread.run(Thread.java:534)
!ENTRY org.eclipse.osgi 2005-12-06 12:06:23.715
!MESSAGE While loading class "org.tigris.subversion.subclipse.ui.console.SVNOutputConsole$2", thread "main" timed out waiting (5000ms) for thread "Worker-0" to finish starting bundle "org.tigris.subversion.subclipse.ui". To avoid deadlock, thread "main" is proceeding but "org.tigris.subversion.subclipse.ui.console.SVNOutputConsole$2" may not be fully initialized.
!STACK 0
java.lang.Exception: Generated exception.
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass(EclipseClassLoader.java:108)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:337)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:389)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:350)
	at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass(AbstractClassLoader.java:78)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	at org.tigris.subversion.subclipse.ui.console.SVNOutputConsole.createPage(SVNOutputConsole.java:160)
	at org.eclipse.ui.internal.console.ConsoleView.doCreatePage(ConsoleView.java:258)
	at org.eclipse.ui.part.PageBookView.createPage(PageBookView.java:315)
	at org.eclipse.ui.part.PageBookView.partActivated(PageBookView.java:613)
	at org.eclipse.ui.internal.console.ConsoleView$1.run(ConsoleView.java:331)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3057)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2716)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:367)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:376)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:163)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
	at org.eclipse.core.launcher.Main.run(Main.java:973)
	at org.eclipse.core.launcher.Main.main(Main.java:948)

I was only able to find one reference to that and by all indications it is a harmless error. At least after I corrected the case of the project path everything seems to be working fine. Not sure what brought that message on I kind of abandoned the scientific method of only changing one thing at a time when I entered the second hour of trying to figure out why things stopped working.

Comments

There is a Subclipse FAQ about this: http://subclipse.tigris.org/faq.html#path-case We pop-up that dialog to try to stop the exact problem you had, which is hard to figure out. I guess by copying a workspace you thwarted our attempts to notify you of the problem. Had you attempted to Checkout/Share a project we would have given you the dialog. This used to bite people all of the time. The latest release of Subclipse, 0.9.101 should get that 5000ms timeout problem a lot less frequently.
Mark, Thanks for the follow-up. I did run across the FAQ entry when searching for the answer, but I never got a dialog box which made me think I had a different issue. I just created a new workspace in Eclipse 3.1.0 (Build id: I20050627-1435) with Subclipse 0.9.37 and JavaSVN 0.8.8.1. I imported a project using the incorrect path (c:\source\server-beta in this case). No dialog box appeared. My Eclipse .log file is littered with messages along the lines of (once for every file in the project):
!ENTRY org.tigris.subversion.subclipse.core 4 -6 2005-12-06 22:50:25.206
!MESSAGE An (un?)expected error has occured! Please report to users@subclipse.tigris.org !
pathForLocation(C:\Source\server-beta\test\src\java\com\example\test\jndi\MockContext.java) is null ! Url:
svn://svn.example.com/server/branches/beta/test/src/java/com/example/test/jndi/MockContext.java
Projects: [Lorg.eclipse.core.resources.IProject;@eb5cdc
The project then appears with a ? icon next to the folder and [] after the project name in the package explorer.
I think that is the same issue, it is just that we have no way to really trap the problem when it is created that way. The release is posted to a new update site location. You need to read the release announcement: http://subclipse.tigris.org/servlets/NewsItemView?newsItemID=1391
Is it true that the thread-timout non-error only occurs when you have a svn perspective/view open when you start eclipse? I'd heard that if you don't start it with svn stuff open it won't throw this error, but I never verified... eh...