Show More
@@ -133,8 +133,9 b' static const long v1_entry_size = 64;' | |||
|
133 | 133 | /* A Revlogv2 index entry is 96 bytes long. */ |
|
134 | 134 | static const long v2_entry_size = 96; |
|
135 | 135 | |
|
136 | static const long format_v1 = 1; /* Internal only, could be any number */ | |
|
137 | static const long format_v2 = 2; /* Internal only, could be any number */ | |
|
136 | static const long format_v1 = 1; /* Internal only, could be any number */ | |
|
137 | static const long format_v2 = 2; /* Internal only, could be any number */ | |
|
138 | static const long format_cl2 = 3; /* Internal only, could be any number */ | |
|
138 | 139 | |
|
139 | 140 | static const long entry_v1_offset_high = 0; |
|
140 | 141 | static const long entry_v1_offset_offset_flags = 4; |
@@ -160,6 +161,19 b' static const long entry_v2_offset_sideda' | |||
|
160 | 161 | static const long entry_v2_offset_all_comp_mode = 76; |
|
161 | 162 | /* next free offset: 77 */ |
|
162 | 163 | |
|
164 | static const long entry_cl2_offset_high = 0; | |
|
165 | static const long entry_cl2_offset_offset_flags = 4; | |
|
166 | static const long entry_cl2_offset_comp_len = 8; | |
|
167 | static const long entry_cl2_offset_uncomp_len = 12; | |
|
168 | static const long entry_cl2_offset_parent_1 = 16; | |
|
169 | static const long entry_cl2_offset_parent_2 = 20; | |
|
170 | static const long entry_cl2_offset_node_id = 24; | |
|
171 | static const long entry_cl2_offset_sidedata_offset = 56; | |
|
172 | static const long entry_cl2_offset_sidedata_comp_len = 64; | |
|
173 | static const long entry_cl2_offset_all_comp_mode = 68; | |
|
174 | static const long entry_cl2_offset_rank = 69; | |
|
175 | /* next free offset: 73 */ | |
|
176 | ||
|
163 | 177 | static const char comp_mode_inline = 2; |
|
164 | 178 | static const char rank_unknown = -1; |
|
165 | 179 | |
@@ -236,6 +250,9 b' static inline int index_get_parents(inde' | |||
|
236 | 250 | } else if (self->format_version == format_v2) { |
|
237 | 251 | ps[0] = getbe32(data + entry_v2_offset_parent_1); |
|
238 | 252 | ps[1] = getbe32(data + entry_v2_offset_parent_2); |
|
253 | } else if (self->format_version == format_cl2) { | |
|
254 | ps[0] = getbe32(data + entry_cl2_offset_parent_1); | |
|
255 | ps[1] = getbe32(data + entry_cl2_offset_parent_2); | |
|
239 | 256 | } else { |
|
240 | 257 | raise_revlog_error(); |
|
241 | 258 | return -1; |
@@ -307,6 +324,10 b' static inline int64_t index_get_start(in' | |||
|
307 | 324 | getbe32(data + entry_v2_offset_high); |
|
308 | 325 | offset |= ((uint64_t)offset_high) << 32; |
|
309 | 326 | } |
|
327 | } else if (self->format_version == format_cl2) { | |
|
328 | uint32_t offset_high = getbe32(data + entry_cl2_offset_high); | |
|
329 | offset = getbe32(data + entry_cl2_offset_offset_flags); | |
|
330 | offset |= ((uint64_t)offset_high) << 32; | |
|
310 | 331 | } else { |
|
311 | 332 | raise_revlog_error(); |
|
312 | 333 | return -1; |
@@ -329,6 +350,8 b' static inline int index_get_length(index' | |||
|
329 | 350 | tmp = (int)getbe32(data + entry_v1_offset_comp_len); |
|
330 | 351 | } else if (self->format_version == format_v2) { |
|
331 | 352 | tmp = (int)getbe32(data + entry_v2_offset_comp_len); |
|
353 | } else if (self->format_version == format_cl2) { | |
|
354 | tmp = (int)getbe32(data + entry_cl2_offset_comp_len); | |
|
332 | 355 | } else { |
|
333 | 356 | raise_revlog_error(); |
|
334 | 357 | return -1; |
@@ -357,7 +380,7 b' static PyObject *index_get(indexObject *' | |||
|
357 | 380 | { |
|
358 | 381 | uint64_t offset_flags, sidedata_offset; |
|
359 | 382 | int comp_len, uncomp_len, base_rev, link_rev, parent_1, parent_2, |
|
360 | sidedata_comp_len; | |
|
383 | sidedata_comp_len, rank = rank_unknown; | |
|
361 | 384 | char data_comp_mode, sidedata_comp_mode; |
|
362 | 385 | const char *c_node_id; |
|
363 | 386 | const char *data; |
@@ -434,6 +457,30 b' static PyObject *index_get(indexObject *' | |||
|
434 | 457 | data_comp_mode = data[entry_v2_offset_all_comp_mode] & 3; |
|
435 | 458 | sidedata_comp_mode = |
|
436 | 459 | ((data[entry_v2_offset_all_comp_mode] >> 2) & 3); |
|
460 | } else if (self->format_version == format_cl2) { | |
|
461 | uint32_t offset_high = getbe32(data + entry_cl2_offset_high); | |
|
462 | offset_flags = getbe32(data + entry_cl2_offset_offset_flags); | |
|
463 | offset_flags |= ((uint64_t)offset_high) << 32; | |
|
464 | comp_len = getbe32(data + entry_cl2_offset_comp_len); | |
|
465 | uncomp_len = getbe32(data + entry_cl2_offset_uncomp_len); | |
|
466 | /* base_rev and link_rev are not stored in changelogv2, but are | |
|
467 | still used by some functions shared with the other revlogs. | |
|
468 | They are supposed to contain links to other revisions, | |
|
469 | but they always point to themselves in the case of a changelog. | |
|
470 | */ | |
|
471 | base_rev = pos; | |
|
472 | link_rev = pos; | |
|
473 | parent_1 = getbe32(data + entry_cl2_offset_parent_1); | |
|
474 | parent_2 = getbe32(data + entry_cl2_offset_parent_2); | |
|
475 | c_node_id = data + entry_cl2_offset_node_id; | |
|
476 | sidedata_offset = | |
|
477 | getbe64(data + entry_cl2_offset_sidedata_offset); | |
|
478 | sidedata_comp_len = | |
|
479 | getbe32(data + entry_cl2_offset_sidedata_comp_len); | |
|
480 | data_comp_mode = data[entry_cl2_offset_all_comp_mode] & 3; | |
|
481 | sidedata_comp_mode = | |
|
482 | ((data[entry_cl2_offset_all_comp_mode] >> 2) & 3); | |
|
483 | rank = getbe32(data + entry_cl2_offset_rank); | |
|
437 | 484 | } else { |
|
438 | 485 | raise_revlog_error(); |
|
439 | 486 | return NULL; |
@@ -442,7 +489,7 b' static PyObject *index_get(indexObject *' | |||
|
442 | 489 | return Py_BuildValue(tuple_format, offset_flags, comp_len, uncomp_len, |
|
443 | 490 | base_rev, link_rev, parent_1, parent_2, c_node_id, |
|
444 | 491 | self->nodelen, sidedata_offset, sidedata_comp_len, |
|
445 |
data_comp_mode, sidedata_comp_mode, rank |
|
|
492 | data_comp_mode, sidedata_comp_mode, rank); | |
|
446 | 493 | } |
|
447 | 494 | /* |
|
448 | 495 | * Pack header information in binary |
@@ -514,6 +561,8 b' static const char *index_node(indexObjec' | |||
|
514 | 561 | node_id = data + entry_v1_offset_node_id; |
|
515 | 562 | } else if (self->format_version == format_v2) { |
|
516 | 563 | node_id = data + entry_v2_offset_node_id; |
|
564 | } else if (self->format_version == format_cl2) { | |
|
565 | node_id = data + entry_cl2_offset_node_id; | |
|
517 | 566 | } else { |
|
518 | 567 | raise_revlog_error(); |
|
519 | 568 | return NULL; |
@@ -636,6 +685,24 b' static PyObject *index_append(indexObjec' | |||
|
636 | 685 | comp_field = data_comp_mode & 3; |
|
637 | 686 | comp_field = comp_field | (sidedata_comp_mode & 3) << 2; |
|
638 | 687 | data[entry_v2_offset_all_comp_mode] = comp_field; |
|
688 | } else if (self->format_version == format_cl2) { | |
|
689 | putbe32(offset_flags >> 32, data + entry_cl2_offset_high); | |
|
690 | putbe32(offset_flags & 0xffffffffU, | |
|
691 | data + entry_cl2_offset_offset_flags); | |
|
692 | putbe32(comp_len, data + entry_cl2_offset_comp_len); | |
|
693 | putbe32(uncomp_len, data + entry_cl2_offset_uncomp_len); | |
|
694 | putbe32(parent_1, data + entry_cl2_offset_parent_1); | |
|
695 | putbe32(parent_2, data + entry_cl2_offset_parent_2); | |
|
696 | memcpy(data + entry_cl2_offset_node_id, c_node_id, | |
|
697 | c_node_id_len); | |
|
698 | putbe64(sidedata_offset, | |
|
699 | data + entry_cl2_offset_sidedata_offset); | |
|
700 | putbe32(sidedata_comp_len, | |
|
701 | data + entry_cl2_offset_sidedata_comp_len); | |
|
702 | comp_field = data_comp_mode & 3; | |
|
703 | comp_field = comp_field | (sidedata_comp_mode & 3) << 2; | |
|
704 | data[entry_cl2_offset_all_comp_mode] = comp_field; | |
|
705 | putbe32(rank, data + entry_cl2_offset_rank); | |
|
639 | 706 | } else { |
|
640 | 707 | raise_revlog_error(); |
|
641 | 708 | return NULL; |
@@ -693,12 +760,28 b' static PyObject *index_replace_sidedata_' | |||
|
693 | 760 | /* Find the newly added node, offset from the "already on-disk" length |
|
694 | 761 | */ |
|
695 | 762 | data = self->added + self->entry_size * (rev - self->length); |
|
696 | putbe64(offset_flags, data + entry_v2_offset_high); | |
|
697 |
putbe64( |
|
|
698 | putbe32(sidedata_comp_len, data + entry_v2_offset_sidedata_comp_len); | |
|
699 | data[entry_v2_offset_all_comp_mode] = | |
|
700 | (data[entry_v2_offset_all_comp_mode] & ~(3 << 2)) | | |
|
701 | ((comp_mode & 3) << 2); | |
|
763 | if (self->format_version == format_v2) { | |
|
764 | putbe64(offset_flags, data + entry_v2_offset_high); | |
|
765 | putbe64(sidedata_offset, | |
|
766 | data + entry_v2_offset_sidedata_offset); | |
|
767 | putbe32(sidedata_comp_len, | |
|
768 | data + entry_v2_offset_sidedata_comp_len); | |
|
769 | data[entry_v2_offset_all_comp_mode] = | |
|
770 | (data[entry_v2_offset_all_comp_mode] & ~(3 << 2)) | | |
|
771 | ((comp_mode & 3) << 2); | |
|
772 | } else if (self->format_version == format_cl2) { | |
|
773 | putbe64(offset_flags, data + entry_cl2_offset_high); | |
|
774 | putbe64(sidedata_offset, | |
|
775 | data + entry_cl2_offset_sidedata_offset); | |
|
776 | putbe32(sidedata_comp_len, | |
|
777 | data + entry_cl2_offset_sidedata_comp_len); | |
|
778 | data[entry_cl2_offset_all_comp_mode] = | |
|
779 | (data[entry_cl2_offset_all_comp_mode] & ~(3 << 2)) | | |
|
780 | ((comp_mode & 3) << 2); | |
|
781 | } else { | |
|
782 | raise_revlog_error(); | |
|
783 | return NULL; | |
|
784 | } | |
|
702 | 785 | |
|
703 | 786 | Py_RETURN_NONE; |
|
704 | 787 | } |
@@ -1246,6 +1329,8 b' static inline int index_baserev(indexObj' | |||
|
1246 | 1329 | result = getbe32(data + entry_v1_offset_base_rev); |
|
1247 | 1330 | } else if (self->format_version == format_v2) { |
|
1248 | 1331 | result = getbe32(data + entry_v2_offset_base_rev); |
|
1332 | } else if (self->format_version == format_cl2) { | |
|
1333 | return rev; | |
|
1249 | 1334 | } else { |
|
1250 | 1335 | raise_revlog_error(); |
|
1251 | 1336 | return -1; |
General Comments 0
You need to be logged in to leave comments.
Login now