Browse Source

Avoid altering unnecessarily the timestamps of the directories of the

files processed by replaceregexp
PR: 22541


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275124 13f79535-47bb-0310-9956-ffa450edef68
master
Antoine Levy-Lambert 22 years ago
parent
commit
3b9c7267f5
4 changed files with 37 additions and 12 deletions
  1. +4
    -0
      WHATSNEW
  2. +14
    -1
      src/etc/testcases/taskdefs/optional/replaceregexp.xml
  3. +1
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java
  4. +18
    -9
      src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java

+ 4
- 0
WHATSNEW View File

@@ -143,6 +143,10 @@ Fixed bugs:
* <replaceregexp> didn't work for multi-byte encodings if byline was false. * <replaceregexp> didn't work for multi-byte encodings if byline was false.
Bugzilla Report 19187. Bugzilla Report 19187.


* <replaceregexp> was altering unnecessarily the timestamp of the directories
containing the files to process
Bugzilla Report 22541.

* file names that include spaces need to be quoted inside the @argfile * file names that include spaces need to be quoted inside the @argfile
argument using forked <javac> and (all JDKS). Bugzilla Report 10499. argument using forked <javac> and (all JDKS). Bugzilla Report 10499.
NB : a first correction was only introducing quotes for JDK 1.4 NB : a first correction was only introducing quotes for JDK 1.4


+ 14
- 1
src/etc/testcases/taskdefs/optional/replaceregexp.xml View File

@@ -1,5 +1,5 @@
<project name="test" default="def" basedir="."> <project name="test" default="def" basedir=".">
<property name="tmpregexp" value="tmpregexp"/>
<target name="def"> <target name="def">
<fail>This build file should only be run from within the testcase</fail> <fail>This build file should only be run from within the testcase</fail>
</target> </target>
@@ -18,6 +18,18 @@
<substitution expression="NewProp=\1\2" /> <substitution expression="NewProp=\1\2" />
</replaceregexp> </replaceregexp>
</target> </target>
<!-- use in conjunction with testDirectoryDateDoesNotChange to make sure something will happen -->
<target name="touchDirectory">
<mkdir dir="${tmpregexp}"/>
<copy file="replaceregexp.properties" tofile="${tmpregexp}/test.properties" />
<sleep seconds="2"/>
</target>
<target name="testDirectoryDateDoesNotChange">
<replaceregexp file="${tmpregexp}/test.properties" byline="true">
<regexp pattern="foo" />
<substitution expression="bar"/>
</replaceregexp>
</target>


<target name="testDontAddNewline1" depends="setup-nl"> <target name="testDontAddNewline1" depends="setup-nl">
<replaceregexp file="test.properties" byline="false"> <replaceregexp file="test.properties" byline="false">
@@ -35,6 +47,7 @@


<target name="cleanup"> <target name="cleanup">
<delete file="test.properties" /> <delete file="test.properties" />
<delete dir="${tmpregexp}" quiet="true"/>
</target> </target>


</project> </project>


+ 1
- 2
src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java View File

@@ -317,8 +317,7 @@ public class ReplaceRegExp extends Task {
/** Perform the replace on the entire file */ /** Perform the replace on the entire file */
protected void doReplace(File f, int options) protected void doReplace(File f, int options)
throws IOException { throws IOException {
File parentDir = fileUtils.getParentFile(f);
File temp = fileUtils.createTempFile("replace", ".txt", parentDir);
File temp = fileUtils.createTempFile("replace", ".txt", null);


Reader r = null; Reader r = null;
FileWriter w = null; FileWriter w = null;


+ 18
- 9
src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java View File

@@ -68,13 +68,13 @@ import java.io.IOException;
* @version $Revision$ * @version $Revision$
*/ */
public class ReplaceRegExpTest extends BuildFileTest { public class ReplaceRegExpTest extends BuildFileTest {
private static final String PROJECT_PATH = "src/etc/testcases/taskdefs/optional";
public ReplaceRegExpTest(String name) { public ReplaceRegExpTest(String name) {
super(name); super(name);
} }
public void setUp() { public void setUp() {
configureProject("src/etc/testcases/taskdefs/optional/replaceregexp.xml");
configureProject(PROJECT_PATH + "/replaceregexp.xml");
} }
public void tearDown() { public void tearDown() {
@@ -85,7 +85,7 @@ public class ReplaceRegExpTest extends BuildFileTest {
Properties original = new Properties(); Properties original = new Properties();
FileInputStream propsFile = null; FileInputStream propsFile = null;
try { try {
propsFile = new FileInputStream("src/etc/testcases/taskdefs/optional/replaceregexp.properties");
propsFile = new FileInputStream(PROJECT_PATH + "/replaceregexp.properties");
original.load(propsFile); original.load(propsFile);
} finally { } finally {
if (propsFile != null) { if (propsFile != null) {
@@ -100,7 +100,7 @@ public class ReplaceRegExpTest extends BuildFileTest {


Properties after = new Properties(); Properties after = new Properties();
try { try {
propsFile = new FileInputStream("src/etc/testcases/taskdefs/optional/test.properties");
propsFile = new FileInputStream(PROJECT_PATH + "/test.properties");
after.load(propsFile); after.load(propsFile);
} finally { } finally {
if (propsFile != null) { if (propsFile != null) {
@@ -112,21 +112,30 @@ public class ReplaceRegExpTest extends BuildFileTest {
assertNull(after.get("OldAbc")); assertNull(after.get("OldAbc"));
assertEquals("AbcDef", after.get("NewProp")); assertEquals("AbcDef", after.get("NewProp"));
} }

// inspired by bug 22541
public void testDirectoryDateDoesNotChange() {
executeTarget("touchDirectory");
File myFile = new File(PROJECT_PATH + "/" + getProject().getProperty("tmpregexp"));
long timeStampBefore = myFile.lastModified();
executeTarget("testDirectoryDateDoesNotChange");
long timeStampAfter = myFile.lastModified();
assertEquals("directory date should not change",
timeStampBefore, timeStampAfter);
}
public void testDontAddNewline1() throws IOException { public void testDontAddNewline1() throws IOException {
executeTarget("testDontAddNewline1"); executeTarget("testDontAddNewline1");
assertTrue("Files match", assertTrue("Files match",
FileUtils.newFileUtils() FileUtils.newFileUtils()
.contentEquals(new File("src/etc/testcases/taskdefs/optional/test.properties"),
new File("src/etc/testcases/taskdefs/optional/replaceregexp2.result.properties")));
.contentEquals(new File(PROJECT_PATH + "/test.properties"),
new File(PROJECT_PATH + "/replaceregexp2.result.properties")));
} }


public void testDontAddNewline2() throws IOException { public void testDontAddNewline2() throws IOException {
executeTarget("testDontAddNewline2"); executeTarget("testDontAddNewline2");
assertTrue("Files match", assertTrue("Files match",
FileUtils.newFileUtils() FileUtils.newFileUtils()
.contentEquals(new File("src/etc/testcases/taskdefs/optional/test.properties"),
new File("src/etc/testcases/taskdefs/optional/replaceregexp2.result.properties")));
.contentEquals(new File(PROJECT_PATH + "/test.properties"),
new File(PROJECT_PATH + "/replaceregexp2.result.properties")));
} }


}// ReplaceRegExpTest }// ReplaceRegExpTest

Loading…
Cancel
Save