files newer than the entries in the archive will not be replaced. Default is true for backwards compatibility. PR: 1667 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269394 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -127,6 +127,10 @@ Other changes: | |||||
| * <taskdef> can now define several tasks at once, reading the | * <taskdef> can now define several tasks at once, reading the | ||||
| name/classname pairs from a property file or resource. | name/classname pairs from a property file or resource. | ||||
| * <unzip/unjar/unwar> and <untar> now have an overwrite attribute that | |||||
| defaults to true. If set to false, files that are newer than the | |||||
| files in the archive will not be replaced. | |||||
| Fixed bugs: | Fixed bugs: | ||||
| ----------- | ----------- | ||||
| @@ -35,6 +35,13 @@ carried from tarfile.</p> | |||||
| <td valign="top">directory where to store the expanded files.</td> | <td valign="top">directory where to store the expanded files.</td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td valign="top">overwrite</td> | |||||
| <td valign="top"> Overwrite files, even if they are newer than the | |||||
| corresponding entries in the archive (true or false, default is | |||||
| true).</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| </table> | </table> | ||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <blockquote> | <blockquote> | ||||
| @@ -30,6 +30,13 @@ carried from zipfile.</p> | |||||
| <td valign="top">directory where to store the expanded files.</td> | <td valign="top">directory where to store the expanded files.</td> | ||||
| <td align="center" valign="top">Yes</td> | <td align="center" valign="top">Yes</td> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td valign="top">overwrite</td> | |||||
| <td valign="top">Overwrite files, even if they are newer than the | |||||
| corresponding entries in the archive (true or false, default is | |||||
| true).</td> | |||||
| <td align="center" valign="top">No</td> | |||||
| </tr> | |||||
| </table> | </table> | ||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <blockquote> | <blockquote> | ||||
| @@ -66,6 +66,8 @@ import java.util.zip.*; | |||||
| public class Expand extends MatchingTask { | public class Expand extends MatchingTask { | ||||
| private File dest; // req | private File dest; // req | ||||
| private File source; // req | private File source; // req | ||||
| private boolean overwrite = true; | |||||
| /** | /** | ||||
| * Do the work. | * Do the work. | ||||
| @@ -104,8 +106,6 @@ public class Expand extends MatchingTask { | |||||
| else { | else { | ||||
| expandFile(touch, source, dest); | expandFile(touch, source, dest); | ||||
| } | } | ||||
| } | } | ||||
| private void expandFile(Touch touch, File srcF, File dir) { | private void expandFile(Touch touch, File srcF, File dir) { | ||||
| @@ -119,7 +119,15 @@ public class Expand extends MatchingTask { | |||||
| while ((ze = zis.getNextEntry()) != null) { | while ((ze = zis.getNextEntry()) != null) { | ||||
| File f = new File(dir, project.translatePath(ze.getName())); | File f = new File(dir, project.translatePath(ze.getName())); | ||||
| try { | try { | ||||
| log("expand-file " + ze.getName() , Project.MSG_VERBOSE ); | |||||
| if (!overwrite && f.exists() | |||||
| && f.lastModified() >= ze.getTime()) { | |||||
| log("Skipping " + f + " as it is up-to-date", | |||||
| Project.MSG_DEBUG); | |||||
| continue; | |||||
| } | |||||
| log("expanding " + ze.getName() + " to "+ f, | |||||
| Project.MSG_VERBOSE); | |||||
| // create intermediary directories - sometimes zip don't add them | // create intermediary directories - sometimes zip don't add them | ||||
| File dirF=new File(f.getParent()); | File dirF=new File(f.getParent()); | ||||
| dirF.mkdirs(); | dirF.mkdirs(); | ||||
| @@ -179,4 +187,13 @@ public class Expand extends MatchingTask { | |||||
| public void setSrc(File s) { | public void setSrc(File s) { | ||||
| this.source = s; | this.source = s; | ||||
| } | } | ||||
| /** | |||||
| * Should we overwrite files in dest, even if they are newer than | |||||
| * the corresponding entries in the archive? | |||||
| */ | |||||
| public void setOverwrite(boolean b) { | |||||
| overwrite = b; | |||||
| } | |||||
| } | } | ||||
| @@ -69,6 +69,8 @@ public class Untar extends Task { | |||||
| private File dest; // req | private File dest; // req | ||||
| private File source; // req | private File source; // req | ||||
| private boolean overwrite = true; | |||||
| /** | /** | ||||
| * Do the work. | * Do the work. | ||||
| * | * | ||||
| @@ -105,8 +107,15 @@ public class Untar extends Task { | |||||
| while ((te = tis.getNextEntry()) != null) { | while ((te = tis.getNextEntry()) != null) { | ||||
| try { | try { | ||||
| File f = new File(dir, project.translatePath(te.getName())); | File f = new File(dir, project.translatePath(te.getName())); | ||||
| log("expand-file " + te.getName(), Project.MSG_VERBOSE ); | |||||
| // create intermediary directories - sometimes tar don't add them | |||||
| if (!overwrite && f.exists() | |||||
| && f.lastModified() >= te.getModTime().getTime()) { | |||||
| log("Skipping " + f + " as it is up-to-date", | |||||
| Project.MSG_DEBUG); | |||||
| continue; | |||||
| } | |||||
| log("expanding " + te.getName() + " to "+ f, | |||||
| Project.MSG_VERBOSE); | |||||
| File dirF=new File(f.getParent()); | File dirF=new File(f.getParent()); | ||||
| dirF.mkdirs(); | dirF.mkdirs(); | ||||
| @@ -166,4 +175,13 @@ public class Untar extends Task { | |||||
| public void setSrc(File s) { | public void setSrc(File s) { | ||||
| this.source = s; | this.source = s; | ||||
| } | } | ||||
| /** | |||||
| * Should we overwrite files in dest, even if they are newer than | |||||
| * the corresponding entries in the archive? | |||||
| */ | |||||
| public void setOverwrite(boolean b) { | |||||
| overwrite = b; | |||||
| } | |||||
| } | } | ||||