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>
Junio C Hamano committed
Aug 28, 2008 at 01:04 UTC
f2b25dd81f4ccbf42700bd15feeb2becf10331ab
1 file changed
+70
-51
xdiff/xmerge.c
+70
-51
@@ -113,65 +113,84 @@ static int xdl_recs_copy(xdfenv_t *xe, int i, int count, int add_nl, char *dest)
113
return size;
114
}
115
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)
120
{
121
const int marker_size = 7;
122
int marker1_size = (name1 ? strlen(name1) + 1 : 0);
123
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);
184
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);
188
else
189
continue;
171
- i1 = m->i1 + m->chg1;
190
+ i = m->i1 + m->chg1;
191
}
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);
194
return size;
195
}
196