Clover coverage report - Ant Coverage
Coverage timestamp: Tue Apr 8 2003 20:43:55 EST
file stats: LOC: 131   Methods: 2
NCLOC: 31   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
DifferentSelector.java 0% 0% 0% 0%
 1   
 /*
 2   
  *  The Apache Software License, Version 1.1
 3   
  *
 4   
  *  Copyright (c) 2003 The Apache Software Foundation.  All rights
 5   
  *  reserved.
 6   
  *
 7   
  *  Redistribution and use in source and binary forms, with or without
 8   
  *  modification, are permitted provided that the following conditions
 9   
  *  are met:
 10   
  *
 11   
  *  1. Redistributions of source code must retain the above copyright
 12   
  *  notice, this list of conditions and the following disclaimer.
 13   
  *
 14   
  *  2. Redistributions in binary form must reproduce the above copyright
 15   
  *  notice, this list of conditions and the following disclaimer in
 16   
  *  the documentation and/or other materials provided with the
 17   
  *  distribution.
 18   
  *
 19   
  *  3. The end-user documentation included with the redistribution, if
 20   
  *  any, must include the following acknowlegement:
 21   
  *  "This product includes software developed by the
 22   
  *  Apache Software Foundation (http://www.apache.org/)."
 23   
  *  Alternately, this acknowlegement may appear in the software itself,
 24   
  *  if and wherever such third-party acknowlegements normally appear.
 25   
  *
 26   
  *  4. The names "Ant" and "Apache Software
 27   
  *  Foundation" must not be used to endorse or promote products derived
 28   
  *  from this software without prior written permission. For written
 29   
  *  permission, please contact apache@apache.org.
 30   
  *
 31   
  *  5. Products derived from this software may not be called "Apache"
 32   
  *  nor may "Apache" appear in their names without prior written
 33   
  *  permission of the Apache Group.
 34   
  *
 35   
  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 36   
  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 37   
  *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 38   
  *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 39   
  *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 40   
  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 41   
  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 42   
  *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 43   
  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 44   
  *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 45   
  *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 46   
  *  SUCH DAMAGE.
 47   
  *  ====================================================================
 48   
  *
 49   
  *  This software consists of voluntary contributions made by many
 50   
  *  individuals on behalf of the Apache Software Foundation.  For more
 51   
  *  information on the Apache Software Foundation, please see
 52   
  *  <http://www.apache.org/>.
 53   
  */
 54   
 
 55   
 package org.apache.tools.ant.types.selectors;
 56   
 
 57   
 import org.apache.tools.ant.util.FileUtils;
 58   
 import org.apache.tools.ant.BuildException;
 59   
 
 60   
 import java.io.File;
 61   
 import java.io.IOException;
 62   
 
 63   
 /**
 64   
  * This selector selects files against a mapped set of target files, selecting all those
 65   
  * files which are different. A byte-by-byte comparision is performed on equal length files;
 66   
  * files with different lengths are deemed different automatically; files with identical timestamps
 67   
  * are viewed as matching by default, unless you specify otherwise.
 68   
  * <p>
 69   
  * This is a useful selector to work with programs and tasks that don't handle
 70   
  * dependency checking properly; Even if a predecessor task always creates its
 71   
  * output files, followup tasks can be driven off copies made with a different selector,
 72   
  * so their dependencies are driven on the absolute state of the files, not a timestamp.
 73   
  * <p>
 74   
  * Clearly, however, bulk file comparisons is inefficient; anything that can use
 75   
  * timestamps is to be preferred. If this selector must be used, use it over as few files
 76   
  * as possible, perhaps following it with an &lt;uptodate;&gt to keep the descendent
 77   
  * routines conditional.
 78   
  *
 79   
  */
 80   
 public class DifferentSelector extends MappingSelector {
 81   
 
 82   
     private FileUtils fileUtils= FileUtils.newFileUtils();
 83   
 
 84   
     private boolean ignoreFileTimes=false;
 85   
 
 86   
 
 87   
     /**
 88   
      * This flag tells the selector to ignore file times in the comparison
 89   
      * @param ignoreFileTimes
 90   
      */
 91  0
     public void setIgnoreFileTimes(boolean ignoreFileTimes) {
 92  0
         this.ignoreFileTimes = ignoreFileTimes;
 93   
     }
 94   
 
 95   
     /**
 96   
      * this test is our selection test that compared the file with the destfile
 97   
      * @param srcfile
 98   
      * @param destfile
 99   
      * @return
 100   
      */
 101  0
     protected boolean selectionTest(File srcfile, File destfile) {
 102   
 
 103   
         //if either of them is missing, they are different
 104  0
         if (srcfile.exists() != destfile.exists()) {
 105  0
             return true;
 106   
         }
 107   
 
 108  0
         if (srcfile.length() != destfile.length()) {
 109   
             // different size =>different files
 110  0
             return true;
 111   
         }
 112   
 
 113   
         //same date if dest timestamp is within granularity of the srcfile
 114  0
         boolean sameDate;
 115  0
         sameDate = destfile.lastModified() >= srcfile.lastModified() - granularity
 116   
             && destfile.lastModified() <= srcfile.lastModified() + granularity;
 117   
 
 118   
         //and when ignoreFileTimes is set we claim the files are now equal
 119  0
         if(sameDate && !ignoreFileTimes) {
 120  0
             return true;
 121   
         }
 122   
 
 123   
         //here do a bulk comparison
 124  0
         try {
 125  0
             return !fileUtils.contentEquals(srcfile,destfile);
 126   
         } catch (IOException e) {
 127  0
             throw new BuildException("while comparing "+srcfile+" and "+destfile,e);
 128   
         }
 129   
     }
 130   
 }
 131