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

Bug 334485

Summary: Deleting Git repository from git repository exploring perspective also deletes everything on filesystem
Product: [Technology] EGit Reporter: Yann PETIT <yann.petit>
Component: CoreAssignee: Mathias Kinzler <mathias.kinzler>
Status: RESOLVED FIXED QA Contact:
Severity: critical    
Priority: P3 CC: christian.halstrick, matthias.sohn, nyouna, yann.petit
Version: 0.11   
Target Milestone: 0.11-M1   
Hardware: PC   
OS: Linux   
Whiteboard:

Description Yann PETIT CLA 2011-01-16 16:54:42 EST
Build Identifier: 20100617-1415

When deleting a local repository from the "Git repository exploring" perspective, also deletes every files on the filesystem from the parent directory containing the ".git" one.
I don't think this is the way it should go.
Isn't it supposed to only delete the .git directory ? 


Reproducible: Always

Steps to Reproduce:
Assumes you have the eGit plugin installed
1.Create a new Java project
2.Share project using git (Right click on project : Team > Share Project > Git and a create a new local repo. By default and for me the only way to go it creates a .git directory at the root of your project.
3.Open the Git repository exploring perspective, your project local repository should appear.
4. Check that local repository is pat/to/project/.git
5. Ask to delete this local repository, but confirm you want to keep files under eclipse.
6. Go back to java perspective, open the navigator view and try to open any file... try ".classpath" for example.  => File has been deleted.
7. Check on the filesystem your project directory using shell ls command or an explorer like nautilus and you'll see that the project is empty.
Comment 1 Yann PETIT CLA 2011-01-16 16:58:37 EST
Here are some logs extracts from the first time I experienced the bug.
AFAIK the first !ENTRY always occurs when deleting a repository.

!ENTRY org.eclipse.jface 2 0 2011-01-15 14:42:45.162
!MESSAGE Keybinding conflicts occurred.  They may interfere with normal accelerator operation.
!SUBENTRY 1 org.eclipse.jface 2 0 2011-01-15 14:42:45.162
!MESSAGE A conflict occurred for ALT+CTRL+I:
Binding(ALT+CTRL+I,
	ParameterizedCommand(Command(org.eclipse.team.svn.ui.command.AddToSVNIgnoreCommand,Add to svn:ignore...,
		,
		Category(org.eclipse.team.svn.ui.command.category,SVN,null,true),
		,
		,,true),null),
	org.eclipse.ui.defaultAcceleratorConfiguration,
	org.eclipse.ui.contexts.window,,,system)
Binding(ALT+CTRL+I,
	ParameterizedCommand(Command(org.eclipse.egit.ui.team.Ignore,Ignore,
		,
		Category(org.eclipse.egit.ui.commandCategory,Git,null,true),
		org.eclipse.egit.ui.internal.actions.IgnoreActionHandler,
		,,true),null),
	org.eclipse.ui.defaultAcceleratorConfiguration,
	org.eclipse.ui.contexts.window,,,system)
!SUBENTRY 1 org.eclipse.jface 2 0 2011-01-15 14:42:45.162
!MESSAGE A conflict occurred for ALT+CTRL+C:
Binding(ALT+CTRL+C,
	ParameterizedCommand(Command(org.eclipse.team.svn.ui.command.CommitCommand,Commit...,
		,
		Category(org.eclipse.team.svn.ui.command.category,SVN,null,true),
		,
		,,true),null),
	org.eclipse.ui.defaultAcceleratorConfiguration,
	org.eclipse.ui.contexts.window,,,system)
Binding(ALT+CTRL+C,
	ParameterizedCommand(Command(org.eclipse.egit.ui.team.Commit,Commit,
		,
		Category(org.eclipse.egit.ui.commandCategory,Git,null,true),
		org.eclipse.egit.ui.internal.actions.CommitActionHandler,
		,,true),null),
	org.eclipse.ui.defaultAcceleratorConfiguration,
	org.eclipse.ui.contexts.window,,,system)

!ENTRY org.eclipse.osgi 2 1 2011-01-15 14:42:49.288
!MESSAGE NLS unused message: Operation_GetRemoteChildren in: org.eclipse.team.svn.ui.messages

!ENTRY org.eclipse.osgi 2 1 2011-01-15 14:42:49.288
!MESSAGE NLS unused message: Operation_GetRemoteChildren_Error in: org.eclipse.team.svn.ui.messages

!ENTRY org.eclipse.osgi 2 1 2011-01-15 14:42:49.288
!MESSAGE NLS unused message: Operation_GetRemoteChildren_Id in: org.eclipse.team.svn.ui.messages

!ENTRY org.eclipse.egit.ui 4 0 2011-01-15 14:49:54.461
!MESSAGE Could not delete file /play
!STACK 0
java.io.IOException: Could not delete file /play
	at org.eclipse.jgit.util.FileUtils.delete(FileUtils.java:133)
	at org.eclipse.egit.ui.internal.repository.tree.command.RemoveCommand$1.run(RemoveCommand.java:170)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

!ENTRY org.eclipse.ui.workbench 4 2 2011-01-15 14:50:00.761
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench".
!STACK 0
java.lang.IllegalArgumentException: file /play/playconf is no directory
	at org.eclipse.egit.core.IteratorService.findContainer(IteratorService.java:57)
	at org.eclipse.egit.core.IteratorService.createInitialIterator(IteratorService.java:39)
	at org.eclipse.egit.ui.internal.decorators.DecoratableResourceAdapter.createThreeWayTreeWalk(DecoratableResourceAdapter.java:425)
	at org.eclipse.egit.ui.internal.decorators.DecoratableResourceAdapter.<init>(DecoratableResourceAdapter.java:114)
	at org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator.decorate(GitLightweightDecorator.java:226)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
	at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
	at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

!ENTRY org.eclipse.ui 4 4 2011-01-15 14:50:00.764
!MESSAGE Exception in Decorator. The 'Git' decorator will be disabled.

!ENTRY org.eclipse.ui 4 4 2011-01-15 14:50:00.764
!MESSAGE file /play/playconf is no directory
!STACK 0
java.lang.IllegalArgumentException: file /play/playconf is no directory
	at org.eclipse.egit.core.IteratorService.findContainer(IteratorService.java:57)
	at org.eclipse.egit.core.IteratorService.createInitialIterator(IteratorService.java:39)
	at org.eclipse.egit.ui.internal.decorators.DecoratableResourceAdapter.createThreeWayTreeWalk(DecoratableResourceAdapter.java:425)
	at org.eclipse.egit.ui.internal.decorators.DecoratableResourceAdapter.<init>(DecoratableResourceAdapter.java:114)
	at org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator.decorate(GitLightweightDecorator.java:226)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
	at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
	at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
	at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

!ENTRY org.eclipse.core.resources 4 4 2011-01-15 15:37:30.559
!MESSAGE Exception loading preferences from: /PlayCRA/.settings/org.eclipse.core.resources.prefs.
!STACK 1
org.eclipse.core.runtime.CoreException: File not found: /play/PlayCRA/.settings/org.eclipse.core.resources.prefs.
	at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55)
	at org.eclipse.core.internal.filesystem.local.LocalFile.openInputStream(LocalFile.java:371)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:702)
	at org.eclipse.core.internal.resources.File.getContents(File.java:293)
	at org.eclipse.core.internal.resources.ProjectPreferences.load(ProjectPreferences.java:463)
	at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:307)
	at org.eclipse.core.internal.preferences.EclipsePreferences.getChild(EclipsePreferences.java:412)
	at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:541)
	at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:669)
	at org.eclipse.core.internal.resources.CharsetManager.getPreferences(CharsetManager.java:231)
	at org.eclipse.core.internal.resources.CharsetManager$Listener.processEntryChanges(CharsetManager.java:122)
	at org.eclipse.core.internal.resources.CharsetManager$Listener.resourceChanged(CharsetManager.java:173)
	at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:291)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:285)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:149)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:327)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1181)
	at org.eclipse.core.internal.resources.Resource.refreshLocal(Resource.java:1674)
	at org.eclipse.core.internal.resources.File.refreshLocal(File.java:337)
	at org.jboss.tools.common.core.resources.XModelObjectEditorInput.convertFileInput(XModelObjectEditorInput.java:198)
	at org.jboss.tools.common.core.resources.XModelObjectEditorInput.checkInput(XModelObjectEditorInput.java:180)
	at org.jboss.tools.jst.jsp.jspeditor.JSPMultiPageEditorPart.init(JSPMultiPageEditorPart.java:207)
	at org.eclipse.ui.internal.EditorManager.createSite(EditorManager.java:798)
	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:647)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
	at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2863)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2768)
	at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2760)
	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2711)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2707)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2691)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2682)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610)
	at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileAction.java:99)
	at org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystemEditorAction.java:99)
	at org.eclipse.ui.views.navigator.OpenActionGroup.runDefaultAction(OpenActionGroup.java:133)
	at org.eclipse.ui.views.navigator.MainActionGroup.runDefaultAction(MainActionGroup.java:330)
	at org.eclipse.ui.views.navigator.ResourceNavigator.handleOpen(ResourceNavigator.java:787)
	at org.eclipse.ui.views.navigator.ResourceNavigator$6.open(ResourceNavigator.java:499)
	at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48)
	at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:845)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
	at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:843)
	at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1131)
	at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1235)
	at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:264)
	at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:258)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:298)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3552)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3171)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	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:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: java.io.FileNotFoundException: /play/PlayCRA/.settings/org.eclipse.core.resources.prefs (No such file or directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at org.eclipse.core.internal.filesystem.local.LocalFile.openInputStream(LocalFile.java:362)
	... 78 more
Comment 2 Nicolas CLA 2011-01-23 07:34:33 EST
also occurs on Windows 7/eclipse_3.6.1/egit_0.10.1

VERY DANGEROUS BUG! Able to wipe all your workspace if you put the .git folder into your workspace directory, even more if it is at the HD root!
Comment 3 Mathias Kinzler CLA 2011-01-24 09:25:46 EST
Code review at

http://egit.eclipse.org/r/#change,2320
Comment 4 Matthias Sohn CLA 2011-01-25 18:06:21 EST
merged as 526e8486200877f79313f668a5d81889a41d0a8d