comparison mercurial/cext/revlog.c @ 38819:49628742d264

revlog: remove unnecessary output parameter from node_check() The "nodelen" output parameter is always set to 20 if the function returns successfully. Differential Revision: https://phab.mercurial-scm.org/D4026
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 20 Jul 2018 23:57:25 -0700
parents 1445b556e9d2
children 44bbc89ec5e0
comparison
equal deleted inserted replaced
38818:e411774a2e0f 38819:49628742d264
262 return node; 262 return node;
263 } 263 }
264 264
265 static int nt_insert(indexObject *self, const char *node, int rev); 265 static int nt_insert(indexObject *self, const char *node, int rev);
266 266
267 static int node_check(PyObject *obj, char **node, Py_ssize_t *nodelen) 267 static int node_check(PyObject *obj, char **node)
268 { 268 {
269 if (PyBytes_AsStringAndSize(obj, node, nodelen) == -1) 269 Py_ssize_t nodelen;
270 if (PyBytes_AsStringAndSize(obj, node, &nodelen) == -1)
270 return -1; 271 return -1;
271 if (*nodelen == 20) 272 if (nodelen == 20)
272 return 0; 273 return 0;
273 PyErr_SetString(PyExc_ValueError, "20-byte hash required"); 274 PyErr_SetString(PyExc_ValueError, "20-byte hash required");
274 return -1; 275 return -1;
275 } 276 }
276 277
277 static PyObject *index_insert(indexObject *self, PyObject *args) 278 static PyObject *index_insert(indexObject *self, PyObject *args)
278 { 279 {
279 PyObject *obj; 280 PyObject *obj;
280 char *node; 281 char *node;
281 int index; 282 int index;
282 Py_ssize_t len, nodelen; 283 Py_ssize_t len;
283 284
284 if (!PyArg_ParseTuple(args, "iO", &index, &obj)) 285 if (!PyArg_ParseTuple(args, "iO", &index, &obj))
285 return NULL; 286 return NULL;
286 287
287 if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj) != 8) { 288 if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj) != 8) {
288 PyErr_SetString(PyExc_TypeError, "8-tuple required"); 289 PyErr_SetString(PyExc_TypeError, "8-tuple required");
289 return NULL; 290 return NULL;
290 } 291 }
291 292
292 if (node_check(PyTuple_GET_ITEM(obj, 7), &node, &nodelen) == -1) 293 if (node_check(PyTuple_GET_ITEM(obj, 7), &node) == -1)
293 return NULL; 294 return NULL;
294 295
295 len = index_length(self); 296 len = index_length(self);
296 297
297 if (index < 0) 298 if (index < 0)
1212 } 1213 }
1213 1214
1214 static PyObject *index_getitem(indexObject *self, PyObject *value) 1215 static PyObject *index_getitem(indexObject *self, PyObject *value)
1215 { 1216 {
1216 char *node; 1217 char *node;
1217 Py_ssize_t nodelen;
1218 int rev; 1218 int rev;
1219 1219
1220 if (PyInt_Check(value)) 1220 if (PyInt_Check(value))
1221 return index_get(self, PyInt_AS_LONG(value)); 1221 return index_get(self, PyInt_AS_LONG(value));
1222 1222
1223 if (node_check(value, &node, &nodelen) == -1) 1223 if (node_check(value, &node) == -1)
1224 return NULL; 1224 return NULL;
1225 rev = index_find_node(self, node, nodelen); 1225 rev = index_find_node(self, node, 20);
1226 if (rev >= -1) 1226 if (rev >= -1)
1227 return PyInt_FromLong(rev); 1227 return PyInt_FromLong(rev);
1228 if (rev == -2) 1228 if (rev == -2)
1229 raise_revlog_error(); 1229 raise_revlog_error();
1230 return NULL; 1230 return NULL;
1358 return PyBytes_FromStringAndSize(fullnode, 20); 1358 return PyBytes_FromStringAndSize(fullnode, 20);
1359 } 1359 }
1360 1360
1361 static PyObject *index_shortest(indexObject *self, PyObject *args) 1361 static PyObject *index_shortest(indexObject *self, PyObject *args)
1362 { 1362 {
1363 Py_ssize_t nodelen;
1364 PyObject *val; 1363 PyObject *val;
1365 char *node; 1364 char *node;
1366 int length; 1365 int length;
1367 1366
1368 if (!PyArg_ParseTuple(args, "O", &val)) 1367 if (!PyArg_ParseTuple(args, "O", &val))
1369 return NULL; 1368 return NULL;
1370 if (node_check(val, &node, &nodelen) == -1) 1369 if (node_check(val, &node) == -1)
1371 return NULL; 1370 return NULL;
1372 1371
1373 self->ntlookups++; 1372 self->ntlookups++;
1374 length = nt_shortest(self, node); 1373 length = nt_shortest(self, node);
1375 if (length == -3) 1374 if (length == -3)
1381 return PyInt_FromLong(length); 1380 return PyInt_FromLong(length);
1382 } 1381 }
1383 1382
1384 static PyObject *index_m_get(indexObject *self, PyObject *args) 1383 static PyObject *index_m_get(indexObject *self, PyObject *args)
1385 { 1384 {
1386 Py_ssize_t nodelen;
1387 PyObject *val; 1385 PyObject *val;
1388 char *node; 1386 char *node;
1389 int rev; 1387 int rev;
1390 1388
1391 if (!PyArg_ParseTuple(args, "O", &val)) 1389 if (!PyArg_ParseTuple(args, "O", &val))
1392 return NULL; 1390 return NULL;
1393 if (node_check(val, &node, &nodelen) == -1) 1391 if (node_check(val, &node) == -1)
1394 return NULL; 1392 return NULL;
1395 rev = index_find_node(self, node, nodelen); 1393 rev = index_find_node(self, node, 20);
1396 if (rev == -3) 1394 if (rev == -3)
1397 return NULL; 1395 return NULL;
1398 if (rev == -2) 1396 if (rev == -2)
1399 Py_RETURN_NONE; 1397 Py_RETURN_NONE;
1400 return PyInt_FromLong(rev); 1398 return PyInt_FromLong(rev);
1401 } 1399 }
1402 1400
1403 static int index_contains(indexObject *self, PyObject *value) 1401 static int index_contains(indexObject *self, PyObject *value)
1404 { 1402 {
1405 char *node; 1403 char *node;
1406 Py_ssize_t nodelen;
1407 1404
1408 if (PyInt_Check(value)) { 1405 if (PyInt_Check(value)) {
1409 long rev = PyInt_AS_LONG(value); 1406 long rev = PyInt_AS_LONG(value);
1410 return rev >= -1 && rev < index_length(self); 1407 return rev >= -1 && rev < index_length(self);
1411 } 1408 }
1412 1409
1413 if (node_check(value, &node, &nodelen) == -1) 1410 if (node_check(value, &node) == -1)
1414 return -1; 1411 return -1;
1415 1412
1416 switch (index_find_node(self, node, nodelen)) { 1413 switch (index_find_node(self, node, 20)) {
1417 case -3: 1414 case -3:
1418 return -1; 1415 return -1;
1419 case -2: 1416 case -2:
1420 return 0; 1417 return 0;
1421 default: 1418 default:
1895 */ 1892 */
1896 static int index_assign_subscript(indexObject *self, PyObject *item, 1893 static int index_assign_subscript(indexObject *self, PyObject *item,
1897 PyObject *value) 1894 PyObject *value)
1898 { 1895 {
1899 char *node; 1896 char *node;
1900 Py_ssize_t nodelen;
1901 long rev; 1897 long rev;
1902 1898
1903 if (PySlice_Check(item) && value == NULL) 1899 if (PySlice_Check(item) && value == NULL)
1904 return index_slice_del(self, item); 1900 return index_slice_del(self, item);
1905 1901
1906 if (node_check(item, &node, &nodelen) == -1) 1902 if (node_check(item, &node) == -1)
1907 return -1; 1903 return -1;
1908 1904
1909 if (value == NULL) 1905 if (value == NULL)
1910 return self->nt ? nt_insert(self, node, -1) : 0; 1906 return self->nt ? nt_insert(self, node, -1) : 0;
1911 rev = PyInt_AsLong(value); 1907 rev = PyInt_AsLong(value);