You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2016/04/07 19:24:09 UTC
svn commit: r1738154 - in /jackrabbit/commons/filevault/trunk/vault-core/src:
main/java/org/apache/jackrabbit/vault/packaging/impl/
test/java/org/apache/jackrabbit/vault/packaging/integration/
test/resources/org/apache/jackrabbit/vault/packaging/integr...
Author: tripod
Date: Thu Apr 7 17:24:08 2016
New Revision: 1738154
URL: http://svn.apache.org/viewvc?rev=1738154&view=rev
Log:
JCRVLT-113 Skip installation of sub packages if newer version is already present and installed
this closes #5
Added:
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_newer_version.zip
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_older_version.zip
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java?rev=1738154&r1=1738153&r2=1738154&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java Thu Apr 7 17:24:08 2016
@@ -47,10 +47,12 @@ import org.apache.jackrabbit.vault.packa
import org.apache.jackrabbit.vault.packaging.ExportOptions;
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
+import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
import org.apache.jackrabbit.vault.packaging.PackageException;
import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.SubPackageHandling;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
+import org.apache.jackrabbit.vault.packaging.Version;
import org.apache.jackrabbit.vault.util.JcrConstants;
import org.apache.jackrabbit.vault.util.Text;
import org.slf4j.Logger;
@@ -441,7 +443,36 @@ public class JcrPackageImpl implements J
}
}
if (p.isValid()) {
- subPacks.add(p);
+ PackageId pId = p.getPackage().getId();
+ String pName = pId.getName();
+ Version pVersion = pId.getVersion();
+
+ // get the list of packages available in the same group
+ JcrPackageManager pkgMgr = new JcrPackageManagerImpl(s);
+ List<JcrPackage> listPackages = pkgMgr.listPackages(pId.getGroup(), true);
+
+ // keep some status variable if a more recent is found in the next loop
+ boolean foundMoreRecent = false;
+ JcrPackage foundPackage = null;
+
+ // loop in the list of packages returned previously by package manager
+ for (JcrPackage listedPackage: listPackages) {
+ PackageId listedPackageId = listedPackage.getPackage().getId();
+ // check that the listed package is actually from same name (so normally only version would differ)
+ // if that package is valid, installed, and the version is more recent than the one in our sub package
+ // then we can stop the loop here
+ if (listedPackageId.getName().equals(pName) && listedPackage.isValid() && listedPackage.isInstalled() && listedPackageId.getVersion().compareTo(pVersion) == 1) {
+ foundMoreRecent = true;
+ foundPackage = listedPackage;
+ break;
+ }
+ }
+ // if a more recent version of that subpackage was found we don't need to add it to the list of sub packages to eventually extract later on.
+ if (foundMoreRecent) {
+ log.info("Skipping "+path+" installation due to newer version present and installed at "+foundPackage.getNode().getPath());
+ } else {
+ subPacks.add(p);
+ }
}
}
}
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java?rev=1738154&r1=1738153&r2=1738154&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java Thu Apr 7 17:24:08 2016
@@ -26,7 +26,9 @@ import org.apache.jackrabbit.vault.packa
import org.apache.jackrabbit.vault.packaging.PackageException;
import org.junit.Test;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
/**
* Tests that covers sub packages. the package "my_packages:subtest" contains 2 sub packages
@@ -237,5 +239,30 @@ public class TestSubPackages extends Int
}
+ /**
+ * Installs 2 packages that contains same sub packages with different version
+ */
+ @Test
+ public void testSkipOlderVersionInstallation() throws RepositoryException, IOException, PackageException {
+ JcrPackage packNewer = packMgr.upload(getStream("testpackages/subtest_extract_contains_newer_version.zip"), false);
+ assertNotNull(packNewer);
+
+ // install package that contains newer version of the sub package first
+ ImportOptions opts = getDefaultOptions();
+ opts.setNonRecursive(false);
+ packNewer.install(opts);
+
+ // check for sub packages version 1.0.1 exists
+ assertNodeExists("/etc/packages/my_packages/subtest_test_version-1.0.1.zip");
+ assertTrue(packMgr.open(admin.getNode("/etc/packages/my_packages/subtest_test_version-1.0.1.zip")).isInstalled());
+ assertNodeExists("/tmp/b");
+
+ JcrPackage packOlder = packMgr.upload(getStream("testpackages/subtest_extract_contains_older_version.zip"), false);
+ packOlder.install(opts);
+ assertNodeExists("/etc/packages/my_packages/subtest_test_version-1.0.zip");
+ assertFalse(packMgr.open(admin.getNode("/etc/packages/my_packages/subtest_test_version-1.0.zip")).isInstalled());
+ assertNodeMissing("/tmp/a");
+
+ }
}
\ No newline at end of file
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_newer_version.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_newer_version.zip?rev=1738154&view=auto
==============================================================================
Binary files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_newer_version.zip (added) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_newer_version.zip Thu Apr 7 17:24:08 2016 differ
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_older_version.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_older_version.zip?rev=1738154&view=auto
==============================================================================
Binary files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_older_version.zip (added) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subtest_extract_contains_older_version.zip Thu Apr 7 17:24:08 2016 differ