@matheusbsbs / matheus-bagliano / commits / f2b25dd81f
Fork 0

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