12
12
@implementation PBGitRevSpecifier
13
13
14
14
@synthesize parameters, description, workingDirectory;
15
+ @synthesize isSimpleRef;
15
16
16
- - (id ) initWithParameters : (NSArray *) params
17
+
18
+ // internal designated init
19
+ - (id ) initWithParameters : (NSArray *)params description : (NSString *)descrip
17
20
{
18
21
parameters = params;
19
- description = nil ;
22
+ description = descrip;
23
+
24
+ if (([parameters count ] > 1 ) || ([parameters count ] == 0 ))
25
+ isSimpleRef = NO ;
26
+ else {
27
+ NSString *param = [parameters objectAtIndex: 0 ];
28
+ if ([param hasPrefix: @" -" ] ||
29
+ [param rangeOfCharacterFromSet: [NSCharacterSet characterSetWithCharactersInString: @" ^@{}~:" ]].location != NSNotFound ||
30
+ [param rangeOfString: @" .." ].location != NSNotFound )
31
+ isSimpleRef = NO ;
32
+ else
33
+ isSimpleRef = YES ;
34
+ }
35
+
20
36
return self;
21
37
}
22
38
23
- - (id ) initWithRef : (PBGitRef*) ref
39
+ - (id ) initWithParameters : ( NSArray *) params
24
40
{
25
- parameters = [NSArray arrayWithObject: ref.ref];
26
- description = ref.shortName ;
41
+ [self initWithParameters: params description: nil ];
27
42
return self;
28
43
}
29
44
30
- - (id ) initWithCoder : ( NSCoder *)coder
45
+ - (id ) initWithRef : (PBGitRef *)ref
31
46
{
32
- parameters = [coder decodeObjectForKey: @" Parameters" ];
33
- description = [coder decodeObjectForKey: @" Description" ];
47
+ [self initWithParameters: [NSArray arrayWithObject: ref.ref] description: ref.shortName];
34
48
return self;
35
49
}
36
50
37
- + (PBGitRevSpecifier *) allBranchesRevSpec
51
+ - ( id ) initWithCoder : ( NSCoder *) coder
38
52
{
39
- id revspec = [[PBGitRevSpecifier alloc ] initWithParameters: [NSArray arrayWithObject: @" --all" ]];
40
- [revspec setDescription: @" All branches" ];
41
- return revspec;
53
+ [self initWithParameters: [coder decodeObjectForKey: @" Parameters" ] description: [coder decodeObjectForKey: @" Description" ]];
54
+ return self;
42
55
}
43
56
44
- + (PBGitRevSpecifier *)localBranchesRevSpec
57
+ + (PBGitRevSpecifier *)allBranchesRevSpec
45
58
{
46
- id revspec = [[PBGitRevSpecifier alloc ] initWithParameters: [NSArray arrayWithObject: @" --branches" ]];
47
- [revspec setDescription: @" Local branches" ];
48
- return revspec;
59
+ return [[PBGitRevSpecifier alloc ] initWithParameters: [NSArray arrayWithObject: @" --all" ] description: @" All branches" ];
49
60
}
50
61
51
- - ( BOOL ) isSimpleRef
62
+ + (PBGitRevSpecifier *) localBranchesRevSpec
52
63
{
53
- if ([parameters count ] > 1 )
54
- return NO ;
55
-
56
- NSString *param = [parameters objectAtIndex: 0 ];
57
- if ([param hasPrefix: @" -" ] ||
58
- [param rangeOfCharacterFromSet: [NSCharacterSet characterSetWithCharactersInString: @" ^@{}~:" ]].location != NSNotFound ||
59
- [param rangeOfString: @" .." ].location != NSNotFound )
60
- return NO ;
61
-
62
- return YES ;
64
+ return [[PBGitRevSpecifier alloc ] initWithParameters: [NSArray arrayWithObject: @" --branches" ] description: @" Local branches" ];
63
65
}
64
66
65
67
- (NSString *) simpleRef
@@ -77,12 +79,12 @@ - (PBGitRef *) ref
77
79
return [PBGitRef refFromString: [self simpleRef ]];
78
80
}
79
81
80
- - (NSString *) description
82
+ - (NSString *) description
81
83
{
82
- if (description)
83
- return description;
84
-
85
- return [parameters componentsJoinedByString: @" " ] ;
84
+ if (! description)
85
+ description = [parameters componentsJoinedByString: @" " ] ;
86
+
87
+ return description ;
86
88
}
87
89
88
90
- (NSString *) title
@@ -122,32 +124,49 @@ - (BOOL) hasLeftRight
122
124
return YES ;
123
125
return NO ;
124
126
}
125
-
126
- - (BOOL ) isEqualTo : (PBGitRevSpecifier*) other
127
+
128
+ - (BOOL ) isEqual : (PBGitRevSpecifier *) other
127
129
{
128
130
if ([self isSimpleRef ] ^ [other isSimpleRef ])
129
131
return NO ;
130
132
131
133
if ([self isSimpleRef ])
132
- return [[[self parameters ] objectAtIndex: 0 ] isEqualToString: [other.parameters objectAtIndex: 0 ]];
134
+ return [[[self parameters ] objectAtIndex: 0 ] isEqualToString: [other.parameters objectAtIndex: 0 ]];
133
135
134
- return ([[parameters componentsJoinedByString: @" " ] isEqualToString: [other.parameters componentsJoinedByString: @" " ]] &&
135
- (!description || [description isEqualToString: other.description]));
136
+ return [self .description isEqualToString: other.description];
137
+ }
138
+
139
+ - (NSUInteger ) hash
140
+ {
141
+ if ([self isSimpleRef ])
142
+ return [[[self parameters ] objectAtIndex: 0 ] hash ];
143
+
144
+ return [self .description hash ];
136
145
}
137
146
138
147
- (BOOL ) isAllBranchesRev
139
148
{
140
- return [self isEqualTo : [PBGitRevSpecifier allBranchesRevSpec ]];
149
+ return [self isEqual : [PBGitRevSpecifier allBranchesRevSpec ]];
141
150
}
142
151
143
152
- (BOOL ) isLocalBranchesRev
144
153
{
145
- return [self isEqualTo : [PBGitRevSpecifier localBranchesRevSpec ]];
154
+ return [self isEqual : [PBGitRevSpecifier localBranchesRevSpec ]];
146
155
}
147
156
148
157
- (void ) encodeWithCoder : (NSCoder *)coder
149
158
{
150
159
[coder encodeObject: description forKey: @" Description" ];
151
160
[coder encodeObject: parameters forKey: @" Parameters" ];
152
161
}
162
+
163
+ - (id )copyWithZone : (NSZone *)zone
164
+ {
165
+ PBGitRevSpecifier *copy = [[[self class ] allocWithZone: zone] initWithParameters: [self .parameters copy ]];
166
+ copy.description = [self .description copy ];
167
+ copy.workingDirectory = [self .workingDirectory copy ];
168
+
169
+ return copy;
170
+ }
171
+
153
172
@end
0 commit comments