private bool CopyFileWithLogging(Microsoft.Build.Tasks.FileState sourceFileState, Microsoft.Build.Tasks.FileState destinationFileState) { bool exists = false; if (Directory.Exists(destinationFileState.Name)) { base.Log.LogErrorWithCodeFromResources("Copy.DestinationIsDirectory", new object[] { sourceFileState.Name, destinationFileState.Name }); return(false); } if (Directory.Exists(sourceFileState.Name)) { base.Log.LogErrorWithCodeFromResources("Copy.SourceIsDirectory", new object[] { sourceFileState.Name }); return(false); } string directoryName = Path.GetDirectoryName(destinationFileState.Name); if (((directoryName != null) && (directoryName.Length > 0)) && !Directory.Exists(directoryName)) { base.Log.LogMessageFromResources(MessageImportance.Normal, "Copy.CreatesDirectory", new object[] { directoryName }); Directory.CreateDirectory(directoryName); } if (this.overwriteReadOnlyFiles) { this.MakeFileWriteable(destinationFileState, true); exists = destinationFileState.Exists; } bool flag2 = false; if (this.UseHardlinksIfPossible) { base.Log.LogMessageFromResources(MessageImportance.Normal, "Copy.HardLinkComment", new object[] { sourceFileState.Name, destinationFileState.Name }); if (!this.overwriteReadOnlyFiles) { exists = destinationFileState.Exists; } if (exists && !IsMatchingSizeAndTimeStamp(sourceFileState, destinationFileState)) { Microsoft.Build.Shared.FileUtilities.DeleteNoThrow(destinationFileState.Name); } flag2 = Microsoft.Build.Tasks.NativeMethods.CreateHardLink(destinationFileState.Name, sourceFileState.Name, IntPtr.Zero); if (!flag2) { Exception exceptionForHR = Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()); base.Log.LogMessageFromResources(MessageImportance.Low, "Copy.RetryingAsFileCopy", new object[] { sourceFileState.Name, destinationFileState.Name, exceptionForHR.Message }); } } if (!flag2) { base.Log.LogMessageFromResources(MessageImportance.Normal, "Copy.FileComment", new object[] { sourceFileState.Name, destinationFileState.Name }); File.Copy(sourceFileState.Name, destinationFileState.Name, true); } destinationFileState.Reset(); this.MakeFileWriteable(destinationFileState, false); return(true); }
private void MakeFileWriteable(Microsoft.Build.Tasks.FileState file, bool logActivity) { if (file.Exists && file.IsReadOnly) { if (logActivity) { base.Log.LogMessageFromResources(MessageImportance.Low, "Copy.RemovingReadOnlyAttribute", new object[] { file.Name }); } File.SetAttributes(file.Name, FileAttributes.Normal); file.Reset(); } }
private bool DoCopyWithRetries(Microsoft.Build.Tasks.FileState sourceFileState, Microsoft.Build.Tasks.FileState destinationFileState, CopyFileWithState copyFile) { bool flag = false; int num = 0; Label_0004: try { flag = copyFile(sourceFileState, destinationFileState); } catch (Exception exception) { if (Microsoft.Build.Shared.ExceptionHandling.NotExpectedException(exception)) { throw; } if (num >= this.Retries) { if (this.Retries > 0) { base.Log.LogErrorWithCodeFromResources("Copy.ExceededRetries", new object[] { sourceFileState.Name, destinationFileState.Name, this.Retries }); throw; } throw; } num++; base.Log.LogWarningWithCodeFromResources("Copy.Retrying", new object[] { sourceFileState.Name, destinationFileState.Name, num, this.RetryDelayMilliseconds, exception.Message }); Thread.Sleep(this.RetryDelayMilliseconds); goto Label_0004; } if (flag) { return(true); } if (num < this.Retries) { num++; base.Log.LogWarningWithCodeFromResources("Copy.Retrying", new object[] { sourceFileState.Name, destinationFileState.Name, num, this.RetryDelayMilliseconds, string.Empty }); Thread.Sleep(this.RetryDelayMilliseconds); goto Label_0004; } if (this.Retries > 0) { base.Log.LogErrorWithCodeFromResources("Copy.ExceededRetries", new object[] { sourceFileState.Name, destinationFileState.Name, this.Retries }); return(false); } return(false); }
private static bool IsMatchingSizeAndTimeStamp(Microsoft.Build.Tasks.FileState sourceFile, Microsoft.Build.Tasks.FileState destinationFile) { if (!destinationFile.Exists) { return(false); } if (sourceFile.LastWriteTime != destinationFile.LastWriteTime) { return(false); } if (sourceFile.Length != destinationFile.Length) { return(false); } return(true); }
private bool DoCopyIfNecessary(Microsoft.Build.Tasks.FileState sourceFileState, Microsoft.Build.Tasks.FileState destinationFileState, CopyFileWithState copyFile) { bool flag = true; try { if (this.skipUnchangedFiles && IsMatchingSizeAndTimeStamp(sourceFileState, destinationFileState)) { base.Log.LogMessageFromResources(MessageImportance.Low, "Copy.DidNotCopyBecauseOfFileMatch", new object[] { sourceFileState.Name, destinationFileState.Name, "SkipUnchangedFiles", "true" }); return(flag); } if (string.Compare(sourceFileState.Name, destinationFileState.Name, StringComparison.OrdinalIgnoreCase) != 0) { flag = this.DoCopyWithRetries(sourceFileState, destinationFileState, copyFile); } } catch (PathTooLongException exception) { base.Log.LogErrorWithCodeFromResources("Copy.Error", new object[] { sourceFileState.Name, destinationFileState.Name, exception.Message }); flag = false; } catch (IOException exception2) { if (this.PathsAreIdentical(sourceFileState.Name, destinationFileState.Name)) { return(flag); } if (Microsoft.Build.Shared.ExceptionHandling.NotExpectedException(exception2)) { throw; } base.Log.LogErrorWithCodeFromResources("Copy.Error", new object[] { sourceFileState.Name, destinationFileState.Name, exception2.Message }); flag = false; } catch (Exception exception3) { if (Microsoft.Build.Shared.ExceptionHandling.NotExpectedException(exception3)) { throw; } base.Log.LogErrorWithCodeFromResources("Copy.Error", new object[] { sourceFileState.Name, destinationFileState.Name, exception3.Message }); flag = false; } return(flag); }