149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
void (*xEnd)(MergeBuilder*);
void (*xDestroy)(MergeBuilder*);
const char *zPivot; /* Label or name for the pivot */
const char *zV1; /* Label or name for the V1 file */
const char *zV2; /* Label or name for the V2 file */
const char *zOut; /* Label or name for the output */
Blob *pPivot; /* The common ancestor */
Blob *pV1; /* First variant */
Blob *pV2; /* Second variant */
Blob *pOut; /* Write merge results here */
int useCrLf; /* Use CRLF line endings */
int nContext; /* Size of unchanged line boundaries */
unsigned int mxPivot; /* Number of lines in the pivot */
unsigned int mxV1; /* Number of lines in V1 */
unsigned int mxV2; /* Number of lines in V2 */
unsigned int lnPivot; /* Lines read from pivot */
|
|
|
|
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
void (*xEnd)(MergeBuilder*);
void (*xDestroy)(MergeBuilder*);
const char *zPivot; /* Label or name for the pivot */
const char *zV1; /* Label or name for the V1 file */
const char *zV2; /* Label or name for the V2 file */
const char *zOut; /* Label or name for the output */
Blob *pPivot; /* The common ancestor */
Blob *pV1; /* First variant (local copy) */
Blob *pV2; /* Second variant (merged in) */
Blob *pOut; /* Write merge results here */
int useCrLf; /* Use CRLF line endings */
int nContext; /* Size of unchanged line boundaries */
unsigned int mxPivot; /* Number of lines in the pivot */
unsigned int mxV1; /* Number of lines in V1 */
unsigned int mxV2; /* Number of lines in V2 */
unsigned int lnPivot; /* Lines read from pivot */
|
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
|
}
static void tokenConflict(
MergeBuilder *p,
unsigned int nPivot,
unsigned int nV1,
unsigned int nV2
){
blob_append(p->pOut, p->pV1->aData+p->pV1->iCursor, nV1);
p->pPivot->iCursor += nPivot;
p->pV1->iCursor += nV1;
p->pV2->iCursor += nV2;
}
static void mergebuilder_init_token(MergeBuilder *p){
mergebuilder_init(p);
p->xSame = tokenSame;
|
>
|
|
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
|
}
static void tokenConflict(
MergeBuilder *p,
unsigned int nPivot,
unsigned int nV1,
unsigned int nV2
){
/* For a token-merge conflict, use the text from the merge-in */
blob_append(p->pOut, p->pV2->aData+p->pV2->iCursor, nV2);
p->pPivot->iCursor += nPivot;
p->pV1->iCursor += nV1;
p->pV2->iCursor += nV2;
}
static void mergebuilder_init_token(MergeBuilder *p){
mergebuilder_init(p);
p->xSame = tokenSame;
|
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
|
merge_try_to_resolve_conflict(p, nPivot, nV1, nV2, &res);
nRes = blob_linecount(&res);
append_merge_mark(p->pOut, 0, p->lnV1+1, p->useCrLf);
blob_copy_lines(p->pOut, p->pV1, nV1); p->lnV1 += nV1;
if( nRes>0 ){
append_merge_mark(p->pOut, 1, 10000+nRes, p->useCrLf);
blob_copy_lines(p->pOut, &res, nRes);
}
append_merge_mark(p->pOut, 2, p->lnPivot+1, p->useCrLf);
blob_copy_lines(p->pOut, p->pPivot, nPivot); p->lnPivot += nPivot;
append_merge_mark(p->pOut, 3, p->lnV2+1, p->useCrLf);
|
|
|
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
|
merge_try_to_resolve_conflict(p, nPivot, nV1, nV2, &res);
nRes = blob_linecount(&res);
append_merge_mark(p->pOut, 0, p->lnV1+1, p->useCrLf);
blob_copy_lines(p->pOut, p->pV1, nV1); p->lnV1 += nV1;
if( nRes>0 ){
append_merge_mark(p->pOut, 1, 0, p->useCrLf);
blob_copy_lines(p->pOut, &res, nRes);
}
append_merge_mark(p->pOut, 2, p->lnPivot+1, p->useCrLf);
blob_copy_lines(p->pOut, p->pPivot, nPivot); p->lnPivot += nPivot;
append_merge_mark(p->pOut, 3, p->lnV2+1, p->useCrLf);
|
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
|
if( i<nRes ){
blob_append_char(p->pOut, ' ');
tclLineOfText(p->pOut, &res, 'X');
blob_append_char(p->pOut, '\n');
}else{
blob_append(p->pOut, " .\n", 3);
}
if( i==nRes-1 ){
blob_appendf(p->pOut, "\"S0 0 0 %d\" . . .\n", nPivot+nV1+3);
}
}
blob_reset(&res);
p->lnPivot += nPivot;
p->lnV1 += nV1;
p->lnV2 += nV2;
|
|
|
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
|
if( i<nRes ){
blob_append_char(p->pOut, ' ');
tclLineOfText(p->pOut, &res, 'X');
blob_append_char(p->pOut, '\n');
}else{
blob_append(p->pOut, " .\n", 3);
}
if( i==mx-1 ){
blob_appendf(p->pOut, "\"S0 0 0 %d\" . . .\n", nPivot+nV1+3);
}
}
blob_reset(&res);
p->lnPivot += nPivot;
p->lnV1 += nV1;
p->lnV2 += nV2;
|