Browse Source

Workaround for ProjectChangeWatcher's issue with McAfee scanner resetting file attributes without actual changes.

pull/45/merge
Andreas Weizel 12 years ago
parent
commit
2d634d4537
  1. 31
      src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs

31
src/Main/Base/Project/Src/Project/ProjectChangeWatcher.cs

@ -26,6 +26,7 @@ namespace ICSharpCode.SharpDevelop.Project
FileSystemWatcher watcher; FileSystemWatcher watcher;
string fileName; string fileName;
bool enabled = true; bool enabled = true;
DateTime lastWriteTime;
public ProjectChangeWatcher(string fileName) public ProjectChangeWatcher(string fileName)
{ {
@ -33,6 +34,7 @@ namespace ICSharpCode.SharpDevelop.Project
SD.MainThread.VerifyAccess(); SD.MainThread.VerifyAccess();
activeWatchers.Add(this); activeWatchers.Add(this);
UpdateLastWriteTime();
SD.Workbench.MainWindow.Activated += MainFormActivated; SD.Workbench.MainWindow.Activated += MainFormActivated;
} }
@ -54,6 +56,26 @@ namespace ICSharpCode.SharpDevelop.Project
fileName = newFileName; fileName = newFileName;
} }
void UpdateLastWriteTime()
{
// Save current last write time attribute
FileInfo fileInfo = new FileInfo(fileName);
if (fileInfo != null) {
lastWriteTime = fileInfo.LastWriteTimeUtc;
}
}
bool LastWriteTimeHasChanged()
{
// Save current last write time attribute
FileInfo fileInfo = new FileInfo(fileName);
if (fileInfo != null) {
return lastWriteTime != fileInfo.LastWriteTimeUtc;
}
return true; // File doesn't exist anymore?
}
void SetWatcher() void SetWatcher()
{ {
SD.MainThread.VerifyAccess(); SD.MainThread.VerifyAccess();
@ -107,7 +129,14 @@ namespace ICSharpCode.SharpDevelop.Project
void OnFileChangedEvent(object sender, FileSystemEventArgs e) void OnFileChangedEvent(object sender, FileSystemEventArgs e)
{ {
LoggingService.Debug("Project file " + e.Name + " was changed externally: {1}" + e.ChangeType); // Last write time really has changed?
if (!LastWriteTimeHasChanged()) {
LoggingService.DebugFormatted("Attributes of project file {0} have been set externally ({1}), but no relevant changes detected.", e.Name, e.ChangeType);
return;
}
LoggingService.DebugFormatted("Project file {0} was changed externally: {1}", e.Name, e.ChangeType);
UpdateLastWriteTime();
if (!wasChangedExternally) { if (!wasChangedExternally) {
wasChangedExternally = true; wasChangedExternally = true;
if (SD.Workbench.IsActiveWindow) { if (SD.Workbench.IsActiveWindow) {

Loading…
Cancel
Save