xdl_fill_merge_buffer(): separate out a too deeply nested function
This simply moves code around to make a separate function that prepares a single conflicted hunk with markers into the buffer. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -113,64 +113,83 @@ static int xdl_recs_copy(xdfenv_t *xe, int i, int count, int add_nl, char *dest)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int xdl_fill_merge_buffer(xdfenv_t *xe1, const char *name1,
|
static int fill_conflict_hunk(xdfenv_t *xe1, const char *name1,
|
||||||
xdfenv_t *xe2, const char *name2, xdmerge_t *m, char *dest)
|
xdfenv_t *xe2, const char *name2,
|
||||||
|
int size, int i,
|
||||||
|
xdmerge_t *m, char *dest)
|
||||||
{
|
{
|
||||||
const int marker_size = 7;
|
const int marker_size = 7;
|
||||||
int marker1_size = (name1 ? strlen(name1) + 1 : 0);
|
int marker1_size = (name1 ? strlen(name1) + 1 : 0);
|
||||||
int marker2_size = (name2 ? strlen(name2) + 1 : 0);
|
int marker2_size = (name2 ? strlen(name2) + 1 : 0);
|
||||||
int conflict_marker_size = 3 * (marker_size + 1)
|
int j;
|
||||||
+ marker1_size + marker2_size;
|
|
||||||
int size, i1, j;
|
|
||||||
|
|
||||||
for (size = i1 = 0; m; m = m->next) {
|
/* Before conflicting part */
|
||||||
if (m->mode == 0) {
|
size += xdl_recs_copy(xe1, i, m->i1 - i, 0,
|
||||||
size += xdl_recs_copy(xe1, i1, m->i1 - i1, 0,
|
|
||||||
dest ? dest + size : NULL);
|
dest ? dest + size : NULL);
|
||||||
if (dest) {
|
|
||||||
|
if (!dest) {
|
||||||
|
size += marker_size + 1 + marker1_size;
|
||||||
|
} else {
|
||||||
for (j = 0; j < marker_size; j++)
|
for (j = 0; j < marker_size; j++)
|
||||||
dest[size++] = '<';
|
dest[size++] = '<';
|
||||||
if (marker1_size) {
|
if (marker1_size) {
|
||||||
dest[size] = ' ';
|
dest[size] = ' ';
|
||||||
memcpy(dest + size + 1, name1,
|
memcpy(dest + size + 1, name1, marker1_size - 1);
|
||||||
marker1_size - 1);
|
|
||||||
size += marker1_size;
|
size += marker1_size;
|
||||||
}
|
}
|
||||||
dest[size++] = '\n';
|
dest[size++] = '\n';
|
||||||
} else
|
}
|
||||||
size += conflict_marker_size;
|
|
||||||
|
/* Postimage from side #1 */
|
||||||
size += xdl_recs_copy(xe1, m->i1, m->chg1, 1,
|
size += xdl_recs_copy(xe1, m->i1, m->chg1, 1,
|
||||||
dest ? dest + size : NULL);
|
dest ? dest + size : NULL);
|
||||||
if (dest) {
|
if (!dest) {
|
||||||
|
size += marker_size + 1;
|
||||||
|
} else {
|
||||||
for (j = 0; j < marker_size; j++)
|
for (j = 0; j < marker_size; j++)
|
||||||
dest[size++] = '=';
|
dest[size++] = '=';
|
||||||
dest[size++] = '\n';
|
dest[size++] = '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Postimage from side #2 */
|
||||||
size += xdl_recs_copy(xe2, m->i2, m->chg2, 1,
|
size += xdl_recs_copy(xe2, m->i2, m->chg2, 1,
|
||||||
dest ? dest + size : NULL);
|
dest ? dest + size : NULL);
|
||||||
if (dest) {
|
if (!dest) {
|
||||||
|
size += marker_size + 1 + marker2_size;
|
||||||
|
} else {
|
||||||
for (j = 0; j < marker_size; j++)
|
for (j = 0; j < marker_size; j++)
|
||||||
dest[size++] = '>';
|
dest[size++] = '>';
|
||||||
if (marker2_size) {
|
if (marker2_size) {
|
||||||
dest[size] = ' ';
|
dest[size] = ' ';
|
||||||
memcpy(dest + size + 1, name2,
|
memcpy(dest + size + 1, name2, marker2_size - 1);
|
||||||
marker2_size - 1);
|
|
||||||
size += marker2_size;
|
size += marker2_size;
|
||||||
}
|
}
|
||||||
dest[size++] = '\n';
|
dest[size++] = '\n';
|
||||||
}
|
}
|
||||||
} else if (m->mode == 1)
|
return size;
|
||||||
size += xdl_recs_copy(xe1, i1, m->i1 + m->chg1 - i1, 0,
|
}
|
||||||
|
|
||||||
|
static int xdl_fill_merge_buffer(xdfenv_t *xe1, const char *name1,
|
||||||
|
xdfenv_t *xe2, const char *name2, xdmerge_t *m, char *dest)
|
||||||
|
{
|
||||||
|
int size, i;
|
||||||
|
|
||||||
|
for (size = i = 0; m; m = m->next) {
|
||||||
|
if (m->mode == 0)
|
||||||
|
size = fill_conflict_hunk(xe1, name1, xe2, name2,
|
||||||
|
size, i, m, dest);
|
||||||
|
else if (m->mode == 1)
|
||||||
|
size += xdl_recs_copy(xe1, i, m->i1 + m->chg1 - i, 0,
|
||||||
dest ? dest + size : NULL);
|
dest ? dest + size : NULL);
|
||||||
else if (m->mode == 2)
|
else if (m->mode == 2)
|
||||||
size += xdl_recs_copy(xe2, m->i2 - m->i1 + i1,
|
size += xdl_recs_copy(xe2, m->i2 - m->i1 + i,
|
||||||
m->i1 + m->chg2 - i1, 0,
|
m->i1 + m->chg2 - i, 0,
|
||||||
dest ? dest + size : NULL);
|
dest ? dest + size : NULL);
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
i1 = m->i1 + m->chg1;
|
i = m->i1 + m->chg1;
|
||||||
}
|
}
|
||||||
size += xdl_recs_copy(xe1, i1, xe1->xdf2.nrec - i1, 0,
|
size += xdl_recs_copy(xe1, i, xe1->xdf2.nrec - i, 0,
|
||||||
dest ? dest + size : NULL);
|
dest ? dest + size : NULL);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user