comparison mercurial/cext/bdiff.c @ 41336:763b45bc4483

cleanup: use clang-tidy to add missing {} around one-line statements I find this easier to read. Cleanup performed like this: hg files 'set:(**.c or **.cc or **.h) and not "listfile:contrib/clang-format-ignorelist"' | while read f ; do clang-tidy -fix -checks=readability-braces-around-statements $f -- $(python-config --cflags) -Imercurial/cext -Imercurial done make format-c I had to revert chg/chg.c as it's got a construct that seems to confuse clang-tidy, so I'll work on that file later if this change is acceptable. I only tackle files that are under clang-format's authority because otherwise I'd have to do a bunch of manual formatting. A few files didn't get edited because clang-tidy couldn't find some headers. Again, I'll figure that out later assuming this change is accepted. No check-code rule added for now because writing the regex sounds hard. In a perfect world I guess we could write a test that uses clang-tidy on these files, but I think clang-tidy is pretty rarely installed. :/ Differential Revision: https://phab.mercurial-scm.org/D5675
author Augie Fackler <augie@google.com>
date Thu, 24 Jan 2019 10:21:59 -0500
parents ad76032d27da
children d4ba4d51f85f
comparison
equal deleted inserted replaced
41335:b81ca9a3f4e4 41336:763b45bc4483
27 struct bdiff_hunk l, *h; 27 struct bdiff_hunk l, *h;
28 int an, bn, count, pos = 0; 28 int an, bn, count, pos = 0;
29 29
30 l.next = NULL; 30 l.next = NULL;
31 31
32 if (!PyArg_ParseTuple(args, "SS:bdiff", &sa, &sb)) 32 if (!PyArg_ParseTuple(args, "SS:bdiff", &sa, &sb)) {
33 return NULL; 33 return NULL;
34 }
34 35
35 an = bdiff_splitlines(PyBytes_AsString(sa), PyBytes_Size(sa), &a); 36 an = bdiff_splitlines(PyBytes_AsString(sa), PyBytes_Size(sa), &a);
36 bn = bdiff_splitlines(PyBytes_AsString(sb), PyBytes_Size(sb), &b); 37 bn = bdiff_splitlines(PyBytes_AsString(sb), PyBytes_Size(sb), &b);
37 38
38 if (!a || !b) 39 if (!a || !b) {
39 goto nomem; 40 goto nomem;
41 }
40 42
41 count = bdiff_diff(a, an, b, bn, &l); 43 count = bdiff_diff(a, an, b, bn, &l);
42 if (count < 0) 44 if (count < 0) {
43 goto nomem; 45 goto nomem;
46 }
44 47
45 rl = PyList_New(count); 48 rl = PyList_New(count);
46 if (!rl) 49 if (!rl) {
47 goto nomem; 50 goto nomem;
51 }
48 52
49 for (h = l.next; h; h = h->next) { 53 for (h = l.next; h; h = h->next) {
50 m = Py_BuildValue("iiii", h->a1, h->a2, h->b1, h->b2); 54 m = Py_BuildValue("iiii", h->a1, h->a2, h->b1, h->b2);
51 PyList_SetItem(rl, pos, m); 55 PyList_SetItem(rl, pos, m);
52 pos++; 56 pos++;
70 Py_ssize_t len = 0, la, lb, li = 0, lcommon = 0, lmax; 74 Py_ssize_t len = 0, la, lb, li = 0, lcommon = 0, lmax;
71 PyThreadState *_save = NULL; 75 PyThreadState *_save = NULL;
72 76
73 l.next = NULL; 77 l.next = NULL;
74 78
75 if (!PyArg_ParseTuple(args, PY23("s*s*:bdiff", "y*y*:bdiff"), &ba, &bb)) 79 if (!PyArg_ParseTuple(args, PY23("s*s*:bdiff", "y*y*:bdiff"), &ba,
80 &bb)) {
76 return NULL; 81 return NULL;
82 }
77 83
78 if (!PyBuffer_IsContiguous(&ba, 'C') || ba.ndim > 1) { 84 if (!PyBuffer_IsContiguous(&ba, 'C') || ba.ndim > 1) {
79 PyErr_SetString(PyExc_ValueError, "bdiff input not contiguous"); 85 PyErr_SetString(PyExc_ValueError, "bdiff input not contiguous");
80 goto cleanup; 86 goto cleanup;
81 } 87 }
96 _save = PyEval_SaveThread(); 102 _save = PyEval_SaveThread();
97 103
98 lmax = la > lb ? lb : la; 104 lmax = la > lb ? lb : la;
99 for (ia = ba.buf, ib = bb.buf; li < lmax && *ia == *ib; 105 for (ia = ba.buf, ib = bb.buf; li < lmax && *ia == *ib;
100 ++li, ++ia, ++ib) { 106 ++li, ++ia, ++ib) {
101 if (*ia == '\n') 107 if (*ia == '\n') {
102 lcommon = li + 1; 108 lcommon = li + 1;
109 }
103 } 110 }
104 /* we can almost add: if (li == lmax) lcommon = li; */ 111 /* we can almost add: if (li == lmax) lcommon = li; */
105 112
106 an = bdiff_splitlines((char *)ba.buf + lcommon, la - lcommon, &al); 113 an = bdiff_splitlines((char *)ba.buf + lcommon, la - lcommon, &al);
107 bn = bdiff_splitlines((char *)bb.buf + lcommon, lb - lcommon, &bl); 114 bn = bdiff_splitlines((char *)bb.buf + lcommon, lb - lcommon, &bl);
117 } 124 }
118 125
119 /* calculate length of output */ 126 /* calculate length of output */
120 la = lb = 0; 127 la = lb = 0;
121 for (h = l.next; h; h = h->next) { 128 for (h = l.next; h; h = h->next) {
122 if (h->a1 != la || h->b1 != lb) 129 if (h->a1 != la || h->b1 != lb) {
123 len += 12 + bl[h->b1].l - bl[lb].l; 130 len += 12 + bl[h->b1].l - bl[lb].l;
131 }
124 la = h->a2; 132 la = h->a2;
125 lb = h->b2; 133 lb = h->b2;
126 } 134 }
127 PyEval_RestoreThread(_save); 135 PyEval_RestoreThread(_save);
128 _save = NULL; 136 _save = NULL;
129 137
130 result = PyBytes_FromStringAndSize(NULL, len); 138 result = PyBytes_FromStringAndSize(NULL, len);
131 139
132 if (!result) 140 if (!result) {
133 goto cleanup; 141 goto cleanup;
142 }
134 143
135 /* build binary patch */ 144 /* build binary patch */
136 rb = PyBytes_AsString(result); 145 rb = PyBytes_AsString(result);
137 la = lb = 0; 146 la = lb = 0;
138 147
149 la = h->a2; 158 la = h->a2;
150 lb = h->b2; 159 lb = h->b2;
151 } 160 }
152 161
153 cleanup: 162 cleanup:
154 if (_save) 163 if (_save) {
155 PyEval_RestoreThread(_save); 164 PyEval_RestoreThread(_save);
165 }
156 PyBuffer_Release(&ba); 166 PyBuffer_Release(&ba);
157 PyBuffer_Release(&bb); 167 PyBuffer_Release(&bb);
158 free(al); 168 free(al);
159 free(bl); 169 free(bl);
160 bdiff_freehunks(l.next); 170 bdiff_freehunks(l.next);
172 char allws, c; 182 char allws, c;
173 const char *r; 183 const char *r;
174 Py_ssize_t i, rlen, wlen = 0; 184 Py_ssize_t i, rlen, wlen = 0;
175 char *w; 185 char *w;
176 186
177 if (!PyArg_ParseTuple(args, "Sb:fixws", &s, &allws)) 187 if (!PyArg_ParseTuple(args, "Sb:fixws", &s, &allws)) {
178 return NULL; 188 return NULL;
189 }
179 r = PyBytes_AsString(s); 190 r = PyBytes_AsString(s);
180 rlen = PyBytes_Size(s); 191 rlen = PyBytes_Size(s);
181 192
182 w = (char *)PyMem_Malloc(rlen ? rlen : 1); 193 w = (char *)PyMem_Malloc(rlen ? rlen : 1);
183 if (!w) 194 if (!w) {
184 goto nomem; 195 goto nomem;
196 }
185 197
186 for (i = 0; i != rlen; i++) { 198 for (i = 0; i != rlen; i++) {
187 c = r[i]; 199 c = r[i];
188 if (c == ' ' || c == '\t' || c == '\r') { 200 if (c == ' ' || c == '\t' || c == '\r') {
189 if (!allws && (wlen == 0 || w[wlen - 1] != ' ')) 201 if (!allws && (wlen == 0 || w[wlen - 1] != ' ')) {
190 w[wlen++] = ' '; 202 w[wlen++] = ' ';
203 }
191 } else if (c == '\n' && !allws && wlen > 0 && 204 } else if (c == '\n' && !allws && wlen > 0 &&
192 w[wlen - 1] == ' ') { 205 w[wlen - 1] == ' ') {
193 w[wlen - 1] = '\n'; 206 w[wlen - 1] = '\n';
194 } else { 207 } else {
195 w[wlen++] = c; 208 w[wlen++] = c;
205 218
206 static bool sliceintolist(PyObject *list, Py_ssize_t destidx, 219 static bool sliceintolist(PyObject *list, Py_ssize_t destidx,
207 const char *source, Py_ssize_t len) 220 const char *source, Py_ssize_t len)
208 { 221 {
209 PyObject *sliced = PyBytes_FromStringAndSize(source, len); 222 PyObject *sliced = PyBytes_FromStringAndSize(source, len);
210 if (sliced == NULL) 223 if (sliced == NULL) {
211 return false; 224 return false;
225 }
212 PyList_SET_ITEM(list, destidx, sliced); 226 PyList_SET_ITEM(list, destidx, sliced);
213 return true; 227 return true;
214 } 228 }
215 229
216 static PyObject *splitnewlines(PyObject *self, PyObject *args) 230 static PyObject *splitnewlines(PyObject *self, PyObject *args)
230 for (i = 0; i < size - 1; ++i) { 244 for (i = 0; i < size - 1; ++i) {
231 if (text[i] == '\n') { 245 if (text[i] == '\n') {
232 ++nelts; 246 ++nelts;
233 } 247 }
234 } 248 }
235 if ((result = PyList_New(nelts + 1)) == NULL) 249 if ((result = PyList_New(nelts + 1)) == NULL) {
236 goto abort; 250 goto abort;
251 }
237 nelts = 0; 252 nelts = 0;
238 for (i = 0; i < size - 1; ++i) { 253 for (i = 0; i < size - 1; ++i) {
239 if (text[i] == '\n') { 254 if (text[i] == '\n') {
240 if (!sliceintolist(result, nelts++, text + start, 255 if (!sliceintolist(result, nelts++, text + start,
241 i - start + 1)) 256 i - start + 1)) {
242 goto abort; 257 goto abort;
258 }
243 start = i + 1; 259 start = i + 1;
244 } 260 }
245 } 261 }
246 if (!sliceintolist(result, nelts++, text + start, size - start)) 262 if (!sliceintolist(result, nelts++, text + start, size - start)) {
247 goto abort; 263 goto abort;
264 }
248 return result; 265 return result;
249 abort: 266 abort:
250 Py_XDECREF(result); 267 Py_XDECREF(result);
251 return NULL; 268 return NULL;
252 } 269 }
255 void *priv) 272 void *priv)
256 { 273 {
257 PyObject *rl = (PyObject *)priv; 274 PyObject *rl = (PyObject *)priv;
258 PyObject *m = Py_BuildValue("LLLL", a1, a2, b1, b2); 275 PyObject *m = Py_BuildValue("LLLL", a1, a2, b1, b2);
259 int r; 276 int r;
260 if (!m) 277 if (!m) {
261 return -1; 278 return -1;
279 }
262 r = PyList_Append(rl, m); 280 r = PyList_Append(rl, m);
263 Py_DECREF(m); 281 Py_DECREF(m);
264 return r; 282 return r;
265 } 283 }
266 284
280 xdemitcb_t ecb = { 298 xdemitcb_t ecb = {
281 NULL, /* priv */ 299 NULL, /* priv */
282 }; 300 };
283 301
284 if (!PyArg_ParseTuple(args, PY23("s#s#", "y#y#"), &a.ptr, &la, &b.ptr, 302 if (!PyArg_ParseTuple(args, PY23("s#s#", "y#y#"), &a.ptr, &la, &b.ptr,
285 &lb)) 303 &lb)) {
286 return NULL; 304 return NULL;
305 }
287 306
288 a.size = la; 307 a.size = la;
289 b.size = lb; 308 b.size = lb;
290 309
291 rl = PyList_New(0); 310 rl = PyList_New(0);
292 if (!rl) 311 if (!rl) {
293 return PyErr_NoMemory(); 312 return PyErr_NoMemory();
313 }
294 314
295 ecb.priv = rl; 315 ecb.priv = rl;
296 316
297 if (xdl_diff(&a, &b, &xpp, &xecfg, &ecb) != 0) { 317 if (xdl_diff(&a, &b, &xpp, &xecfg, &ecb) != 0) {
298 Py_DECREF(rl); 318 Py_DECREF(rl);