[ 
https://jira.codehaus.org/browse/MSHARED-394?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=359191#comment-359191
 ] 

Vladimir Sitnikov commented on MSHARED-394:
-------------------------------------------

Well, I thought Velocity is somewhere inside maven-filtering.
I did a double-check and it turns out the offending velocity is inside 
maven-remote-resources-plugin.

I'll file a pull request there.

However, the improvement to properties filtering still makes sense.
For resource-based filtering, you'll have hard time "caching" input properties 
for reader-based filtering.
It does not contain file name, thus you can't tell if the source was modified 
or not.


> 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)

Reply via email to