Removed most of the 'extra' logging I had put in, but kept the consistency between .Exists() checks and removed extra code being called twice within logical a logical flow. It compiles fine on Mono so I'd imagine it's fine on MS.NET.
If someone has a suggestion, let me know and I'll fix it. ~ Matthew
Index: DeleteTask.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Tasks/DeleteTask.cs,v retrieving revision 1.17 diff -u -r1.17 DeleteTask.cs --- DeleteTask.cs 23 Aug 2003 13:31:34 -0000 1.17 +++ DeleteTask.cs 12 Oct 2003 15:38:27 -0000 @@ -16,6 +16,7 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // Gerry Shaw ([EMAIL PROTECTED]) +// Matthew Metnetsky ([EMAIL PROTECTED]) using System; using System.IO; @@ -118,9 +119,11 @@ #region Override implementation of Task protected override void ExecuteTask() { - // limit task to deleting either a file or a directory or a file set + // limit task to deleting either a file, directory, or file set if (FileName != null && DirectoryName != null) { - throw new BuildException("Cannot specify 'file' and 'dir' in the same delete task.", Location); + string msg = "Cannot specify 'file' and 'dir' in the same " + + "delete task."; + throw new BuildException(msg, Location); } if (FileName != null) { @@ -129,44 +132,49 @@ try { path = Project.GetFullPath(FileName); } catch (Exception e) { - string msg = String.Format(CultureInfo.InvariantCulture, "Could not determine path from {0}.", FileName); + string msg = + String.Format(CultureInfo.InvariantCulture, + "Could not determine path from '{0}'.", + FileName); throw new BuildException(msg, Location, e); } - DeleteFile(path, true); - + DeleteFile(path); } else if (DirectoryName != null) { // try to delete specified directory string path = null; try { path = Project.GetFullPath(DirectoryName); } catch (Exception e) { - string msg = String.Format(CultureInfo.InvariantCulture, "Could not determine path from {0}.", DirectoryName); + string msg = + String.Format(CultureInfo.InvariantCulture, + "Could not determine path from '{0}'.", + DirectoryName); throw new BuildException(msg, Location, e); } - if (!Directory.Exists(path)) { - string msg = String.Format(CultureInfo.InvariantCulture, "Cannot delete directory {0}. The directory does not exist.", path); - throw new BuildException(msg, Location); - } - - Log(Level.Info, LogPrefix + "Deleting directory {0}.", path); RecursiveDeleteDirectory(path); } else { - // delete files in fileset + // dBelete files in fileset if (DeleteFileSet.DirectoryNames.Count == 0) { - Log(Level.Info, LogPrefix + "Deleting {0} files.", DeleteFileSet.FileNames.Count); + Log(Level.Info, + LogPrefix + "Deleting '{0}' files.", + DeleteFileSet.FileNames.Count); } else if (DeleteFileSet.FileNames.Count == 0) { - Log(Level.Info, LogPrefix + "Deleting {0} directories.", DeleteFileSet.DirectoryNames.Count); + Log(Level.Info, + LogPrefix + "Deleting '{0}' directories.", + DeleteFileSet.DirectoryNames.Count); } else { - Log(Level.Info, LogPrefix + "Deleting {0} files and {1} directories.", DeleteFileSet.FileNames.Count, DeleteFileSet.DirectoryNames.Count); + Log(Level.Info, + LogPrefix + "Deleting '{0}' files and '{1}' " + + "directories.", + DeleteFileSet.FileNames.Count, + DeleteFileSet.DirectoryNames.Count); } foreach (string path in DeleteFileSet.FileNames) { - DeleteFile(path, Verbose); + DeleteFile(path); } foreach (string path in DeleteFileSet.DirectoryNames) { - if (Directory.Exists(path)) { - RecursiveDeleteDirectory(path); - } + RecursiveDeleteDirectory(path); } } } @@ -178,34 +186,42 @@ private void RecursiveDeleteDirectory(string path) { try { // First, recursively delete all directories in the directory - string[] dirs = Directory.GetDirectories(path); - foreach (string dir in dirs) - RecursiveDeleteDirectory(dir); - - // Next, delete all files in the directory - string[] files = Directory.GetFiles(path); - foreach (string file in files) { - try { - File.SetAttributes(file, FileAttributes.Normal); - Log(Level.Verbose, LogPrefix + "Deleting file {0}.", file); - File.Delete(file); - } catch (Exception e) { - string msg = String.Format(CultureInfo.InvariantCulture, "Cannot delete file {0}.", file); - if (FailOnError) { - throw new BuildException(msg, Location, e); - } - Log(Level.Verbose, LogPrefix + msg); - } + if (Directory.Exists(path)) { + string[] dirs = Directory.GetDirectories(path); + foreach (string dir in dirs) { + RecursiveDeleteDirectory(dir); + } + + // Next, delete all files in the directory + string[] files = Directory.GetFiles(path); + foreach (string file in files) { + try { + DeleteFile(file); + } catch (Exception e) { + string msg = + String.Format(CultureInfo.InvariantCulture, + "Cannot delete file '{0}'.", + file); + Log(Level.Verbose, LogPrefix + msg); + if (FailOnError) { + throw new BuildException(msg, Location, e); + } + } + } + + // Finally, delete the directory + File.SetAttributes(path, FileAttributes.Normal); + Log(Level.Info, + LogPrefix + "Deleting directory '{0}'.", + path); + Directory.Delete(path); } - - // Finally, delete the directory - File.SetAttributes(path, FileAttributes.Normal); - Log(Level.Verbose, LogPrefix + "Deleting directory {0}.", path); - Directory.Delete(path); } catch (BuildException e) { throw e; } catch (Exception e) { - string msg = String.Format(CultureInfo.InvariantCulture, "Cannot delete directory {0}.", path); + string msg = String.Format(CultureInfo.InvariantCulture, + "Cannot delete directory '{0}'.", + path); if (FailOnError) { throw new BuildException(msg, Location, e); } @@ -213,22 +229,31 @@ } } - private void DeleteFile(string path, bool verbose) { + private void DeleteFile(string path) { try { FileInfo deleteInfo = new FileInfo(path); if (deleteInfo.Exists) { - if (verbose) { - Log(Level.Info, LogPrefix + "Deleting file {0}.", path); - } + Log(Level.Verbose, + LogPrefix + "Deleting file '{0}'.", + path); if (deleteInfo.Attributes != FileAttributes.Normal) { - File.SetAttributes(deleteInfo.FullName, FileAttributes.Normal); + File.SetAttributes(deleteInfo.FullName, + FileAttributes.Normal); } File.Delete(path); } else { - throw new FileNotFoundException(); + string msg = + String.Format(CultureInfo.InvariantCulture, + "Cannot delete file '{0}' because it " + + "does not exist.", + path); + Log(Level.Verbose, LogPrefix + msg); + throw new BuildException(); } } catch (Exception e) { - string msg = String.Format(CultureInfo.InvariantCulture, "Cannot delete file {0}.", path); + string msg = String.Format(CultureInfo.InvariantCulture, + "Cannot delete file '{0}'.", + path); if (FailOnError) { throw new BuildException(msg, Location, e); }