You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2019/09/30 15:00:50 UTC
svn commit: r1867778 -
/felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
Author: gnodet
Date: Mon Sep 30 15:00:50 2019
New Revision: 1867778
URL: http://svn.apache.org/viewvc?rev=1867778&view=rev
Log:
[FELIX-6187] Avoid overwriting the manifest if it has not changed
Modified:
felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
Modified: felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java?rev=1867778&r1=1867777&r2=1867778&view=diff
==============================================================================
--- felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java (original)
+++ felix/trunk/tools/maven-bundle-plugin/src/main/java/org/apache/felix/bundleplugin/ManifestPlugin.java Mon Sep 30 15:00:50 2019
@@ -19,6 +19,7 @@
package org.apache.felix.bundleplugin;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -31,6 +32,7 @@ import java.nio.charset.StandardCharsets
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
@@ -41,7 +43,6 @@ import java.util.Set;
import java.util.jar.Manifest;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import aQute.bnd.osgi.Analyzer;
@@ -64,6 +65,8 @@ import org.codehaus.plexus.util.Scanner;
import org.osgi.service.metatype.MetaTypeService;
import org.sonatype.plexus.build.incremental.BuildContext;
+import static aQute.lib.strings.Strings.join;
+
/**
* Generate an OSGi manifest for this project
@@ -87,6 +90,12 @@ public class ManifestPlugin extends Bund
@Parameter( property = "supportIncrementalBuild" )
private boolean supportIncrementalBuild;
+ /**
+ * When true, show stale files in the log at info level else at debug level.
+ */
+ @Parameter( property = "showStaleFiles" )
+ private boolean showStaleFiles;
+
@Component
private BuildContext buildContext;
@@ -377,9 +386,10 @@ public class ManifestPlugin extends Bund
.collect(Collectors.toSet());
if (!stale.isEmpty()) {
getLog().info("Stale files detected, re-generating manifest.");
- if (getLog().isDebugEnabled()) {
- getLog().debug("Stale files: " + stale.stream()
- .collect(Collectors.joining(", ")));
+ if (showStaleFiles) {
+ getLog().info("Stale files: " + join(", ", stale));
+ } else if (getLog().isDebugEnabled()) {
+ getLog().debug("Stale files: " + join(", ", stale));
}
} else {
// everything is in order, skip
@@ -460,15 +470,10 @@ public class ManifestPlugin extends Bund
{
Manifest analyzerManifest = manifest;
manifest = new Manifest();
- InputStream inputStream = new FileInputStream( outputFile );
- try
+ try( InputStream inputStream = new FileInputStream( outputFile ) )
{
manifest.read( inputStream );
}
- finally
- {
- inputStream.close();
- }
Instructions instructions = new Instructions( ExtList.from( analyzer.getProperty("Merge-Headers") ) );
mergeManifest( instructions, manifest, analyzerManifest );
}
@@ -492,20 +497,22 @@ public class ManifestPlugin extends Bund
log.debug("Write manifest to " + outputFile.getPath());
outputFile.getParentFile().mkdirs();
- OutputStream os = buildContext.newFileOutputStream( outputFile );
- try
+ try ( ByteArrayOutputStream baos = new ByteArrayOutputStream() )
{
- ManifestWriter.outputManifest( manifest, os, niceManifest );
- }
- finally
- {
- try
+ ManifestWriter.outputManifest( manifest, baos, niceManifest );
+ baos.flush();
+ byte[] newdata = baos.toByteArray();
+ byte[] curdata = new byte[0];
+ if (outputFile.exists())
{
- os.close();
+ curdata = Files.readAllBytes( outputFile.toPath() );
}
- catch ( IOException e )
+ if ( !Arrays.equals( newdata, curdata ) )
{
- // nothing we can do here
+ try ( OutputStream os = buildContext.newFileOutputStream( outputFile ) )
+ {
+ os.write( curdata );
+ }
}
}
}