You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2023/03/08 12:25:08 UTC

[jackrabbit-filevault] branch master updated: JCRVLT-688: Add "generator" information to packages generated by filevault (#279)

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

reschke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git


The following commit(s) were added to refs/heads/master by this push:
     new c143cc33 JCRVLT-688: Add "generator" information to packages generated by filevault (#279)
c143cc33 is described below

commit c143cc33744432460892ef275f64bc96e700daf5
Author: Julian Reschke <ju...@gmx.de>
AuthorDate: Wed Mar 8 13:25:02 2023 +0100

    JCRVLT-688: Add "generator" information to packages generated by filevault (#279)
---
 src/site/markdown/properties.md                    |  2 +
 .../apache/jackrabbit/vault/fs/config/MetaInf.java |  7 +++-
 .../jackrabbit/vault/fs/config/package-info.java   |  2 +-
 .../jackrabbit/vault/fs/io/AbstractExporter.java   | 47 ++++++++++++++++++++++
 .../jackrabbit/vault/fs/io/package-info.java       |  2 +-
 .../vault/packaging/PackageProperties.java         | 12 ++++++
 .../packaging/impl/JcrPackageDefinitionImpl.java   |  8 +++-
 .../packaging/impl/PackagePropertiesImpl.java      |  8 ++++
 .../jackrabbit/vault/packaging/package-info.java   |  2 +-
 .../jackrabbit/vault/fs/io/JarExporterTest.java    |  8 ++++
 10 files changed, 93 insertions(+), 5 deletions(-)

diff --git a/src/site/markdown/properties.md b/src/site/markdown/properties.md
index 2f8ad8b4..4d59bac5 100644
--- a/src/site/markdown/properties.md
+++ b/src/site/markdown/properties.md
@@ -36,6 +36,7 @@ Example:
     <properties>
 	<comment>FileVault Package Properties</comment>
 	<entry key="createdBy">admin</entry>
+	<entry key="generator">org.apache.jackrabbit.vault:3.6.10</entry>
 	<entry key="name">acs-aem-commons-content</entry>
 	<entry key="lastModified">2018-06-14T11:50:32.369+02:00</entry>
 	<entry key="lastModifiedBy">admin</entry>
@@ -68,6 +69,7 @@ Example:
 | dependencies-locations | Optional comma-separated list of dependencies' locations. Each item has the format `<package-id>=<uri>`. Currently [FileVault Package Maven Plugin](https://jackrabbit.apache.org/filevault-package-maven-plugin/index.html) is using a URI scheme for Maven coordinates like `maven:<groupId>:<artifactId>:<version>[[:<classifier>]:packaging]`. | no | empty
 | created | A date string in the format `±YYYY-MM-DDThh:mm:ss.SSSTZD` specifying when the package has been created initially (see also [ISO8601][api.ISO8601]) | no | empty
 | createdBy | A user name indicating who initially created this package | no | empty
+| generator | Information about the generator of the package | no | for packages created by filevault: `org.apache.jackrabbit.vault:version`
 | lastWrapped | A date string in the format `±YYYY-MM-DDThh:mm:ss.SSSTZD` specifying when the package has been last wrapped (i.e. rebuilt) (see also [ISO8601][api.ISO8601]) | no | empty
 | lastWrappedBy | A user name indicating who last modified this package | no | empty
 | acHandling | See [AccessControlHandling][api.AccessControlHandling]. | no | ignore
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/MetaInf.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/MetaInf.java
index dbac756e..77a0988d 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/MetaInf.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/MetaInf.java
@@ -63,7 +63,12 @@ public interface MetaInf {
      * Name of the 'created by' property
      */
     String CREATED_BY = "createdBy";
-    
+
+    /**
+     * Name of the 'generator' property
+     */
+    String GENERATOR = "generator";
+
     /**
      * Returns the package format version of this package. If the package
      * lacks this information, {@link #FORMAT_VERSION_2} is returned, since this
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/package-info.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/package-info.java
index 3339b772..5bcd0fc3 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/package-info.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/package-info.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("2.7.0")
+@Version("2.8.0")
 package org.apache.jackrabbit.vault.fs.config;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
index 48f89d43..61328bf0 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
@@ -110,6 +110,11 @@ public abstract class AbstractExporter implements AutoCloseable {
 
     protected ExportInfo exportInfo = new ExportInfo();
 
+    private static String DEFAULT_GENERATOR = "org.apache.jackrabbit.vault" + ":"
+            + getVersion("org.apache.jackrabbit.vault", AbstractExporter.class);
+
+    private String generator = DEFAULT_GENERATOR;
+
     public boolean isVerbose() {
         return tracker != null;
     }
@@ -143,6 +148,24 @@ public abstract class AbstractExporter implements AutoCloseable {
         }
     }
 
+    /**
+     * @return generator information (for diagnostical purposes; usually in
+     *         "name:version" format). {@code null} when n/a. Defaults to
+     *         "org.apache.jackrabbit.vault:version".
+     */
+    public String getGenerator() {
+        return generator;
+    }
+
+    /**
+     * @param generator
+     *            generator information (for diagnostical purposes; usually in
+     *            "name:version" format). {@code null} when n/a.
+     */
+    public void setGenerator(String generator) {
+        this.generator = generator;
+    }
+
     public String getRootPath() {
         return rootPath;
     }
@@ -201,6 +224,7 @@ public abstract class AbstractExporter implements AutoCloseable {
             // update properties
             setProperty(MetaInf.CREATED, Calendar.getInstance());
             setProperty(MetaInf.CREATED_BY, mgr.getUserId());
+            setProperty(MetaInf.GENERATOR, generator);
             setProperty(MetaInf.PACKAGE_FORMAT_VERSION, String.valueOf(MetaInf.FORMAT_VERSION_2));
 
             // get filter and translate if necessary
@@ -398,6 +422,29 @@ public abstract class AbstractExporter implements AutoCloseable {
         return PackageType.MIXED;
     }
 
+    /**
+     * Returns the version of an Oak module.
+     *
+     * @param moduleName the name of the module
+     * @param clazz a class of the module
+     * @return the version (or "SNAPSHOT" when unknown)
+     */
+    private static String getVersion(String moduleName, Class<?> clazz) {
+        // borrowed from oak-commons
+        String version = "SNAPSHOT"; // fallback
+        try (InputStream stream = clazz
+                .getResourceAsStream("/META-INF/maven/org.apache.jackrabbit.vault/" + moduleName + "/pom.properties")) {
+            if (stream != null) {
+                Properties properties = new Properties();
+                properties.load(stream);
+                return properties.getProperty("version", version);
+            }
+        } catch (IOException ignored) {
+            log.warn("failed to read pom properties for " + moduleName, ignored);
+        }
+        return version;
+    }
+
     /**
      * Opens the exporter and initializes the undelying structures.
      * @throws IOException if an I/O error occurs
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java
index 62e3e80b..8590ed51 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/package-info.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("2.14.0")
+@Version("2.15.0")
 package org.apache.jackrabbit.vault.fs.io;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageProperties.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageProperties.java
index 065efc6d..93bbc556 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageProperties.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageProperties.java
@@ -90,6 +90,11 @@ public interface PackageProperties {
      */
     String NAME_CREATED_BY = "createdBy";
 
+    /**
+     * Name of the generator by meta-inf property
+     */
+    String NAME_GENERATOR = "generator";
+
     /**
      * Name of the last wrapped meta-inf property
      * @since 2.2.22
@@ -239,6 +244,13 @@ public interface PackageProperties {
      */
     String getCreatedBy();
 
+    /**
+     * Returns the name and version of the component that generated the package.
+     * @return the generator or {@code null} if n/a
+     * @since 3.6.10
+     */
+    String getGenerator();
+
     /**
      * Returns the date when this package was wrapped or {@code null} if n/a.
      * @return the wrapped date
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java
index 656685fd..c327504c 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java
@@ -646,6 +646,13 @@ public class JcrPackageDefinitionImpl implements JcrPackageDefinition {
         return get(PN_CREATED_BY);
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public String getGenerator() {
+        return null;
+    }
+
     /**
      * {@inheritDoc}
      */
@@ -976,7 +983,6 @@ public class JcrPackageDefinitionImpl implements JcrPackageDefinition {
         return null;
     }
 
-    
     @Override
     public Calendar getDateProperty(String name) {
         return getCalendar(name);
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java
index 6b1e3283..15394a35 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackagePropertiesImpl.java
@@ -111,6 +111,14 @@ public abstract class PackagePropertiesImpl implements PackageProperties {
         return getProperty(NAME_CREATED_BY);
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String getGenerator() {
+        return getProperty(NAME_GENERATOR);
+    }
+
     /**
      * {@inheritDoc}
      */
diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/package-info.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/package-info.java
index 87722e1a..aa1413be 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/package-info.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/package-info.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-@Version("2.14.1")
+@Version("2.15.0")
 package org.apache.jackrabbit.vault.packaging;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/JarExporterTest.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/JarExporterTest.java
index 5c6c4b47..89281ceb 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/JarExporterTest.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/JarExporterTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -81,6 +82,13 @@ public class JarExporterTest {
         }
     }
 
+    @Test
+    public void checkGenerator() throws RepositoryException, IOException {
+        try (JarExporter exporter = new JarExporter(new ByteArrayOutputStream());) {
+            assertEquals("org.apache.jackrabbit.vault:SNAPSHOT", exporter.getGenerator());
+        }
+    }
+
     private int countEntries(Archive.Entry entry) {
         int c = 1;
         for (Archive.Entry child : entry.getChildren()) {