Skip to content

Commit f2b25dd

Browse files
committed
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>
1 parent 53d1589 commit f2b25dd

File tree

1 file changed

+70
-51
lines changed

1 file changed

+70
-51
lines changed

xdiff/xmerge.c

Lines changed: 70 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -113,65 +113,84 @@ static int xdl_recs_copy(xdfenv_t *xe, int i, int count, int add_nl, char *dest)
113113
return size;
114114
}
115115

116-
static int xdl_fill_merge_buffer(xdfenv_t *xe1, const char *name1,
117-
xdfenv_t *xe2, const char *name2, xdmerge_t *m, char *dest)
116+
static int fill_conflict_hunk(xdfenv_t *xe1, const char *name1,
117+
xdfenv_t *xe2, const char *name2,
118+
int size, int i,
119+
xdmerge_t *m, char *dest)
118120
{
119121
const int marker_size = 7;
120122
int marker1_size = (name1 ? strlen(name1) + 1 : 0);
121123
int marker2_size = (name2 ? strlen(name2) + 1 : 0);
122-
int conflict_marker_size = 3 * (marker_size + 1)
123-
+ marker1_size + marker2_size;
124-
int size, i1, j;
125-
126-
for (size = i1 = 0; m; m = m->next) {
127-
if (m->mode == 0) {
128-
size += xdl_recs_copy(xe1, i1, m->i1 - i1, 0,
129-
dest ? dest + size : NULL);
130-
if (dest) {
131-
for (j = 0; j < marker_size; j++)
132-
dest[size++] = '<';
133-
if (marker1_size) {
134-
dest[size] = ' ';
135-
memcpy(dest + size + 1, name1,
136-
marker1_size - 1);
137-
size += marker1_size;
138-
}
139-
dest[size++] = '\n';
140-
} else
141-
size += conflict_marker_size;
142-
size += xdl_recs_copy(xe1, m->i1, m->chg1, 1,
143-
dest ? dest + size : NULL);
144-
if (dest) {
145-
for (j = 0; j < marker_size; j++)
146-
dest[size++] = '=';
147-
dest[size++] = '\n';
148-
}
149-
size += xdl_recs_copy(xe2, m->i2, m->chg2, 1,
150-
dest ? dest + size : NULL);
151-
if (dest) {
152-
for (j = 0; j < marker_size; j++)
153-
dest[size++] = '>';
154-
if (marker2_size) {
155-
dest[size] = ' ';
156-
memcpy(dest + size + 1, name2,
157-
marker2_size - 1);
158-
size += marker2_size;
159-
}
160-
dest[size++] = '\n';
161-
}
162-
} else if (m->mode == 1)
163-
size += xdl_recs_copy(xe1, i1, m->i1 + m->chg1 - i1, 0,
164-
dest ? dest + size : NULL);
124+
int j;
125+
126+
/* Before conflicting part */
127+
size += xdl_recs_copy(xe1, i, m->i1 - i, 0,
128+
dest ? dest + size : NULL);
129+
130+
if (!dest) {
131+
size += marker_size + 1 + marker1_size;
132+
} else {
133+
for (j = 0; j < marker_size; j++)
134+
dest[size++] = '<';
135+
if (marker1_size) {
136+
dest[size] = ' ';
137+
memcpy(dest + size + 1, name1, marker1_size - 1);
138+
size += marker1_size;
139+
}
140+
dest[size++] = '\n';
141+
}
142+
143+
/* Postimage from side #1 */
144+
size += xdl_recs_copy(xe1, m->i1, m->chg1, 1,
145+
dest ? dest + size : NULL);
146+
if (!dest) {
147+
size += marker_size + 1;
148+
} else {
149+
for (j = 0; j < marker_size; j++)
150+
dest[size++] = '=';
151+
dest[size++] = '\n';
152+
}
153+
154+
/* Postimage from side #2 */
155+
size += xdl_recs_copy(xe2, m->i2, m->chg2, 1,
156+
dest ? dest + size : NULL);
157+
if (!dest) {
158+
size += marker_size + 1 + marker2_size;
159+
} else {
160+
for (j = 0; j < marker_size; j++)
161+
dest[size++] = '>';
162+
if (marker2_size) {
163+
dest[size] = ' ';
164+
memcpy(dest + size + 1, name2, marker2_size - 1);
165+
size += marker2_size;
166+
}
167+
dest[size++] = '\n';
168+
}
169+
return size;
170+
}
171+
172+
static int xdl_fill_merge_buffer(xdfenv_t *xe1, const char *name1,
173+
xdfenv_t *xe2, const char *name2, xdmerge_t *m, char *dest)
174+
{
175+
int size, i;
176+
177+
for (size = i = 0; m; m = m->next) {
178+
if (m->mode == 0)
179+
size = fill_conflict_hunk(xe1, name1, xe2, name2,
180+
size, i, m, dest);
181+
else if (m->mode == 1)
182+
size += xdl_recs_copy(xe1, i, m->i1 + m->chg1 - i, 0,
183+
dest ? dest + size : NULL);
165184
else if (m->mode == 2)
166-
size += xdl_recs_copy(xe2, m->i2 - m->i1 + i1,
167-
m->i1 + m->chg2 - i1, 0,
168-
dest ? dest + size : NULL);
185+
size += xdl_recs_copy(xe2, m->i2 - m->i1 + i,
186+
m->i1 + m->chg2 - i, 0,
187+
dest ? dest + size : NULL);
169188
else
170189
continue;
171-
i1 = m->i1 + m->chg1;
190+
i = m->i1 + m->chg1;
172191
}
173-
size += xdl_recs_copy(xe1, i1, xe1->xdf2.nrec - i1, 0,
174-
dest ? dest + size : NULL);
192+
size += xdl_recs_copy(xe1, i, xe1->xdf2.nrec - i, 0,
193+
dest ? dest + size : NULL);
175194
return size;
176195
}
177196

0 commit comments

Comments
 (0)