4 #define SUPPORTED_REVCACHE_VERSION 1
5 #define SUPPORTED_REVINDEX_VERSION 1
6 #define SUPPORTED_REVCOPTR_VERSION 1
8 #define RC_PATH_SIZE(x) (sizeof(uint16_t) * (x))
10 #define RC_OBTAIN_OBJECT_ENTRY(p) from_disked_rc_object_entry((struct rc_object_entry_ondisk *)(p), 0)
11 #define RC_OBTAIN_INDEX_ENTRY(p) from_disked_rc_index_entry((struct rc_index_entry_ondisk *)(p), 0)
13 #define RC_ACTUAL_OBJECT_ENTRY_SIZE(e) (\
14 sizeof(struct rc_object_entry_ondisk) + \
15 RC_PATH_SIZE((e)->merge_nr + (e)->split_nr) + \
19 #define RC_ENTRY_SIZE_OFFSET(e) (RC_ACTUAL_OBJECT_ENTRY_SIZE(e) - (e)->name_size - (e)->size_size)
20 #define RC_ENTRY_NAME_OFFSET(e) (RC_ACTUAL_OBJECT_ENTRY_SIZE(e) - (e)->name_size)
22 /* single index maps objects to cache files */
23 struct rc_index_header
{
24 char signature
[8]; /* REVINDEX */
25 unsigned char version
;
29 unsigned char cache_nr
;
34 struct rc_index_entry_ondisk
{
35 unsigned char sha1
[20];
40 struct rc_index_entry
{
42 unsigned is_start
: 1;
43 unsigned cache_index
: 7;
48 /* structure for actual cache file */
49 struct rc_slice_header
{
50 char signature
[8]; /* REVCACHE */
51 unsigned char version
;
58 unsigned char sha1
[20];
63 struct rc_object_entry_ondisk
{
65 unsigned char sha1
[20];
67 unsigned char merge_nr
;
68 unsigned char split_nr
;
75 struct rc_object_entry
{
78 unsigned is_start
: 1;
79 unsigned uninteresting
: 1;
81 unsigned flag
: 1; /* unused */
82 unsigned char *sha1
; /* 20 byte */
84 unsigned char merge_nr
; /* : 7 */
85 unsigned char split_nr
; /* : 7 */
86 unsigned size_size
: 3;
87 unsigned name_size
: 3;
99 struct rc_index_entry
*from_disked_rc_index_entry(struct rc_index_entry_ondisk
*src
, struct rc_index_entry
*dst
);
100 struct rc_index_entry_ondisk
*to_disked_rc_index_entry(struct rc_index_entry
*src
, struct rc_index_entry_ondisk
*dst
);
101 struct rc_object_entry
*from_disked_rc_object_entry(struct rc_object_entry_ondisk
*src
, struct rc_object_entry
*dst
);
102 struct rc_object_entry_ondisk
*to_disked_rc_object_entry(struct rc_object_entry
*src
, struct rc_object_entry_ondisk
*dst
);
104 extern unsigned char *get_cache_slice(struct commit
*commit
);
105 extern int open_cache_slice(unsigned char *sha1
, int flags
);
106 extern int traverse_cache_slice(struct rev_info
*revs
,
107 unsigned char *cache_sha1
, struct commit
*commit
,
108 unsigned long *date_so_far
, int *slop_so_far
,
109 struct commit_list
***queue
, struct commit_list
**work
);
111 extern void init_rev_cache_info(struct rev_cache_info
*rci
);
112 extern int make_cache_slice(struct rev_cache_info
*rci
,
113 struct rev_info
*revs
, struct commit_list
**starts
, struct commit_list
**ends
,
114 unsigned char *cache_sha1
);
115 extern int make_cache_index(struct rev_cache_info
*rci
, unsigned char *cache_sha1
,
116 int fd
, unsigned int size
);
118 extern void starts_from_slices(struct rev_info
*revs
, unsigned int flags
, unsigned char *which
, int n
);
119 extern int fuse_cache_slices(struct rev_cache_info
*rci
, struct rev_info
*revs
);
120 extern int regenerate_cache_index(struct rev_cache_info
*rci
);
121 extern int make_cache_slice_pointer(struct rev_cache_info
*rci
, const char *slice_path
);