Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 12eac94

Browse files
author
Andreia Gaita
committed
Split event processing and process firing
1 parent 87d9811 commit 12eac94

File tree

1 file changed

+128
-52
lines changed

1 file changed

+128
-52
lines changed

src/GitHub.Api/Events/RepositoryWatcher.cs

Lines changed: 128 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -160,14 +160,30 @@ public int CheckAndProcessEvents()
160160
return processedEventCount;
161161
}
162162

163-
private int ProcessEvents(Event[] fileEvents)
163+
enum EventType
164+
{
165+
None,
166+
ConfigChanged,
167+
HeadChanged,
168+
RepositoryChanged,
169+
IndexChanged,
170+
RemoteBranchDeleted,
171+
RemoteBranchCreated,
172+
RemoteBranchChanged,
173+
LocalBranchDeleted,
174+
LocalBranchCreated,
175+
LocalBranchChanged
176+
}
177+
178+
class EventData
164179
{
165-
var eventsProcessed = 0;
166-
var configChanged = false;
167-
var headChanged = false;
168-
var repositoryChanged = false;
169-
var indexChanged = false;
180+
public string Origin;
181+
public string Branch;
182+
}
170183

184+
private int ProcessEvents(Event[] fileEvents)
185+
{
186+
Dictionary<EventType, List<EventData>> events = new Dictionary<EventType, List<EventData>>();
171187
foreach (var fileEvent in fileEvents)
172188
{
173189
if (!running)
@@ -195,29 +211,17 @@ private int ProcessEvents(Event[] fileEvents)
195211
// handling events in .git/*
196212
if (fileA.IsChildOf(paths.DotGitPath))
197213
{
198-
if (!configChanged && fileA.Equals(paths.DotGitConfig))
214+
if (!events.ContainsKey(EventType.ConfigChanged) && fileA.Equals(paths.DotGitConfig))
199215
{
200-
configChanged = true;
201-
202-
Logger.Trace("ConfigChanged");
203-
ConfigChanged?.Invoke();
204-
eventsProcessed++;
216+
events.Add(EventType.ConfigChanged, null);
205217
}
206-
else if (!headChanged && fileA.Equals(paths.DotGitHead))
218+
else if (!events.ContainsKey(EventType.HeadChanged) && fileA.Equals(paths.DotGitHead))
207219
{
208-
headChanged = true;
209-
210-
Logger.Trace("HeadChanged");
211-
HeadChanged?.Invoke();
212-
eventsProcessed++;
220+
events.Add(EventType.HeadChanged, null);
213221
}
214-
else if (!indexChanged && fileA.Equals(paths.DotGitIndex))
222+
else if (!events.ContainsKey(EventType.IndexChanged) && fileA.Equals(paths.DotGitIndex))
215223
{
216-
indexChanged = true;
217-
218-
Logger.Trace("IndexChanged");
219-
IndexChanged?.Invoke();
220-
eventsProcessed++;
224+
events.Add(EventType.IndexChanged, null);
221225
}
222226
else if (fileA.IsChildOf(paths.RemotesPath))
223227
{
@@ -231,20 +235,17 @@ private int ProcessEvents(Event[] fileEvents)
231235

232236
var origin = relativePathElements[0];
233237

234-
if (fileEvent.Type == EventType.DELETED)
238+
if (fileEvent.Type == sfw.net.EventType.DELETED)
235239
{
236240
if (fileA.ExtensionWithDot == ".lock")
237241
{
238242
continue;
239243
}
240244

241245
var branch = string.Join(@"/", relativePathElements.Skip(1).ToArray());
242-
243-
Logger.Trace("RemoteBranchDeleted: {0}/{1}", origin, branch);
244-
RemoteBranchDeleted?.Invoke(origin, branch);
245-
eventsProcessed++;
246+
AddOrUpdateEventData(events, EventType.RemoteBranchDeleted, new EventData { Origin = origin, Branch = branch });
246247
}
247-
else if (fileEvent.Type == EventType.RENAMED)
248+
else if (fileEvent.Type == sfw.net.EventType.RENAMED)
248249
{
249250
if (fileA.ExtensionWithDot != ".lock")
250251
{
@@ -260,17 +261,14 @@ private int ProcessEvents(Event[] fileEvents)
260261
.Union(new[] { fileA.FileNameWithoutExtension }).ToArray();
261262

262263
var branch = string.Join(@"/", branchPathElement);
263-
264-
Logger.Trace("RemoteBranchCreated: {0}/{1}", origin, branch);
265-
RemoteBranchCreated?.Invoke(origin, branch);
266-
eventsProcessed++;
264+
AddOrUpdateEventData(events, EventType.RemoteBranchCreated, new EventData { Origin = origin, Branch = branch });
267265
}
268266
}
269267
}
270268
}
271269
else if (fileA.IsChildOf(paths.BranchesPath))
272270
{
273-
if (fileEvent.Type == EventType.MODIFIED)
271+
if (fileEvent.Type == sfw.net.EventType.MODIFIED)
274272
{
275273
if (fileA.DirectoryExists())
276274
{
@@ -292,11 +290,10 @@ private int ProcessEvents(Event[] fileEvents)
292290

293291
var branch = string.Join(@"/", relativePathElements.ToArray());
294292

295-
Logger.Trace("LocalBranchChanged: {0}", branch);
296-
LocalBranchChanged?.Invoke(branch);
297-
eventsProcessed++;
293+
AddOrUpdateEventData(events, EventType.LocalBranchChanged, new EventData { Branch = branch });
294+
298295
}
299-
else if (fileEvent.Type == EventType.DELETED)
296+
else if (fileEvent.Type == sfw.net.EventType.DELETED)
300297
{
301298
if (fileA.ExtensionWithDot == ".lock")
302299
{
@@ -312,12 +309,9 @@ private int ProcessEvents(Event[] fileEvents)
312309
}
313310

314311
var branch = string.Join(@"/", relativePathElements.ToArray());
315-
316-
Logger.Trace("LocalBranchDeleted: {0}", branch);
317-
LocalBranchDeleted?.Invoke(branch);
318-
eventsProcessed++;
312+
AddOrUpdateEventData(events, EventType.LocalBranchDeleted, new EventData { Branch = branch });
319313
}
320-
else if (fileEvent.Type == EventType.RENAMED)
314+
else if (fileEvent.Type == sfw.net.EventType.RENAMED)
321315
{
322316
if (fileA.ExtensionWithDot != ".lock")
323317
{
@@ -337,30 +331,112 @@ private int ProcessEvents(Event[] fileEvents)
337331
}
338332

339333
var branch = string.Join(@"/", relativePathElements.ToArray());
340-
341-
Logger.Trace("LocalBranchCreated: {0}", branch);
342-
LocalBranchCreated?.Invoke(branch);
343-
eventsProcessed++;
334+
AddOrUpdateEventData(events, EventType.LocalBranchCreated, new EventData { Branch = branch });
344335
}
345336
}
346337
}
347338
}
348339
}
349340
else
350341
{
351-
if (repositoryChanged || ignoredPaths.Any(ignoredPath => fileA.IsChildOf(ignoredPath)))
342+
if (events.ContainsKey(EventType.RepositoryChanged) || ignoredPaths.Any(ignoredPath => fileA.IsChildOf(ignoredPath)))
352343
{
353344
continue;
354345
}
346+
events.Add(EventType.RepositoryChanged, null);
347+
}
348+
}
349+
350+
return FireEvents(events);
351+
}
355352

