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

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

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)

Reply via email to