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());
+ }
+}