jdaugherty commented on code in PR #16142:
URL: https://github.com/apache/grails-core/pull/16142#discussion_r3775448064


##########
grails-gsp/core/src/main/groovy/org/grails/gsp/compiler/GroovyPageCompiler.groovy:
##########
@@ -215,11 +215,26 @@ class GroovyPageCompiler {
             File gspgroovyfile = new File(new 
File(generatedGroovyPagesDirectory, packageDir), className + '.groovy')
             // gspgroovyfile.getParentFile().mkdirs()
 
-            gspfile.withInputStream { InputStream gspinput ->
+            byte[] gspSource = gspfile.bytes
+            // closing a ByteArrayInputStream is a no-op, so there is nothing 
to release here
+            String sourceChecksum = GroovyPageParser.checksumOf(new 
ByteArrayInputStream(gspSource))
+
+            new ByteArrayInputStream(gspSource).withStream { InputStream 
gspinput ->
                 GroovyPageParser gpp = new GroovyPageParser(viewuri - '.gsp', 
viewuri, gspfile.absolutePath, gspinput, encoding, expressionCodec, configMap)
                 gpp.packageName = packageName
                 gpp.className = className
-                gpp.lastModified = gspfile.lastModified()
+                // Record what the source *is*, not when it was last touched. 
LAST_MODIFIED is emitted as a
+                // `static final long`, so it belongs to the class's ABI and 
is inlined into callers, which
+                // even Gradle's COMPILE_CLASSPATH normalization cannot see 
past. Git stores no modification
+                // times, so every checkout gave each .gsp a new one and 
identical sources compiled to
+                // different bytes, costing every downstream consumer of the 
jar its build cache.
+                //
+                // SOURCE_CHECKSUM answers what the timestamp was only ever a 
proxy for -- has the source
+                // changed? -- and answers it identically on every machine. 
GroovyPageMetaInfo prefers it and
+                // falls back to LAST_MODIFIED for pages compiled by earlier 
versions, so the zero here means
+                // "no timestamp recorded", never "never reload".
+                gpp.lastModified = 0L

Review Comment:
   Isn't this a breaking change?  I'm fine with it being removed long term, but 
setting this value here could cause downstream adopters to break.  @matrei are 
you ok with such a change in 7.x? 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to