You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2009/06/25 12:26:40 UTC
svn commit: r788311 - in /sling/trunk/contrib/extensions/jcrinstall/osgi/src:
main/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessor.java
test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java
Author: bdelacretaz
Date: Thu Jun 25 10:26:40 2009
New Revision: 788311
URL: http://svn.apache.org/viewvc?rev=788311&view=rev
Log:
SLING-1001 - take the Maven SNAPSHOT convention into account when comparing bundle versions
Added:
sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java (with props)
Modified:
sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessor.java
Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessor.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessor.java?rev=788311&r1=788310&r2=788311&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessor.java (original)
+++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessor.java Thu Jun 25 10:26:40 2009
@@ -53,6 +53,8 @@
/** {@link Storage} key for the bundle ID */
public static final String KEY_BUNDLE_ID = "bundle.id";
+
+ public static final String MAVEN_SNAPSHOT_MARKER = "SNAPSHOT";
/** Max time allowed to refresh packages (TODO configurable??) */
public static final int MAX_REFRESH_PACKAGES_WAIT_SECONDS = 30;
@@ -175,12 +177,9 @@
if (b != null && retryCount == 1) {
final Version installedVersion = new Version((String)(b.getHeaders().get(Constants.BUNDLE_VERSION)));
final Version newBundleVersion = new Version(m.getMainAttributes().getValue(Constants.BUNDLE_VERSION));
- if (newBundleVersion.compareTo(installedVersion) <= 0) {
- log.debug(
- "Ignore update of bundle {} from {} as the installed version is equal or higher.",
- b.getSymbolicName(), uri);
+ if(ignoreNewBundle(b.getSymbolicName(), uri, installedVersion, newBundleVersion)) {
return InstallResultCode.IGNORED;
- }
+ }
}
if (b != null) {
@@ -225,9 +224,39 @@
synchronized (activeBundles) {
installedBundles.add(b.getBundleId());
}
+
+ // Successful - reset retry count
+ retryCount = 0;
+ attributes.put("RETRY_COUNT", retryCount);
return updated ? InstallResultCode.UPDATED : InstallResultCode.INSTALLED;
}
+
+ /** Decide if new bundle musg be ignored, based on the supplied Versions */
+ boolean ignoreNewBundle(String symbolicName, String uri, Version installedVersion, Version newBundleVersion) {
+
+ boolean ignore = false;
+ final int comparison = newBundleVersion.compareTo(installedVersion);
+
+ // Same version but snapshots - do not ignore
+ if(comparison == 0 && installedVersion.toString().contains(MAVEN_SNAPSHOT_MARKER)) {
+ if(log.isDebugEnabled()) {
+ log.debug("Bundle " + symbolicName + " (" + uri + ") "
+ + " has same version (" + installedVersion + ") than installed bundle, but version contains "
+ + MAVEN_SNAPSHOT_MARKER + ", will be updated");
+ }
+
+ } else if (comparison <= 0) {
+ ignore = true;
+ if(log.isDebugEnabled()) {
+ log.debug("Ignoring update of bundle " + symbolicName + " (" + uri
+ + ") as installed version (" + installedVersion + ") is equal or higher than " + newBundleVersion
+ );
+ }
+ }
+
+ return ignore;
+ }
/**
* @see org.apache.sling.osgi.installer.OsgiResourceProcessor#uninstall(java.lang.String, java.util.Map)
Added: sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java?rev=788311&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java (added)
+++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java Thu Jun 25 10:26:40 2009
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.osgi.installer.impl;
+
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.Version;
+import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.service.startlevel.StartLevel;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+/** Test ignoring bundle updates based on Versions (SLING-1001) */
+public class BundleResourceProcessorIgnoreBundlesTest {
+
+ private final String symbolicName = "testbundle";
+ private final String uri = "testuri";
+ private BundleResourceProcessor brp;
+ private Mockery mockery;
+
+ @org.junit.Before public void setup() {
+ mockery = new Mockery();
+ final BundleContext bc = mockery.mock(BundleContext.class);
+ final PackageAdmin pa = mockery.mock(PackageAdmin.class);
+ final StartLevel s = new MockStartLevel();
+
+ mockery.checking(new Expectations() {{
+ allowing(bc).addFrameworkListener(with(any(FrameworkListener.class)));
+ }});
+
+ brp = new BundleResourceProcessor(bc, pa, s);
+ }
+
+ @org.junit.Test public void testLowerVersion() {
+ final Version installedVersion = new Version("1.1");
+ final Version newVersion = new Version("1.0");
+ assertTrue("Lower version must be ignored",
+ brp.ignoreNewBundle(symbolicName, uri, installedVersion, newVersion));
+ }
+
+ @org.junit.Test public void testHigherVersion() {
+ final Version installedVersion = new Version("1.1");
+ final Version newVersion = new Version("1.2");
+ assertFalse("Higher version must not be ignored",
+ brp.ignoreNewBundle(symbolicName, uri, installedVersion, newVersion));
+ }
+
+ @org.junit.Test public void testSameVersion() {
+ final Version installedVersion = new Version("1.1");
+ final Version newVersion = new Version("1.1");
+ assertTrue("Same version must be ignored",
+ brp.ignoreNewBundle(symbolicName, uri, installedVersion, newVersion));
+ }
+
+ @org.junit.Test public void testSameVersionSnapshot() {
+ final Version installedVersion = new Version("2.0.5.incubator-SNAPSHOT");
+ final Version newVersion = new Version("2.0.5.incubator-SNAPSHOT");
+ assertFalse("Same version snapshot must not be ignored",
+ brp.ignoreNewBundle(symbolicName, uri, installedVersion, newVersion));
+ }
+
+ @org.junit.Test public void testLowerVersionSnapshot() {
+ final Version installedVersion = new Version("2.0.5.incubator-SNAPSHOT");
+ final Version newVersion = new Version("2.0.4.incubator-SNAPSHOT");
+ assertTrue("Lower version snapshot must be ignored",
+ brp.ignoreNewBundle(symbolicName, uri, installedVersion, newVersion));
+ }
+
+ @org.junit.Test public void testHigherVersionSnapshot() {
+ final Version installedVersion = new Version("2.0.5.incubator-SNAPSHOT");
+ final Version newVersion = new Version("2.0.6.incubator-SNAPSHOT");
+ assertFalse("Higher version snapshot must not be ignored",
+ brp.ignoreNewBundle(symbolicName, uri, installedVersion, newVersion));
+ }
+}
Propchange: sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/BundleResourceProcessorIgnoreBundlesTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL