forked from dgrijalva/gitx
-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathPBRenameSheet.m
135 lines (109 loc) · 4.45 KB
/
PBRenameSheet.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//
// PBRenameSheet.m
// GitX
//
// Created by Robert Kyriakis on 18.12.2011.
// Copyright 2011 Robert Kyriakis. All rights reserved.
//
#import "PBRenameSheet.h"
#import "PBGitWindowController.h"
@interface PBRenameSheet ()
- (void) showRenameSheetAtRef:(PBGitRef*)ref inRepository:(PBGitRepository *)repo;
@property (strong) PBGitRepository *repository;
@property (strong) PBGitRef *refToRename;
@end
@implementation PBRenameSheet
#pragma mark - Private Properties
@synthesize repository;
@synthesize refToRename;
static PBRenameSheet *sheet;
+ (void) showRenameSheetAtRef:(PBGitRef*)ref inRepository:(PBGitRepository *)repo
{
if(!sheet){
sheet = [[self alloc] initWithWindowNibName:@"PBRenameSheet"];
}
[sheet showRenameSheetAtRef:ref inRepository:repo];
}
- (void) showRenameSheetAtRef:(PBGitRef*)ref inRepository:(PBGitRepository *)repo
{
self.repository = repo;
self.refToRename = ref;
[self window];
[newRefNameTextField setStringValue:@""];
[[newRefNameTextField window] makeFirstResponder:newRefNameTextField];
[errorMessageTextField setStringValue:@""];
[oldRefNameTextField setStringValue:[NSString stringWithFormat:@"Rename %@ %@",[ref refishType],[ref shortName]]];
[NSApp beginSheet:[self window]
modalForWindow:[self.repository.windowController window]
modalDelegate:self
didEndSelector:nil
contextInfo:nil];
}
#pragma mark IBActions
- (IBAction)renameRef:(id)sender
{
PBGitRef *refWithNewName;
[errorMessageTextField setStringValue:@""];
[errorMessageTextField setHidden:YES];
if ([refToRename refishType] == kGitXTagType)
{
refWithNewName = [PBGitRef refFromString:[kGitXTagRefPrefix stringByAppendingString:[newRefNameTextField stringValue]]];
}
else if ([refToRename refishType] == kGitXBranchType)
{
refWithNewName = [PBGitRef refFromString:[kGitXBranchRefPrefix stringByAppendingString:[newRefNameTextField stringValue]]];
}
else if ([refToRename refishType] == kGitXRemoteBranchType)
{
NSMutableString *refPath = [NSMutableString new];
[refPath appendString:kGitXRemoteRefPrefix];
[refPath appendString:[refToRename remoteName]];
[refPath appendString:[NSString stringWithFormat:@"/%@",[newRefNameTextField stringValue]]];
refWithNewName = [PBGitRef refFromString:refPath];
}
else if ([refToRename refishType] == kGitXRemoteType)
{
refWithNewName = [PBGitRef refFromString:[kGitXRemoteRefPrefix stringByAppendingString:[newRefNameTextField stringValue]]];
}
if (![self.repository checkRefFormat:[refWithNewName ref]]) {
[errorMessageTextField setStringValue:@"Invalid name!"];
[errorMessageTextField setHidden:NO];
return;
}
NSString *refExistsReturnMessage;
if([self.repository refExists:refWithNewName checkOnRemotesWithoutBranches:NO resultMessage:&refExistsReturnMessage])
{
NSError *error = [NSError errorWithDomain:PBGitRepositoryErrorDomain
code:0
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:
refExistsReturnMessage, NSLocalizedDescriptionKey,
[NSString stringWithFormat:@"Select other name for %@ %@.",[refToRename refishType],[refToRename shortName]], NSLocalizedRecoverySuggestionErrorKey,
nil]
];
[[NSAlert alertWithError:error]runModal];
return;
}
else
{
if (refExistsReturnMessage)
{
int returnButton = [[NSAlert alertWithMessageText:refExistsReturnMessage
defaultButton:@"Yes"
alternateButton:@"No"
otherButton:nil
informativeTextWithFormat:@"Still want to rename the %@ %@?",[refToRename refishType],[refToRename shortName]] runModal];
if (returnButton == NSAlertAlternateReturn)
{
return;
}
}
}
[self cancelRenameSheet:self];
[self.repository renameRef:self.refToRename withNewName:[newRefNameTextField stringValue]];
}
- (IBAction)cancelRenameSheet:(id)sender
{
[NSApp endSheet:[self window]];
[[self window] orderOut:self];
}
@end