You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2005/10/06 05:52:00 UTC
svn commit: r306521 - in /ant/core/trunk: docs/manual/CoreTasks/
src/etc/testcases/taskdefs/ src/main/org/apache/tools/ant/taskdefs/
src/testcases/org/apache/tools/ant/taskdefs/
Author: bodewig
Date: Wed Oct 5 20:51:48 2005
New Revision: 306521
URL: http://svn.apache.org/viewcvs?rev=306521&view=rev
Log:
<copy> and <sync> can now work on non-filesystem resources as well
Modified:
ant/core/trunk/docs/manual/CoreTasks/copy.html
ant/core/trunk/docs/manual/CoreTasks/sync.html
ant/core/trunk/src/etc/testcases/taskdefs/copy.xml
ant/core/trunk/src/etc/testcases/taskdefs/sync.xml
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Sync.java
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java
ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/SyncTest.java
Modified: ant/core/trunk/docs/manual/CoreTasks/copy.html
URL: http://svn.apache.org/viewcvs/ant/core/trunk/docs/manual/CoreTasks/copy.html?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/docs/manual/CoreTasks/copy.html (original)
+++ ant/core/trunk/docs/manual/CoreTasks/copy.html Wed Oct 5 20:51:48 2005
@@ -16,12 +16,8 @@
overwrite files with the <code>overwrite</code> attribute.</p>
<p><a href="../CoreTypes/resources.html#collection">Resource
-Collection</a>s are used to select a group of files to copy. Only
-file system based resource collections are supported, this includes <a
-href="../CoreTypes/fileset.html">fileset</a>s, <a
-href="../CoreTypes/filelist.html">filelist</a> and <a
-href="../using.html#path">path</a>. To use a resource collection, the
-<code>todir</code> attribute must be set.</p>
+Collection</a>s are used to select a group of files to copy. To use a
+resource collection, the <code>todir</code> attribute must be set.</p>
<p>
<strong>Note: </strong>If you employ filters in your copy operation, you should
@@ -144,7 +140,7 @@
</table>
<h3>Parameters specified as nested elements</h3>
-<h4>fileset or any other filesystem based resource collection</h4>
+<h4>fileset or any other resource collection</h4>
<p><a href="../CoreTypes/resources.html#collection">Resource
Collection</a>s are used to select groups of files to copy. To use a
resource collection, the <code>todir</code> attribute must be set.</p>
Modified: ant/core/trunk/docs/manual/CoreTasks/sync.html
URL: http://svn.apache.org/viewcvs/ant/core/trunk/docs/manual/CoreTasks/sync.html?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/docs/manual/CoreTasks/sync.html (original)
+++ ant/core/trunk/docs/manual/CoreTasks/sync.html Wed Oct 5 20:51:48 2005
@@ -13,10 +13,10 @@
<h3>Description</h3>
<p>Synchronize a target directory from the files defined in one or
-more filesystem based <a href="../CoreTypes/resources.html#collection">Resource Collection</a>s.</p>
+more <a href="../CoreTypes/resources.html#collection">Resource Collection</a>s.</p>
<p>Any file in the target directory that has not been matched by at
-least one of the nested resource collection gets removed. I.e. if you exclude a
+least one of the nested resource collections gets removed. I.e. if you exclude a
file in your sources and a file of that name is present in the target
dir, it will get removed from the target.</p>
@@ -72,7 +72,7 @@
<h3>Parameters specified as nested elements</h3>
-<h4>fileset or any other filesystem based resource collection</h4>
+<h4>fileset or any other resource collection</h4>
<p><a href="../CoreTypes/resources.html#collection">Resource
Collection</a>s are used to select groups of files to copy. To use a
resource collection, the <code>todir</code> attribute must be set.</p>
Modified: ant/core/trunk/src/etc/testcases/taskdefs/copy.xml
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/copy.xml?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/copy.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/copy.xml Wed Oct 5 20:51:48 2005
@@ -197,7 +197,14 @@
</copy>
</target>
-
+ <target name="testZipfileset" depends="testResource.prepare">
+ <zip destfile="${from.dir}/test.zip" roundup="false">
+ <fileset dir="${from.dir}" excludes="*.zip"/>
+ </zip>
+ <copy todir="${to.dir}">
+ <zipfileset src="${from.dir}/test.zip"/>
+ </copy>
+ </target>
<target name="cleanup">
<delete file="copytest1.tmp"/>
Modified: ant/core/trunk/src/etc/testcases/taskdefs/sync.xml
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/taskdefs/sync.xml?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/sync.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/sync.xml Wed Oct 5 20:51:48 2005
@@ -48,6 +48,19 @@
</sync>
</target>
+ <target name="copyandremove-with-zipfileset" depends="setup">
+ <mkdir dir="${src}/a/b/c"/>
+ <touch file="${src}/a/b/c/d"/>
+ <mkdir dir="${dest}/e"/>
+ <touch file="${dest}/e/f"/>
+ <zip destfile="${src}/test.zip">
+ <fileset dir="${src}" excludes="*.zip"/>
+ </zip>
+ <sync todir="${dest}">
+ <zipfileset src="${src}/test.zip"/>
+ </sync>
+ </target>
+
<target name="copyandremove-emptypreserve" depends="setup">
<mkdir dir="${src}/a/b/c"/>
<touch file="${src}/a/b/c/d"/>
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Copy.java Wed Oct 5 20:51:48 2005
@@ -39,10 +39,12 @@
import org.apache.tools.ant.types.FilterSetCollection;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceCollection;
+import org.apache.tools.ant.types.ResourceFactory;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.util.FileNameMapper;
import org.apache.tools.ant.util.IdentityMapper;
+import org.apache.tools.ant.util.ResourceUtils;
import org.apache.tools.ant.util.SourceFileScanner;
import org.apache.tools.ant.util.FlatFileNameMapper;
@@ -435,76 +437,94 @@
HashMap filesByBasedir = new HashMap();
HashMap dirsByBasedir = new HashMap();
HashSet baseDirs = new HashSet();
+ ArrayList nonFileResources = new ArrayList();
for (int i = 0; i < rcs.size(); i++) {
ResourceCollection rc = (ResourceCollection) rcs.elementAt(i);
- if (rc.isFilesystemOnly()) {
+ // Step (1) - beware of the ZipFileSet
+ if (rc instanceof FileSet && rc.isFilesystemOnly()) {
+ FileSet fs = (FileSet) rc;
+ DirectoryScanner ds = null;
+ try {
+ ds = fs.getDirectoryScanner(getProject());
+ } catch (BuildException e) {
+ if (failonerror
+ || !e.getMessage().endsWith(" not found.")) {
+ throw e;
+ } else {
+ log("Warning: " + e.getMessage());
+ continue;
+ }
+ }
+ File fromDir = fs.getDir(getProject());
- // Step (1)
- if (rc instanceof FileSet) {
- FileSet fs = (FileSet) rc;
- DirectoryScanner ds = null;
- try {
- ds = fs.getDirectoryScanner(getProject());
- } catch (BuildException e) {
- if (failonerror
- || !e.getMessage().endsWith(" not found.")) {
- throw e;
- } else {
- log("Warning: " + e.getMessage());
- continue;
- }
+ String[] srcFiles = ds.getIncludedFiles();
+ String[] srcDirs = ds.getIncludedDirectories();
+ if (!flatten && mapperElement == null
+ && ds.isEverythingIncluded() && !fs.hasPatterns()) {
+ completeDirMap.put(fromDir, destDir);
+ }
+ add(fromDir, srcFiles, filesByBasedir);
+ add(fromDir, srcDirs, dirsByBasedir);
+ baseDirs.add(fromDir);
+ } else { // not a fileset or contains non-file resources
+
+ if (!rc.isFilesystemOnly() && !supportsNonFileResources()) {
+ throw new BuildException(
+ "Only FileSystem resources are supported.");
+ }
+
+ Iterator resources = rc.iterator();
+ while (resources.hasNext()) {
+ Resource r = (Resource) resources.next();
+ if (!r.isExists()) {
+ continue;
}
- File fromDir = fs.getDir(getProject());
- String[] srcFiles = ds.getIncludedFiles();
- String[] srcDirs = ds.getIncludedDirectories();
- if (!flatten && mapperElement == null
- && ds.isEverythingIncluded() && !fs.hasPatterns()) {
- completeDirMap.put(fromDir, destDir);
- }
- add(fromDir, srcFiles, filesByBasedir);
- add(fromDir, srcDirs, dirsByBasedir);
- baseDirs.add(fromDir);
- } else { // not a fileset
-
- Iterator resources = rc.iterator();
- while (resources.hasNext()) {
- FileResource fr = (FileResource) resources.next();
- if (!fr.isExists()) {
- continue;
+ File baseDir = NULL_FILE_PLACEHOLDER;
+ String name = r.getName();
+ if (r instanceof FileResource) {
+ FileResource fr = (FileResource) r;
+ baseDir = getKeyFile(fr.getBaseDir());
+ if (fr.getBaseDir() == null) {
+ name = fr.getFile().getAbsolutePath();
}
- File baseDir = getKeyFile(fr.getBaseDir());
- add(baseDir, baseDir == NULL_FILE_PLACEHOLDER
- ? fr.getFile().getAbsolutePath() : fr.getName(),
- fr.isDirectory() ? dirsByBasedir
- : filesByBasedir);
- baseDirs.add(baseDir);
}
- }
- Iterator iter = baseDirs.iterator();
- while (iter.hasNext()) {
- File f = (File) iter.next();
- List files = (List) filesByBasedir.get(f);
- List dirs = (List) dirsByBasedir.get(f);
-
- String[] srcFiles = new String[0];
- if (files != null) {
- srcFiles = (String[]) files.toArray(srcFiles);
- }
- String[] srcDirs = new String[0];
- if (dirs != null) {
- srcDirs = (String[]) dirs.toArray(srcDirs);
+ // copying of dirs is trivial and can be done
+ // for non-file resources as well as for real
+ // files.
+ if (r.isDirectory() || r instanceof FileResource) {
+ add(baseDir, name,
+ r.isDirectory() ? dirsByBasedir
+ : filesByBasedir);
+ baseDirs.add(baseDir);
+ } else { // a not-directory file resource
+ // needs special treatment
+ nonFileResources.add(r);
}
- scan(f == NULL_FILE_PLACEHOLDER ? null : f, destDir,
- srcFiles, srcDirs);
}
- } else { // not a File resource collection
- throw new BuildException(
- "Only FileSystem resources are supported.");
}
}
+
+ Iterator iter = baseDirs.iterator();
+ while (iter.hasNext()) {
+ File f = (File) iter.next();
+ List files = (List) filesByBasedir.get(f);
+ List dirs = (List) dirsByBasedir.get(f);
+
+ String[] srcFiles = new String[0];
+ if (files != null) {
+ srcFiles = (String[]) files.toArray(srcFiles);
+ }
+ String[] srcDirs = new String[0];
+ if (dirs != null) {
+ srcDirs = (String[]) dirs.toArray(srcDirs);
+ }
+ scan(f == NULL_FILE_PLACEHOLDER ? null : f, destDir, srcFiles,
+ srcDirs);
+ }
+
// do all the copy operations now...
try {
doFileOperations();
@@ -515,6 +535,22 @@
throw e;
}
}
+
+ if (nonFileResources.size() > 0) {
+ Resource[] nonFiles =
+ (Resource[]) nonFileResources.toArray(new Resource[0]);
+ // restrict to out-of-date resources
+ Map map = scan(nonFiles, destDir);
+ try {
+ doResourceOperations(map);
+ } catch (BuildException e) {
+ if (!failonerror) {
+ log("Warning: " + e.getMessage(), Project.MSG_ERR);
+ } else {
+ throw e;
+ }
+ }
+ }
} finally {
// clean up again, so this instance can be used a second
// time
@@ -563,7 +599,8 @@
ResourceCollection rc = (ResourceCollection) rcs.elementAt(0);
if (!rc.isFilesystemOnly()) {
throw new BuildException("Only FileSystem resources are"
- + " supported.");
+ + " supported when concatenating"
+ + " files.");
}
if (rc.size() == 0) {
throw new BuildException(
@@ -599,14 +636,7 @@
*/
protected void scan(File fromDir, File toDir, String[] files,
String[] dirs) {
- FileNameMapper mapper = null;
- if (mapperElement != null) {
- mapper = mapperElement.getImplementation();
- } else if (flatten) {
- mapper = new FlatFileNameMapper();
- } else {
- mapper = new IdentityMapper();
- }
+ FileNameMapper mapper = getMapper();
buildMap(fromDir, toDir, files, mapper, fileCopyMap);
if (includeEmpty) {
@@ -615,6 +645,22 @@
}
/**
+ * Compares source resources to destination files to see if they
+ * should be copied.
+ *
+ * @param fromResources The source resources.
+ * @param toDir The destination directory.
+ *
+ * @return a Map with the out-of-date resources as keys and an
+ * array of target file names as values.
+ *
+ * @since Ant 1.7
+ */
+ protected Map scan(Resource[] fromResources, File toDir) {
+ return buildMap(fromResources, toDir, getMapper());
+ }
+
+ /**
* Add to a map of files/directories to copy.
*
* @param fromDir the source directory.
@@ -641,7 +687,6 @@
}
for (int i = 0; i < toCopy.length; i++) {
File src = new File(fromDir, toCopy[i]);
-
String[] mappedFiles = mapper.mapFileName(toCopy[i]);
if (!enableMultipleMappings) {
@@ -658,6 +703,56 @@
}
/**
+ * Create a map of resources to copy.
+ *
+ * @param fromResources The source resources.
+ * @param toDir the destination directory.
+ * @param mapper a <code>FileNameMapper</code> value.
+ * @return a map of source resource to array of destination files.
+ * @since Ant 1.7
+ */
+ protected Map buildMap(Resource[] fromResources, final File toDir,
+ FileNameMapper mapper) {
+ HashMap map = new HashMap();
+ Resource[] toCopy = null;
+ if (forceOverwrite) {
+ Vector v = new Vector();
+ for (int i = 0; i < fromResources.length; i++) {
+ if (mapper.mapFileName(fromResources[i].getName()) != null) {
+ v.addElement(fromResources[i]);
+ }
+ }
+ toCopy = new Resource[v.size()];
+ v.copyInto(toCopy);
+ } else {
+ toCopy =
+ ResourceUtils.selectOutOfDateSources(this, fromResources,
+ mapper,
+ new ResourceFactory() {
+ public Resource getResource(String name) {
+ return new FileResource(toDir, name);
+ }
+ },
+ granularity);
+ }
+ for (int i = 0; i < toCopy.length; i++) {
+ String[] mappedFiles = mapper.mapFileName(toCopy[i].getName());
+
+ if (!enableMultipleMappings) {
+ map.put(toCopy[i],
+ new String[] {new File(toDir, mappedFiles[0]).getAbsolutePath()});
+ } else {
+ // reuse the array created by the mapper
+ for (int k = 0; k < mappedFiles.length; k++) {
+ mappedFiles[k] = new File(toDir, mappedFiles[k]).getAbsolutePath();
+ }
+ map.put(toCopy[i], mappedFiles);
+ }
+ }
+ return map;
+ }
+
+ /**
* Actually does the file (and possibly empty directory) copies.
* This is a good method for subclasses to override.
*/
@@ -739,6 +834,84 @@
}
/**
+ * Actually does the resource copies.
+ * This is a good method for subclasses to override.
+ * @param map a map of source resource to array of destination files.
+ * @since Ant 1.7
+ */
+ protected void doResourceOperations(Map map) {
+ if (map.size() > 0) {
+ log("Copying " + map.size()
+ + " resource" + (map.size() == 1 ? "" : "s")
+ + " to " + destDir.getAbsolutePath());
+
+ Iterator iter = map.keySet().iterator();
+ while (iter.hasNext()) {
+ Resource fromResource = (Resource) iter.next();
+ String[] toFiles = (String[]) map.get(fromResource);
+
+ for (int i = 0; i < toFiles.length; i++) {
+ String toFile = toFiles[i];
+
+ try {
+ log("Copying " + fromResource + " to " + toFile,
+ verbosity);
+
+ FilterSetCollection executionFilters =
+ new FilterSetCollection();
+ if (filtering) {
+ executionFilters
+ .addFilterSet(getProject().getGlobalFilterSet());
+ }
+ for (Enumeration filterEnum = filterSets.elements();
+ filterEnum.hasMoreElements();) {
+ executionFilters
+ .addFilterSet((FilterSet) filterEnum.nextElement());
+ }
+ ResourceUtils.copyResource(fromResource,
+ new FileResource(destDir,
+ toFile),
+ executionFilters,
+ filterChains,
+ forceOverwrite,
+ preserveLastModified,
+ inputEncoding,
+ outputEncoding,
+ getProject());
+ } catch (IOException ioe) {
+ String msg = "Failed to copy " + fromResource
+ + " to " + toFile
+ + " due to " + ioe.getMessage();
+ File targetFile = new File(toFile);
+ if (targetFile.exists() && !targetFile.delete()) {
+ msg += " and I couldn't delete the corrupt " + toFile;
+ }
+ throw new BuildException(msg, ioe, getLocation());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Whether this task can deal with non-file resources.
+ *
+ * <p><copy> can while <move> can't since we don't
+ * know how to remove non-file resources.</p>
+ *
+ * <p>This implementation returns true only if this task is
+ * <copy>. Any subclass of this class that also wants to
+ * support non-file resources needs to override this method. We
+ * need to do so for backwards compatibility reasons since we
+ * can't expect subclasses to support resources.</p>
+ *
+ * @since Ant 1.7
+ */
+ protected boolean supportsNonFileResources() {
+ return getClass().equals(Copy.class);
+ }
+
+ /**
* Adds the given strings to a list contained in the given map.
* The file is the key into the map.
*/
@@ -770,4 +943,21 @@
private static File getKeyFile(File f) {
return f == null ? NULL_FILE_PLACEHOLDER : f;
}
+
+ /**
+ * returns the mapper to use based on nested elements or the
+ * flatten attribute.
+ */
+ private FileNameMapper getMapper() {
+ FileNameMapper mapper = null;
+ if (mapperElement != null) {
+ mapper = mapperElement.getImplementation();
+ } else if (flatten) {
+ mapper = new FlatFileNameMapper();
+ } else {
+ mapper = new IdentityMapper();
+ }
+ return mapper;
+ }
+
}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Sync.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Sync.java?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Sync.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Sync.java Wed Oct 5 20:51:48 2005
@@ -26,6 +26,8 @@
import java.io.File;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Set;
import org.apache.tools.ant.BuildException;
@@ -35,6 +37,7 @@
import org.apache.tools.ant.types.AbstractFileSet;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.PatternSet;
+import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.selectors.FileSelector;
import org.apache.tools.ant.types.selectors.NoneSelector;
@@ -385,6 +388,21 @@
}
/**
+ * @see Copy#scan(Resource[], File)
+ */
+ protected Map scan(Resource[] resources, File toDir) {
+ assertTrue("No mapper", mapperElement == null);
+
+ Map m = super.scan(resources, toDir);
+
+ Iterator iter = m.keySet().iterator();
+ while (iter.hasNext()) {
+ nonOrphans.add(((Resource) iter.next()).getName());
+ }
+ return m;
+ }
+
+ /**
* Get the destination directory.
* @return the destination directory
*/
@@ -400,6 +418,13 @@
return includeEmpty;
}
+ /**
+ * Yes, we can.
+ * @since Ant 1.7
+ */
+ protected boolean supportsNonFileResources() {
+ return true;
+ }
}
/**
Modified: ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java (original)
+++ ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java Wed Oct 5 20:51:48 2005
@@ -197,6 +197,16 @@
assertTrue(file3.exists());
}
+ public void testZipfileset() {
+ executeTarget("testZipfileset");
+ File file1 = new File(getProjectDir(), getProject().getProperty("to.dir")+"/file1.txt");
+ File file2 = new File(getProjectDir(), getProject().getProperty("to.dir")+"/file2.txt");
+ File file3 = new File(getProjectDir(), getProject().getProperty("to.dir")+"/file3.txt");
+ assertTrue(file1.exists());
+ assertTrue(file2.exists());
+ assertTrue(file3.exists());
+ }
+
public void _testResourcePlain() {
executeTarget("testResourcePlain");
}
Modified: ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/SyncTest.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/SyncTest.java?rev=306521&r1=306520&r2=306521&view=diff
==============================================================================
--- ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/SyncTest.java (original)
+++ ant/core/trunk/src/testcases/org/apache/tools/ant/taskdefs/SyncTest.java Wed Oct 5 20:51:48 2005
@@ -67,6 +67,10 @@
testCopyAndRemove("copyandremove-with-filelist");
}
+ public void testCopyAndRemoveWithZipfileset() {
+ testCopyAndRemove("copyandremove-with-zipfileset");
+ }
+
private void testCopyAndRemove(String target) {
executeTarget(target);
String d = getProject().getProperty("dest") + "/a/b/c/d";
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: svn commit: r306521 - in /ant/core/trunk:
docs/manual/CoreTasks/ src/etc/testcases/taskdefs/
src/main/org/apache/tools/ant/taskdefs/
src/testcases/org/apache/tools/ant/taskdefs/
Posted by Stefan Bodewig <bo...@apache.org>.
On Thu, 6 Oct 2005, Matt Benson <gu...@yahoo.com> wrote:
> I'm in my first week at a new job so my time will be a little
> compromised just yet (I'll still be in the picture though).
I know exactly what you are talking about (still haven't fully
recovered nine weeks after switching jobs).
Good luck
Stefan
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: svn commit: r306521 - in /ant/core/trunk: docs/manual/CoreTasks/ src/etc/testcases/taskdefs/ src/main/org/apache/tools/ant/taskdefs/ src/testcases/org/apache/tools/ant/taskdefs/
Posted by Matt Benson <gu...@yahoo.com>.
--- bodewig@apache.org wrote:
> Author: bodewig
> Date: Wed Oct 5 20:51:48 2005
> New Revision: 306521
>
> URL:
> http://svn.apache.org/viewcvs?rev=306521&view=rev
> Log:
> <copy> and <sync> can now work on non-filesystem
> resources as well
My proverbial hat is off, off, off! I'm in my first
week at a new job so my time will be a little
compromised just yet (I'll still be in the picture
though).
-Matt
__________________________________
Yahoo! Mail - PC Magazine Editors' Choice 2005
http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org