mercurial/cext/revlog.c
changeset 38884 f9fc59ea3135
parent 38861 d814bbd22946
child 38885 f738c502e43b
equal deleted inserted replaced
38883:119d14f41cb2 38884: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;