diff options
author | Eike Stepper | 2012-07-26 10:48:03 +0000 |
---|---|---|
committer | Eike Stepper | 2012-07-26 10:48:03 +0000 |
commit | 29edfe6aa27d1d7118799681432877528c981750 (patch) | |
tree | 4b5d0ff3a0627b34fbdfe32a8d07375f21f241ab /plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse | |
parent | 484f99da1a8e32fecb8f0e8dc2995feae6975ae7 (diff) | |
download | cdo-29edfe6aa27d1d7118799681432877528c981750.tar.gz cdo-29edfe6aa27d1d7118799681432877528c981750.tar.xz cdo-29edfe6aa27d1d7118799681432877528c981750.zip |
Check malformed versions.
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse')
5 files changed, 132 insertions, 29 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/IVersionBuilderArguments.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/IVersionBuilderArguments.java index a0c15ee1a8..fd291b1fde 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/IVersionBuilderArguments.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/IVersionBuilderArguments.java @@ -32,5 +32,7 @@ public interface IVersionBuilderArguments extends Map<String, String> public boolean isIgnoreFeatureContentChanges(); + public boolean isIgnoreMalformedVersionsButton(); + public void applyTo(IProject project) throws CoreException; } 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 dadc1d4f3b..a4122d68f3 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 @@ -98,11 +98,9 @@ public final class Markers return marker; } - public static IMarker addMarker(IFile file, String message, int severity, String regex) throws CoreException, - IOException + public static String getContent(IFile file) throws CoreException, IOException { InputStream contents = null; - try { contents = file.getContents(); @@ -115,30 +113,7 @@ public final class Markers caw.write(c); } - String string = caw.toString(); - - Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); - Matcher matcher = pattern.matcher(string); - - if (matcher.find()) - { - int startChar = matcher.start(1); - int endChar = matcher.end(1); - - matcher = NL_PATTERN.matcher(string); - int line = 0; - while (matcher.find()) - { - if (matcher.start(1) > startChar) - { - break; - } - - ++line; - } - - return addMarker(file, message, severity, line, startChar, endChar); - } + return caw.toString(); } finally { @@ -153,6 +128,36 @@ public final class Markers Activator.log(ex); } } + + } + } + + public static IMarker addMarker(IFile file, String message, int severity, String regex) throws CoreException, + IOException + { + String string = getContent(file); + + Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); + Matcher matcher = pattern.matcher(string); + + if (matcher.find()) + { + int startChar = matcher.start(1); + int endChar = matcher.end(1); + + matcher = NL_PATTERN.matcher(string); + int line = 0; + while (matcher.find()) + { + if (matcher.start(1) > startChar) + { + break; + } + + ++line; + } + + return addMarker(file, message, severity, line, startChar, endChar); } return addMarker(file, message, severity); diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/ReleaseManager.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/ReleaseManager.java index 800071db40..f92c2923ba 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/ReleaseManager.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/ReleaseManager.java @@ -153,12 +153,16 @@ public class ReleaseManager return release; } - public Element createElement(IModel componentModel, boolean withFeatureContent) throws CoreException + public Element createElement(IModel componentModel, boolean withFeatureContent) { if (componentModel instanceof IPluginModelBase) { IPluginModelBase pluginModel = (IPluginModelBase)componentModel; BundleDescription description = pluginModel.getBundleDescription(); + if (description == null) + { + throw new IllegalStateException("No bundle description for " + pluginModel.getInstallLocation()); + } String name = description.getSymbolicName(); Version version = description.getVersion(); diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java index 7b0664ef38..ba67c162cb 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilder.java @@ -39,6 +39,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author Eike Stepper @@ -47,7 +49,8 @@ public class VersionBuilder extends IncrementalProjectBuilder implements Element { public static final String BUILDER_ID = "org.eclipse.emf.cdo.releng.version.VersionBuilder"; - public static final boolean DEBUG = true; + public static final boolean DEBUG = Boolean.valueOf(System.getProperty("org.eclipse.emf.cdo.releng.version.debug", + "false")); private static final Path MANIFEST_PATH = new Path("META-INF/MANIFEST.MF"); @@ -207,6 +210,11 @@ public class VersionBuilder extends IncrementalProjectBuilder implements Element return buildDpependencies.toArray(new IProject[buildDpependencies.size()]); } + if (!arguments.isIgnoreMalformedVersionsButton()) + { + checkMalformedVersions(componentModel); + } + Version elementVersion = element.getVersion(); Version releaseVersion = releaseElement.getVersion(); Version nextImplementationVersion = getNextImplVersion(releaseVersion); @@ -559,6 +567,55 @@ public class VersionBuilder extends IncrementalProjectBuilder implements Element return null; } + private void checkMalformedVersions(IModel componentModel) + { + IResource underlyingResource = componentModel.getUnderlyingResource(); + if (underlyingResource != null) + { + IProject project = underlyingResource.getProject(); + if (project.isAccessible()) + { + IFile file = null; + String regex = null; + if (componentModel instanceof IPluginModelBase) + { + file = project.getFile(MANIFEST_PATH); + regex = "Bundle-Version: *(\\d+(\\.\\d+(\\.\\d+(\\.[-_a-zA-Z0-9]+)?)?)?)"; + } + else + { + file = project.getFile(FEATURE_PATH); + regex = "feature.*?version\\s*=\\s*[\"'](\\d+(\\.\\d+(\\.\\d+(\\.[-_a-zA-Z0-9]+)?)?)?)"; + } + + if (file.exists()) + { + try + { + String content = Markers.getContent(file); + Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.DOTALL); + Matcher matcher = pattern.matcher(content); + if (matcher.find()) + { + String version = matcher.group(1); + if (matcher.groupCount() < 4 || !".qualifier".equals(matcher.group(4))) + { + Version expectedVersion = new Version(version); + addMalformedVersionMarker(file, regex, + new Version(expectedVersion.getMajor(), expectedVersion.getMinor(), expectedVersion.getMicro(), + "qualifier")); + } + } + } + catch (Exception ex) + { + Activator.log(ex); + } + } + } + } + } + private void checkDependencyRanges(IPluginModelBase pluginModel) throws CoreException, IOException { BundleDescription description = pluginModel.getBundleDescription(); @@ -727,6 +784,22 @@ public class VersionBuilder extends IncrementalProjectBuilder implements Element } } + private void addMalformedVersionMarker(IFile file, String regex, Version version) + { + try + { + String versionString = version.toString(); + IMarker marker = Markers.addMarker(file, "The version should be of the form '" + versionString + "'", + IMarker.SEVERITY_ERROR, regex); + marker.setAttribute(Markers.QUICK_FIX_PATTERN, regex); + marker.setAttribute(Markers.QUICK_FIX_REPLACEMENT, versionString); + } + catch (Exception ex) + { + Activator.log(ex); + } + } + private void addVersionMarker(String message, Version version) { try diff --git a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilderArguments.java b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilderArguments.java index 6520393cf0..71a8869584 100644 --- a/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilderArguments.java +++ b/plugins/org.eclipse.emf.cdo.releng.version/src/org/eclipse/emf/cdo/releng/version/VersionBuilderArguments.java @@ -42,6 +42,8 @@ public class VersionBuilderArguments extends HashMap<String, String> implements private static final String IGNORE_CONTENT_CHANGES_ARGUMENT = "ignore.feature.content.changes"; + private static final String IGNORE_MALFORMED_VERSIONS_ARGUMENT = "ignore.malformed.versions"; + public VersionBuilderArguments() { } @@ -96,6 +98,11 @@ public class VersionBuilderArguments extends HashMap<String, String> implements return "true".equals(get(IGNORE_CONTENT_CHANGES_ARGUMENT)); } + public boolean isIgnoreMalformedVersionsButton() + { + return "true".equals(get(IGNORE_MALFORMED_VERSIONS_ARGUMENT)); + } + public void setReleasePath(String value) { if (value != null) @@ -168,6 +175,18 @@ public class VersionBuilderArguments extends HashMap<String, String> implements } } + public void setIgnoreMalformedVersions(boolean value) + { + if (value) + { + put(IGNORE_MALFORMED_VERSIONS_ARGUMENT, Boolean.toString(true)); + } + else + { + remove(IGNORE_MALFORMED_VERSIONS_ARGUMENT); + } + } + public void applyTo(IProject project) throws CoreException { IProjectDescription description = project.getDescription(); |