27
27
#import " PBGitStash.h"
28
28
#import " PBGitSubmodule.h"
29
29
30
+ #define kDialogDeleteRemoteBranch @" Delete Remote Branch"
31
+ #define kDialogDeleteRemoteTag @" Delete Remote Tag"
32
+
33
+
30
34
NSString * PBGitRepositoryErrorDomain = @" GitXErrorDomain" ;
31
35
32
36
@interface PBGitRepository ()
37
+ - (void )checkDeleteRemoteBranch : (PBGitRef *)ref ;
33
38
@end
34
39
35
40
dispatch_queue_t PBGetWorkQueue () {
@@ -1277,6 +1282,56 @@ - (BOOL) deleteRemote:(PBGitRef *)ref
1277
1282
}
1278
1283
1279
1284
1285
+ - (void )checkDeleteRemoteBranch : (PBGitRef *)ref
1286
+ {
1287
+ if (!ref || ([ref refishType ] != kGitXRemoteBranchType ) )
1288
+ {
1289
+ return ;
1290
+ }
1291
+
1292
+ if (![self isRemoteConnected: ref])
1293
+ {
1294
+ [[NSAlert alertWithMessageText: [NSString stringWithFormat: @" Remote %@ is not conneted!" ,[ref remoteName ]]
1295
+ defaultButton: @" OK"
1296
+ alternateButton: nil
1297
+ otherButton: nil
1298
+ informativeTextWithFormat: [NSString stringWithFormat: @" Can't remove the branch %@ from the remote %@ " ,[ref remoteBranchName ],[ref remoteName ]]]
1299
+ runModal ];
1300
+ return ;
1301
+ }
1302
+
1303
+ if ([PBGitDefaults isDialogWarningSuppressedForDialog: kDialogDeleteRemoteBranch ]) {
1304
+ [self deleteRemoteBranch: ref];
1305
+ }
1306
+
1307
+ NSAlert *alert = [NSAlert alertWithMessageText: [NSString stringWithFormat: @" Delete remotebranch %@ also on remote %@ ?" ,[ref remoteBranchName ],[ref remoteName ] ]
1308
+ defaultButton: @" Delete"
1309
+ alternateButton: @" Cancel"
1310
+ otherButton: nil
1311
+ informativeTextWithFormat: @" Are you sure you want to remove the remotebranch %@ also on remote %@ ?" ,[ref remoteBranchName ],[ref remoteName ]];
1312
+ [alert setShowsSuppressionButton: YES ];
1313
+
1314
+ [alert beginSheetModalForWindow: [[self windowController ] window ]
1315
+ modalDelegate: self
1316
+ didEndSelector: @selector (checkDeleteRemoteBranchSheetDidEnd:returnCode:contextInfo: )
1317
+ contextInfo: Nil ];
1318
+ actRef = ref;
1319
+ }
1320
+
1321
+
1322
+ - (void )checkDeleteRemoteBranchSheetDidEnd : (NSAlert *)sheet returnCode : (int )returnCode contextInfo : (void *)contextInfo
1323
+ {
1324
+ [[sheet window ] orderOut: nil ];
1325
+
1326
+ if ([[sheet suppressionButton ] state ] == NSOnState )
1327
+ [PBGitDefaults suppressDialogWarningForDialog: kDialogDeleteRemoteBranch ];
1328
+
1329
+ if (returnCode == NSAlertDefaultReturn ) {
1330
+ [self deleteRemoteBranch: actRef];
1331
+ }
1332
+ }
1333
+
1334
+
1280
1335
- (BOOL ) deleteRemoteBranch : (PBGitRef *)ref
1281
1336
{
1282
1337
if (!ref || ([ref refishType ] != kGitXRemoteBranchType ) )
@@ -1293,6 +1348,8 @@ - (BOOL) deleteRemoteBranch:(PBGitRef *)ref
1293
1348
return YES ;
1294
1349
}
1295
1350
1351
+
1352
+
1296
1353
- (BOOL ) deleteRemoteTag : (PBGitRef *)ref
1297
1354
{
1298
1355
if (!ref || ([ref refishType ] != kGitXTagType ) || ![self hasRemotes ])
@@ -1340,14 +1397,6 @@ - (BOOL) deleteRef:(PBGitRef *)ref
1340
1397
{
1341
1398
return [self deleteRemote: ref];
1342
1399
}
1343
- else if ([ref refishType ] == kGitXRemoteBranchType )
1344
- {
1345
- [self deleteRemoteBranch: ref];
1346
- }
1347
- else if ([ref refishType ] == kGitXTagType )
1348
- {
1349
- [self deleteRemoteTag: ref];
1350
- }
1351
1400
1352
1401
int retValue = 1 ;
1353
1402
NSArray *arguments = [NSArray arrayWithObjects: @" update-ref" , @" -d" , [ref ref ], nil ];
@@ -1362,6 +1411,15 @@ - (BOOL) deleteRef:(PBGitRef *)ref
1362
1411
PBGitCommit *commit = [self commitForRef: ref];
1363
1412
[commit removeRef: ref];
1364
1413
1414
+ if ([ref refishType ] == kGitXRemoteBranchType )
1415
+ {
1416
+ [self checkDeleteRemoteBranch: ref];
1417
+ }
1418
+ else if ([ref refishType ] == kGitXTagType )
1419
+ {
1420
+ [self deleteRemoteTag: ref];
1421
+ }
1422
+
1365
1423
[self reloadRefs ];
1366
1424
return YES ;
1367
1425
}
0 commit comments