1
1
using System ;
2
2
using System . Collections . Generic ;
3
3
using System . Linq ;
4
+ using System . Threading ;
4
5
using System . Threading . Tasks ;
5
6
6
7
namespace GitHub . Unity
@@ -172,52 +173,50 @@ public int WaitForEvents()
172
173
173
174
public ITask CommitAllFiles ( string message , string body )
174
175
{
175
- var task = GitClient . AddAll ( )
176
+ var task = GitClient
177
+ . AddAll ( )
176
178
. Then ( GitClient . Commit ( message , body ) ) ;
177
179
178
- HookupHandlers ( task , true ) ;
179
- return task ;
180
+ return HookupHandlers ( task ) ;
180
181
}
181
182
182
183
public ITask CommitFiles ( List < string > files , string message , string body )
183
184
{
184
- var task = GitClient . Add ( files )
185
+ var task = GitClient
186
+ . Add ( files )
185
187
. Then ( GitClient . Commit ( message , body ) ) ;
186
188
187
- HookupHandlers ( task , true ) ;
188
- return task ;
189
+ return HookupHandlers ( task ) ;
189
190
}
190
191
191
192
public ITask < List < GitLogEntry > > Log ( )
192
193
{
193
194
var task = GitClient . Log ( ) ;
194
- HookupHandlers ( task ) ;
195
- return task ;
195
+ return HookupHandlers ( task , false , false ) ;
196
196
}
197
197
198
198
public ITask < GitStatus > Status ( )
199
199
{
200
200
var task = GitClient . Status ( ) ;
201
- HookupHandlers ( task ) ;
202
- return task ;
201
+ return HookupHandlers ( task , false ) ;
203
202
}
204
203
205
204
public ITask Fetch ( string remote )
206
205
{
207
206
var task = GitClient . Fetch ( remote ) ;
208
- return HookupHandlers ( task ) ;
207
+ return HookupHandlers ( task , false ) ;
209
208
}
210
209
211
210
public ITask Pull ( string remote , string branch )
212
211
{
213
212
var task = GitClient . Pull ( remote , branch ) ;
214
- return HookupHandlers ( task , true ) ;
213
+ return HookupHandlers ( task ) ;
215
214
}
216
215
217
216
public ITask Push ( string remote , string branch )
218
217
{
219
218
var task = GitClient . Push ( remote , branch ) ;
220
- return HookupHandlers ( task ) ;
219
+ return HookupHandlers ( task , false ) ;
221
220
}
222
221
223
222
public ITask Revert ( string changeset )
@@ -229,7 +228,7 @@ public ITask Revert(string changeset)
229
228
public ITask RemoteAdd ( string remote , string url )
230
229
{
231
230
var task = GitClient . RemoteAdd ( remote , url ) ;
232
- HookupHandlers ( task ) ;
231
+ task = HookupHandlers ( task , false ) ;
233
232
if ( ! platform . Environment . IsWindows )
234
233
{
235
234
task . Then ( _ => {
@@ -242,7 +241,7 @@ public ITask RemoteAdd(string remote, string url)
242
241
public ITask RemoteRemove ( string remote )
243
242
{
244
243
var task = GitClient . RemoteRemove ( remote ) ;
245
- HookupHandlers ( task ) ;
244
+ task = HookupHandlers ( task , false ) ;
246
245
if ( ! platform . Environment . IsWindows )
247
246
{
248
247
task . Then ( _ => {
@@ -255,44 +254,44 @@ public ITask RemoteRemove(string remote)
255
254
public ITask RemoteChange ( string remote , string url )
256
255
{
257
256
var task = GitClient . RemoteChange ( remote , url ) ;
258
- return HookupHandlers ( task ) ;
257
+ return HookupHandlers ( task , false ) ;
259
258
}
260
259
261
260
public ITask SwitchBranch ( string branch )
262
261
{
263
262
var task = GitClient . SwitchBranch ( branch ) ;
264
- return HookupHandlers ( task , true ) ;
263
+ return HookupHandlers ( task ) ;
265
264
}
266
265
267
266
public ITask DeleteBranch ( string branch , bool deleteUnmerged = false )
268
267
{
269
268
var task = GitClient . DeleteBranch ( branch , deleteUnmerged ) ;
270
- return HookupHandlers ( task ) ;
269
+ return HookupHandlers ( task , false ) ;
271
270
}
272
271
273
272
public ITask CreateBranch ( string branch , string baseBranch )
274
273
{
275
274
var task = GitClient . CreateBranch ( branch , baseBranch ) ;
276
- return HookupHandlers ( task ) ;
275
+ return HookupHandlers ( task , false ) ;
277
276
}
278
277
279
278
public ITask < List < GitLock > > ListLocks ( bool local )
280
279
{
281
280
var task = GitClient . ListLocks ( local ) ;
282
- HookupHandlers ( task ) ;
281
+ HookupHandlers ( task , false , false ) ;
283
282
return task ;
284
283
}
285
284
286
285
public ITask LockFile ( string file )
287
286
{
288
287
var task = GitClient . Lock ( file ) ;
289
- return HookupHandlers ( task ) ;
288
+ return HookupHandlers ( task , false ) ;
290
289
}
291
290
292
291
public ITask UnlockFile ( string file , bool force )
293
292
{
294
293
var task = GitClient . Unlock ( file , force ) ;
295
- return HookupHandlers ( task ) ;
294
+ return HookupHandlers ( task , false ) ;
296
295
}
297
296
298
297
public void UpdateConfigData ( )
@@ -329,29 +328,42 @@ private void UpdateHead()
329
328
UpdateCurrentBranchAndRemote ( head ) ;
330
329
}
331
330
332
- private ITask HookupHandlers ( ITask task , bool disableWatcher = false )
331
+ private ITask < T > HookupHandlers < T > ( ITask < T > task , bool disableWatcher = true , bool toggleBusyFlag = true )
333
332
{
334
- task . OnStart += t => {
335
- Logger . Trace ( "Start " + task . Name ) ;
336
- IsBusy = true ;
333
+ return new ActionTask ( CancellationToken . None , ( ) => {
334
+ if ( toggleBusyFlag )
335
+ {
336
+ Logger . Trace ( "Starting Operation - Setting Busy Flag" ) ;
337
+ IsBusy = true ;
338
+ }
337
339
338
- if ( disableWatcher )
339
- {
340
- watcher . Stop ( ) ;
341
- }
342
- } ;
340
+ if ( disableWatcher )
341
+ {
342
+ Logger . Trace ( "Starting Operation - Disable Watcher" ) ;
343
+ watcher . Stop ( ) ;
344
+ }
345
+ } )
346
+ . Then ( task )
347
+ . Finally ( ( success , exception , result ) => {
348
+ if ( disableWatcher )
349
+ {
350
+ Logger . Trace ( "Ended Operation - Enable Watcher" ) ;
351
+ watcher . Start ( ) ;
352
+ }
343
353
344
- task . OnEnd += t => {
345
- if ( disableWatcher )
346
- {
347
- watcher . Start ( ) ;
348
- }
354
+ if ( toggleBusyFlag )
355
+ {
356
+ Logger . Trace ( "Ended Operation - Clearing Busy Flag" ) ;
357
+ IsBusy = false ;
358
+ }
349
359
350
- IsBusy = false ;
360
+ if ( success )
361
+ {
362
+ return result ;
363
+ }
351
364
352
- Logger . Trace ( "Finish " + task . Name ) ;
353
- } ;
354
- return task ;
365
+ throw exception ;
366
+ } ) ;
355
367
}
356
368
357
369
private void Watcher_OnRemoteBranchDeleted ( string remote , string name )
0 commit comments