diff options
| author | Ed Merks | 2015-04-08 14:23:54 +0000 |
|---|---|---|
| committer | Ed Merks | 2015-04-08 14:23:54 +0000 |
| commit | e9d03f79db6daaa87d1bf96c01e066ebdc3135b5 (patch) | |
| tree | 9709856e4887c6050c20d46ff7665469a512eff5 | |
| parent | 39108f7d8ff52498133129824b9b11f6f72cfe0f (diff) | |
| download | org.eclipse.oomph-e9d03f79db6daaa87d1bf96c01e066ebdc3135b5.tar.gz org.eclipse.oomph-e9d03f79db6daaa87d1bf96c01e066ebdc3135b5.tar.xz org.eclipse.oomph-e9d03f79db6daaa87d1bf96c01e066ebdc3135b5.zip | |
[463967] Initial prototype for a setup mirror
https://bugs.eclipse.org/bugs/show_bug.cgi?id=463967
3 files changed, 200 insertions, 0 deletions
diff --git a/plugins/org.eclipse.oomph.setup.installer/SetupMirror.launch b/plugins/org.eclipse.oomph.setup.installer/SetupMirror.launch new file mode 100644 index 000000000..cb99bea66 --- /dev/null +++ b/plugins/org.eclipse.oomph.setup.installer/SetupMirror.launch @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench"> +<setAttribute key="additional_plugins"/> +<booleanAttribute key="append.args" value="true"/> +<stringAttribute key="application" value="org.eclipse.oomph.setup.installer.SetupMirror"/> +<booleanAttribute key="askclear" value="false"/> +<booleanAttribute key="automaticAdd" value="false"/> +<booleanAttribute key="automaticValidate" value="true"/> +<stringAttribute key="bad_container_name" value="\org.eclipse.oomph.setup.insta"/> +<stringAttribute key="bootstrap" value=""/> +<stringAttribute key="checked" value="[NONE]"/> +<booleanAttribute key="clearConfig" value="true"/> +<booleanAttribute key="clearws" value="false"/> +<booleanAttribute key="clearwslog" value="false"/> +<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/SetupMirror"/> +<booleanAttribute key="default" value="false"/> +<stringAttribute key="featureDefaultLocation" value="workspace"/> +<stringAttribute key="featurePluginResolution" value="workspace"/> +<booleanAttribute key="includeOptional" value="false"/> +<stringAttribute key="location" value="@none"/> +<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> +<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/> +<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> +<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dheadless.startup=true"/> +<stringAttribute key="pde.version" value="3.3"/> +<stringAttribute key="product" value="org.eclipse.sdk.ide"/> +<setAttribute key="selected_features"> +<setEntry value="org.eclipse.oomph.p2:default"/> +<setEntry value="org.eclipse.oomph.setup.installer:default"/> +</setAttribute> +<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,com.jcraft.jsch@default:default,javax.annotation@default:default,javax.inject@default:default,javax.xml@default:default,org.apache.batik.css*1.6.0.v201011041432@default:default,org.apache.batik.css*1.7.0.v201011041433@default:default,org.apache.batik.util*1.6.0.v201011041432@default:default,org.apache.batik.util*1.7.0.v201011041433@default:default,org.apache.batik.util.gui*1.6.0.v201011041432@default:default,org.apache.batik.util.gui*1.7.0.v200903091627@default:default,org.apache.commons.codec@default:default,org.apache.commons.logging@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.java7@default:false,org.eclipse.core.filesystem.win32.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.win32.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources.win32.x86_64@default:false,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.httpclient4.ssl@default:false,org.eclipse.ecf.provider.filetransfer.httpclient4@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.emf.common.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.console@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.publisher.eclipse@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.touchpoint.natives@default:default,org.eclipse.equinox.p2.transport.ecf@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security.win32.x86_64@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.util@default:default,org.eclipse.help@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.jsch.core@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.pde.build@default:default,org.eclipse.pde.core@default:default,org.eclipse.swt.win32.win32.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.team.core@default:default,org.eclipse.text@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.net@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.win32@default:false,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.eclipse.update.configurator@3:true,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/> +<stringAttribute key="selected_workspace_plugins" value="org.eclipse.oomph.base.edit@default:default,org.eclipse.oomph.base@default:default,org.eclipse.oomph.extractor.lib@default:default,org.eclipse.oomph.jreinfo.ui@default:default,org.eclipse.oomph.jreinfo.win32.x86_64@default:false,org.eclipse.oomph.jreinfo@default:default,org.eclipse.oomph.p2.core@default:default,org.eclipse.oomph.p2.edit@default:default,org.eclipse.oomph.p2.ui@default:default,org.eclipse.oomph.p2@default:default,org.eclipse.oomph.predicates@default:default,org.eclipse.oomph.preferences@default:default,org.eclipse.oomph.resources@default:default,org.eclipse.oomph.setup.core@default:default,org.eclipse.oomph.setup.edit@default:default,org.eclipse.oomph.setup.installer@default:default,org.eclipse.oomph.setup.p2.edit@default:default,org.eclipse.oomph.setup.p2@default:default,org.eclipse.oomph.setup.tests@default:default,org.eclipse.oomph.setup.ui@default:default,org.eclipse.oomph.setup@default:default,org.eclipse.oomph.targlets.core@default:default,org.eclipse.oomph.targlets@default:default,org.eclipse.oomph.ui@default:default,org.eclipse.oomph.util.pde@default:default,org.eclipse.oomph.util@default:default"/> +<booleanAttribute key="show_selected_only" value="false"/> +<stringAttribute key="templateConfig" value="${target_home}\configuration\config.ini"/> +<booleanAttribute key="tracing" value="false"/> +<booleanAttribute key="useCustomFeatures" value="true"/> +<booleanAttribute key="useDefaultConfig" value="true"/> +<booleanAttribute key="useDefaultConfigArea" value="true"/> +<booleanAttribute key="useProduct" value="false"/> +</launchConfiguration> diff --git a/plugins/org.eclipse.oomph.setup.installer/plugin.xml b/plugins/org.eclipse.oomph.setup.installer/plugin.xml index 3b8d6e511..ffbdcf5b8 100644 --- a/plugins/org.eclipse.oomph.setup.installer/plugin.xml +++ b/plugins/org.eclipse.oomph.setup.installer/plugin.xml @@ -25,6 +25,19 @@ </run> </application> </extension> + + <extension + id="SetupMirror" + point="org.eclipse.core.runtime.applications"> + <application + cardinality="singleton-global" + thread="main" + visible="true"> + <run + class="org.eclipse.oomph.setup.internal.installer.SetupMirror"> + </run> + </application> + </extension> <extension id="application" diff --git a/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SetupMirror.java b/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SetupMirror.java new file mode 100644 index 000000000..4f451f4b7 --- /dev/null +++ b/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SetupMirror.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 201t Ed Merks and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Ed Merks - initial API and implementation + */ +package org.eclipse.oomph.setup.internal.installer; + +import org.eclipse.oomph.setup.internal.core.SetupContext; +import org.eclipse.oomph.setup.internal.core.util.ECFURIHandlerImpl; +import org.eclipse.oomph.setup.internal.core.util.ResourceMirror; +import org.eclipse.oomph.setup.internal.core.util.SetupCoreUtil; +import org.eclipse.oomph.util.IOUtil; +import org.eclipse.oomph.util.OS; + +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.URIConverter; +import org.eclipse.emf.ecore.util.EcoreUtil; + +import org.eclipse.equinox.app.IApplication; +import org.eclipse.equinox.app.IApplicationContext; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Ed Merks + */ +public class SetupMirror implements IApplication +{ + private static final URI GIT_C_PREFIX = URI.createURI("http://git.eclipse.org/c/"); + + public Object start(IApplicationContext context) throws Exception + { + // String[] arguments = (String[])context.getArguments().get(IApplicationContext.APPLICATION_ARGS); + + ResourceSet resourceSet = SetupCoreUtil.createResourceSet(); + new ResourceMirror(resourceSet).perform(SetupContext.INDEX_SETUP_URI); + EcoreUtil.resolveAll(resourceSet); + + File file = new File(System.getProperty("java.io.tmpdir"), "setups.zip"); + long lastModified = file.lastModified(); + File temp = new File(file.toString() + ".tmp"); + URI outputLocation; + if (lastModified == 0) + { + outputLocation = URI.createURI("archive:" + URI.createFileURI(file.toString()) + "!/"); + } + else + { + try + { + IOUtil.copyFile(file, temp); + } + catch (Throwable throwable) + { + throwable.printStackTrace(); + } + + if (!temp.setLastModified(lastModified)) + { + System.err.println("Count not set timestamp of " + temp); + } + + outputLocation = URI.createURI("archive:" + URI.createFileURI(temp.toString()) + "!/"); + } + + ECFURIHandlerImpl.clearExpectedETags(); + + URIConverter uriConverter = resourceSet.getURIConverter(); + Map<URI, URI> uriMap = uriConverter.getURIMap(); + Map<Object, Object> options = new HashMap<Object, Object>(); + if (lastModified != 0) + { + options.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER); + // options.put(Resource.OPTION_LINE_DELIMITER, "\n"); + } + + for (Resource resource : resourceSet.getResources()) + { + URI uri = resource.getURI(); + URI normalizedURI = uriConverter.normalize(uri); + URI deresolvedURI = normalizedURI.deresolve(GIT_C_PREFIX, true, true, false); + if (deresolvedURI.hasRelativePath()) + { + System.out.println("Mirroring " + normalizedURI); + + URI output = deresolvedURI.resolve(outputLocation); + uriMap.put(normalizedURI, output); + resource.save(options); + } + else + { + System.out.println("Ignoring " + normalizedURI); + } + } + + long finalLastModified = lastModified == 0 ? file.lastModified() : temp.lastModified(); + + if (lastModified != finalLastModified) + { + if (OS.INSTANCE.isWin()) + { + if (lastModified != 0 && !file.delete()) + { + System.err.println("Could not delete " + file); + } + } + + if (lastModified == 0) + { + System.out.println("Successfully created " + file); + } + else if (temp.renameTo(file)) + { + System.out.println("Successful updates for " + file); + } + else + { + System.err.println("Could not rename " + temp + " to " + file); + } + } + else + { + System.out.println("No updates for " + file); + if (!temp.delete()) + { + System.err.println("Could not delete " + temp); + } + } + + return null; + } + + public void stop() + { + } + +} |
