git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269960 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -389,55 +389,6 @@ public class FixCRLF extends MatchingTask { | |||
| } | |||
| /** | |||
| * Checks for the inequality of two files | |||
| */ | |||
| private boolean filesEqual(File file1, File file2) { | |||
| BufferedReader reader1 = null; | |||
| BufferedReader reader2 = null; | |||
| char buf1[] = new char[INBUFLEN]; | |||
| char buf2[] = new char[INBUFLEN]; | |||
| int buflen; | |||
| if (file1.length() != file2.length()) { | |||
| return false; | |||
| } | |||
| try { | |||
| reader1 = new BufferedReader | |||
| (getReader(file1), INBUFLEN); | |||
| reader2 = new BufferedReader | |||
| (getReader(file2), INBUFLEN); | |||
| while ((buflen = reader1.read(buf1, 0, INBUFLEN)) != -1 ) { | |||
| reader2.read(buf2, 0, INBUFLEN); | |||
| // Compare the contents of the buffers | |||
| // There must be an easier way to do this, but I don''t | |||
| // know what it is | |||
| for (int i = 0; i < buflen; i++) { | |||
| if (buf1[i] != buf2[i]) { | |||
| return false; | |||
| } // end of if (buf1[i] != buf2[i]) | |||
| } | |||
| } | |||
| return true; // equal | |||
| } catch (IOException e) { | |||
| throw new BuildException("IOException in filesEqual: " + | |||
| file1 + " : " + file2); | |||
| } finally { | |||
| if (reader1 != null) { | |||
| try { | |||
| reader1.close(); | |||
| } catch (IOException e) {} | |||
| } | |||
| if (reader2 != null) { | |||
| try { | |||
| reader2.close(); | |||
| } catch (IOException e) {} | |||
| } | |||
| } | |||
| } | |||
| private void processFile(String file) throws BuildException { | |||
| File srcFile = new File(srcDir, file); | |||
| File destD = destDir == null ? srcDir : destDir; | |||
| @@ -602,7 +553,7 @@ public class FixCRLF extends MatchingTask { | |||
| if (destFile.exists()) { | |||
| // Compare the destination with the temp file | |||
| log("destFile exists", Project.MSG_DEBUG); | |||
| if ( ! filesEqual(destFile, tmpFile)) { | |||
| if (!fileUtils.contentEquals(destFile, tmpFile)) { | |||
| log(destFile + " is being written", Project.MSG_DEBUG); | |||
| if (!destFile.delete()) { | |||
| throw new BuildException("Unable to delete " | |||
| @@ -638,6 +589,8 @@ public class FixCRLF extends MatchingTask { | |||
| tmpFile = null; | |||
| } catch (IOException e) { | |||
| throw new BuildException(e); | |||
| } finally { | |||
| try { | |||
| if (lines != null) { | |||
| @@ -54,14 +54,17 @@ | |||
| package org.apache.tools.ant.util; | |||
| import java.io.IOException; | |||
| import java.io.File; | |||
| import java.io.BufferedInputStream; | |||
| import java.io.BufferedReader; | |||
| import java.io.FileReader; | |||
| import java.io.BufferedWriter; | |||
| import java.io.FileWriter; | |||
| import java.io.File; | |||
| import java.io.FileInputStream; | |||
| import java.io.FileOutputStream; | |||
| import java.io.FileReader; | |||
| import java.io.FileWriter; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.io.InputStream; | |||
| import java.lang.reflect.Method; | |||
| import java.text.DecimalFormat; | |||
| import java.util.Random; | |||
| @@ -504,5 +507,56 @@ public class FileUtils { | |||
| } | |||
| return result; | |||
| } | |||
| /** | |||
| * Compares the contents of two files. | |||
| * | |||
| * @since 1.9 | |||
| */ | |||
| public boolean contentEquals(File f1, File f2) throws IOException { | |||
| if (f1.exists() != f2.exists()) { | |||
| return false; | |||
| } | |||
| if (!f1.exists()) { | |||
| // two not existing files are equal | |||
| return true; | |||
| } | |||
| if (f1.isDirectory() || f2.isDirectory()) { | |||
| // don't want to compare directory contents for now | |||
| return false; | |||
| } | |||
| InputStream in1 = null; | |||
| InputStream in2 = null; | |||
| try { | |||
| in1 = new BufferedInputStream(new FileInputStream(f1)); | |||
| in2 = new BufferedInputStream(new FileInputStream(f2)); | |||
| int expectedByte = in1.read(); | |||
| while (expectedByte != -1) { | |||
| if (expectedByte != in2.read()) { | |||
| return false; | |||
| } | |||
| expectedByte = in1.read(); | |||
| } | |||
| if (in2.read() != -1) { | |||
| return false; | |||
| } | |||
| return true; | |||
| } finally { | |||
| if (in1 != null) { | |||
| try { | |||
| in1.close(); | |||
| } catch (IOException e) {} | |||
| } | |||
| if (in2 != null) { | |||
| try { | |||
| in2.close(); | |||
| } catch (IOException e) {} | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -298,6 +298,24 @@ public class FileUtilsTest extends TestCase { | |||
| tmp3.getAbsolutePath()); | |||
| } | |||
| /** | |||
| * Test contentEquals | |||
| */ | |||
| public void testContentEquals() throws IOException { | |||
| assertTrue("Non existing files", fu.contentEquals(new File("foo"), | |||
| new File("bar"))); | |||
| assertTrue("One exists, the other one doesn\'t", | |||
| !fu.contentEquals(new File("foo"), new File("build.xml"))); | |||
| assertTrue("Don\'t compare directories", | |||
| !fu.contentEquals(new File("src"), new File("src"))); | |||
| assertTrue("File equals itself", | |||
| fu.contentEquals(new File("build.xml"), | |||
| new File("build.xml"))); | |||
| assertTrue("Files are different", | |||
| !fu.contentEquals(new File("build.xml"), | |||
| new File("docs.xml"))); | |||
| } | |||
| /** | |||
| * adapt file separators to local conventions | |||
| */ | |||