@@ -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