Patch is attached.
On Wed, 2003-10-08 at 10:48, Ian MacLean wrote:
> Sounds useful. Post away.
>
> Ian
> Met @ Uber wrote:
>
> >The patch I'm talking about is hardly important, its just a cleanup of
> >the logic and code within DeleteTask.cs. I was trying to figure out why
> >directory and file deletion were displaying different (messages), so I
> >went in and took. I cleaned up the logic a lot so that everything is
> >consistent, as far as I am concerned. It should be more efficient as a
> >result.
> >
> >If you want it, let me know, else I'll suck it up ;-)
> >
> >~ Matthew
> >
> >
> >
> >-------------------------------------------------------
> >This sf.net email is sponsored by:ThinkGeek
> >Welcome to geek heaven.
> >http://thinkgeek.com/sf
> >_______________________________________________
> >nant-developers mailing list
> >[EMAIL PROTECTED]
> >https://lists.sourceforge.net/lists/listinfo/nant-developers
> >
> >
>
>
>
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 8 Oct 2003 15:24:41 -0000
@@ -118,9 +118,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 +131,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, Verbose);
} 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);
+ RecursiveDeleteDirectory(path, Verbose);
} 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);
}
foreach (string path in DeleteFileSet.DirectoryNames) {
- if (Directory.Exists(path)) {
- RecursiveDeleteDirectory(path);
- }
+ RecursiveDeleteDirectory(path, Verbose);
}
}
}
@@ -175,37 +182,50 @@
#region Private Instance Methods
- private void RecursiveDeleteDirectory(string path) {
+ private void RecursiveDeleteDirectory(string path, bool verbose) {
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, verbose);
+ }
+
+ // Next, delete all files in the directory
+ string[] files = Directory.GetFiles(path);
+ foreach (string file in files) {
+ try {
+ Log(Level.Verbose,
+ LogPrefix + "Deleting file '{0}'.",
+ file);
+ DeleteFile(file, true);
+ } 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);
+ if (verbose) {
+ 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);
}
@@ -218,17 +238,27 @@
FileInfo deleteInfo = new FileInfo(path);
if (deleteInfo.Exists) {
if (verbose) {
- Log(Level.Info, LogPrefix + "Deleting file {0}.", path);
+ Log(Level.Info,
+ 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);
+ throw new BuildException(msg, Location);
}
} 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);
}