Skip to content

Commit d71dcaf

Browse files
committed
Properly disable file system watcher.
1 parent 8a75ef7 commit d71dcaf

File tree

4 files changed

+39
-50
lines changed

4 files changed

+39
-50
lines changed

RetailCoder.VBE/UI/SourceControl/SourceControlViewViewModel.cs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -107,26 +107,26 @@ public void AddComponent(VBComponent component)
107107
{
108108
if (Provider == null) { return; }
109109

110-
_fileSystemWatcher.EnableRaisingEvents = false;
110+
//_fileSystemWatcher.EnableRaisingEvents = false;
111111
var fileStatus = Provider.Status().SingleOrDefault(stat => stat.FilePath.Split('.')[0] == component.Name);
112112
if (fileStatus != null)
113113
{
114114
Provider.AddFile(fileStatus.FilePath);
115115
}
116-
_fileSystemWatcher.EnableRaisingEvents = true;
116+
//_fileSystemWatcher.EnableRaisingEvents = true;
117117
}
118118

119119
public void RemoveComponent(VBComponent component)
120120
{
121121
if (Provider == null) { return; }
122122

123-
_fileSystemWatcher.EnableRaisingEvents = false;
123+
//_fileSystemWatcher.EnableRaisingEvents = false;
124124
var fileStatus = Provider.Status().SingleOrDefault(stat => stat.FilePath.Split('.')[0] == component.Name);
125125
if (fileStatus != null)
126126
{
127127
Provider.RemoveFile(fileStatus.FilePath, true);
128128
}
129-
_fileSystemWatcher.EnableRaisingEvents = true;
129+
//_fileSystemWatcher.EnableRaisingEvents = true;
130130
}
131131

132132
public void RenameComponent(VBComponent component, string oldName)
@@ -136,17 +136,17 @@ public void RenameComponent(VBComponent component, string oldName)
136136
var fileStatus = Provider.LastKnownStatus().SingleOrDefault(stat => stat.FilePath.Split('.')[0] == oldName);
137137
if (fileStatus != null)
138138
{
139-
_fileSystemWatcher.EnableRaisingEvents = false;
140139
var directory = Provider.CurrentRepository.LocalLocation;
141140
directory += directory.EndsWith("\\") ? string.Empty : "\\";
142141

143142
var fileExt = "." + fileStatus.FilePath.Split('.').Last();
144143

144+
_fileSystemWatcher.EnableRaisingEvents = false;
145145
File.Move(directory + fileStatus.FilePath, directory + component.Name + fileExt);
146+
_fileSystemWatcher.EnableRaisingEvents = true;
147+
146148
Provider.RemoveFile(oldName + fileExt, false);
147149
Provider.AddFile(component.Name + fileExt);
148-
149-
_fileSystemWatcher.EnableRaisingEvents = true;
150150
}
151151
}
152152

@@ -174,9 +174,6 @@ public ISourceControlProvider Provider
174174
_provider = value;
175175
SetChildPresenterSourceControlProviders(_provider);
176176

177-
Provider.ExportFilesStarted += Provider_ExportFilesStarted;
178-
Provider.ExportFilesCompleted += Provider_ExportFilesCompleted;
179-
180177
if (_fileSystemWatcher.Path != LocalDirectory && Directory.Exists(_provider.CurrentRepository.LocalLocation))
181178
{
182179
_fileSystemWatcher.Path = _provider.CurrentRepository.LocalLocation;
@@ -191,16 +188,6 @@ public ISourceControlProvider Provider
191188
}
192189
}
193190

194-
private void Provider_ExportFilesCompleted(object sender, EventArgs e)
195-
{
196-
_fileSystemWatcher.EnableRaisingEvents = true;
197-
}
198-
199-
private void Provider_ExportFilesStarted(object sender, EventArgs e)
200-
{
201-
_fileSystemWatcher.EnableRaisingEvents = false;
202-
}
203-
204191
private void _fileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
205192
{
206193
// the file system filter doesn't support multiple filters
@@ -209,6 +196,11 @@ private void _fileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
209196
return;
210197
}
211198

199+
if (!Provider.NotifyExternalFileChanges)
200+
{
201+
return;
202+
}
203+
212204
Logger.Trace("File system watcher detected file changed");
213205
if (_messageBox.Show("file changed", RubberduckUI.SourceControlPanel_Caption,
214206
MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.OK)
@@ -225,6 +217,11 @@ private void _fileSystemWatcher_Renamed(object sender, RenamedEventArgs e)
225217
return;
226218
}
227219

220+
if (!Provider.NotifyExternalFileChanges)
221+
{
222+
return;
223+
}
224+
228225
Logger.Trace("File system watcher detected file renamed");
229226
if (_messageBox.Show("file changed", RubberduckUI.SourceControlPanel_Caption,
230227
MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.OK)
@@ -243,6 +240,11 @@ private void _fileSystemWatcher_Deleted(object sender, FileSystemEventArgs e)
243240
return;
244241
}
245242

