comparison mercurial/cext/revlog.c @ 38845:f9fc59ea3135

index: create function for deleting node from nodetree A node is marked deleted by nt_insert(self, node, -1), but "-1" could mean so many things (notably nullrev), so let's hide it in a function. The function could possibly also remove nodes from the tree in the future (it currently only marks them deleted). Differential Revision: https://phab.mercurial-scm.org/D4004
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 20 Jul 2018 23:24:14 -0700
parents d814bbd22946
children f738c502e43b
comparison
equal deleted inserted replaced
38844:119d14f41cb2 38845:f9fc59ea3135
1091 } 1091 }
1092 1092
1093 return -1; 1093 return -1;
1094 } 1094 }
1095 1095
1096 static int nt_delete_node(indexObject *self, const char *node)
1097 {
1098 /* rev==-1 happens to get encoded as 0, which is interpreted as not set */
1099 return nt_insert(self, node, -1);
1100 }
1101
1096 static int nt_init(indexObject *self) 1102 static int nt_init(indexObject *self)
1097 { 1103 {
1098 if (self->nt == NULL) { 1104 if (self->nt == NULL) {
1099 if ((size_t)self->raw_length > INT_MAX / sizeof(nodetree)) { 1105 if ((size_t)self->raw_length > INT_MAX / sizeof(nodetree)) {
1100 PyErr_SetString(PyExc_ValueError, "overflow in nt_init"); 1106 PyErr_SetString(PyExc_ValueError, "overflow in nt_init");
1790 1796
1791 for (i = start; i < len; i++) { 1797 for (i = start; i < len; i++) {
1792 PyObject *tuple = PyList_GET_ITEM(self->added, i); 1798 PyObject *tuple = PyList_GET_ITEM(self->added, i);
1793 PyObject *node = PyTuple_GET_ITEM(tuple, 7); 1799 PyObject *node = PyTuple_GET_ITEM(tuple, 7);
1794 1800
1795 nt_insert(self, PyBytes_AS_STRING(node), -1); 1801 nt_delete_node(self, PyBytes_AS_STRING(node));
1796 } 1802 }
1797 1803
1798 if (start == 0) 1804 if (start == 0)
1799 Py_CLEAR(self->added); 1805 Py_CLEAR(self->added);
1800 } 1806 }
1849 for (i = start + 1; i < self->length - 1; i++) { 1855 for (i = start + 1; i < self->length - 1; i++) {
1850 const char *node = index_node_existing(self, i); 1856 const char *node = index_node_existing(self, i);
1851 if (node == NULL) 1857 if (node == NULL)
1852 return -1; 1858 return -1;
1853 1859
1854 nt_insert(self, node, -1); 1860 nt_delete_node(self, node);
1855 } 1861 }
1856 if (self->added) 1862 if (self->added)
1857 nt_invalidate_added(self, 0); 1863 nt_invalidate_added(self, 0);
1858 if (self->ntrev > start) 1864 if (self->ntrev > start)
1859 self->ntrev = (int)start; 1865 self->ntrev = (int)start;
1901 1907
1902 if (node_check(item, &node) == -1) 1908 if (node_check(item, &node) == -1)
1903 return -1; 1909 return -1;
1904 1910
1905 if (value == NULL) 1911 if (value == NULL)
1906 return self->nt ? nt_insert(self, node, -1) : 0; 1912 return self->nt ? nt_delete_node(self, node) : 0;
1907 rev = PyInt_AsLong(value); 1913 rev = PyInt_AsLong(value);
1908 if (rev > INT_MAX || rev < 0) { 1914 if (rev > INT_MAX || rev < 0) {
1909 if (!PyErr_Occurred()) 1915 if (!PyErr_Occurred())
1910 PyErr_SetString(PyExc_ValueError, "rev out of range"); 1916 PyErr_SetString(PyExc_ValueError, "rev out of range");
1911 return -1; 1917 return -1;