32
32
33
33
@implementation GTBranch
34
34
35
- - (NSString *)description {
36
- return [NSString stringWithFormat: @" <%@ : %p > name: %@ , shortName: %@ , sha: %@ , remoteName: %@ , repository: %@ " , NSStringFromClass ([self class ]), self , self .name, self .shortName, self .SHA, self .remoteName, self .repository];
37
- }
38
-
39
- - (BOOL )isEqual : (GTBranch *)otherBranch {
40
- if (otherBranch == self) return YES ;
41
- if (![otherBranch isKindOfClass: self .class]) return NO ;
42
-
43
- return [self .name isEqual: otherBranch.name] && [self .SHA isEqual: otherBranch.SHA];
44
- }
45
-
46
- - (NSUInteger )hash {
47
- return self.name .hash ^ self.SHA .hash ;
48
- }
49
-
50
-
51
- #pragma mark API
35
+ #pragma mark -
36
+ #pragma mark Class methods
52
37
53
38
+ (NSString *)localNamePrefix {
54
39
return @" refs/heads/" ;
@@ -58,6 +43,9 @@ + (NSString *)remoteNamePrefix {
58
43
return @" refs/remotes/" ;
59
44
}
60
45
46
+ #pragma mark -
47
+ #pragma mark Lifecycle
48
+
61
49
+ (id )branchWithName : (NSString *)branchName repository : (GTRepository *)repo error : (NSError **)error {
62
50
return [[self alloc ] initWithName: branchName repository: repo error: error];
63
51
}
@@ -89,6 +77,27 @@ - (id)initWithReference:(GTReference *)ref repository:(GTRepository *)repo {
89
77
return self;
90
78
}
91
79
80
+ #pragma mark -
81
+ #pragma mark NSObject
82
+
83
+ - (NSString *)description {
84
+ return [NSString stringWithFormat: @" <%@ : %p > name: %@ , shortName: %@ , sha: %@ , remoteName: %@ , repository: %@ " , NSStringFromClass ([self class ]), self , self .name, self .shortName, self .SHA, self .remoteName, self .repository];
85
+ }
86
+
87
+ - (BOOL )isEqual : (GTBranch *)otherBranch {
88
+ if (otherBranch == self) return YES ;
89
+ if (![otherBranch isKindOfClass: self .class]) return NO ;
90
+
91
+ return [self .name isEqual: otherBranch.name] && [self .SHA isEqual: otherBranch.SHA];
92
+ }
93
+
94
+ - (NSUInteger )hash {
95
+ return self.name .hash ^ self.SHA .hash ;
96
+ }
97
+
98
+ #pragma mark -
99
+ #pragma mark Properties
100
+
92
101
- (NSString *)name {
93
102
return self.reference .name ;
94
103
}
@@ -109,10 +118,6 @@ - (NSString *)shortName {
109
118
return @(name);
110
119
}
111
120
112
- - (NSString *)SHA {
113
- return self.reference .targetSHA ;
114
- }
115
-
116
121
- (NSString *)remoteName {
117
122
if (self.branchType == GTBranchTypeLocal) return nil ;
118
123
@@ -127,21 +132,8 @@ - (NSString *)remoteName {
127
132
return [[NSString alloc ] initWithBytes: name length: end - name encoding: NSUTF8StringEncoding];
128
133
}
129
134
130
- - (GTCommit *)targetCommitAndReturnError : (NSError **)error {
131
- if (self.SHA == nil ) {
132
- if (error != NULL ) *error = GTReference.invalidReferenceError ;
133
- return nil ;
134
- }
135
-
136
- return [self .repository lookupObjectBySHA: self .SHA objectType: GTObjectTypeCommit error: error];
137
- }
138
-
139
- - (NSUInteger )numberOfCommitsWithError : (NSError **)error {
140
- GTEnumerator *enumerator = [[GTEnumerator alloc ] initWithRepository: self .repository error: error];
141
- if (enumerator == nil ) return NSNotFound ;
142
-
143
- if (![enumerator pushSHA: self .SHA error: error]) return NSNotFound ;
144
- return [enumerator countRemainingObjects: error];
135
+ - (NSString *)SHA {
136
+ return self.reference .targetSHA ;
145
137
}
146
138
147
139
- (GTBranchType)branchType {
@@ -152,24 +144,16 @@ - (GTBranchType)branchType {
152
144
}
153
145
}
154
146
155
- - (NSArray *)uniqueCommitsRelativeToBranch : (GTBranch *)otherBranch error : (NSError **)error {
156
- NSParameterAssert (otherBranch != nil );
157
-
158
- GTCommit *mergeBase = [self .repository mergeBaseBetweenFirstOID: self .reference.OID secondOID: otherBranch.reference.OID error: error];
159
- if (mergeBase == nil ) return nil ;
160
-
161
- GTEnumerator *enumerator = [[GTEnumerator alloc ] initWithRepository: self .repository error: error];
162
- if (enumerator == nil ) return nil ;
163
-
164
- [enumerator resetWithOptions: GTEnumeratorOptionsTimeSort];
165
-
166
- BOOL success = [enumerator pushSHA: self .SHA error: error];
167
- if (!success) return nil ;
147
+ #pragma mark -
148
+ #pragma mark API
168
149
169
- success = [enumerator hideSHA: mergeBase.SHA error: error];
170
- if (!success) return nil ;
150
+ - (GTCommit *)targetCommitAndReturnError : (NSError **)error {
151
+ if (self.SHA == nil ) {
152
+ if (error != NULL ) *error = GTReference.invalidReferenceError ;
153
+ return nil ;
154
+ }
171
155
172
- return [enumerator allObjectsWithError : error];
156
+ return [self .repository lookupObjectBySHA: self .SHA objectType: GTObjectTypeCommit error : error];
173
157
}
174
158
175
159
- (BOOL )deleteWithError : (NSError **)error {
@@ -182,6 +166,13 @@ - (BOOL)deleteWithError:(NSError **)error {
182
166
return YES ;
183
167
}
184
168
169
+ - (GTBranch *)reloadedBranchWithError : (NSError **)error {
170
+ GTReference *reloadedRef = [self .reference reloadedReferenceWithError: error];
171
+ if (reloadedRef == nil ) return nil ;
172
+
173
+ return [[self .class alloc ] initWithReference: reloadedRef repository: self .repository];
174
+ }
175
+
185
176
- (GTBranch *)trackingBranchWithError : (NSError **)error success : (BOOL *)success {
186
177
if (self.branchType == GTBranchTypeRemote) {
187
178
if (success != NULL ) *success = YES ;
@@ -214,11 +205,32 @@ - (GTBranch *)trackingBranchWithError:(NSError **)error success:(BOOL *)success
214
205
return [[self class ] branchWithReference: [[GTReference alloc ] initWithGitReference: trackingRef repository: self .repository] repository: self .repository];
215
206
}
216
207
217
- - (GTBranch *) reloadedBranchWithError : (NSError **)error {
218
- GTReference *reloadedRef = [self .reference reloadedReferenceWithError : error];
219
- if (reloadedRef == nil ) return nil ;
208
+ - (NSUInteger ) numberOfCommitsWithError : (NSError **)error {
209
+ GTEnumerator *enumerator = [[GTEnumerator alloc ] initWithRepository: self .repository error : error];
210
+ if (enumerator == nil ) return NSNotFound ;
220
211
221
- return [[self .class alloc ] initWithReference: reloadedRef repository: self .repository];
212
+ if (![enumerator pushSHA: self .SHA error: error]) return NSNotFound ;
213
+ return [enumerator countRemainingObjects: error];
214
+ }
215
+
216
+ - (NSArray *)uniqueCommitsRelativeToBranch : (GTBranch *)otherBranch error : (NSError **)error {
217
+ NSParameterAssert (otherBranch != nil );
218
+
219
+ GTCommit *mergeBase = [self .repository mergeBaseBetweenFirstOID: self .reference.OID secondOID: otherBranch.reference.OID error: error];
220
+ if (mergeBase == nil ) return nil ;
221
+
222
+ GTEnumerator *enumerator = [[GTEnumerator alloc ] initWithRepository: self .repository error: error];
223
+ if (enumerator == nil ) return nil ;
224
+
225
+ [enumerator resetWithOptions: GTEnumeratorOptionsTimeSort];
226
+
227
+ BOOL success = [enumerator pushSHA: self .SHA error: error];
228
+ if (!success) return nil ;
229
+
230
+ success = [enumerator hideSHA: mergeBase.SHA error: error];
231
+ if (!success) return nil ;
232
+
233
+ return [enumerator allObjectsWithError: error];
222
234
}
223
235
224
236
- (BOOL )calculateAhead : (size_t *)ahead behind : (size_t *)behind relativeTo : (GTBranch *)branch error : (NSError **)error {
0 commit comments