|
31 | 31 | import java.nio.file.Path; |
32 | 32 | import java.nio.file.Paths; |
33 | 33 | import java.time.Instant; |
| 34 | +import java.time.OffsetDateTime; |
34 | 35 | import java.time.ZoneOffset; |
35 | 36 | import java.time.format.DateTimeFormatter; |
| 37 | +import java.util.ArrayList; |
36 | 38 | import java.util.Arrays; |
37 | 39 | import java.util.LinkedList; |
38 | 40 | import java.util.List; |
|
67 | 69 | import org.eclipse.packager.rpm.build.RpmBuilder.PackageInformation; |
68 | 70 | import org.eclipse.packager.rpm.build.RpmBuilder.Version; |
69 | 71 | import org.eclipse.packager.rpm.deps.RpmDependencyFlags; |
| 72 | +import org.eclipse.packager.rpm.header.Header; |
| 73 | +import org.eclipse.packager.rpm.info.RpmInformation; |
70 | 74 | import org.eclipse.packager.rpm.signature.RsaHeaderSignatureProcessor; |
71 | 75 | import org.eclipse.packager.rpm.signature.RsaSignatureProcessor; |
72 | 76 | import org.eclipse.packager.rpm.signature.SignatureProcessor; |
@@ -438,6 +442,12 @@ public void setGenerateDefaultSourcePackage(final boolean generateDefaultSourceP |
438 | 442 | @Parameter |
439 | 443 | String defaultRuleset; |
440 | 444 |
|
| 445 | + /** |
| 446 | + * A list of change-logs for this RPM |
| 447 | + */ |
| 448 | + @Parameter |
| 449 | + List<Changelog> changelogs = new LinkedList<>(); |
| 450 | + |
441 | 451 | private Logger logger; |
442 | 452 |
|
443 | 453 | private RulesetEvaluator eval; |
@@ -1138,6 +1148,25 @@ private void customizeHeader(final RpmBuilder builder) { |
1138 | 1148 | this.logger.debug("Overriding build time: %s", outputTimestampInstant); |
1139 | 1149 | rpmTagHeader.putInt(RpmTag.BUILDTIME, (int) (outputTimestampInstant.toEpochMilli() / 1000)); |
1140 | 1150 | } |
| 1151 | + |
| 1152 | + if (changelogs != null && !changelogs.isEmpty()) { |
| 1153 | + List<String> authors = changelogs.stream().map(Changelog::getAuthor).collect(Collectors.toList()); |
| 1154 | + List<String> text = changelogs.stream().map(Changelog::getText).collect(Collectors.toList()); |
| 1155 | + List<Integer> dates = new ArrayList<>(); |
| 1156 | + |
| 1157 | + for (Changelog changelog : changelogs) { |
| 1158 | + if (changelog.getDate() != null && !changelog.getDate().isEmpty()) { |
| 1159 | + dates.add((int)OffsetDateTime.parse(changelog.getDate()).toEpochSecond()); |
| 1160 | + } else { |
| 1161 | + dates.add((int)changelog.getTimestamp()); |
| 1162 | + } |
| 1163 | + } |
| 1164 | + this.logger.debug("Building changelog with authors %s and dates %s and text %s", authors, dates, text); |
| 1165 | + |
| 1166 | + Header.putIntFields(rpmTagHeader, dates, RpmTag.CHANGELOG_TIMESTAMP, Integer::intValue); |
| 1167 | + rpmTagHeader.putStringArray(RpmTag.CHANGELOG_AUTHOR, authors.toArray(new String[0])); |
| 1168 | + rpmTagHeader.putStringArray(RpmTag.CHANGELOG_TEXT, text.toArray(new String[0])); |
| 1169 | + } |
1141 | 1170 | }); |
1142 | 1171 | } |
1143 | 1172 |
|
@@ -1423,4 +1452,13 @@ private static void ifSet(final Consumer<String> setter, final String value, fin |
1423 | 1452 | } |
1424 | 1453 | } |
1425 | 1454 |
|
| 1455 | + |
| 1456 | + public static class Changelog extends RpmInformation.Changelog { |
| 1457 | + |
| 1458 | + private String date; |
| 1459 | + |
| 1460 | + public String getDate() { |
| 1461 | + return date; |
| 1462 | + } |
| 1463 | + } |
1426 | 1464 | } |
0 commit comments