Comments
Patch
@@ -179,6 +179,27 @@ static inline int index_get_parents(inde
return 0;
}
+static inline uint64_t index_get_start(indexObject *self, Py_ssize_t rev)
+{
+ uint64_t offset;
+ if (rev >= self->length) {
+ PyObject *tuple =
+ PyList_GET_ITEM(self->added, rev - self->length);
+ offset = (uint64_t)PyInt_AS_LONG(PyTuple_GET_ITEM(tuple, 0));
+ } else {
+ const char *data = index_deref(self, rev);
+ offset = getbe32(data + 4);
+ if (rev == 0) /* mask out version number for the first entry */
+ offset &= 0xFFFF;
+ else {
+ uint32_t offset_high = getbe32(data);
+ offset |= ((uint64_t)offset_high) << 32;
+ }
+ }
+ offset = offset >> 16;
+ return offset;
+}
+
/*
* RevlogNG format (all in big endian, data may be inlined):
* 6 bytes: offset