|
|
|
@@ -0,0 +1,204 @@ |
|
|
|
<?xml version="1.0"?> |
|
|
|
<!-- |
|
|
|
Licensed to the Apache Software Foundation (ASF) under one or more |
|
|
|
contributor license agreements. See the NOTICE file distributed with |
|
|
|
this work for additional information regarding copyright ownership. |
|
|
|
The ASF licenses this file to You under the Apache License, Version 2.0 |
|
|
|
(the "License"); you may not use this file except in compliance with |
|
|
|
the License. You may obtain a copy of the License at |
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software |
|
|
|
distributed under the License is distributed on an "AS IS" BASIS, |
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
|
See the License for the specific language governing permissions and |
|
|
|
limitations under the License. |
|
|
|
--> |
|
|
|
<project name="dirscanner"> |
|
|
|
<description> |
|
|
|
Contains tests that measure the relative performance of Ant's |
|
|
|
directory scanner. This is mainly used to compare performance |
|
|
|
changes between Ant releases. |
|
|
|
|
|
|
|
Before you run any tests, you need to set up the environment by |
|
|
|
running the setup target. Note that this will create a directory |
|
|
|
tree holding 10000 directories and about 22000 files. |
|
|
|
|
|
|
|
The setup target requires Ant 1.7.0 or later. |
|
|
|
|
|
|
|
The tests use the pathconvert task whose performance should be |
|
|
|
dominated by directory scanner, they would use ressourcecount if |
|
|
|
that had been available in Ant 1.6.5. |
|
|
|
|
|
|
|
The tests will use the default settings of followsymlinks="true" |
|
|
|
and casesensitive="true" unless those values get overwritten by |
|
|
|
the properties symlinks and/or casesensitive on the command line. |
|
|
|
</description> |
|
|
|
|
|
|
|
<property name="test.dir" location="${java.io.tmpdir}/dirscan.prf"/> |
|
|
|
|
|
|
|
<property name="symlinks" value="true"/> |
|
|
|
<property name="casesensitive" value="true"/> |
|
|
|
|
|
|
|
<echo>This is ${ant.version}</echo> |
|
|
|
|
|
|
|
<target name="setup" description="Sets up the environment for tests"> |
|
|
|
<mkdir dir="${test.dir}/src/org/apache/tools/ant"/> |
|
|
|
<mkdir dir="${test.dir}/dest"/> |
|
|
|
<echo file="${test.dir}/src/org/apache/tools/ant/DirscannerSetup.java" |
|
|
|
><![CDATA[ |
|
|
|
/* |
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
|
|
|
* contributor license agreements. See the NOTICE file distributed with |
|
|
|
* this work for additional information regarding copyright ownership. |
|
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
|
|
|
* (the "License"); you may not use this file except in compliance with |
|
|
|
* the License. You may obtain a copy of the License at |
|
|
|
* |
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
|
|
* |
|
|
|
* Unless required by applicable law or agreed to in writing, software |
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
|
|
* See the License for the specific language governing permissions and |
|
|
|
* limitations under the License. |
|
|
|
* |
|
|
|
*/ |
|
|
|
|
|
|
|
package org.apache.tools.ant; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import org.apache.tools.ant.taskdefs.Mkdir; |
|
|
|
import org.apache.tools.ant.taskdefs.Touch; |
|
|
|
|
|
|
|
public class DirscannerSetup extends Task { |
|
|
|
public void execute() { |
|
|
|
Mkdir mkdir = new Mkdir(); |
|
|
|
mkdir.bindToOwner(this); |
|
|
|
Touch touch = new Touch(); |
|
|
|
touch.bindToOwner(this); |
|
|
|
String tmp = getProject().getProperty("test.dir"); |
|
|
|
for (int i1 = 0; i1 < 10; i1++) { |
|
|
|
File f1 = new File(tmp, String.valueOf(i1)); |
|
|
|
for (int i2 = 0; i2 < 10; i2++) { |
|
|
|
File f2 = new File(f1, String.valueOf(i2)); |
|
|
|
for (int i3 = 0; i3 < 10; i3++) { |
|
|
|
File f3 = new File(f2, String.valueOf(i3)); |
|
|
|
for (int i4 = 0; i4 < 10; i4++) { |
|
|
|
File f4 = new File(f3, String.valueOf(i4)); |
|
|
|
mkdir.setDir(f4); |
|
|
|
mkdir.execute(); |
|
|
|
mkfiles(touch, f4); |
|
|
|
} |
|
|
|
mkfiles(touch, f3); |
|
|
|
} |
|
|
|
mkfiles(touch, f2); |
|
|
|
} |
|
|
|
mkfiles(touch, f1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static void mkfiles(Touch touch, File dir) { |
|
|
|
touch.setFile(new File(dir, "A.txt")); |
|
|
|
touch.execute(); |
|
|
|
touch.setFile(new File(dir, "B.xml")); |
|
|
|
touch.execute(); |
|
|
|
} |
|
|
|
}]]></echo> |
|
|
|
<javac srcdir="${test.dir}/src" destdir="${test.dir}/dest"/> |
|
|
|
<taskdef name="setup" |
|
|
|
classname="org.apache.tools.ant.DirscannerSetup"> |
|
|
|
<classpath> |
|
|
|
<pathelement location="${test.dir}/dest"/> |
|
|
|
</classpath> |
|
|
|
</taskdef> |
|
|
|
<setup/> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="cleanup" |
|
|
|
description="removes the tree generated by setup"> |
|
|
|
<delete dir="${test.dir}"/> |
|
|
|
</target> |
|
|
|
|
|
|
|
<macrodef name="scan"> |
|
|
|
<attribute name="test"/> |
|
|
|
<element name="patterns" optional="true"/> |
|
|
|
<sequential> |
|
|
|
<pathconvert property="@{test}"> |
|
|
|
<path> |
|
|
|
<fileset dir="${test.dir}" followSymlinks="${symlinks}" |
|
|
|
casesensitive="${casesensitive}"> |
|
|
|
<patterns/> |
|
|
|
</fileset> |
|
|
|
</path> |
|
|
|
</pathconvert> |
|
|
|
</sequential> |
|
|
|
</macrodef> |
|
|
|
|
|
|
|
<target name="matchall" |
|
|
|
description="doesn't specify any patterns"> |
|
|
|
<scan test="matchall"/> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="roots" |
|
|
|
description="only contains include patterns that match starts"> |
|
|
|
<scan test="roots"> |
|
|
|
<patterns> |
|
|
|
<include name="1/2/3/**"/> |
|
|
|
<include name="9/**"/> |
|
|
|
</patterns> |
|
|
|
</scan> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="recursive-excludes" |
|
|
|
description="specifies include and exclude patterns with wildcards"> |
|
|
|
<scan test="recursive-excludes"> |
|
|
|
<patterns> |
|
|
|
<include name="**/5/**"/> |
|
|
|
<exclude name="**/6/**"/> |
|
|
|
</patterns> |
|
|
|
</scan> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="name-matches" |
|
|
|
description="specifies include and exclude patterns matching on file names"> |
|
|
|
<scan test="names-matches"> |
|
|
|
<patterns> |
|
|
|
<include name="**/*.txt"/> |
|
|
|
<exclude name="**/4/**"/> |
|
|
|
</patterns> |
|
|
|
</scan> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="many-patterns" |
|
|
|
description="specifies many include and exclude patterns"> |
|
|
|
<scan test="many-patterns"> |
|
|
|
<patterns> |
|
|
|
<include name="*/1/**"/> |
|
|
|
<include name="*/3/**/1/**"/> |
|
|
|
<include name="6/**"/> |
|
|
|
<include name="**/*.xml"/> |
|
|
|
<include name="**/4/*"/> |
|
|
|
<include name="**/2*/**"/> |
|
|
|
<include name="**/X/**"/> |
|
|
|
<include name="8/9/4/2/B.xml"/> |
|
|
|
<include name="9/*"/> |
|
|
|
<include name="0/*/**"/> |
|
|
|
<exclude name="*/5/**"/> |
|
|
|
<exclude name="*/7/**/0/**"/> |
|
|
|
<exclude name="1/**"/> |
|
|
|
<exclude name="**/*.txt"/> |
|
|
|
<exclude name="**/0/*"/> |
|
|
|
<exclude name="**/8*/**"/> |
|
|
|
<exclude name="**/Y/**"/> |
|
|
|
<exclude name="8/9/4/2/A.txt"/> |
|
|
|
<exclude name="3/*"/> |
|
|
|
<exclude name="7/*/**"/> |
|
|
|
</patterns> |
|
|
|
</scan> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="all" |
|
|
|
depends="matchall, roots, recursive-excludes, name-matches, many-patterns"/> |
|
|
|
</project> |