[xbuild] RemoveDir - remove only if the dir exists.
[mono.git] / mcs / class / Microsoft.Build.Tasks / Microsoft.Build.Tasks / RemoveDir.cs
index df222239fceef9b361ca3f9542cf7a9f1f6d87e4..32505c9a42474e75607b634af19b255eeab69f36 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
+#if NET_2_0
+
 using System;
-using System.Collections;
+using System.Collections.Generic;
 using System.IO;
 using System.Security;
 using Microsoft.Build.Framework;
@@ -43,15 +45,18 @@ namespace Microsoft.Build.Tasks {
 
                public override bool Execute ()
                {
-                       ArrayList temporaryRemovedDirectories = new ArrayList ();
+                       if (directories.Length == 0)
+                               return true;
+
+                       List <ITaskItem> temporaryRemovedDirectories = new List <ITaskItem> ();
                        
                        foreach (ITaskItem directory in directories) {
                                try {
-                                       Directory.Delete (directory.GetMetadata ("FullPath"), true);
-                                       temporaryRemovedDirectories.Add (directory);
-                               }
-                               catch (DirectoryNotFoundException ex) {
-                                       Log.LogErrorFromException (ex);
+                                       string fullpath = directory.GetMetadata ("FullPath");
+                                       if (Directory.Exists (fullpath)) {
+                                               Directory.Delete (fullpath, true);
+                                               temporaryRemovedDirectories.Add (directory);
+                                       }
                                }
                                catch (PathTooLongException ex) {
                                        Log.LogErrorFromException (ex);
@@ -73,10 +78,7 @@ namespace Microsoft.Build.Tasks {
                                }
                        }
                        
-                       removedDirectories = new ITaskItem [temporaryRemovedDirectories.Count];
-                       int i = 0;
-                       foreach (ITaskItem directory in temporaryRemovedDirectories)
-                               removedDirectories [i++] = directory;
+                       removedDirectories = temporaryRemovedDirectories.ToArray ();
                        
                        return true;
                }
@@ -102,3 +104,5 @@ namespace Microsoft.Build.Tasks {
                }
        }
 }
+
+#endif