When attempting to use the Synchronize wizard to start the process of using Mercurial Eclipse, the "Finish" button has no perceivable effect. In the eclipse log, we find the following NPE:
!ENTRY org.eclipse.ui 4 0 2010-06-30 15:46:50.287
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NullPointerException
at com.vectrace.MercurialEclipse.wizards.CloneRepoWizard.canFinish(CloneRepoWizard.java:88)
at org.eclipse.team.ui.synchronize.ParticipantSynchronizeWizard.canFinish(ParticipantSynchronizeWizard.java:106)
at org.eclipse.team.internal.ui.wizards.GlobalSynchronizeWizard.performFinish(GlobalSynchronizeWizard.java:82)
at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:811)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:430)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.team.internal.ui.synchronize.actions.SynchronizePageDropDownAction$1.run(SynchronizePageDropDownAction.java:40)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
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)
The repository in question was created using TortoiseHg. We currently predominantly use Subversion, so I created the repo by:
- Creating an empty repo at the workspace level using TortoiseHg
- Checked out the source code from Subversion into the same directory (using TortoiseSVN if it matters)
- Committing to the new Hg repository
- Cloning this repo to a second Hg repository
- Using mq to add (and apply) a series of patches in the second Hg repository
I then opened eclipse, imported the projects, and then once eclipse had settled down, used the "Synchronize" button on the "Synchronize" view to open the wizard, selected "Mercurial" and pressed "Finish" (the "Next" button was not enabled). As described above, the button press did not appear to respond, and the NPE was recorded in the eclipse log. Pressing the Finish button multiple times was rewarded with multiples of the same NPE
If it matters, Subversive is not installed (the second repo doesn't have a subversion presence at all in the workspace).
This is a reasonably large repository (over 53k files in 29k+ folders totalling 392 MB), since this is a commercial product, I cannot supply the repository (which would of course be larger, this does not include the .hg directory).
I attempted to reproduce the problem on a smaller repository with only two projects and some trivial dummy/test data following much the same process (sans svn), but everything worked beautifully.
Hopefully the stack trace is enough to point to the likely problem.
Environment:
| Version |
MercurialEclipse | 1.6.0.v201005111545 |
Windows Binaries for Mercurial | 1.4.3.v201005111545 |
Eclipse | 3.6.0 (build id I20100608-0911) |
TortoiseHg | 1.0 (Mercurial 1.5, Python 2.6.4, PyGTK-2.16.0, GTK 2.18.7) |
Operating System | Windows XP SP2 |