xmlgraphics-fop/reproducible.patch

154 lines
8.5 KiB
Diff
Raw Permalink Normal View History

--- a/fop-core/src/main/java/org/apache/fop/pdf/FileIDGenerator.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/FileIDGenerator.java
@@ -86,7 +86,9 @@ abstract class FileIDGenerator {
private void generateFileID() {
DateFormat df = new SimpleDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS");
- digest.update(PDFDocument.encode(df.format(new Date())));
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date d = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
+ digest.update(PDFDocument.encode(df.format(d)));
// Ignoring the filename here for simplicity even though it's recommended
// by the PDF spec
digest.update(PDFDocument.encode(String.valueOf(document.getCurrentFileSize())));
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFEmbeddedFile.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFEmbeddedFile.java
@@ -35,8 +35,10 @@ public class PDFEmbeddedFile extends PDFStream {
put("Type", new PDFName("EmbeddedFile"));
put("Subtype", new PDFName("application/octet-stream"));
PDFDictionary params = new PDFDictionary();
- params.put("CreationDate", PDFInfo.formatDateTime(new Date()));
- params.put("ModDate", PDFInfo.formatDateTime(new Date()));
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date d = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
+ params.put("CreationDate", PDFInfo.formatDateTime(d));
+ params.put("ModDate", PDFInfo.formatDateTime(d));
put("Params", params);
}
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFInfo.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFInfo.java
@@ -251,7 +251,8 @@ public class PDFInfo extends PDFObject {
// creation date in form (D:YYYYMMDDHHmmSSOHH'mm')
if (creationDate == null) {
- creationDate = new Date();
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ creationDate = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
}
bout.write(encode("/CreationDate "));
bout.write(encodeString(formatDateTime(creationDate)));
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFMetadata.java
@@ -135,7 +135,8 @@ public class PDFMetadata extends PDFStream {
//Set creation date if not available, yet
if (info.getCreationDate() == null) {
- Date d = new Date();
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date d = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
info.setCreationDate(d);
}
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFSignature.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFSignature.java
@@ -106,7 +106,9 @@ public class PDFSignature {
if (signParams.getReason() != null) {
put("Reason", signParams.getReason());
}
- put("M", PDFInfo.formatDateTime(new Date()));
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date d = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
+ put("M", PDFInfo.formatDateTime(d));
PDFArray array = new PDFArray();
array.add(new SigRef());
put("Reference", array);
--- a/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java
+++ b/fop-core/src/main/java/org/apache/fop/render/intermediate/IFRenderer.java
@@ -544,7 +544,9 @@ public class IFRenderer extends AbstractPathOrientedRenderer {
} else {
xmpBasic.setCreatorTool(Version.getVersion());
}
- xmpBasic.setMetadataDate(new java.util.Date());
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ java.util.Date d = (sde == null) ? new java.util.Date() : new java.util.Date(1000 * Long.parseLong(sde));
+ xmpBasic.setMetadataDate(d);
if (getUserAgent().getCreationDate() != null) {
xmpBasic.setCreateDate(getUserAgent().getCreationDate());
} else {
--- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java
+++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java
@@ -262,7 +262,9 @@ class PDFRenderingUtil {
fopXMP.mergeInto(docXMP, exclude);
XMPBasicAdapter xmpBasic = XMPBasicSchema.getAdapter(docXMP);
//Metadata was changed so update metadata date
- xmpBasic.setMetadataDate(new java.util.Date());
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ java.util.Date d = (sde == null) ? new java.util.Date() : new java.util.Date(1000 * Long.parseLong(sde));
+ xmpBasic.setMetadataDate(d);
PDFMetadata.updateInfoFromMetadata(docXMP, pdfDoc.getInfo());
PDFMetadata pdfMetadata = pdfDoc.getFactory().makeMetadata(
@@ -481,7 +483,9 @@ class PDFRenderingUtil {
augmentDictionary((PDFDictionary)currentPage.get("DPart"), extension);
}
} else if (type == PDFDictionaryType.PagePiece) {
- String date = DateFormatUtil.formatPDFDate(new Date(), TimeZone.getDefault());
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date dd = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
+ String date = DateFormatUtil.formatPDFDate(dd, TimeZone.getDefault());
if (currentPage.get("PieceInfo") == null) {
currentPage.put("PieceInfo", new PDFDictionary());
currentPage.put("LastModified", date);
--- a/fop-core/src/main/java/org/apache/fop/render/ps/PSDocumentHandler.java
+++ b/fop-core/src/main/java/org/apache/fop/render/ps/PSDocumentHandler.java
@@ -211,7 +211,9 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
//PostScript Header
gen.writeln(DSCConstants.PS_ADOBE_30);
gen.writeDSCComment(DSCConstants.CREATOR, new String[] {getUserAgent().getProducer()});
- gen.writeDSCComment(DSCConstants.CREATION_DATE, new Object[] {new java.util.Date()});
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ java.util.Date d = (sde == null) ? new java.util.Date() : new java.util.Date(1000 * Long.parseLong(sde));
+ gen.writeDSCComment(DSCConstants.CREATION_DATE, new Object[] {d});
gen.writeDSCComment(DSCConstants.LANGUAGE_LEVEL, gen.getPSLevel());
gen.writeDSCComment(DSCConstants.PAGES, new Object[] {DSCConstants.ATEND});
gen.writeDSCComment(DSCConstants.BBOX, DSCConstants.ATEND);
--- a/fop-core/src/main/java/org/apache/fop/tools/anttasks/FileCompare.java
+++ b/fop-core/src/main/java/org/apache/fop/tools/anttasks/FileCompare.java
@@ -149,8 +149,10 @@ public class FileCompare {
}
private void writeHeader(PrintWriter results) {
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date d = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
String dateTime = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,
- DateFormat.MEDIUM).format(new Date());
+ DateFormat.MEDIUM).format(d);
results.println("<html><head><title>Test Results</title></head><body>\n");
results.println("<h2>Compare Results<br>");
results.println("<font size='1'>created " + dateTime
--- a/fop-core/src/test/java/org/apache/fop/render/rtf/rtflib/testdocs/TestDocument.java
+++ b/fop-core/src/test/java/org/apache/fop/render/rtf/rtflib/testdocs/TestDocument.java
@@ -82,7 +82,8 @@ abstract class TestDocument {
para.newLineBreak();
para.newText("generated by class " + getClass().getName());
para.newLineBreak();
- para.newText("generated on " + new Date());
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ para.newText("generated on " + (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde)));
para.close();
}
}
--- a/fop/examples/plan/src/org/apache/fop/plan/SimplePlanDrawer.java
+++ b/fop/examples/plan/src/org/apache/fop/plan/SimplePlanDrawer.java
@@ -129,7 +129,8 @@ public class SimplePlanDrawer implements PlanDrawer {
}
protected void addPlan(Document doc, Element svgRoot, EventList data) {
- Date currentDate = new Date();
+ String sde = System.getenv("SOURCE_DATE_EPOCH");
+ Date currentDate = (sde == null) ? new Date() : new Date(1000 * Long.parseLong(sde));
Date lastWeek = startDate;
Date future = endDate;