Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 347220

Summary: errors when renaming project
Product: [Eclipse Project] Platform Reporter: Alain Lee <a-lee>
Component: ResourcesAssignee: Szymon Brandys <Szymon.Brandys>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 CC: cdtdoug, jamesblackburn+eclipse, Szymon.Brandys
Version: 3.7   
Target Milestone: 3.8 M4   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Alain Lee CLA 2011-05-25 16:39:36 EDT
1. Create a C project. Name it my_test_A.
2. Add the following main.c file to the project:
void main()
{

}
3. Build my_test_A.
4. Create a C project. Name it my_test_B.
5. Add the following main.c file to the project:
void main()
{

}
6. Build my_test_B.
7. Delete my_test_B and select the option "Delete project contents on disk".
8. Rename project my_test_A to my_test_B.
9. The following errors are seen in the error log:

org.eclipse.core.runtime.CoreException: File already exists on disk: C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55)
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:50)
	at org.eclipse.core.internal.filesystem.local.LocalFile.move(LocalFile.java:319)
	at org.eclipse.core.internal.resources.ResourceTree.movedProjectSubtree(ResourceTree.java:659)
	at org.eclipse.core.internal.resources.ResourceTree.standardMoveProject(ResourceTree.java:1085)
	at org.eclipse.core.internal.resources.Resource.unprotectedMove(Resource.java:1976)
	at org.eclipse.core.internal.resources.Resource.move(Resource.java:1591)
	at org.eclipse.ltk.core.refactoring.resource.RenameResourceChange.perform(RenameResourceChange.java:123)
	at org.eclipse.ltk.core.refactoring.CompositeChange.perform(CompositeChange.java:278)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation$1.run(PerformChangeOperation.java:258)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2310)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.executeChange(PerformChangeOperation.java:306)
	at org.eclipse.ltk.internal.ui.refactoring.UIPerformChangeOperation.executeChange(UIPerformChangeOperation.java:92)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:218)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2310)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)


org.eclipse.core.internal.resources.ResourceException: Problems encountered while moving resources.
	at org.eclipse.core.internal.resources.Resource.move(Resource.java:1603)
	at org.eclipse.ltk.core.refactoring.resource.RenameResourceChange.perform(RenameResourceChange.java:123)
	at org.eclipse.ltk.core.refactoring.CompositeChange.perform(CompositeChange.java:278)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation$1.run(PerformChangeOperation.java:258)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2310)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.executeChange(PerformChangeOperation.java:306)
	at org.eclipse.ltk.internal.ui.refactoring.UIPerformChangeOperation.executeChange(UIPerformChangeOperation.java:92)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:218)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2310)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Contains: Error moving metadata area from C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_A to C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.
org.eclipse.core.runtime.CoreException: File already exists on disk: C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55)
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:50)
	at org.eclipse.core.internal.filesystem.local.LocalFile.move(LocalFile.java:319)
	at org.eclipse.core.internal.resources.ResourceTree.movedProjectSubtree(ResourceTree.java:659)
	at org.eclipse.core.internal.resources.ResourceTree.standardMoveProject(ResourceTree.java:1085)
	at org.eclipse.core.internal.resources.Resource.unprotectedMove(Resource.java:1976)
	at org.eclipse.core.internal.resources.Resource.move(Resource.java:1591)
	at org.eclipse.ltk.core.refactoring.resource.RenameResourceChange.perform(RenameResourceChange.java:123)
	at org.eclipse.ltk.core.refactoring.CompositeChange.perform(CompositeChange.java:278)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation$1.run(PerformChangeOperation.java:258)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2310)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.executeChange(PerformChangeOperation.java:306)
	at org.eclipse.ltk.internal.ui.refactoring.UIPerformChangeOperation.executeChange(UIPerformChangeOperation.java:92)
	at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:218)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2310)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Comment 1 James Blackburn CLA 2011-05-26 04:25:47 EDT
This is likely a core.resources issue:

Contains: Error moving metadata area from
C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_A
to
C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.
org.eclipse.core.runtime.CoreException: File already exists on disk:
C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.

Could you confirm which version of the platform you're running?
Comment 2 Alain Lee CLA 2011-05-26 10:13:21 EDT
We are running with Indigo M7.
Comment 3 Szymon Brandys CLA 2011-08-16 05:39:26 EDT
(In reply to comment #1)
> This is likely a core.resources issue:
> 
> Contains: Error moving metadata area from
> C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_A
> to
> C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.
> org.eclipse.core.runtime.CoreException: File already exists on disk:
> C:\Work\CCS_5.1_Eclipse_Indiigo_M7\workspace_run\.metadata\.plugins\org.eclipse.core.resources\.projects\my_test_B.
> 
> Could you confirm which version of the platform you're running?

James were you able to reproduce he problem?
Comment 4 James Blackburn CLA 2011-11-17 16:40:06 EST
(In reply to comment #3)
> James were you able to reproduce he problem?

I think I've seen this exception before, but not sure how to reproduce.  AFAICS .projects/... is automatically cleaned up when the project is deleted.
Comment 5 Szymon Brandys CLA 2011-11-18 13:08:08 EST
I managed to reproduce it using vanilla Eclipse.
1) Create a regular project
2) Add a folder and a file inside
3) Modify the file to create an entry in the history
4) Delete the project
5) Try to rename any other project using the name of the deleted one
The same problem. 

The issue is Project#deleteResource that calls clearHistory at the end. This call may try to store history on disc, see Bucket#load and Bucket#save. At the end all history files will be deleted, but the project folder in .metadata\.plugins\org.eclipse.core.resources\.projects remains. Simple inversion of workspace.getMetaArea().delete(this); and clearHistory(null); helps.