mercurial/cext/revlog.c
changeset 47259 07641bafa646
parent 47256 2b69555e4875
child 47268 9d1a8829f959
equal deleted inserted replaced
47258:c4dbb7636a12 47259:07641bafa646
   531    inside the transaction that creates the given revision. */
   531    inside the transaction that creates the given revision. */
   532 static PyObject *index_replace_sidedata_info(indexObject *self, PyObject *args)
   532 static PyObject *index_replace_sidedata_info(indexObject *self, PyObject *args)
   533 {
   533 {
   534 	uint64_t offset_flags, sidedata_offset;
   534 	uint64_t offset_flags, sidedata_offset;
   535 	int rev;
   535 	int rev;
       
   536 	char comp_mode;
   536 	Py_ssize_t sidedata_comp_len;
   537 	Py_ssize_t sidedata_comp_len;
   537 	char *data;
   538 	char *data;
   538 #if LONG_MAX == 0x7fffffffL
   539 #if LONG_MAX == 0x7fffffffL
   539 	const char *const sidedata_format = PY23("nKiK", "nKiK");
   540 	const char *const sidedata_format = PY23("nKiKB", "nKiKB");
   540 #else
   541 #else
   541 	const char *const sidedata_format = PY23("nkik", "nkik");
   542 	const char *const sidedata_format = PY23("nkikB", "nkikB");
   542 #endif
   543 #endif
   543 
   544 
   544 	if (self->entry_size == v1_entry_size || self->inlined) {
   545 	if (self->entry_size == v1_entry_size || self->inlined) {
   545 		/*
   546 		/*
   546 		 There is a bug in the transaction handling when going from an
   547 		 There is a bug in the transaction handling when going from an
   551 		raise_revlog_error();
   552 		raise_revlog_error();
   552 		return NULL;
   553 		return NULL;
   553 	}
   554 	}
   554 
   555 
   555 	if (!PyArg_ParseTuple(args, sidedata_format, &rev, &sidedata_offset,
   556 	if (!PyArg_ParseTuple(args, sidedata_format, &rev, &sidedata_offset,
   556 	                      &sidedata_comp_len, &offset_flags))
   557 	                      &sidedata_comp_len, &offset_flags, &comp_mode))
   557 		return NULL;
   558 		return NULL;
   558 
   559 
   559 	if (rev < 0 || rev >= index_length(self)) {
   560 	if (rev < 0 || rev >= index_length(self)) {
   560 		PyErr_SetString(PyExc_IndexError, "revision outside index");
   561 		PyErr_SetString(PyExc_IndexError, "revision outside index");
   561 		return NULL;
   562 		return NULL;
   571 	 */
   572 	 */
   572 	data = self->added + self->entry_size * (rev - self->length);
   573 	data = self->added + self->entry_size * (rev - self->length);
   573 	putbe64(offset_flags, data);
   574 	putbe64(offset_flags, data);
   574 	putbe64(sidedata_offset, data + 64);
   575 	putbe64(sidedata_offset, data + 64);
   575 	putbe32(sidedata_comp_len, data + 72);
   576 	putbe32(sidedata_comp_len, data + 72);
       
   577 	data[76] = (data[76] & ~(3 << 2)) | ((comp_mode & 3) << 2);
   576 
   578 
   577 	Py_RETURN_NONE;
   579 	Py_RETURN_NONE;
   578 }
   580 }
   579 
   581 
   580 static PyObject *index_stats(indexObject *self)
   582 static PyObject *index_stats(indexObject *self)