Integrate Nant sources into the mcs code base to simplify the build.
[mono.git] / mcs / nant / src / Tasks / MoveTask.cs
1 // NAnt - A .NET build tool\r
2 // Copyright (C) 2001 Gerry Shaw\r
3 //\r
4 // This program is free software; you can redistribute it and/or modify\r
5 // it under the terms of the GNU General Public License as published by\r
6 // the Free Software Foundation; either version 2 of the License, or\r
7 // (at your option) any later version.\r
8 //\r
9 // This program is distributed in the hope that it will be useful,\r
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 // GNU General Public License for more details.\r
13 //\r
14 // You should have received a copy of the GNU General Public License\r
15 // along with this program; if not, write to the Free Software\r
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
17 //\r
18 // Gerry Shaw (gerry_shaw@yahoo.com)\r
19 // Ian MacLean (ian_maclean@another.com)\r
20 \r
21 namespace SourceForge.NAnt {\r
22 \r
23     using System;\r
24     using System.IO;\r
25 \r
26     [TaskName("move")]\r
27     public class MoveTask : CopyTask {\r
28 \r
29         /// <summary>\r
30         /// Actually does the file (and possibly empty directory) copies.\r
31         /// </summary>\r
32         protected override void DoFileOperations() {\r
33             if (FileCopyMap.Count > 0) {\r
34 \r
35                 // loop thru our file list\r
36                 foreach (string sourcePath in FileCopyMap.Keys) {\r
37                     string destinationPath = (string)FileCopyMap[sourcePath];\r
38                     if (sourcePath == destinationPath) {\r
39                         Log.WriteLine(LogPrefix + "Skipping self-move of {0}" + sourcePath);\r
40                         continue;\r
41                     }\r
42 \r
43                     try {\r
44                         // check if directory exists\r
45                         if (Directory.Exists(sourcePath)) {\r
46                             Log.WriteLine(LogPrefix + "moving directory {0} to {1}", sourcePath, destinationPath);\r
47                             Directory.Move(sourcePath, destinationPath);\r
48                         }\r
49                         else {\r
50 \r
51                             DirectoryInfo todir = new DirectoryInfo(destinationPath);\r
52                             if ( !todir.Exists ) {\r
53                                 Directory.CreateDirectory( Path.GetDirectoryName(destinationPath) );\r
54                             }\r
55 \r
56                             Log.WriteLine(LogPrefix + "Moving {0} to {1}", sourcePath, destinationPath);\r
57                             // IM look into how Ant does this for directories\r
58                             File.Move(sourcePath, destinationPath);\r
59                         }\r
60 \r
61                     } catch (IOException ioe) {\r
62                         string msg = String.Format("Failed to move {0} to {1}\n{2}", sourcePath, destinationPath, ioe.Message);\r
63                         throw new BuildException(msg, Location);\r
64                     }\r
65                 }\r
66             }\r
67         }\r
68     }\r
69 }\r
70 \r
71 \r