356-
repositoryChanged = true;
353+
private void AddOrUpdateEventData(Dictionary<EventType, List<EventData>> events, EventType type, EventData data)
354+
{
355+
if (!events.ContainsKey(type))
356+
events.Add(type, new List<EventData>());
357+
events[type].Add(data);
358+
}
357359

358-
Logger.Trace("RepositoryChanged");
359-
RepositoryChanged?.Invoke();
360+
private int FireEvents(Dictionary<EventType, List<EventData>> events)
361+
{
362+
int eventsProcessed = 0;
363+
if (events.ContainsKey(EventType.ConfigChanged))
364+
{
365+
Logger.Trace("ConfigChanged");
366+
ConfigChanged?.Invoke();
367+
eventsProcessed++;
368+
}
369+
370+
if (events.ContainsKey(EventType.HeadChanged))
371+
{
372+
Logger.Trace("HeadChanged");
373+
HeadChanged?.Invoke();
374+
eventsProcessed++;
375+
}
376+
377+
if (events.ContainsKey(EventType.IndexChanged))
378+
{
379+
Logger.Trace("IndexChanged");
380+
IndexChanged?.Invoke();
381+
eventsProcessed++;
382+
}
383+
384+
if (events.ContainsKey(EventType.RepositoryChanged))
385+
{
386+
Logger.Trace("RepositoryChanged");
387+
RepositoryChanged?.Invoke();
388+
eventsProcessed++;
389+
}
390+
391+
if (events.ContainsKey(EventType.LocalBranchCreated))
392+
{
393+
foreach (var evt in events[EventType.LocalBranchCreated])
394+
{
395+
Logger.Trace($"LocalBranchCreated: {evt.Branch}");
396+
LocalBranchCreated?.Invoke(evt.Branch);
360397
eventsProcessed++;
361398
}
362399
}
363400

401+
if (events.ContainsKey(EventType.LocalBranchChanged))
402+
{
403+
foreach (var evt in events[EventType.LocalBranchChanged])
404+
{
405+
Logger.Trace($"LocalBranchChanged: {evt.Branch}");
406+
LocalBranchChanged?.Invoke(evt.Branch);
407+
eventsProcessed++;
408+
}
409+
}
410+
411+
if (events.ContainsKey(EventType.LocalBranchDeleted))
412+
{
413+
foreach (var evt in events[EventType.LocalBranchDeleted])
414+
{
415+
Logger.Trace($"LocalBranchDeleted: {evt.Branch}");
416+
LocalBranchDeleted?.Invoke(evt.Branch);
417+
eventsProcessed++;
418+
}
419+
}
420+
421+
if (events.ContainsKey(EventType.RemoteBranchCreated))
422+
{
423+
foreach (var evt in events[EventType.RemoteBranchCreated])
424+
{
425+
Logger.Trace($"RemoteBranchCreated: {evt.Origin}/{evt.Branch}");
426+
RemoteBranchCreated?.Invoke(evt.Origin, evt.Branch);
427+
eventsProcessed++;
428+
}
429+
}
430+
431+
if (events.ContainsKey(EventType.RemoteBranchDeleted))
432+
{
433+
foreach (var evt in events[EventType.RemoteBranchDeleted])
434+
{
435+
Logger.Trace($"RemoteBranchDeleted: {evt.Origin}/{evt.Branch}");
436+
RemoteBranchDeleted?.Invoke(evt.Origin, evt.Branch);
437+
eventsProcessed++;
438+
}
439+
}
364440
return eventsProcessed;
365441
}
366442

0 commit comments

Comments
 (0)