diff options
author | Jeff Johnston | 2019-05-08 22:19:34 +0000 |
---|---|---|
committer | Jeff Johnston | 2019-05-13 23:23:03 +0000 |
commit | 8b2c6229aadf97d65d749ee6962047df512a5024 (patch) | |
tree | b2bfba91698d6243a98f6ee467997114fc8da6fb /launch | |
parent | f89d6e51bcaf495d8455a98773fd605a1133b8f8 (diff) | |
download | org.eclipse.cdt-8b2c6229aadf97d65d749ee6962047df512a5024.tar.gz org.eclipse.cdt-8b2c6229aadf97d65d749ee6962047df512a5024.tar.xz org.eclipse.cdt-8b2c6229aadf97d65d749ee6962047df512a5024.zip |
Bug 547104 - Adding new Docker Connection causes two build dirs
- copy ChangeEvent logic from ContainerGCCToolChainProvider to
ContainerTargetTypeProvider when a new connection is added
Change-Id: Idbdaba7d10e4590722ff442447d195a3a2485907
Diffstat (limited to 'launch')
-rw-r--r-- | launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java index 1b20e3ca293..9e0deaa4e3f 100644 --- a/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java +++ b/launch/org.eclipse.cdt.docker.launcher/src/org/eclipse/cdt/docker/launcher/ContainerTargetTypeProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2018 QNX Software Systems and others. + * Copyright (c) 2017, 2019 QNX Software Systems and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -13,6 +13,7 @@ *******************************************************************************/ package org.eclipse.cdt.docker.launcher; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -22,7 +23,13 @@ import java.util.Set; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.build.ICBuildConfigurationManager; import org.eclipse.cdt.core.build.ICBuildConfigurationManager2; +import org.eclipse.cdt.core.build.IToolChain; +import org.eclipse.cdt.core.build.IToolChainManager; +import org.eclipse.cdt.core.build.IToolChainProvider; import org.eclipse.cdt.debug.core.CDebugCorePlugin; +import org.eclipse.cdt.internal.docker.launcher.ui.launchbar.ContainerGCCToolChain; +import org.eclipse.cdt.internal.docker.launcher.ui.launchbar.ContainerGCCToolChainProvider; +import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -135,7 +142,8 @@ public class ContainerTargetTypeProvider implements ILaunchTargetProvider, IDock checkConfigs.schedule(); try { - launchbarManager.setActiveLaunchTarget(defaultTarget); + if (defaultTarget != null) + launchbarManager.setActiveLaunchTarget(defaultTarget); } catch (CoreException e) { DockerLaunchUIPlugin.log(e); } @@ -168,6 +176,7 @@ public class ContainerTargetTypeProvider implements ILaunchTargetProvider, IDock } List<IDockerImage> images = connection.getImages(); + IToolChainProvider provider = new ContainerGCCToolChainProvider(); for (IDockerImage image : images) { if (!image.isDangling() && !image.isIntermediateImage()) { @@ -197,6 +206,35 @@ public class ContainerTargetTypeProvider implements ILaunchTargetProvider, IDock wc.setAttribute(IContainerLaunchTarget.ATTR_IMAGE_ID, image.repoTags().get(0)); wc.save(); + + Map<String, String> properties = new HashMap<>(); + + properties.put(ILaunchTarget.ATTR_OS, ContainerTargetTypeProvider.CONTAINER_LINUX); + properties.put(ILaunchTarget.ATTR_ARCH, Platform.getOSArch()); + properties.put(IContainerLaunchTarget.ATTR_CONNECTION_URI, connection.getUri()); + properties.put(IContainerLaunchTarget.ATTR_IMAGE_ID, image.repoTags().get(0)); + // following can be used for naming build + // configurations + properties.put(ContainerGCCToolChainProvider.CONTAINER_LINUX_CONFIG_ID, + image.repoTags().get(0).replace(':', '_')); + // .replace('/', '_')); + + IToolChainManager toolChainManager = MakeCorePlugin.getService(IToolChainManager.class); + + Collection<IToolChain> toolChains; + try { + toolChains = toolChainManager.getToolChainsMatching(properties); + if (toolChains.isEmpty()) { + ContainerGCCToolChain toolChain = new ContainerGCCToolChain( + "gcc-img-" + image.id().substring(0, //$NON-NLS-1$ + 19), + provider, properties, null); + toolChainManager.addToolChain(toolChain); + } + } catch (CoreException e) { + DockerLaunchUIPlugin.log(e); + } + } } |