[ https://jira.codehaus.org/browse/MSHARED-394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=359278#comment-359278 ]
Kristian Rosenvold commented on MSHARED-394: -------------------------------------------- I'll have to look at the interactions between filtering and the creation of the interpolation context. The imagination (and common sense and clean code and a few other rules :) are the only constraints here, I have all the keys to all the source code :) I'm currently busy with creating multithreaded zip/jar logic, but this will get my full attention once I finish that. Suggestions are always welcome, pull requests even better :) > 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)