11using System ;
22using System . Collections . Generic ;
33using System . Linq ;
4+ using System . Threading ;
45using System . Threading . Tasks ;
56
67namespace GitHub . Unity
@@ -169,64 +170,62 @@ public int WaitForEvents()
169170
170171 public ITask CommitAllFiles ( string message , string body )
171172 {
172- var add = GitClient . AddAll ( ) ;
173- add . OnStart += t => IsBusy = true ;
174- return add
175- . Then ( GitClient . Commit ( message , body ) )
176- . Finally ( ( ) => IsBusy = false ) ;
173+ var task = GitClient
174+ . AddAll ( )
175+ . Then ( GitClient . Commit ( message , body ) ) ;
176+
177+ return HookupHandlers ( task , true , true ) ;
177178 }
178179
179180 public ITask CommitFiles ( List < string > files , string message , string body )
180181 {
181- var add = GitClient . Add ( files ) ;
182- add . OnStart += t => IsBusy = true ;
183- return add
184- . Then ( GitClient . Commit ( message , body ) )
185- . Finally ( ( ) => IsBusy = false ) ;
182+ var task = GitClient
183+ . Add ( files )
184+ . Then ( GitClient . Commit ( message , body ) ) ;
185+
186+ return HookupHandlers ( task , true , true ) ;
186187 }
187188
188189 public ITask < List < GitLogEntry > > Log ( )
189190 {
190191 var task = GitClient . Log ( ) ;
191- HookupHandlers ( task ) ;
192- return task ;
192+ return HookupHandlers ( task , false , false ) ;
193193 }
194194
195195 public ITask < GitStatus > Status ( )
196196 {
197197 var task = GitClient . Status ( ) ;
198- HookupHandlers ( task ) ;
199- return task ;
198+ return HookupHandlers ( task , true , false ) ;
200199 }
201200
202201 public ITask Fetch ( string remote )
203202 {
204203 var task = GitClient . Fetch ( remote ) ;
205- return HookupHandlers ( task ) ;
204+ return HookupHandlers ( task , true , false ) ;
206205 }
207206
208207 public ITask Pull ( string remote , string branch )
209208 {
210209 var task = GitClient . Pull ( remote , branch ) ;
211- return HookupHandlers ( task , true ) ;
210+ return HookupHandlers ( task , true , true ) ;
212211 }
213212
214213 public ITask Push ( string remote , string branch )
215214 {
216215 var task = GitClient . Push ( remote , branch ) ;
217- return HookupHandlers ( task ) ;
216+ return HookupHandlers ( task , true , false ) ;
218217 }
219218
220219 public ITask Revert ( string changeset )
221220 {
222221 var task = GitClient . Revert ( changeset ) ;
223- return HookupHandlers ( task ) ;
222+ return HookupHandlers ( task , true , true ) ;
224223 }
225224
226225 public ITask RemoteAdd ( string remote , string url )
227226 {
228227 var task = GitClient . RemoteAdd ( remote , url ) ;
229- HookupHandlers ( task ) ;
228+ task = HookupHandlers ( task , true , false ) ;
230229 if ( ! platform . Environment . IsWindows )
231230 {
232231 task . Then ( _ => {
@@ -239,7 +238,7 @@ public ITask RemoteAdd(string remote, string url)
239238 public ITask RemoteRemove ( string remote )
240239 {
241240 var task = GitClient . RemoteRemove ( remote ) ;
242- HookupHandlers ( task ) ;
241+ task = HookupHandlers ( task , true , false ) ;
243242 if ( ! platform . Environment . IsWindows )
244243 {
245244 task . Then ( _ => {
@@ -252,44 +251,44 @@ public ITask RemoteRemove(string remote)
252251 public ITask RemoteChange ( string remote , string url )
253252 {
254253 var task = GitClient . RemoteChange ( remote , url ) ;
255- return HookupHandlers ( task ) ;
254+ return HookupHandlers ( task , true , false ) ;
256255 }
257256
258257 public ITask SwitchBranch ( string branch )
259258 {
260259 var task = GitClient . SwitchBranch ( branch ) ;
261- return HookupHandlers ( task , true ) ;
260+ return HookupHandlers ( task , true , true ) ;
262261 }
263262
264263 public ITask DeleteBranch ( string branch , bool deleteUnmerged = false )
265264 {
266265 var task = GitClient . DeleteBranch ( branch , deleteUnmerged ) ;
267- return HookupHandlers ( task ) ;
266+ return HookupHandlers ( task , true , false ) ;
268267 }
269268
270269 public ITask CreateBranch ( string branch , string baseBranch )
271270 {
272271 var task = GitClient . CreateBranch ( branch , baseBranch ) ;
273- return HookupHandlers ( task ) ;
272+ return HookupHandlers ( task , true , false ) ;
274273 }
275274
276275 public ITask < List < GitLock > > ListLocks ( bool local )
277276 {
278277 var task = GitClient . ListLocks ( local ) ;
279- HookupHandlers ( task ) ;
278+ HookupHandlers ( task , false , false ) ;
280279 return task ;
281280 }
282281
283282 public ITask LockFile ( string file )
284283 {
285284 var task = GitClient . Lock ( file ) ;
286- return HookupHandlers ( task ) ;
285+ return HookupHandlers ( task , true , false ) ;
287286 }
288287
289288 public ITask UnlockFile ( string file , bool force )
290289 {
291290 var task = GitClient . Unlock ( file , force ) ;
292- return HookupHandlers ( task ) ;
291+ return HookupHandlers ( task , true , false ) ;
293292 }
294293
295294 public void UpdateConfigData ( )
@@ -317,29 +316,42 @@ private void UpdateHead()
317316 UpdateCurrentBranchAndRemote ( head ) ;
318317 }
319318
320- private ITask HookupHandlers ( ITask task , bool disableWatcher = false )
319+ private ITask < T > HookupHandlers < T > ( ITask < T > task , bool isExclusive , bool filesystemChangesExpected )
321320 {
322- task . OnStart += t => {
323- Logger . Trace ( "Start " + task . Name ) ;
324- IsBusy = true ;
321+ return new ActionTask ( CancellationToken . None , ( ) => {
322+ if ( isExclusive )
323+ {
324+ Logger . Trace ( "Starting Operation - Setting Busy Flag" ) ;
325+ IsBusy = true ;
326+ }
325327
326- if ( disableWatcher )
327- {
328- watcher . Stop ( ) ;
329- }
330- } ;
328+ if ( filesystemChangesExpected )
329+ {
330+ Logger . Trace ( "Starting Operation - Disable Watcher" ) ;
331+ watcher . Stop ( ) ;
332+ }
333+ } )
334+ . Then ( task )
335+ . Finally ( ( success , exception , result ) => {
336+ if ( filesystemChangesExpected )
337+ {
338+ Logger . Trace ( "Ended Operation - Enable Watcher" ) ;
339+ watcher . Start ( ) ;
340+ }
331341
332- task . OnEnd += t => {
333- if ( disableWatcher )
334- {
335- watcher . Start ( ) ;
336- }
342+ if ( isExclusive )
343+ {
344+ Logger . Trace ( "Ended Operation - Clearing Busy Flag" ) ;
345+ IsBusy = false ;
346+ }
337347
338- IsBusy = false ;
348+ if ( success )
349+ {
350+ return result ;
351+ }
339352
340- Logger . Trace ( "Finish " + task . Name ) ;
341- } ;
342- return task ;
353+ throw exception ;
354+ } ) ;
343355 }
344356
345357 private void Watcher_OnRemoteBranchDeleted ( string remote , string name )
0 commit comments