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
@@ -164,38 +165,38 @@ public int WaitForEvents()
164
165
165
166
public ITask CommitAllFiles ( string message , string body )
166
167
{
167
- var add = GitClient . AddAll ( ) ;
168
- add . OnStart += t => IsBusy = true ;
169
- return add
170
- . Then ( GitClient . Commit ( message , body ) )
171
- . Finally ( ( ) => IsBusy = false ) ;
168
+ var task = GitClient
169
+ . AddAll ( )
170
+ . Then ( GitClient . Commit ( message , body ) ) ;
171
+
172
+ return HookupHandlers ( task ) ;
172
173
}
173
174
174
175
public ITask CommitFiles ( List < string > files , string message , string body )
175
176
{
176
- var add = GitClient . Add ( files ) ;
177
- add . OnStart += t => IsBusy = true ;
178
- return add
179
- . Then ( GitClient . Commit ( message , body ) )
180
- . Finally ( ( ) => IsBusy = false ) ;
177
+ var task = GitClient
178
+ . Add ( files )
179
+ . Then ( GitClient . Commit ( message , body ) ) ;
180
+
181
+ return HookupHandlers ( task ) ;
181
182
}
182
183
183
184
public ITask Fetch ( string remote )
184
185
{
185
186
var task = GitClient . Fetch ( remote ) ;
186
- return HookupHandlers ( task ) ;
187
+ return HookupHandlers ( task , false ) ;
187
188
}
188
189
189
190
public ITask Pull ( string remote , string branch )
190
191
{
191
192
var task = GitClient . Pull ( remote , branch ) ;
192
- return HookupHandlers ( task , true ) ;
193
+ return HookupHandlers ( task ) ;
193
194
}
194
195
195
196
public ITask Push ( string remote , string branch )
196
197
{
197
198
var task = GitClient . Push ( remote , branch ) ;
198
- return HookupHandlers ( task ) ;
199
+ return HookupHandlers ( task , false ) ;
199
200
}
200
201
201
202
public ITask Revert ( string changeset )
@@ -207,7 +208,7 @@ public ITask Revert(string changeset)
207
208
public ITask RemoteAdd ( string remote , string url )
208
209
{
209
210
var task = GitClient . RemoteAdd ( remote , url ) ;
210
- HookupHandlers ( task ) ;
211
+ task = HookupHandlers ( task , false ) ;
211
212
if ( ! platform . Environment . IsWindows )
212
213
{
213
214
task . Then ( _ => {
@@ -220,7 +221,7 @@ public ITask RemoteAdd(string remote, string url)
220
221
public ITask RemoteRemove ( string remote )
221
222
{
222
223
var task = GitClient . RemoteRemove ( remote ) ;
223
- HookupHandlers ( task ) ;
224
+ task = HookupHandlers ( task , false ) ;
224
225
if ( ! platform . Environment . IsWindows )
225
226
{
226
227
task . Then ( _ => {
@@ -233,37 +234,37 @@ public ITask RemoteRemove(string remote)
233
234
public ITask RemoteChange ( string remote , string url )
234
235
{
235
236
var task = GitClient . RemoteChange ( remote , url ) ;
236
- return HookupHandlers ( task ) ;
237
+ return HookupHandlers ( task , false ) ;
237
238
}
238
239
239
240
public ITask SwitchBranch ( string branch )
240
241
{
241
242
var task = GitClient . SwitchBranch ( branch ) ;
242
- return HookupHandlers ( task , true ) ;
243
+ return HookupHandlers ( task ) ;
243
244
}
244
245
245
246
public ITask DeleteBranch ( string branch , bool deleteUnmerged = false )
246
247
{
247
248
var task = GitClient . DeleteBranch ( branch , deleteUnmerged ) ;
248
- return HookupHandlers ( task ) ;
249
+ return HookupHandlers ( task , false ) ;
249
250
}
250
251
251
252
public ITask CreateBranch ( string branch , string baseBranch )
252
253
{
253
254
var task = GitClient . CreateBranch ( branch , baseBranch ) ;
254
- return HookupHandlers ( task ) ;
255
+ return HookupHandlers ( task , false ) ;
255
256
}
256
257
257
258
public ITask LockFile ( string file )
258
259
{
259
260
var task = GitClient . Lock ( file ) ;
260
- return HookupHandlers ( task ) ;
261
+ return HookupHandlers ( task , false ) ;
261
262
}
262
263
263
264
public ITask UnlockFile ( string file , bool force )
264
265
{
265
266
var task = GitClient . Unlock ( file , force ) ;
266
- return HookupHandlers ( task ) ;
267
+ return HookupHandlers ( task , false ) ;
267
268
}
268
269
269
270
public void UpdateGitLog ( )
@@ -279,17 +280,42 @@ public void UpdateGitLog()
279
280
} ) . Start ( ) ;
280
281
}
281
282
282
- public void UpdateGitStatus ( )
283
+ private ITask < T > HookupHandlers < T > ( ITask < T > task , bool disableWatcher = true , bool toggleBusyFlag = true )
283
284
{
284
- var task = GitClient . Status ( ) ;
285
- HookupHandlers ( task ) ;
286
- task . Then ( ( success , status ) =>
287
- {
288
- if ( success )
289
- {
290
- GitStatusUpdated ? . Invoke ( status ) ;
291
- }
292
- } ) . Start ( ) ;
285
+ return new ActionTask ( CancellationToken . None , ( ) => {
286
+ if ( toggleBusyFlag )
287
+ {
288
+ Logger . Trace ( "Starting Operation - Setting Busy Flag" ) ;
289
+ IsBusy = true ;
290
+ }
291
+
292
+ if ( disableWatcher )
293
+ {
294
+ Logger . Trace ( "Starting Operation - Disable Watcher" ) ;
295
+ watcher . Stop ( ) ;
296
+ }
297
+ } )
298
+ . Then ( task )
299
+ . Finally ( ( success , exception , result ) => {
300
+ if ( disableWatcher )
301
+ {
302
+ Logger . Trace ( "Ended Operation - Enable Watcher" ) ;
303
+ watcher . Start ( ) ;
304
+ }
305
+
306
+ if ( toggleBusyFlag )
307
+ {
308
+ Logger . Trace ( "Ended Operation - Clearing Busy Flag" ) ;
309
+ IsBusy = false ;
310
+ }
311
+
312
+ if ( success )
313
+ {
314
+ return result ;
315
+ }
316
+
317
+ throw exception ;
318
+ } ) ;
293
319
}
294
320
295
321
public void UpdateLocks ( )
0 commit comments