@@ -81,10 +81,11 @@
81 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Text of boundary markers for merge conflicts.
82 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char *const mergeMarker[] = {
84 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*123456789 123456789 123456789 123456789 123456789 123456789 123456789*/
85 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"<<<<<<< BEGIN MERGE CONFLICT: local copy shown first <<<<<<<<<<<<",
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "####### SUGGESTED CONFLICT RESOLUTION follows ###################",
86 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"||||||| COMMON ANCESTOR content follows |||||||||||||||||||||||||",
87 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"======= MERGED IN content follows ===============================",
88 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
">>>>>>> END MERGE CONFLICT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
89 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
90 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -150,12 +151,12 @@
150 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPivot; /* Label or name for the pivot */
151 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zV1; /* Label or name for the V1 file */
152 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zV2; /* Label or name for the V2 file */
153 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zOut; /* Label or name for the output */
154 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pPivot; /* The common ancestor */
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob *pV1; /* First variant */
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob *pV2; /* Second variant */
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *pV1; /* First variant (local copy) */
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *pV2; /* Second variant (merged in) */
157 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pOut; /* Write merge results here */
158 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int useCrLf; /* Use CRLF line endings */
159 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nContext; /* Size of unchanged line boundaries */
160 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int mxPivot; /* Number of lines in the pivot */
161 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int mxV1; /* Number of lines in V1 */
@@ -163,10 +164,11 @@
163 164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int lnPivot; /* Lines read from pivot */
164 165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int lnV1; /* Lines read from v1 */
165 166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int lnV2; /* Lines read from v2 */
166 167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int lnOut; /* Lines written to out */
167 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nConflict; /* Number of conflicts seen */
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 diffFlags; /* Flags for difference engine */
168 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
169 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* INTERFACE */
170 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
171 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
172 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************************* Generic MergeBuilder ******************************/
@@ -261,10 +263,100 @@
261 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xChngBoth = dbgChngBoth;
262 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xConflict = dbgConflict;
263 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xEnd = dbgStartEnd;
264 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xDestroy = dbgDestroy;
265 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************************* MergeBuilderToken ********************************/
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This version of MergeBuilder actually performs a merge on file that
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are broken up into tokens instead of lines, and puts the result in pOut.
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void tokenSame(MergeBuilder *p, unsigned int N){
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(p->pOut, p->pPivot->aData+p->pPivot->iCursor, N);
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPivot->iCursor += N;
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV1->iCursor += N;
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV2->iCursor += N;
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void tokenChngV1(MergeBuilder *p, unsigned int nPivot, unsigned nV1){
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(p->pOut, p->pV1->aData+p->pV1->iCursor, nV1);
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPivot->iCursor += nPivot;
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV1->iCursor += nV1;
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV2->iCursor += nPivot;
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void tokenChngV2(MergeBuilder *p, unsigned int nPivot, unsigned nV2){
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(p->pOut, p->pV2->aData+p->pV2->iCursor, nV2);
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPivot->iCursor += nPivot;
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV1->iCursor += nPivot;
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV2->iCursor += nV2;
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void tokenChngBoth(MergeBuilder *p, unsigned int nPivot, unsigned nV){
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(p->pOut, p->pV2->aData+p->pV2->iCursor, nV);
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPivot->iCursor += nPivot;
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV1->iCursor += nV;
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV2->iCursor += nV;
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void tokenConflict(
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MergeBuilder *p,
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int nPivot,
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int nV1,
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int nV2
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* For a token-merge conflict, use the text from the merge-in */
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(p->pOut, p->pV2->aData+p->pV2->iCursor, nV2);
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pPivot->iCursor += nPivot;
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV1->iCursor += nV1;
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pV2->iCursor += nV2;
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void mergebuilder_init_token(MergeBuilder *p){
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mergebuilder_init(p);
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xSame = tokenSame;
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xChngV1 = tokenChngV1;
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xChngV2 = tokenChngV2;
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xChngBoth = tokenChngBoth;
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xConflict = tokenConflict;
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->diffFlags = DIFF_BY_TOKEN;
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Attempt to do a low-level merge on a conflict. The conflict is
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** described by the first four parameters, which are the same as the
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arguments to the xConflict method of the MergeBuilder object.
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine attempts to resolve the conflict by looking at
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** elements of the conflict region that are finer grain than complete
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** lines of text.
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The result is written into Blob pOut. pOut is initialized by this
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine.
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int merge_try_to_resolve_conflict(
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MergeBuilder *pMB, /* MergeBuilder that encounter conflict */
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int nPivot, /* Lines of conflict in the pivot */
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int nV1, /* Lines of conflict in V1 */
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int nV2, /* Lines of conflict in V2 */
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *pOut /* Write resolution text here */
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nConflict;
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MergeBuilder mb;
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob pv, v1, v2;
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mergebuilder_init_token(&mb);
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_extract_lines(pMB->pPivot, nPivot, &pv);
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_extract_lines(pMB->pV1, nV1, &v1);
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_extract_lines(pMB->pV2, nV2, &v2);
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_zero(pOut);
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mb.pPivot = &pv;
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mb.pV1 = &v1;
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mb.pV2 = &v2;
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mb.pOut = pOut;
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nConflict = merge_three_blobs(&mb);
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The pv, v1, and v2 blobs are all ephemeral and hence do not need
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be freed. */
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* mb has not allocated any resources, so we do not need to invoke
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the xDestroy method. */
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_add_final_newline(pOut);
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return nConflict;
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
266 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
267 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************************* MergeBuilderText **********************************/
268 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This version of MergeBuilder actually performs a merge on file and puts
269 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the result in pOut
270 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -305,20 +397,31 @@
305 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MergeBuilder *p,
306 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nPivot,
307 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nV1,
308 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nV2
309 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- append_merge_mark(p->pOut, 0, p->lnV1, p->useCrLf);
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRes; /* Lines in the computed conflict resolution */
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob res; /* Text of the conflict resolution */
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ merge_try_to_resolve_conflict(p, nPivot, nV1, nV2, &res);
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRes = blob_linecount(&res);
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_merge_mark(p->pOut, 0, p->lnV1+1, p->useCrLf);
311 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(p->pOut, p->pV1, nV1); p->lnV1 += nV1;
312 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- append_merge_mark(p->pOut, 1, p->lnPivot, p->useCrLf);
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRes>0 ){
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_merge_mark(p->pOut, 1, 0, p->useCrLf);
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(p->pOut, &res, nRes);
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_merge_mark(p->pOut, 2, p->lnPivot+1, p->useCrLf);
314 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(p->pOut, p->pPivot, nPivot); p->lnPivot += nPivot;
315 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- append_merge_mark(p->pOut, 2, p->lnV2, p->useCrLf);
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_merge_mark(p->pOut, 3, p->lnV2+1, p->useCrLf);
317 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(p->pOut, p->pV2, nV2); p->lnV2 += nV2;
318 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- append_merge_mark(p->pOut, 3, -1, p->useCrLf);
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ append_merge_mark(p->pOut, 4, -1, p->useCrLf);
320 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
321 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void mergebuilder_init_text(MergeBuilder *p){
322 425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mergebuilder_init(p);
323 426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xStart = txtStart;
324 427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xSame = txtSame;
@@ -338,13 +441,13 @@
338 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
339 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** . This line is omitted.
340 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** N Name of the file.
341 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** T Literal text follows that should have a \n terminator.
342 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** R Literal text follows that needs a \r\n terminator.
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** X Merge conflict. (Column 4 only)
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** X Merge conflict.
344 447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Z Literal text without a line terminator.
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** S Skipped lines in all 4 files.
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** S Skipped lines. Followed by number of lines to skip.
346 449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 1 Text is a copy of token 1
347 450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2 Use data from data-token 2
348 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 3 Use data from data-token 3
349 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
350 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -370,25 +473,24 @@
370 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
371 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
372 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
373 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
374 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Copy one line of text from pIn and append to pOut, encoded as TCL */
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void tclLineOfText(Blob *pOut, Blob *pIn){
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void tclLineOfText(Blob *pOut, Blob *pIn, char cType){
376 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, k;
377 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=pIn->iCursor; i<pIn->nUsed && pIn->aData[i]!='\n'; i++){}
378 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==pIn->nUsed ){
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, "\"Z", 2);
380 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k = i;
381 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( i>pIn->iCursor && pIn->aData[i-1]=='\r' ){
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, "\"R", 2);
383 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k = i-1;
384 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
385 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, "\"T", 2);
387 487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
k = i;
388 488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
389 489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(pOut, '"');
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(pOut, cType);
390 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tclWriteQuotedText(pOut, pIn->aData+pIn->iCursor, k-pIn->iCursor);
391 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn->iCursor = i;
392 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(pOut, '"');
393 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
394 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void tclStart(MergeBuilder *p){
@@ -411,20 +513,21 @@
411 513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i = 0;
412 514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nSkip;
413 515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
414 516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->lnPivot>=2 || p->lnV1>2 || p->lnV2>2 ){
415 517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<N && i<p->nContext ){
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
417 519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 1 1 1\n", 7);
418 520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
419 521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
420 522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSkip = N - p->nContext*2;
421 523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
422 524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSkip = N - p->nContext;
423 525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
424 526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nSkip>0 ){
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_appendf(p->pOut, "S%d . . .\n", nSkip);
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(p->pOut, "\"S%d %d %d %d\" . . .\n",
528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSkip, nSkip, nSkip, nSkip);
426 529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(0, p->pPivot, nSkip);
427 530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i += nSkip;
428 531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
429 532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
430 533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnPivot += N;
@@ -431,11 +534,11 @@
431 534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV1 += N;
432 535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV2 += N;
433 536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
434 537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->lnPivot<p->mxPivot || p->lnV1<p->mxV1 || p->lnV2<p->mxV2 ){
435 538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<N ){
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
437 540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 1 1 1\n", 7);
438 541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
439 542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
440 543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
441 544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -443,23 +546,23 @@
443 546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(0, p->pV2, N);
444 547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
445 548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void tclChngV1(MergeBuilder *p, unsigned int nPivot, unsigned int nV1){
446 549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
447 550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nPivot && i<nV1; i++){
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
449 552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, ' ');
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV1);
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV1, 'T');
451 554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 1 2\n", 5);
452 555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
453 556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<nPivot ){
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
455 558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " . 1 .\n", 7);
456 559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
457 560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
458 561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<nV1 ){
459 562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, ". ", 2);
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV1);
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV1, 'T');
461 564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " . 2\n", 5);
462 565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
463 566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
464 567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnPivot += nPivot;
465 568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV1 += nV1;
@@ -467,23 +570,23 @@
467 570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(0, p->pV2, nPivot);
468 571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
469 572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void tclChngV2(MergeBuilder *p, unsigned int nPivot, unsigned int nV2){
470 573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
471 574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nPivot && i<nV2; i++){
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
473 576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 1 ", 3);
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV2);
577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV2, 'T');
475 578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 3\n", 3);
476 579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
477 580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<nPivot ){
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
479 582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 1 . .\n", 7);
480 583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
481 584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
482 585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<nV2 ){
483 586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, ". . ", 4);
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV2);
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV2, 'T');
485 588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 3\n", 3);
486 589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
487 590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
488 591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnPivot += nPivot;
489 592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV1 += nPivot;
@@ -491,23 +594,23 @@
491 594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_copy_lines(0, p->pV1, nPivot);
492 595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
493 596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void tclChngBoth(MergeBuilder *p, unsigned int nPivot, unsigned int nV){
494 597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
495 598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nPivot && i<nV; i++){
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
497 600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, ' ');
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV1);
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV1, 'T');
499 602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 2 2\n", 5);
500 603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
501 604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<nPivot ){
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'T');
503 606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " . . .\n", 7);
504 607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
505 608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
506 609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( i<nV ){
507 610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, ". ", 2);
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV1);
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV1, 'T');
509 612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append(p->pOut, " 2 2\n", 5);
510 613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
511 614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
512 615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnPivot += nPivot;
513 616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV1 += nV;
@@ -520,32 +623,51 @@
520 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nV1,
521 624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nV2
522 625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
523 626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mx = nPivot;
524 627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRes;
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob res;
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ merge_try_to_resolve_conflict(p, nPivot, nV1, nV2, &res);
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRes = blob_linecount(&res);
525 633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nV1>mx ) mx = nV1;
526 634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nV2>mx ) mx = nV2;
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRes>mx ) mx = nRes;
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRes>0 ){
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(p->pOut, "\"S0 0 0 %d\" . . .\n", nV2+2);
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
527 639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<mx; i++){
528 640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<nPivot ){
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pPivot);
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pPivot, 'X');
530 642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
531 643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, '.');
532 644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
533 645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, ' ');
534 646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<nV1 ){
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV1);
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV1, 'X');
536 648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
537 649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, '.');
538 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
539 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, ' ');
540 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i<nV2 ){
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tclLineOfText(p->pOut, p->pV2);
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, p->pV2, 'X');
542 654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
543 655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_char(p->pOut, '.');
544 656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(p->pOut, " X\n", 3);
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<nRes ){
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(p->pOut, ' ');
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tclLineOfText(p->pOut, &res, 'X');
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_char(p->pOut, '\n');
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(p->pOut, " .\n", 3);
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==mx-1 ){
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(p->pOut, "\"S0 0 0 %d\" . . .\n", nPivot+nV1+3);
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
546 667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&res);
547 669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnPivot += nPivot;
548 670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV1 += nV1;
549 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lnV2 += nV2;
550 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
551 673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void mergebuilder_init_tcl(MergeBuilder *p){
@@ -637,10 +759,11 @@
637 759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the second integer is the number of lines of text to omit from the
638 760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pivot, and the third integer is the number of lines of text that are
639 761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inserted. The edit array ends with a triple of 0,0,0.
640 762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
641 763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_config_init(&DCfg, 0);
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DCfg.diffFlags = p->diffFlags;
642 765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aC1 = text_diff(p->pPivot, p->pV1, 0, &DCfg);
643 766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aC2 = text_diff(p->pPivot, p->pV2, 0, &DCfg);
644 767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aC1==0 || aC2==0 ){
645 768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(aC1);
646 769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(aC2);
@@ -758,11 +881,12 @@
758 881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = blob_buffer(p);
759 882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n = blob_size(p) - len + 1;
760 883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( len==(int)strlen(mergeMarker[1]) );
761 884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( len==(int)strlen(mergeMarker[2]) );
762 885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( len==(int)strlen(mergeMarker[3]) );
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( count(mergeMarker)==4 );
886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( len==(int)strlen(mergeMarker[4]) );
887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( count(mergeMarker)==5 );
764 888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<n; ){
765 889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<4; j++){
766 890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (memcmp(&z[i], mergeMarker[j], len)==0) ){
767 891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
768 892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1004,17 +1128,17 @@
1004 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1005 1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if INTERFACE
1006 1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1007 1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Flags to the 3-way merger
1008 1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define MERGE_DRYRUN 0x0001
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define MERGE_DRYRUN 0x0001
1010 1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1011 1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The MERGE_KEEP_FILES flag specifies that merge_3way() should retain
1012 1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** its temporary files on error. By default they are removed after the
1013 1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** merge, regardless of success or failure.
1014 1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define MERGE_KEEP_FILES 0x0002
1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define MERGE_KEEP_FILES 0x0002
1016 1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
1017 1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1018 1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1019 1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1020 1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is a wrapper around merge_three_blobs() with the following
1021 1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!