You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by jh...@apache.org on 2005/07/20 08:45:30 UTC

cvs commit: ant/src/testcases/org/apache/tools/ant/types/selectors ModifiedSelectorTest.java

jhm         2005/07/19 23:45:30

  Modified:    src/main/org/apache/tools/ant/types/selectors/modifiedselector
                        ModifiedSelector.java
               src/etc/testcases/types/resources/selectors build.xml
               docs/manual/CoreTypes selectors.html resources.html
               src/etc/testcases/types selectors.xml
               src/resources/org/apache/tools/ant/types/resources/selectors
                        antlib.xml
               src/testcases/org/apache/tools/ant/types/selectors
                        ModifiedSelectorTest.java
  Log:
  Greetings from Hackathon: Introduce ResourceSelector in <modified>
  
  Revision  Changes    Path
  1.17      +83 -3     ant/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java
  
  Index: ModifiedSelector.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- ModifiedSelector.java	12 Jun 2005 17:55:14 -0000	1.16
  +++ ModifiedSelector.java	20 Jul 2005 06:45:30 -0000	1.17
  @@ -33,7 +33,11 @@
   import org.apache.tools.ant.types.EnumeratedAttribute;
   import org.apache.tools.ant.types.Parameter;
   import org.apache.tools.ant.types.Path;
  +import org.apache.tools.ant.types.Resource;
  +import org.apache.tools.ant.types.resources.FileResource;
  +import org.apache.tools.ant.types.resources.selectors.ResourceSelector;
   import org.apache.tools.ant.types.selectors.BaseExtendSelector;
  +import org.apache.tools.ant.util.FileUtils;
   
   
   /**
  @@ -228,10 +232,11 @@
    * a nested <i><param name="algorithm.provider" value="MyProvider"/></i>.
    *
    *
  - * @version 2004-07-12
  + * @version 2005-07-19
    * @since  Ant 1.6
    */
  -public class ModifiedSelector extends BaseExtendSelector implements BuildListener {
  +public class ModifiedSelector extends BaseExtendSelector
  +                              implements BuildListener, ResourceSelector {
   
   
       // -----  attributes  -----
  @@ -261,6 +266,12 @@
       /** Are directories selected? */
       private boolean selectDirectories = true;
   
  +    /**
  +     * Should Resources whithout an InputStream, and
  +     * therefore without checking, be selected?
  +     */
  +    private boolean selectResourcesWithoutInputStream = true;
  +
       /** Delay the writing of the cache file */
       private boolean delayUpdate = true;
   
  @@ -507,13 +518,72 @@
   
   
       /**
  +     * Implementation of ResourceSelector.isSelected().
  +     *
  +     * @param resource The resource to check
  +     * @return whether the resource is selected
  +     * @see org.apache.tools.ant.types.resources.selectors.ResourceSelector#isSelected(org.apache.tools.ant.types.Resource)
  +     */
  +    public boolean isSelected(Resource resource) {
  +        if (resource.isFilesystemOnly()) {
  +            // We have a 'resourced' file, so reconvert it and use
  +            // the 'old' implementation.
  +            FileResource fileResource = (FileResource) resource;
  +            File file = fileResource.getFile();
  +            String filename = fileResource.getName();
  +            File basedir = fileResource.getBaseDir();
  +            return isSelected(basedir, filename, file);
  +        } else {
  +            try {
  +                // How to handle non-file-Resources? I copy temporarily the
  +                // resource to a file and use the file-implementation.
  +                FileUtils fu = FileUtils.getFileUtils();
  +                File tmpFile = fu.createTempFile("modified-", ".tmp", null);
  +                Resource tmpResource = new FileResource(tmpFile);
  +                fu.copyResource(resource, tmpResource);
  +                boolean isSelected = isSelected(tmpFile.getParentFile(),
  +                                                tmpFile.getName(),
  +                                                resource.toLongString());
  +                tmpFile.delete();
  +                return isSelected;
  +            } catch (UnsupportedOperationException uoe) {
  +                log("The resource '"
  +                  + resource.getName()
  +                  + "' does not provide an InputStream, so it is not checked. "
  +                  + "Akkording to 'selres' attribute value it is "
  +                  + ((selectResourcesWithoutInputStream) ? "" : " not")
  +                  + "selected.", Project.MSG_INFO);
  +                return selectResourcesWithoutInputStream;
  +            } catch (Exception e) {
  +                throw new BuildException(e);
  +            }
  +        }
  +    }
  +
  +
  +    /**
        * Implementation of BaseExtendSelector.isSelected().
  +     *
        * @param basedir as described in BaseExtendSelector
        * @param filename as described in BaseExtendSelector
        * @param file as described in BaseExtendSelector
        * @return as described in BaseExtendSelector
        */
       public boolean isSelected(File basedir, String filename, File file) {
  +        return isSelected(basedir, filename, file.getAbsolutePath());
  +    }
  +
  +
  +    /**
  +     * The business logic of this selector for use as ResourceSelector of
  +     * FileSelector.
  +     *
  +     * @param basedir as described in BaseExtendSelector
  +     * @param filename as described in BaseExtendSelector
  +     * @param cacheKey the name for the key for storing the hashvalue
  +     * @return
  +     */
  +    private boolean isSelected(File basedir, String filename, String cacheKey) {
           validate();
           File f = new File(basedir, filename);
   
  @@ -524,7 +594,7 @@
   
           // Get the values and do the comparison
           String cachedValue = String.valueOf(cache.get(f.getAbsolutePath()));
  -        String newValue    = algorithm.getValue(f);
  +        String newValue = algorithm.getValue(f);
   
           boolean rv = (comparator.compare(cachedValue, newValue) != 0);
   
  @@ -601,6 +671,15 @@
   
   
       /**
  +     * Support for <i>selres</i> attribute.
  +     * @param newValue the new value
  +     */
  +    public void setSelres(boolean newValue) {
  +        this.selectResourcesWithoutInputStream = newValue;
  +    }
  +
  +
  +    /**
        * Getter for the modified count
        * @return modified count
        */
  @@ -964,4 +1043,5 @@
               return new String[] {"equal", "rule" };
           }
       }
  +
   }
  
  
  
  1.3       +8 -0      ant/src/etc/testcases/types/resources/selectors/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/types/resources/selectors/build.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- build.xml	31 May 2005 19:18:55 -0000	1.2
  +++ build.xml	20 Jul 2005 06:45:30 -0000	1.3
  @@ -407,4 +407,12 @@
     <target name="all"
       depends="name,testexists,instanceof,testtype,testdate,testsize,logical" />
   
  +
  +	
  +  <!-- 
  +    The tests for oata.types.selectors.ModifiedSelectorTest as 
  +    ResourceSelector are in its test-buildfile src\etc\testcases\types\selectors.xml. 
  +  -->
  +		
  +	
   </project>
  
  
  
  1.35      +27 -14    ant/docs/manual/CoreTypes/selectors.html
  
  Index: selectors.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTypes/selectors.html,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- selectors.html	29 Apr 2005 18:58:12 -0000	1.34
  +++ selectors.html	20 Jul 2005 06:45:30 -0000	1.35
  @@ -659,6 +659,12 @@
       The comparison, computing of the hashvalue and the store is done by implementation
       of special interfaces. Therefore they may provide additional parameters.</p>
   
  +    <p>The <code>&lt;modified&gt;</code> selector can be used as ResourceSelector.
  +    In that case it maps simple file resources to files and does its job. If the
  +    resource is from another type, the <code>&lt;modified&gt;</code> selector tries
  +    to (<b>attention!</b>) copy the content into a local file for computing the
  +    hashvalue.</p>
  +
       <table border="1" cellpadding="2" cellspacing="0">
         <tr>
           <td valign="top"><b>Attribute</b></td>
  @@ -730,6 +736,13 @@
           <td valign="top" align="center"> No, defaults to <i>true</i> </td>
         </tr>
         <tr>
  +        <td valign="top"> selres </td>
  +        <td valign="top"> Should Resources whithout an InputStream, and
  +           therefore without checking, be selected?  (boolean) </td>
  +        <td valign="top" align="center"> No, defaults to <i>true</i>. Only relevant
  +           when used as ResourceSelector. </td>
  +      </tr>
  +      <tr>
           <td valign="top"> delayupdate </td>
           <td valign="top"> If set to <i>true</i>, the storage of the cache will be delayed until the
                next finished BuildEvent; task finished, target finished or build finished,
  @@ -932,7 +945,7 @@
         <h4>Script Selector</h4>
   
         <p>
  -        The <code>&lt;scriptselector&gt;</code> element enables you 
  +        The <code>&lt;scriptselector&gt;</code> element enables you
           to write a complex selection algorithm in any
           <a href="http://jakarta.apache.org/bsf" target="_top">Apache BSF</a>
           supported language.</p>
  @@ -958,22 +971,22 @@
             <td valign="top">filename of the script</td>
             <td valign="top" align="center">no</td>
           </tr>
  -      </table>      
  +      </table>
         <p>
         If no <code>src</code> attribute is supplied, the script must be nested
  -      inside the selector declaration. 
  +      inside the selector declaration.
         </p>
         <p>The embedded script is invoked for every test, with
  -         the bean <code>self</code> 
  +         the bean <code>self</code>
           is bound to the selector. It has an attribute <code>selected</code>
           must can be set using <code>setSelected(boolean)</code> to select that
           file.
  -         
  +
         <p>
  -      
  +
         The following beans are configured for every script, alongside
         the classic set of project, properties, and targets.
  -      
  +
         <table border="1" cellpadding="2" cellspacing="0">
           <tr>
             <td valign="top"><b>Bean</b></td>
  @@ -1000,13 +1013,13 @@
             <td valign="top">Fileset base directory</td>
             <td valign="top" >java.io.File</td>
           </tr>
  -        
  -      </table>       
  +
  +      </table>
         <p>
         The <code>self</code> bean maps to the selector, which has the following
  -      attributes. Only the <code>selected</code> flag is writeable, the rest 
  +      attributes. Only the <code>selected</code> flag is writeable, the rest
         are read only via their getter methods.
  -      
  +
               <table border="1" cellpadding="2" cellspacing="0">
           <tr>
             <td valign="top"><b>Attribute</b></td>
  @@ -1034,7 +1047,7 @@
             <td valign="top" >java.io.File</td>
           </tr>
         </table>
  -      
  +
         <p>
         Example
         </p>
  @@ -1053,7 +1066,7 @@
       &lt;/scriptselector&gt;
   </pre>
   Select files whose filename length is even.
  -      
  +
       <a name="selectcontainers"></a>
       <h3>Selector Containers</h3>
   
  @@ -1450,4 +1463,4 @@
   
     </body>
   
  -</html>
  +</html>
  \ No newline at end of file
  
  
  
  1.3       +4 -2      ant/docs/manual/CoreTypes/resources.html
  
  Index: resources.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTypes/resources.html,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- resources.html	31 May 2005 19:18:55 -0000	1.2
  +++ resources.html	20 Jul 2005 06:45:30 -0000	1.3
  @@ -154,7 +154,7 @@
     </tr>
   </table>
   <p>The classpath along which to search for a Java resource
  -  can also be specified by means of one or more nested 
  +  can also be specified by means of one or more nested
     <code><a href="../using.html#path">classpath</a></code> elements.
   </p>
   
  @@ -347,6 +347,8 @@
         - select resources selected by no nested resource selectors.</li>
       <li><a href="#rsel.majority">majority</a> - select resources selected
         by a majority of nested resource selectors.</li>
  +    <li><a href="selectors.html#modified">modified</a> - select resources which
  +      content has changed.</li>
     </ul>
   
     <h4><a name="rsel.name">name</a></h4>
  @@ -597,4 +599,4 @@
   Reserved.</p>
   
   </body>
  -</html>
  +</html>
  \ No newline at end of file
  
  
  
  1.10      +88 -0     ant/src/etc/testcases/types/selectors.xml
  
  Index: selectors.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/types/selectors.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- selectors.xml	12 Jul 2004 15:04:13 -0000	1.9
  +++ selectors.xml	20 Jul 2005 06:45:30 -0000	1.10
  @@ -261,4 +261,92 @@
         <property name="fs.full.value" refid="fs.full"/>
     </target>
   
  +
  +	<target name="modifiedselectortest-ResourceSimple">
  +		<fail message="Didnt get the required numbers of Resources.">
  +			<condition>
  +				<not>
  +					<resourcecount when="equal" count="3">
  +						<restrict>
  +							<resources>
  +								<file file="foo" />
  +								<resource name="foo" />
  +								<file file="foo" basedir="${basedir}" />
  +							</resources>
  +							<modified selres="true" xmlns="antlib:org.apache.tools.ant.types.resources.selectors"/>
  +						</restrict>
  +					</resourcecount>
  +				</not>
  +			</condition>
  +		</fail>
  +	</target>
  +
  +	<target name="modifiedselectortest-ResourceSelresTrue">
  +		<fail message="Got the Resource, but should.">
  +			<condition>
  +				<not>
  +					<resourcecount when="equal" count="1">
  +						<restrict>
  +							<resources>
  +								<resource name="notExisting" />
  +							</resources>
  +							<modified selres="true" xmlns="antlib:org.apache.tools.ant.types.resources.selectors"/>
  +						</restrict>
  +					</resourcecount>
  +				</not>
  +			</condition>
  +		</fail>
  +	</target>
  +
  +	<target name="modifiedselectortest-ResourceSelresFalse">
  +		<fail message="Got the Resource, but should not.">
  +			<condition>
  +				<not>
  +					<resourcecount when="equal" count="0">
  +						<restrict>
  +							<resources>
  +								<resource name="notExisting" />
  +							</resources>
  +							<modified selres="false" xmlns="antlib:org.apache.tools.ant.types.resources.selectors"/>
  +						</restrict>
  +					</resourcecount>
  +				</not>
  +			</condition>
  +		</fail>
  +	</target>
  +
  +	<target name="modifiedselectortest-scenario-resourceSimple" depends="modifiedselectortest-scenario-prepare">
  +		<macrodef name="check">
  +			<attribute name="count"/>
  +			<attribute name="message"/>
  +			<sequential>
  +				<fail message="@{message}">
  +					<condition>
  +						<not>
  +							<resourcecount when="equal" count="@{count}">
  +								<restrict>
  +									<resources>
  +										<fileset dir="${test.dir}/src"/>
  +									</resources>
  +									<modified selres="false" xmlns="antlib:org.apache.tools.ant.types.resources.selectors"/>
  +								</restrict>
  +							</resourcecount>
  +						</not>
  +					</condition>
  +				</fail>	
  +			</sequential>
  +		</macrodef>
  +		<!-- select first time and create cachefile -->
  +		<check count="14" message="Initial set of files not ok."/>
  +		
  +		<!-- check second time: nothing should be selected -->
  +		<check count="0" message="Selected files but shouldnt."/>
  +		
  +		<!-- 'modify' the source files -->
  +		<antcall target="modifiedselectortest-scenario-makeDirty"/>
  +
  +		<!-- copy third time: only the files with new CONTENT should be copied -->
  +		<check count="2" message="Didnt select the 2 modified files."/>
  +	</target>	
  +	
   </project>
  \ No newline at end of file
  
  
  
  1.2       +2 -0      ant/src/resources/org/apache/tools/ant/types/resources/selectors/antlib.xml
  
  Index: antlib.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/resources/org/apache/tools/ant/types/resources/selectors/antlib.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- antlib.xml	23 May 2005 19:51:56 -0000	1.1
  +++ antlib.xml	20 Jul 2005 06:45:30 -0000	1.2
  @@ -21,4 +21,6 @@
       classname="org.apache.tools.ant.types.resources.selectors.Size" />
     <typedef name="date"
       classname="org.apache.tools.ant.types.resources.selectors.Date" />
  +  <typedef name="modified"
  +    classname="org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector" />
   </antlib>
  
  
  
  1.13      +1 -1      ant/src/testcases/org/apache/tools/ant/types/selectors/ModifiedSelectorTest.java
  
  Index: ModifiedSelectorTest.java
  ===================================================================
  RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/types/selectors/ModifiedSelectorTest.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ModifiedSelectorTest.java	6 Jan 2005 12:05:09 -0000	1.12
  +++ ModifiedSelectorTest.java	20 Jul 2005 06:45:30 -0000	1.13
  @@ -43,7 +43,7 @@
   /**
    * Unit tests for ModifiedSelector.
    *
  - * @version 2004-07-12
  + * @version 2005-07-19
    * @since  Ant 1.6
    */
   public class ModifiedSelectorTest extends BaseSelectorTest {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Re: cvs commit: ant/src/testcases/org/apache/tools/ant/types/selectors ModifiedSelectorTest.java

Posted by Matt Benson <gu...@yahoo.com>.
--- jhm@apache.org wrote:
>   Log:
>   Greetings from Hackathon: Introduce
> ResourceSelector in <modified>

:)

-Matt

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org