Is there support for repeatable builds planned? Using the source file might be 
acceptable, but the class file timestamp could be changing more likely for 
repeated builds?


--
http://bernd.eckenfels.net
________________________________
Von: core-libs-dev <core-libs-dev-r...@openjdk.java.net> im Auftrag von 
Jaikiran Pai <j...@openjdk.java.net>
Gesendet: Monday, September 13, 2021 7:44:22 AM
An: compiler-...@openjdk.java.net <compiler-...@openjdk.java.net>; 
core-libs-dev@openjdk.java.net <core-libs-dev@openjdk.java.net>
Betreff: RFR: 8258117: jar tool sets the time stamp of module-info.class 
entries to the current time

The commit here is a potential fix for the issue noted in 
https://bugs.openjdk.java.net/browse/JDK-8258117.

The change here repurposes an existing internal interface `ModuleInfoEntry` to 
keep track of the last modified timestamp of a `module-info.class` descriptor.

This commit uses the timestamp of the `module-info.class` on the filesystem to 
set the time on the `JarEntry`. There are a couple of cases to consider here:

1. When creating a jar  (using `--create`), we use the source 
`module-info.class` from the filesystem and then add extended info to it 
(attributes like packages, module version etc...). In such cases, this patch 
will use the lastmodified timestamp from the filesystem of `module-info.class` 
even though we might end up updating/extending/modifying (for example by adding 
a module version) its content while storing it as a `JarEntry`.

2. When updating a jar (using `--update`), this patch will use the lastmodified 
timestamp of `module-info.class` either from the filesystem or from the source 
jar's entry (depending on whether a new `module-info.class` is being passed to 
the command). Here too, it's possible that we might end up 
changing/modifying/extending the `module-info.class` (for example, changing the 
module version to a new version) that gets written into the updated jar file, 
but this patch _won't_ use `System.currentTimeMillis()` even in such cases.

If we do have to track actual changes that might happen to `module-info.class` 
while extending its info (in `extendedInfoBytes()`) and then decide whether to 
use current system time as last modified time, then this will require a bigger 
change and also a discussion on what kind of extending of module-info.class 
content will require a change to the lastmodifiedtime of that entry.

-------------

Commit messages:
 - 8258117: jar tool sets the time stamp of module-info.class entries to the 
current time

Changes: https://git.openjdk.java.net/jdk/pull/5486/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5486&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8258117
  Stats: 317 lines in 2 files changed: 298 ins; 0 del; 19 mod
  Patch: https://git.openjdk.java.net/jdk/pull/5486.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/5486/head:pull/5486

PR: https://git.openjdk.java.net/jdk/pull/5486

Reply via email to