Merge branch 'dk/blame-el' into pu
[git/spearce.git] / rev-cache.h
blobc88ceae05f989aeab1c83a68e3376a1448deff42
1 #ifndef REV_CACHE_H
2 #define REV_CACHE_H
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) + \
16 (e)->size_size + \
17 (e)->name_size\
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;
26 uint32_t ofs_objects;
28 uint32_t object_nr;
29 unsigned char cache_nr;
31 uint32_t max_date;
34 struct rc_index_entry_ondisk {
35 unsigned char sha1[20];
36 unsigned char flags;
37 uint32_t pos;
40 struct rc_index_entry {
41 unsigned char *sha1;
42 unsigned is_start : 1;
43 unsigned cache_index : 7;
44 uint32_t pos;
48 /* structure for actual cache file */
49 struct rc_slice_header {
50 char signature[8]; /* REVCACHE */
51 unsigned char version;
52 uint32_t ofs_objects;
54 uint32_t object_nr;
55 uint16_t path_nr;
56 uint32_t size;
58 unsigned char sha1[20];
60 uint32_t name_size;
63 struct rc_object_entry_ondisk {
64 unsigned char flags;
65 unsigned char sha1[20];
67 unsigned char merge_nr;
68 unsigned char split_nr;
69 unsigned char sizes;
71 uint32_t date;
72 uint16_t path;
75 struct rc_object_entry {
76 unsigned type : 3;
77 unsigned is_end : 1;
78 unsigned is_start : 1;
79 unsigned uninteresting : 1;
80 unsigned include : 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;
88 unsigned padding : 2;
90 uint32_t date;
91 uint16_t path;
93 /* merge paths */
94 /* split paths */
95 /* size */
96 /* name id */
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);
123 #endif