243+
if (!Provider.NotifyExternalFileChanges)
244+
{
245+
return;
246+
}
247+
246248
Logger.Trace("File system watcher detected file deleted");
247249
if (_messageBox.Show("file changed", RubberduckUI.SourceControlPanel_Caption,
248250
MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.OK)
@@ -260,6 +262,11 @@ private void _fileSystemWatcher_Created(object sender, FileSystemEventArgs e)
260262
return;
261263
}
262264

265+
if (!Provider.NotifyExternalFileChanges)
266+
{
267+
return;
268+
}
269+
263270
Logger.Trace("File system watcher detected file created");
264271
if (_messageBox.Show("file changed", RubberduckUI.SourceControlPanel_Caption,
265272
MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.OK)

Rubberduck.SourceControl/GitProvider.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,9 @@ public override void RemoveFile(string filePath, bool removeFromWorkingDirectory
469469
{
470470
try
471471
{
472+
NotifyExternalFileChanges = false;
472473
_repo.Remove(filePath, removeFromWorkingDirectory);
474+
NotifyExternalFileChanges = true;
473475
}
474476
catch (LibGit2SharpException ex)
475477
{

Rubberduck.SourceControl/ISourceControlProvider.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ public interface ISourceControlProvider
1111
IEnumerable<IBranch> Branches { get; }
1212
IList<ICommit> UnsyncedLocalCommits { get; }
1313
IList<ICommit> UnsyncedRemoteCommits { get; }
14+
bool NotifyExternalFileChanges { get; }
1415

1516
event EventHandler<EventArgs> BranchChanged;
16-
event EventHandler<EventArgs> ExportFilesStarted;
17-
event EventHandler<EventArgs> ExportFilesCompleted;
1817

1918
/// <summary>Clone a remote repository.</summary>
2019
/// <param name="remotePathOrUrl">Either a Url "https://github.com/retailcoder/Rubberduck.git" or a UNC path. "//server/share/path/to/repo.git"</param>

Rubberduck.SourceControl/SourceControlProviderBase.cs

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ protected SourceControlProviderBase(VBProject project, IRepository repository, I
3131
public abstract IEnumerable<IBranch> Branches { get; }
3232
public abstract IList<ICommit> UnsyncedLocalCommits { get; }
3333
public abstract IList<ICommit> UnsyncedRemoteCommits { get; }
34+
public bool NotifyExternalFileChanges { get; protected set; }
3435
public abstract IRepository Clone(string remotePathOrUrl, string workingDirectory);
3536
public abstract void Push();
3637
public abstract void Fetch(string remoteName);
@@ -64,9 +65,9 @@ public virtual IRepository InitVBAProject(string directory)
6465
Directory.CreateDirectory(directory);
6566
}
6667

67-
OnExportFilesStarted();
68+
NotifyExternalFileChanges = false;
6869
Project.ExportSourceFiles(directory);
69-
OnExportFilesCompleted();
70+
NotifyExternalFileChanges = true;
7071

7172
CurrentRepository = new Repository(Project.HelpFile, directory, directory);
7273
return CurrentRepository;
@@ -81,16 +82,16 @@ public virtual void Pull()
8182

8283
public virtual void Stage(string filePath)
8384
{
84-
OnExportFilesStarted();
85+
NotifyExternalFileChanges = false;
8586
Project.ExportSourceFiles(CurrentRepository.LocalLocation);
86-
OnExportFilesCompleted();
87+
NotifyExternalFileChanges = true;
8788
}
8889

8990
public virtual void Stage(IEnumerable<string> filePaths)
9091
{
91-
OnExportFilesStarted();
92+
NotifyExternalFileChanges = false;
9293
Project.ExportSourceFiles(CurrentRepository.LocalLocation);
93-
OnExportFilesCompleted();
94+
NotifyExternalFileChanges = true;
9495
}
9596

9697
public virtual void Merge(string sourceBranch, string destinationBranch)
@@ -128,9 +129,9 @@ public virtual void Revert()
128129

129130
public virtual IEnumerable<IFileStatusEntry> Status()
130131
{
131-
OnExportFilesStarted();
132+
NotifyExternalFileChanges = false;
132133
Project.ExportSourceFiles(CurrentRepository.LocalLocation);
133-
OnExportFilesCompleted();
134+
NotifyExternalFileChanges = true;
134135
return null;
135136
}
136137

@@ -170,25 +171,5 @@ private void Refresh()
170171
Project.ImportSourceFiles(CurrentRepository.LocalLocation);
171172
}
172173
}
173-
174-
public event EventHandler<EventArgs> ExportFilesStarted;
175-
private void OnExportFilesStarted()
176-
{
177-
var handler = ExportFilesStarted;
178-
if (handler != null)
179-
{
180-
handler(this, EventArgs.Empty);
181-
}
182-
}
183-
184-
public event EventHandler<EventArgs> ExportFilesCompleted;
185-
private void OnExportFilesCompleted()
186-
{
187-
var handler = ExportFilesCompleted;
188-
if (handler != null)
189-
{
190-
handler(this, EventArgs.Empty);
191-
}
192-
}
193174
}
194175
}

0 commit comments

Comments
 (0)