ITaskItem destinationFolder;
bool skipUnchangedFiles;
ITaskItem[] sourceFiles;
+ bool overwriteReadOnlyFiles;
public Copy ()
{
List <ITaskItem> temporaryCopiedFiles = new List <ITaskItem> ();
if (sourceFiles != null && destinationFiles != null &&
- sourceFiles.Length != destinationFiles.Length)
- throw new Exception ("Number of source files is different than number of destination files.");
- if (destinationFiles != null && destinationFolder != null)
- throw new Exception ("You must specify only one attribute from DestinationFiles and DestinationFolder");
+ sourceFiles.Length != destinationFiles.Length) {
+ Log.LogError ("Number of source files is different than number of destination files.");
+ return false;
+ }
+
+ if (destinationFiles != null && destinationFolder != null) {
+ Log.LogError ("You must specify only one attribute from DestinationFiles and DestinationFolder");
+ return false;
+ }
+
if (destinationFiles != null && destinationFiles.Length > 0) {
for (int i = 0; i < sourceFiles.Length; i ++) {
ITaskItem sourceItem = sourceFiles [i];
}
destinationFiles = temporaryDestinationFiles.ToArray ();
} else {
- throw new Exception ("You must specify DestinationFolder or DestinationFiles attribute.");
+ Log.LogError ("You must specify DestinationFolder or DestinationFiles attribute.");
+ return false;
}
copiedFiles = temporaryCopiedFiles.ToArray ();
}
}
+#if NET_3_5 || NET_4_0
+ public bool OverwriteReadOnlyFiles {
+ get {
+ return overwriteReadOnlyFiles;
+ }
+ set {
+ overwriteReadOnlyFiles = value;
+ }
+ }
+#endif
+
[Required]
public ITaskItem[] SourceFiles {
get {
{
if (create_dir)
CreateDirectoryIfRequired (Path.GetDirectoryName (dest));
+ if (overwriteReadOnlyFiles)
+ ClearReadOnlyAttribute (dest);
Log.LogMessage ("Copying file from '{0}' to '{1}'", source, dest);
if (String.Compare (source, dest) != 0)
File.Copy (source, dest, true);
+ ClearReadOnlyAttribute (dest);
+ }
+
+ void ClearReadOnlyAttribute (string name)
+ {
+ if (File.Exists (name) && ((File.GetAttributes (name) & FileAttributes.ReadOnly) == FileAttributes.ReadOnly))
+ File.SetAttributes (name, FileAttributes.Normal);
}
bool HasFileChanged (string source, string dest)
FileInfo destinationInfo = new FileInfo (dest);
return !(sourceInfo.Length == destinationInfo.Length &&
- File.GetLastWriteTime(source) <= File.GetLastWriteTime (dest));
+ File.GetLastWriteTime (source) <= File.GetLastWriteTime (dest));
}
}