You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2021/09/10 11:01:31 UTC

[sling-org-apache-sling-feature-analyser] branch master updated: SLING-10796 : Provide option to error on embedded packages

This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-analyser.git


The following commit(s) were added to refs/heads/master by this push:
     new 7a43646  SLING-10796 : Provide option to error on embedded packages
7a43646 is described below

commit 7a4364683192f6c9276e03addb0b1412a9fe9903
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Sep 10 13:01:11 2021 +0200

    SLING-10796 : Provide option to error on embedded packages
---
 .../impl/CheckContentPackageForInstallables.java   | 11 ++-
 .../scanner/impl/ArtifactDescriptorImpl.java       |  2 +-
 .../task/impl/AnalyserTaskContextImpl.java         | 12 +++-
 .../CheckContentPackagesForInstallablesTest.java   | 83 ++++++++++++++++++++++
 4 files changed, 101 insertions(+), 7 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
index 167b584..b319eba 100644
--- a/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
+++ b/src/main/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackageForInstallables.java
@@ -29,6 +29,8 @@ import org.apache.sling.feature.scanner.impl.ContentPackageDescriptor;
  */
 public class CheckContentPackageForInstallables implements AnalyserTask {
 
+    static final String CFG_CHECK_PACKAGES = "embedded-packages";
+
     @Override
     public String getName() {
         return "Content Packages Installable Check";
@@ -42,21 +44,24 @@ public class CheckContentPackageForInstallables implements AnalyserTask {
     @Override
     public void execute(final AnalyserTaskContext ctx)
             throws Exception {
+        final boolean checkPcks = Boolean.parseBoolean(ctx.getConfiguration().getOrDefault(CFG_CHECK_PACKAGES, "false"));
+
         final List<ContentPackageDescriptor> contentPackages = new ArrayList<>();
         for (final ArtifactDescriptor d : ctx.getFeatureDescriptor().getArtifactDescriptors()) {
             if (d instanceof ContentPackageDescriptor) {
                 contentPackages.add((ContentPackageDescriptor) d);
             }
         }
-        if (contentPackages.isEmpty()) {
-            return;
-        }
 
         for (final ContentPackageDescriptor cp : contentPackages) {
             if (cp.getArtifactFile() ==  null) {
                 ctx.reportArtifactError(cp.getArtifact().getId(), "Content package " + cp.getName() + " is not resolved and can not be checked.");
                 continue;
             }
+            if ( checkPcks && cp.isEmbeddedInContentPackage() ) {
+                ctx.reportArtifactError(cp.getContentPackage().getId(), "Content package " + cp.getContentPackage().getId() +
+                        " embedds content package " + cp.getName());
+            }
             if (!cp.hasEmbeddedArtifacts() || cp.isEmbeddedInContentPackage()) {
                 continue;
             }
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java b/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
index 7ed745f..cbfbdf7 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
@@ -61,7 +61,7 @@ public class ArtifactDescriptorImpl
         Manifest mf = null;
         if ( hasManifest ) {
             try {
-                final Manifest origMf = BundleDescriptorImpl.getManifest(url);
+                final Manifest origMf = url == null ? null : BundleDescriptorImpl.getManifest(url);
                 if ( origMf != null ) {
                     mf = new Manifest(origMf);
                 } else if ( !isManifestOptional ) {
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java
index 8dff562..3a5d343 100644
--- a/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/AnalyserTaskContextImpl.java
@@ -38,10 +38,12 @@ public class AnalyserTaskContextImpl implements AnalyserTaskContext {
 
     private final List<String> errors = new ArrayList<>();
 
+    private FeatureDescriptor featureDescriptor;
+
     public AnalyserTaskContextImpl() {
         this("g:a:1");
     }
-    
+
     public AnalyserTaskContextImpl(String artifactId) {
         f = new Feature(ArtifactId.parse(artifactId));
     }
@@ -53,7 +55,11 @@ public class AnalyserTaskContextImpl implements AnalyserTaskContext {
 
     @Override
     public FeatureDescriptor getFeatureDescriptor() {
-        return null;
+        return featureDescriptor;
+    }
+
+    public void setFeatureDescriptor(final FeatureDescriptor fd) {
+        this.featureDescriptor = fd;
     }
 
     @Override
@@ -115,6 +121,6 @@ public class AnalyserTaskContextImpl implements AnalyserTaskContext {
 
     @Override
     public void reportConfigurationWarning(Configuration cfg, String message) {
-        
+
     }
 }
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackagesForInstallablesTest.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackagesForInstallablesTest.java
new file mode 100644
index 0000000..7e1fd99
--- /dev/null
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckContentPackagesForInstallablesTest.java
@@ -0,0 +1,83 @@
+/*
+ * 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.feature.analyser.task.impl;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.net.URL;
+
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.scanner.FeatureDescriptor;
+import org.apache.sling.feature.scanner.impl.ContentPackageDescriptor;
+import org.apache.sling.feature.scanner.impl.FeatureDescriptorImpl;
+import org.junit.Test;
+
+public class CheckContentPackagesForInstallablesTest {
+
+    @Test public void testEmptyDescriptor() throws Exception {
+        final CheckContentPackageForInstallables analyser = new CheckContentPackageForInstallables();
+        final AnalyserTaskContextImpl ctx = new AnalyserTaskContextImpl();
+
+        final FeatureDescriptor fd = new FeatureDescriptorImpl(ctx.getFeature());
+        ctx.setFeatureDescriptor(fd);
+
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().isEmpty());
+    }
+
+    @Test public void testEmptyContentPackage() throws Exception {
+        final CheckContentPackageForInstallables analyser = new CheckContentPackageForInstallables();
+        final AnalyserTaskContextImpl ctx = new AnalyserTaskContextImpl();
+
+        final FeatureDescriptor fd = new FeatureDescriptorImpl(ctx.getFeature());
+        ctx.setFeatureDescriptor(fd);
+
+        final ContentPackageDescriptor cpd = new ContentPackageDescriptor("content", new Artifact(ArtifactId.parse("g:c:1")), new URL("file:/foo"));
+        fd.getArtifactDescriptors().add(cpd);
+
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+
+        ctx.putConfigurationValue(CheckContentPackageForInstallables.CFG_CHECK_PACKAGES, "true");
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+    }
+
+    @Test public void testEmbeddedContentPackage() throws Exception {
+        final CheckContentPackageForInstallables analyser = new CheckContentPackageForInstallables();
+        final AnalyserTaskContextImpl ctx = new AnalyserTaskContextImpl();
+
+        final FeatureDescriptor fd = new FeatureDescriptorImpl(ctx.getFeature());
+        ctx.setFeatureDescriptor(fd);
+
+        final ContentPackageDescriptor cpd = new ContentPackageDescriptor("content", new Artifact(ArtifactId.parse("g:c:1")), new URL("file:/foo"));
+        fd.getArtifactDescriptors().add(cpd);
+
+        final ContentPackageDescriptor embedded = new ContentPackageDescriptor("embedded", new Artifact(ArtifactId.parse("g:e:1")), new URL("file:/foo"));
+        embedded.setContentPackageInfo(cpd.getArtifact(), "/path");
+        fd.getArtifactDescriptors().add(embedded);
+
+        analyser.execute(ctx);
+        assertTrue(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+
+        ctx.putConfigurationValue(CheckContentPackageForInstallables.CFG_CHECK_PACKAGES, "true");
+        analyser.execute(ctx);
+        assertFalse(ctx.getErrors().toString(), ctx.getErrors().isEmpty());
+    }
+}