Merge branch 'jk/pack-bitmap'
* jk/pack-bitmap: pack-bitmap: do not use gcc packed attributemaint
						commit
						3889e7a60c
					
				
							
								
								
									
										11
									
								
								csum-file.h
								
								
								
								
							
							
						
						
									
										11
									
								
								csum-file.h
								
								
								
								
							|  | @ -39,4 +39,15 @@ extern void sha1flush(struct sha1file *f); | ||||||
| extern void crc32_begin(struct sha1file *); | extern void crc32_begin(struct sha1file *); | ||||||
| extern uint32_t crc32_end(struct sha1file *); | extern uint32_t crc32_end(struct sha1file *); | ||||||
|  |  | ||||||
|  | static inline void sha1write_u8(struct sha1file *f, uint8_t data) | ||||||
|  | { | ||||||
|  | 	sha1write(f, &data, sizeof(data)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static inline void sha1write_be32(struct sha1file *f, uint32_t data) | ||||||
|  | { | ||||||
|  | 	data = htonl(data); | ||||||
|  | 	sha1write(f, &data, sizeof(data)); | ||||||
|  | } | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -472,7 +472,6 @@ static void write_selected_commits_v1(struct sha1file *f, | ||||||
|  |  | ||||||
| 	for (i = 0; i < writer.selected_nr; ++i) { | 	for (i = 0; i < writer.selected_nr; ++i) { | ||||||
| 		struct bitmapped_commit *stored = &writer.selected[i]; | 		struct bitmapped_commit *stored = &writer.selected[i]; | ||||||
| 		struct bitmap_disk_entry on_disk; |  | ||||||
|  |  | ||||||
| 		int commit_pos = | 		int commit_pos = | ||||||
| 			sha1_pos(stored->commit->object.sha1, index, index_nr, sha1_access); | 			sha1_pos(stored->commit->object.sha1, index, index_nr, sha1_access); | ||||||
|  | @ -480,11 +479,10 @@ static void write_selected_commits_v1(struct sha1file *f, | ||||||
| 		if (commit_pos < 0) | 		if (commit_pos < 0) | ||||||
| 			die("BUG: trying to write commit not in index"); | 			die("BUG: trying to write commit not in index"); | ||||||
|  |  | ||||||
| 		on_disk.object_pos = htonl(commit_pos); | 		sha1write_be32(f, commit_pos); | ||||||
| 		on_disk.xor_offset = stored->xor_offset; | 		sha1write_u8(f, stored->xor_offset); | ||||||
| 		on_disk.flags = stored->flags; | 		sha1write_u8(f, stored->flags); | ||||||
|  |  | ||||||
| 		sha1write(f, &on_disk, sizeof(on_disk)); |  | ||||||
| 		dump_bitmap(f, stored->write_as); | 		dump_bitmap(f, stored->write_as); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -197,13 +197,24 @@ static struct stored_bitmap *store_bitmap(struct bitmap_index *index, | ||||||
| 	return stored; | 	return stored; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static inline uint32_t read_be32(const unsigned char *buffer, size_t *pos) | ||||||
|  | { | ||||||
|  | 	uint32_t result = get_be32(buffer + *pos); | ||||||
|  | 	(*pos) += sizeof(result); | ||||||
|  | 	return result; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static inline uint8_t read_u8(const unsigned char *buffer, size_t *pos) | ||||||
|  | { | ||||||
|  | 	return buffer[(*pos)++]; | ||||||
|  | } | ||||||
|  |  | ||||||
| static int load_bitmap_entries_v1(struct bitmap_index *index) | static int load_bitmap_entries_v1(struct bitmap_index *index) | ||||||
| { | { | ||||||
| 	static const size_t MAX_XOR_OFFSET = 160; | 	static const size_t MAX_XOR_OFFSET = 160; | ||||||
|  |  | ||||||
| 	uint32_t i; | 	uint32_t i; | ||||||
| 	struct stored_bitmap **recent_bitmaps; | 	struct stored_bitmap **recent_bitmaps; | ||||||
| 	struct bitmap_disk_entry *entry; |  | ||||||
|  |  | ||||||
| 	recent_bitmaps = xcalloc(MAX_XOR_OFFSET, sizeof(struct stored_bitmap)); | 	recent_bitmaps = xcalloc(MAX_XOR_OFFSET, sizeof(struct stored_bitmap)); | ||||||
|  |  | ||||||
|  | @ -214,15 +225,12 @@ static int load_bitmap_entries_v1(struct bitmap_index *index) | ||||||
| 		uint32_t commit_idx_pos; | 		uint32_t commit_idx_pos; | ||||||
| 		const unsigned char *sha1; | 		const unsigned char *sha1; | ||||||
|  |  | ||||||
| 		entry = (struct bitmap_disk_entry *)(index->map + index->map_pos); | 		commit_idx_pos = read_be32(index->map, &index->map_pos); | ||||||
| 		index->map_pos += sizeof(struct bitmap_disk_entry); | 		xor_offset = read_u8(index->map, &index->map_pos); | ||||||
|  | 		flags = read_u8(index->map, &index->map_pos); | ||||||
|  |  | ||||||
| 		commit_idx_pos = ntohl(entry->object_pos); |  | ||||||
| 		sha1 = nth_packed_object_sha1(index->pack, commit_idx_pos); | 		sha1 = nth_packed_object_sha1(index->pack, commit_idx_pos); | ||||||
|  |  | ||||||
| 		xor_offset = (int)entry->xor_offset; |  | ||||||
| 		flags = (int)entry->flags; |  | ||||||
|  |  | ||||||
| 		bitmap = read_bitmap_1(index); | 		bitmap = read_bitmap_1(index); | ||||||
| 		if (!bitmap) | 		if (!bitmap) | ||||||
| 			return -1; | 			return -1; | ||||||
|  |  | ||||||
|  | @ -5,12 +5,6 @@ | ||||||
| #include "khash.h" | #include "khash.h" | ||||||
| #include "pack-objects.h" | #include "pack-objects.h" | ||||||
|  |  | ||||||
| struct bitmap_disk_entry { |  | ||||||
| 	uint32_t object_pos; |  | ||||||
| 	uint8_t xor_offset; |  | ||||||
| 	uint8_t flags; |  | ||||||
| } __attribute__((packed)); |  | ||||||
|  |  | ||||||
| struct bitmap_disk_header { | struct bitmap_disk_header { | ||||||
| 	char magic[4]; | 	char magic[4]; | ||||||
| 	uint16_t version; | 	uint16_t version; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano