[ https://jira.codehaus.org/browse/MSHARED-394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=359172#comment-359172 ]
Vladimir Sitnikov edited comment on MSHARED-394 at 12/16/14 2:34 PM: --------------------------------------------------------------------- This is non-trivial. 0) My main concern is Velocity templates. org.apache:apache pom uses Velocity templates to render {{DEPENDENCIES}}, etc. 1) Regular property-only interpolations are important as well, however it does not make much sense if we cover just the basic stuff. 2) In Velocity, I expect the following expressions are very hard to tame: {{#include("one.gif","two.txt","three.htm")}}, {{#evaluate}}, {{#define}} 3) {{MavenProject}} is passed to the {{VelocityContext}}. I am not sure if you can identify "the required bits". If you try to hash the whole {{MavenProject}} thing, I expect the cache will always miss. Do you still think this kind of coupling between filtering and Velocity is worth doing? was (Author: vladimirsitnikov): This is non-trivial. 0) My main concern is Velocity templates. org.apache:apache pom uses Velocity templates to render {{DEPENDENCIES}}, etc. 1) Regular property-only interpolations are important as well, however I does not make much sense if we cover just the basic stuff. 2) In Velocity, I expect the following expressions are very hard to tame: {{#include("one.gif","two.txt","three.htm")}}, {{#evaluate}}, {{#define}} 3) {{MavenProject}} is passed to the {{VelocityContext}}. I am not sure if you can identify "the required bits". If you try to hash the whole {{MavenProject}} thing, I expect the cache will always miss. Do you still think this kind of coupling between filtering and Velocity is worth doing? > Avoid rewrite of destination in DefaultMavenFileFilter#filterFile when > producing the same contents > -------------------------------------------------------------------------------------------------- > > Key: MSHARED-394 > URL: https://jira.codehaus.org/browse/MSHARED-394 > Project: Maven Shared Components > Issue Type: Improvement > Components: maven-filtering > Affects Versions: maven-filtering-1.2 > Reporter: Vladimir Sitnikov > Assignee: Kristian Rosenvold > > See relevant MRESOURCES-168. > When processing "filtered" resources, maven-filtering always overwrites > destination files, leading to rebuild of the upstream results (e.g. jar file > being repackaged due to "DEBUG] isUp2date: false (Resource with newer > modification date found.)"). > I think maven-filtering can do better job here: it can double-check if the > resource contents after filtering is equal to the contents of the existing > file, then it should avoid overwrite of the destination file. > The change would be localized in > {{org.apache.maven.shared.filtering.DefaultMavenFileFilter#filterFile}}: > {code:java} > private void filterFile(@Nonnull File from, @Nonnull File to, @Nullable > String encoding, @Nullable List<FilterWrapper> wrappers) throws IOException, > MavenFilteringException { > if(wrappers != null && wrappers.size() > 0) { > Reader fileReader = null; > Writer fileWriter = null; > try { > fileReader = this.getFileReader(encoding, from); > fileWriter = this.getFileWriter(encoding, to); // Here > temporary buffer should be used to avoid accidental file overwrite > Reader src = this.readerFilter.filter(fileReader, true, > wrappers); > IOUtil.copy(src, fileWriter); > } finally { > IOUtil.close(fileReader); > IOUtil.close(fileWriter); > } > } else if(to.lastModified() < from.lastModified()) { > FileUtils.copyFile(from, to); > } > }{code} > The change would require to buffer the contents in memory, thus it might lead > to OutOfMemory errors. I suggest disabling this buffering if the size of the > source file exceeds some threshold. -- This message was sent by Atlassian JIRA (v6.1.6#6162)