@@ -129,6 +129,69 @@ - (BOOL)mergeAnnotatedCommits:(NSArray <GTAnnotatedCommit *> *)annotatedCommits
129
129
return YES ;
130
130
}
131
131
132
+ - (BOOL )finalizeMerge : (NSError **)error {
133
+ GTRepositoryStateType state;
134
+ BOOL success = [self calculateState: &state withError: error];
135
+ if (!success) {
136
+ return NO ;
137
+ }
138
+
139
+ if (state != GTRepositoryStateMerge) {
140
+ if (error) *error = [NSError git_errorFor: GIT_EINVALID description: @" Repository is not in a merge state" ];
141
+ return NO ;
142
+ }
143
+
144
+ GTIndex *index = [self indexWithError: error];
145
+ if (index == nil ) {
146
+ return NO ;
147
+ }
148
+
149
+ if (index .hasConflicts ) {
150
+ if (error) *error = [NSError git_errorFor: GIT_ECONFLICT description: @" Index has unmerged changes" ];
151
+ return NO ;
152
+ }
153
+
154
+ GTTree *mergedTree = [index writeTree: error];
155
+ if (mergedTree == nil ) {
156
+ return NO ;
157
+ }
158
+
159
+ GTBranch *localBranch = [self currentBranchWithError: error];
160
+ if (localBranch == nil ) {
161
+ return NO ;
162
+ }
163
+
164
+ GTCommit *localCommit = [localBranch targetCommitWithError: error];
165
+ if (!localCommit) {
166
+ return NO ;
167
+ }
168
+
169
+ // Build the commits' parents
170
+ NSMutableArray *parents = [NSMutableArray array ];
171
+ [parents addObject: localCommit];
172
+
173
+ NSArray *mergeHeads = [self mergeHeadEntriesWithError: error];
174
+ if (mergeHeads.count == 0 ) {
175
+ return NO ;
176
+ }
177
+ for (GTOID *oid in mergeHeads) {
178
+ NSError *lookupError = nil ;
179
+ GTCommit *commit = [self lookUpObjectByOID: oid objectType: GTObjectTypeCommit error: &lookupError];
180
+ if (commit == nil ) {
181
+ if (error) {
182
+ *error = [NSError git_errorFor: GIT_ERROR
183
+ description: @" Failed to lookup one of the merge heads"
184
+ userInfo: @{ NSUnderlyingErrorKey : lookupError }
185
+ failureReason: nil ];
186
+ }
187
+ return NO ;
188
+ }
189
+ [parents addObject: commit];
190
+ }
191
+
192
+ return [self finalizeMergeOfBranch: localBranch mergedTree: mergedTree parents: parents error: error];
193
+ }
194
+
132
195
- (BOOL )finalizeMergeOfBranch : (GTBranch *)localBranch mergedTree : (GTTree *)mergedTree parents : (NSArray <GTCommit *> *)parents error : (NSError **)error {
133
196
134
197
// Load the message to use
0 commit comments