diff options
author | Eike Stepper | 2012-08-28 12:01:41 +0000 |
---|---|---|
committer | Eike Stepper | 2012-08-28 12:01:41 +0000 |
commit | 75c6827aa0a46243d7e8a5e6e542cea46947286f (patch) | |
tree | 8ccf2a8aad52aa1ac81500e79bc24d212f7e852b /plugins/org.eclipse.emf.cdo.releng.version | |
parent | 5a8360ab2bbf49f8eb9a84d48f31fee7af28bfe0 (diff) | |
download | cdo-75c6827aa0a46243d7e8a5e6e542cea46947286f.tar.gz cdo-75c6827aa0a46243d7e8a5e6e542cea46947286f.tar.xz cdo-75c6827aa0a46243d7e8a5e6e542cea46947286f.zip |
Add Manage Ignored Releases
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.version')
4 files changed, 201 insertions, 18 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/Activator.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/Activator.java index 322ad4a361..40b54878de 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/Activator.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/Activator.java @@ -30,9 +30,11 @@ import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; /** * @author Eike Stepper @@ -41,13 +43,17 @@ public class Activator extends Plugin { public static final String PLUGIN_ID = "org.eclipse.emf.cdo.releng.version"; + private static final String IGNORED_RELEASES = "ignoredReleases.bin"; + + private static final String BUILD_STATES = "buildStates.bin"; + private static Activator plugin; private static IResourceChangeListener postBuildListener; - private Map<String, BuildState> buildStates; + private IgnoredReleases ignoredReleases; - private File stateFile; + private Map<String, BuildState> buildStates; public Activator() { @@ -61,8 +67,23 @@ public class Activator extends Plugin try { - File stateFolder = Platform.getStateLocation(getBundle()).toFile(); - stateFile = new File(stateFolder, "buildStates.bin"); + File stateFile = getStateFile(IGNORED_RELEASES); + if (stateFile.exists()) + { + loadIgnoredReleases(); + } + } + finally + { + if (ignoredReleases == null) + { + ignoredReleases = new IgnoredReleases(); + } + } + + try + { + File stateFile = getStateFile(BUILD_STATES); if (stateFile.exists()) { loadBuildStates(); @@ -93,18 +114,65 @@ public class Activator extends Plugin buildStates = null; } - stateFile = null; plugin = null; super.stop(context); } + private File getStateFile(String name) + { + File stateFolder = Platform.getStateLocation(getBundle()).toFile(); + return new File(stateFolder, name); + } + + private void loadIgnoredReleases() + { + ObjectInputStream stream = null; + + try + { + File stateFile = getStateFile(IGNORED_RELEASES); + stream = new ObjectInputStream(new FileInputStream(stateFile)); + ignoredReleases = (IgnoredReleases)stream.readObject(); + } + catch (Exception ex) + { + log(ex); + } + finally + { + VersionUtil.close(stream); + } + } + + private void saveIgnoredReleases() + { + ObjectOutputStream stream = null; + + try + { + File stateFile = getStateFile(IGNORED_RELEASES); + stream = new ObjectOutputStream(new FileOutputStream(stateFile)); + stream.writeObject(ignoredReleases); + } + catch (Exception ex) + { + log(ex); + } + finally + { + VersionUtil.close(stream); + } + } + private void loadBuildStates() { ObjectInputStream stream = null; try { + File stateFile = getStateFile(BUILD_STATES); stream = new ObjectInputStream(new FileInputStream(stateFile)); + @SuppressWarnings("unchecked") Map<String, BuildState> object = (Map<String, BuildState>)stream.readObject(); buildStates = object; @@ -136,6 +204,7 @@ public class Activator extends Plugin try { + File stateFile = getStateFile(BUILD_STATES); stream = new ObjectOutputStream(new FileOutputStream(stateFile)); stream.writeObject(buildStates); } @@ -145,20 +214,15 @@ public class Activator extends Plugin } finally { - if (stream != null) - { - try - { - stream.close(); - } - catch (Exception ex) - { - log(ex); - } - } + VersionUtil.close(stream); } } + public static Set<String> getIgnoredReleases() + { + return plugin.ignoredReleases; + } + public static BuildState getBuildState(IProject project) { String name = project.getName(); @@ -216,4 +280,40 @@ public class Activator extends Plugin { Activator.postBuildListener = postBuildListener; } + + /** + * @author Eike Stepper + */ + private static final class IgnoredReleases extends HashSet<String> + { + private static final long serialVersionUID = 1L; + + public IgnoredReleases() + { + } + + @Override + public boolean add(String releasePath) + { + if (super.add(releasePath)) + { + plugin.saveIgnoredReleases(); + return true; + } + + return false; + } + + @Override + public boolean remove(Object releasePath) + { + if (super.remove(releasePath)) + { + plugin.saveIgnoredReleases(); + return true; + } + + return false; + } + } } diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/VersionBuilder.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/VersionBuilder.java index 8d7b2b194a..967cc1d90c 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/VersionBuilder.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/internal/version/VersionBuilder.java @@ -203,6 +203,7 @@ public class VersionBuilder extends IncrementalProjectBuilder implements IElemen arguments = null; } }; + project.getWorkspace().addResourceChangeListener(postBuildListener, IResourceChangeEvent.POST_BUILD); Activator.setPostBuildListener(postBuildListener); } @@ -233,6 +234,11 @@ public class VersionBuilder extends IncrementalProjectBuilder implements IElemen return buildDpependencies.toArray(new IProject[buildDpependencies.size()]); } + if (Activator.getIgnoredReleases().contains(releasePathArg)) + { + return buildDpependencies.toArray(new IProject[buildDpependencies.size()]); + } + IPath releasePath = new Path(releasePathArg); try @@ -263,8 +269,13 @@ public class VersionBuilder extends IncrementalProjectBuilder implements IElemen { Activator.log(ex); String msg = "Problem with release spec: " + releasePath + " (" + ex.getMessage() + ")"; - Markers.addMarker(projectDescription, msg, IMarker.SEVERITY_ERROR, - "(" + releasePath.toString().replace(".", "\\.") + ")"); + IMarker marker = Markers.addMarker(projectDescription, msg, IMarker.SEVERITY_ERROR, "(" + + releasePath.toString().replace(".", "\\.") + ")"); + if (marker != null) + { + marker.setAttribute(Markers.PROBLEM_TYPE, Markers.RELEASE_PATH_PROBLEM); + } + return buildDpependencies.toArray(new IProject[buildDpependencies.size()]); } diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java index 961ab1eb28..554b59a7b2 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/Markers.java @@ -32,6 +32,8 @@ public final class Markers public static final String DEVIATION_INFO = "deviation"; + public static final String RELEASE_PATH_PROBLEM = "release.path"; + public static final String MALFORMED_VERSION_PROBLEM = "malformed.version"; public static final String SCHEMA_BUILDER_PROBLEM = "schema.builder"; diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionUtil.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionUtil.java index 0dc0b86b28..02dfd2239d 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionUtil.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionUtil.java @@ -11,15 +11,24 @@ package org.eclipse.emf.cdo.releng.version; import org.eclipse.emf.cdo.releng.internal.version.Activator; +import org.eclipse.emf.cdo.releng.internal.version.VersionBuilderArguments; +import org.eclipse.core.resources.IBuildConfiguration; +import org.eclipse.core.resources.ICommand; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.IncrementalProjectBuilder; import org.eclipse.core.resources.ProjectScope; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.pde.core.IModel; @@ -40,6 +49,8 @@ import java.io.OutputStream; import java.io.Reader; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.List; /** * @author Eike Stepper @@ -51,6 +62,8 @@ public final class VersionUtil public static final boolean DEBUG = Boolean.valueOf(System.getProperty("org.eclipse.emf.cdo.releng.version.debug", "false")); + private static final IWorkspace WORKSPACE = ResourcesPlugin.getWorkspace(); + private static final byte[] BUFFER = new byte[8192]; private VersionUtil() @@ -343,4 +356,61 @@ public final class VersionUtil .getVersion()); return normalize(version); } + + public static void cleanReleaseProjects(final String releasePath) + { + new Job("Cleaning workspace") + { + @Override + protected IStatus run(IProgressMonitor monitor) + { + try + { + IBuildConfiguration[] buildConfigs = getBuildConfigs(releasePath); + WORKSPACE.build(buildConfigs, IncrementalProjectBuilder.CLEAN_BUILD, true, monitor); + return Status.OK_STATUS; + } + catch (CoreException ex) + { + return ex.getStatus(); + } + } + }.schedule(); + } + + private static IBuildConfiguration[] getBuildConfigs(String releasePath) + { + List<IBuildConfiguration> buildConfigs = new ArrayList<IBuildConfiguration>(); + for (IProject project : WORKSPACE.getRoot().getProjects()) + { + if (project.isAccessible()) + { + try + { + ICommand[] commands = project.getDescription().getBuildSpec(); + for (ICommand command : commands) + { + if (BUILDER_ID.equals(command.getBuilderName())) + { + VersionBuilderArguments arguments = new VersionBuilderArguments(project); + String projectReleasePath = arguments.getReleasePath(); + if (releasePath.equals(projectReleasePath)) + { + IBuildConfiguration buildConfig = project.getActiveBuildConfig(); + buildConfigs.add(buildConfig); + } + + break; + } + } + } + catch (Exception ex) + { + Activator.log(ex); + } + } + } + + return buildConfigs.toArray(new IBuildConfiguration[buildConfigs.size()]); + } } |