Mercurial > hg
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; |