|  line  | 
 true  | 
 false  | 
 branch  | 
 
| 
91
 | 
 0  | 
 5  | 
 	if ((error = p_mmap(&map, sizeof(*hdr), GIT_PROT_READ, GIT_MAP_SHARED, pack->mwf.fd, 0)) < 0)  | 
 
| 
98
 | 
 0  | 
 5  | 
 	if (hdr->hdr_signature != ntohl(PACK_SIGNATURE)) {  | 
 
| 
103
 | 
 0  | 
 5  | 
 	if (!pack_version_ok(hdr->hdr_version)) {  | 
 
| 
 | 
 0  | 
 0  | 
 	if (!pack_version_ok(hdr->hdr_version)) {  | 
 
| 
121
 | 
 0  | 
 0  | 
 	GIT_INIT_STRUCTURE_FROM_TEMPLATE(  | 
 
| 
146
 | 
 4  | 
 1  | 
 	if (in_opts)  | 
 
| 
150
 | 
 0  | 
 5  | 
 	GIT_ERROR_CHECK_ALLOC(idx);  | 
 
| 
154
 | 
 0  | 
 5  | 
 	idx->mode = mode ? mode : GIT_PACK_FILE_MODE;  | 
 
| 
157
 | 
 5  | 
 0  | 
 	if ((error = git_hash_ctx_init(&idx->hash_ctx)) < 0 ||  | 
 
| 
 | 
 5  | 
 0  | 
 	if ((error = git_hash_ctx_init(&idx->hash_ctx)) < 0 ||  | 
 
| 
158
 | 
 5  | 
 0  | 
 	    (error = git_hash_ctx_init(&idx->trailer)) < 0 ||  | 
 
| 
164
 | 
 0  | 
 5  | 
 	if (git_repository__fsync_gitdir)  | 
 
| 
168
 | 
 0  | 
 5  | 
 	if (error < 0)  | 
 
| 
173
 | 
 0  | 
 5  | 
 	if (fd < 0)  | 
 
| 
179
 | 
 0  | 
 5  | 
 	if (error < 0)  | 
 
| 
183
 | 
 0  | 
 5  | 
 	if ((error = git_mwindow_file_register(&idx->pack->mwf)) < 0)  | 
 
| 
190
 | 
 0  | 
 0  | 
 	if (fd != -1)  | 
 
| 
193
 | 
 0  | 
 0  | 
 	if (git_buf_len(&tmp_path) > 0)  | 
 
| 
196
 | 
 0  | 
 0  | 
 	if (idx->pack != NULL)  | 
 
| 
216
 | 
 0  | 
 2  | 
 	GIT_ERROR_CHECK_ALLOC(delta);  | 
 
| 
219
 | 
 0  | 
 2  | 
 	if (git_vector_insert(&idx->deltas, delta) < 0)  | 
 
| 
231
 | 
 0  | 
 43  | 
 	if ((error = git_odb__format_object_header(&hdrlen,  | 
 
| 
242
 | 
 43  | 
 0  | 
 	assert(idx && stream);  | 
 
| 
 | 
 0  | 
 43  | 
 	assert(idx && stream);  | 
 
| 
245
 | 
 0  | 
 86  | 
 		if ((read = git_packfile_stream_read(stream, idx->objbuf, sizeof(idx->objbuf))) < 0)  | 
 
| 
248
 | 
 0  | 
 86  | 
 		if (idx->do_verify)  | 
 
| 
252
 | 
 43  | 
 43  | 
 	} while (read > 0);  | 
 
| 
254
 | 
 0  | 
 43  | 
 	if (read < 0)  | 
 
| 
265
 | 
 0  | 
 2  | 
 	assert(type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA);  | 
 
| 
 | 
 0  | 
 0  | 
 	assert(type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA);  | 
 
| 
267
 | 
 2  | 
 0  | 
 	if (type == GIT_OBJECT_REF_DELTA) {  | 
 
| 
273
 | 
 0  | 
 0  | 
 		if (error < 0)  | 
 
| 
285
 | 
 0  | 
 4  | 
 	assert(stream);  | 
 
| 
289
 | 
 2  | 
 4  | 
 	} while (read > 0);  | 
 
| 
291
 | 
 2  | 
 2  | 
 	if (read < 0)  | 
 
| 
305
 | 
 45  | 
 45  | 
 	while (size) {  | 
 
| 
307
 | 
 0  | 
 45  | 
 		if (ptr == NULL)  | 
 
| 
328
 | 
 0  | 
 0  | 
 	if ((!idx->odb || !git_odb_exists(idx->odb, oid)) &&  | 
 
| 
329
 | 
 0  | 
 0  | 
 	    !git_oidmap_exists(idx->pack->idx_cache, oid) &&  | 
 
| 
332
 | 
 0  | 
 0  | 
 		    GIT_ERROR_CHECK_ALLOC(dup);  | 
 
| 
346
 | 
 0  | 
 0  | 
 	if (obj->type != GIT_OBJECT_BLOB &&  | 
 
| 
 | 
 0  | 
 0  | 
 	if (obj->type != GIT_OBJECT_BLOB &&  | 
 
| 
347
 | 
 0  | 
 0  | 
 	    obj->type != GIT_OBJECT_TREE &&  | 
 
| 
348
 | 
 0  | 
 0  | 
 	    obj->type != GIT_OBJECT_COMMIT &&  | 
 
| 
352
 | 
 0  | 
 0  | 
 	if ((error = git_object__from_raw(&object, obj->data, obj->len, obj->type)) < 0)  | 
 
| 
355
 | 
 0  | 
 0  | 
 	if ((expected = git_oidmap_get(idx->expected_oids, &object->cached.oid)) != NULL) {  | 
 
| 
364
 | 
 0  | 
 0  | 
 	if (idx->odb && git_odb_exists(idx->odb, &object->cached.oid))  | 
 
| 
 | 
 0  | 
 0  | 
 	if (idx->odb && git_odb_exists(idx->odb, &object->cached.oid))  | 
 
| 
374
 | 
 0  | 
 0  | 
 			git_array_foreach(tree->entries, i, entry)  | 
 
| 
 | 
 0  | 
 0  | 
 			git_array_foreach(tree->entries, i, entry)  | 
 
| 
375
 | 
 0  | 
 0  | 
 				if (add_expected_oid(idx, entry->oid) < 0)  | 
 
| 
386
 | 
 0  | 
 0  | 
 			git_array_foreach(commit->parent_ids, i, parent_oid)  | 
 
| 
 | 
 0  | 
 0  | 
 			git_array_foreach(commit->parent_ids, i, parent_oid)  | 
 
| 
387
 | 
 0  | 
 0  | 
 				if (add_expected_oid(idx, parent_oid) < 0)  | 
 
| 
390
 | 
 0  | 
 0  | 
 			if (add_expected_oid(idx, &commit->tree_id) < 0)  | 
 
| 
399
 | 
 0  | 
 0  | 
 			if (add_expected_oid(idx, &tag->target) < 0)  | 
 
| 
425
 | 
 0  | 
 43  | 
 	GIT_ERROR_CHECK_ALLOC(entry);  | 
 
| 
428
 | 
 0  | 
 43  | 
 	GIT_ERROR_CHECK_ALLOC(pentry);  | 
 
| 
430
 | 
 0  | 
 43  | 
 	if (git_hash_final(&oid, &idx->hash_ctx)) {  | 
 
| 
435
 | 
 0  | 
 43  | 
 	if (entry_start > UINT31_MAX) {  | 
 
| 
442
 | 
 0  | 
 43  | 
 	if (idx->do_verify) {  | 
 
| 
449
 | 
 0  | 
 0  | 
 		if ((error = check_object_connectivity(idx, &rawobj)) < 0)  | 
 
| 
456
 | 
 0  | 
 43  | 
 	if (git_oidmap_exists(idx->pack->idx_cache, &pentry->sha1)) {  | 
 
| 
462
 | 
 0  | 
 43  | 
 	if ((error = git_oidmap_set(idx->pack->idx_cache, &pentry->sha1, pentry)) < 0) {  | 
 
| 
470
 | 
 0  | 
 43  | 
 	if (crc_object(&entry->crc, &idx->pack->mwf, entry_start, entry_size) < 0)  | 
 
| 
474
 | 
 0  | 
 43  | 
 	if (git_vector_insert(&idx->objects, entry) < 0)  | 
 
| 
477
 | 
 4868  | 
 43  | 
 	for (i = oid.id[0]; i < 256; ++i) {  | 
 
| 
498
 | 
 0  | 
 2  | 
 	if (entry_start > UINT31_MAX) {  | 
 
| 
514
 | 
 0  | 
 2  | 
 	if (git_vector_insert(&idx->objects, entry) < 0)  | 
 
| 
517
 | 
 134  | 
 2  | 
 	for (i = entry->oid.id[0]; i < 256; ++i) {  | 
 
| 
532
 | 
 0  | 
 2  | 
 	GIT_ERROR_CHECK_ALLOC(entry);  | 
 
| 
534
 | 
 0  | 
 2  | 
 	if (git_odb__hashobj(&oid, obj) < 0) {  | 
 
| 
540
 | 
 0  | 
 2  | 
 	GIT_ERROR_CHECK_ALLOC(pentry);  | 
 
| 
547
 | 
 0  | 
 2  | 
 	if (crc_object(&entry->crc, &idx->pack->mwf, entry_start, entry_size) < 0)  | 
 
| 
561
 | 
 41  | 
 11  | 
 	if (idx->progress_cb)  | 
 
| 
573
 | 
 0  | 
 91  | 
 	if (size == 0)  | 
 
| 
577
 | 
 45  | 
 46  | 
 	if (size >= GIT_OID_RAWSZ) {  | 
 
| 
588
 | 
 8  | 
 38  | 
 	if (idx->inbuf_len + size <= GIT_OID_RAWSZ) {  | 
 
| 
615
 | 
 91  | 
 0  | 
 	assert(data && size);  | 
 
| 
 | 
 0  | 
 91  | 
 	assert(data && size);  | 
 
| 
617
 | 
 0  | 
 91  | 
 	if ((error = git__mmap_alignment(&mmap_alignment)) < 0)  | 
 
| 
624
 | 
 0  | 
 91  | 
 	if ((error = p_mmap(&map, page_offset + size, GIT_PROT_WRITE, GIT_MAP_SHARED, fd, page_start)) < 0)  | 
 
| 
644
 | 
 0  | 
 91  | 
 	if (!size)  | 
 
| 
647
 | 
 0  | 
 91  | 
 	if ((error = git__mmap_alignment(&mmap_alignment)) < 0)  | 
 
| 
676
 | 
 84  | 
 47  | 
 	if (idx->pack->mwf.size <= idx->off + 20)  | 
 
| 
679
 | 
 45  | 
 2  | 
 	if (!idx->have_stream) {  | 
 
| 
681
 | 
 0  | 
 45  | 
 		if (error == GIT_EBUFS) {  | 
 
| 
685
 | 
 0  | 
 45  | 
 		if (error < 0)  | 
 
| 
693
 | 
 43  | 
 2  | 
 		if (type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA) {  | 
 
| 
 | 
 0  | 
 43  | 
 		if (type == GIT_OBJECT_REF_DELTA || type == GIT_OBJECT_OFS_DELTA) {  | 
 
| 
695
 | 
 0  | 
 2  | 
 			if (error == GIT_EBUFS) {  | 
 
| 
699
 | 
 0  | 
 2  | 
 			if (error < 0)  | 
 
| 
707
 | 
 0  | 
 43  | 
 			if (error < 0)  | 
 
| 
715
 | 
 0  | 
 45  | 
 		if (error < 0)  | 
 
| 
719
 | 
 4  | 
 43  | 
 	if (idx->have_delta) {  | 
 
| 
726
 | 
 2  | 
 45  | 
 	if (error == GIT_EBUFS)  | 
 
| 
733
 | 
 0  | 
 45  | 
 	if (error < 0)  | 
 
| 
736
 | 
 2  | 
 43  | 
 	if (idx->have_delta) {  | 
 
| 
742
 | 
 0  | 
 45  | 
 	if (error < 0)  | 
 
| 
745
 | 
 43  | 
 2  | 
 	if (!idx->have_delta) {  | 
 
| 
750
 | 
 0  | 
 45  | 
 	if ((error = do_progress_callback(idx, stats)) != 0)  | 
 
| 
762
 | 
 91  | 
 0  | 
 	assert(idx && data && stats);  | 
 
| 
 | 
 91  | 
 0  | 
 	assert(idx && data && stats);  | 
 
| 
 | 
 0  | 
 91  | 
 	assert(idx && data && stats);  | 
 
| 
764
 | 
 0  | 
 91  | 
 	if ((error = append_to_pack(idx, data, size)) < 0)  | 
 
| 
772
 | 
 5  | 
 86  | 
 	if (!idx->parsed_header) {  | 
 
| 
775
 | 
 0  | 
 5  | 
 		if ((unsigned)idx->pack->mwf.size < sizeof(struct git_pack_header))  | 
 
| 
778
 | 
 0  | 
 5  | 
 		if ((error = parse_header(&idx->hdr, idx->pack)) < 0)  | 
 
| 
785
 | 
 5  | 
 0  | 
 		if (idx->nr_objects <= git_indexer__max_objects) {  | 
 
| 
792
 | 
 0  | 
 5  | 
 		if (git_oidmap_new(&idx->pack->idx_cache) < 0)  | 
 
| 
796
 | 
 0  | 
 5  | 
 		if (git_vector_init(&idx->objects, total_objects, objects_cmp) < 0)  | 
 
| 
799
 | 
 0  | 
 5  | 
 		if (git_vector_init(&idx->deltas, total_objects / 2, NULL) < 0)  | 
 
| 
809
 | 
 0  | 
 5  | 
 		if ((error = do_progress_callback(idx, stats)) != 0)  | 
 
| 
818
 | 
 131  | 
 5  | 
 	while (stats->indexed_objects < idx->nr_objects) {  | 
 
| 
819
 | 
 86  | 
 45  | 
 		if ((error = read_stream_object(idx, stats)) != 0) {  | 
 
| 
820
 | 
 86  | 
 0  | 
 			if (error == GIT_EBUFS)  | 
 
| 
840
 | 
 330  | 
 0  | 
 	while (slash > 0 && path->ptr[slash - 1] != '/')  | 
 
| 
 | 
 320  | 
 10  | 
 	while (slash > 0 && path->ptr[slash - 1] != '/')  | 
 
| 
843
 | 
 0  | 
 10  | 
 	if (git_buf_grow(path, slash + 1 + strlen(prefix) +  | 
 
| 
853
 | 
 0  | 
 10  | 
 	return git_buf_oom(path) ? -1 : 0;  | 
 
| 
882
 | 
 0  | 
 0  | 
 	if (git_odb_read(&obj, idx->odb, id) < 0) {  | 
 
| 
891
 | 
 0  | 
 0  | 
 	GIT_ERROR_CHECK_ALLOC(entry);  | 
 
| 
897
 | 
 0  | 
 0  | 
 	if ((error = append_to_pack(idx, hdr, hdr_len)) < 0)  | 
 
| 
903
 | 
 0  | 
 0  | 
 	if ((error = git_zstream_deflatebuf(&buf, data, len)) < 0)  | 
 
| 
907
 | 
 0  | 
 0  | 
 	if ((error = append_to_pack(idx, buf.ptr, buf.size)) < 0)  | 
 
| 
916
 | 
 0  | 
 0  | 
 	if ((error = append_to_pack(idx, &foo, GIT_OID_RAWSZ)) < 0)  | 
 
| 
922
 | 
 0  | 
 0  | 
 	GIT_ERROR_CHECK_ALLOC(pentry);  | 
 
| 
931
 | 
 0  | 
 0  | 
 	if (error) {  | 
 
| 
953
 | 
 0  | 
 0  | 
 	assert(git_vector_length(&idx->deltas) > 0);  | 
 
| 
955
 | 
 0  | 
 0  | 
 	if (idx->odb == NULL) {  | 
 
| 
961
 | 
 0  | 
 0  | 
 	git_vector_foreach(&idx->deltas, i, delta) {  | 
 
| 
962
 | 
 0  | 
 0  | 
 		if (!delta)  | 
 
| 
967
 | 
 0  | 
 0  | 
 		if (error < 0)  | 
 
| 
970
 | 
 0  | 
 0  | 
 		if (type == GIT_OBJECT_REF_DELTA) {  | 
 
| 
976
 | 
 0  | 
 0  | 
 	if (!found_ref_delta) {  | 
 
| 
983
 | 
 0  | 
 0  | 
 	if (base_info == NULL) {  | 
 
| 
991
 | 
 0  | 
 0  | 
 	if (has_entry(idx, &base))  | 
 
| 
994
 | 
 0  | 
 0  | 
 	if (inject_object(idx, &base) < 0)  | 
 
| 
1009
 | 
 4  | 
 3  | 
 	while (idx->deltas.length > 0) {  | 
 
| 
1012
 | 
 4  | 
 4  | 
 		git_vector_foreach(&idx->deltas, i, delta) {  | 
 
| 
1015
 | 
 2  | 
 2  | 
 			if (!delta)  | 
 
| 
1020
 | 
 0  | 
 2  | 
 			if ((error = git_packfile_unpack(&obj, idx->pack, &idx->off)) < 0) {  | 
 
| 
1021
 | 
 0  | 
 0  | 
 				if (error == GIT_PASSTHROUGH) {  | 
 
| 
1028
 | 
 0  | 
 2  | 
 			if (idx->do_verify && check_object_connectivity(idx, &obj) < 0)  | 
 
| 
 | 
 0  | 
 0  | 
 			if (idx->do_verify && check_object_connectivity(idx, &obj) < 0)  | 
 
| 
1032
 | 
 0  | 
 2  | 
 			if (hash_and_save(idx, &obj, delta->delta_off) < 0)  | 
 
| 
1039
 | 
 0  | 
 2  | 
 			if ((progress_cb_result = do_progress_callback(idx, stats)) < 0)  | 
 
| 
1048
 | 
 2  | 
 2  | 
 		if (!non_null)  | 
 
| 
1051
 | 
 0  | 
 2  | 
 		if (!progressed && (fix_thin_pack(idx, stats) < 0)) {  | 
 
| 
 | 
 0  | 
 0  | 
 		if (!progressed && (fix_thin_pack(idx, stats) < 0)) {  | 
 
| 
1075
 | 
 0  | 
 0  | 
 	if (write_at(idx, &idx->hdr, 0, sizeof(struct git_pack_header)) < 0)  | 
 
| 
1086
 | 
 0  | 
 0  | 
 	while (hashed < mwf->size) {  | 
 
| 
1088
 | 
 0  | 
 0  | 
 		if (ptr == NULL)  | 
 
| 
1112
 | 
 0  | 
 5  | 
 	if (!idx->parsed_header) {  | 
 
| 
1118
 | 
 0  | 
 5  | 
 	if (idx->off + 20 < idx->pack->mwf.size) {  | 
 
| 
1122
 | 
 0  | 
 5  | 
 	if (idx->off + 20 > idx->pack->mwf.size) {  | 
 
| 
1128
 | 
 0  | 
 5  | 
 	if (packfile_trailer == NULL) {  | 
 
| 
1138
 | 
 0  | 
 5  | 
 	if (git_oid_cmp(&file_hash, &trailer_hash)) {  | 
 
| 
1146
 | 
 0  | 
 5  | 
 	if ((error = resolve_deltas(idx, stats)) < 0)  | 
 
| 
1149
 | 
 0  | 
 5  | 
 	if (stats->indexed_objects != stats->total_objects) {  | 
 
| 
1154
 | 
 0  | 
 5  | 
 	if (stats->local_objects > 0) {  | 
 
| 
1155
 | 
 0  | 
 0  | 
 		if (update_header_and_rehash(idx, stats) < 0)  | 
 
| 
1168
 | 
 0  | 
 5  | 
 	if (git_oidmap_size(idx->expected_oids) > 0) {  | 
 
| 
1183
 | 
 0  | 
 5  | 
 	if (git_buf_oom(&filename))  | 
 
| 
1186
 | 
 0  | 
 5  | 
 	if (git_filebuf_open(&index_file, filename.ptr,  | 
 
| 
 | 
 0  | 
 5  | 
 	if (git_filebuf_open(&index_file, filename.ptr,  | 
 
| 
1198
 | 
 1280  | 
 5  | 
 	for (i = 0; i < 256; ++i) {  | 
 
| 
1204
 | 
 45  | 
 5  | 
 	git_vector_foreach(&idx->objects, i, entry) {  | 
 
| 
1209
 | 
 45  | 
 5  | 
 	git_vector_foreach(&idx->objects, i, entry) {  | 
 
| 
1214
 | 
 45  | 
 5  | 
 	git_vector_foreach(&idx->objects, i, entry) {  | 
 
| 
1217
 | 
 0  | 
 45  | 
 		if (entry->offset == UINT32_MAX)  | 
 
| 
1226
 | 
 45  | 
 5  | 
 	git_vector_foreach(&idx->objects, i, entry) {  | 
 
| 
1229
 | 
 45  | 
 0  | 
 		if (entry->offset != UINT32_MAX)  | 
 
| 
1239
 | 
 0  | 
 5  | 
 	if (git_filebuf_write(&index_file, &trailer_hash, GIT_OID_RAWSZ) < 0)  | 
 
| 
1243
 | 
 0  | 
 5  | 
 	if (git_filebuf_hash(&trailer_hash, &index_file) < 0)  | 
 
| 
1249
 | 
 0  | 
 5  | 
 	if (index_path(&filename, idx, ".idx") < 0)  | 
 
| 
1253
 | 
 0  | 
 5  | 
 	if (git_filebuf_commit_at(&index_file, filename.ptr) < 0)  | 
 
| 
1259
 | 
 0  | 
 5  | 
 	if (p_ftruncate(idx->pack->mwf.fd, idx->pack->mwf.size) < 0) {  | 
 
| 
1264
 | 
 0  | 
 5  | 
 	if (idx->do_fsync && p_fsync(idx->pack->mwf.fd) < 0) {  | 
 
| 
 | 
 0  | 
 0  | 
 	if (idx->do_fsync && p_fsync(idx->pack->mwf.fd) < 0) {  | 
 
| 
1270
 | 
 0  | 
 5  | 
 	if (p_close(idx->pack->mwf.fd) < 0) {  | 
 
| 
1277
 | 
 0  | 
 5  | 
 	if (index_path(&filename, idx, ".pack") < 0)  | 
 
| 
1281
 | 
 0  | 
 5  | 
 	if (p_rename(idx->pack->pack_name, git_buf_cstr(&filename)) < 0)  | 
 
| 
1307
 | 
 0  | 
 5  | 
 	if (idx == NULL)  | 
 
| 
1310
 | 
 0  | 
 5  | 
 	if (idx->have_stream)  | 
 
| 
1315
 | 
 5  | 
 0  | 
 	if (idx->pack->idx_cache) {  | 
 
| 
1317
 | 
 45  | 
 5  | 
 		git_oidmap_foreach_value(idx->pack->idx_cache, pentry, {  | 
 
| 
1326
 | 
 5  | 
 0  | 
 	if (!git_mutex_lock(&git__mwindow_mutex)) {  | 
 
| 
1327
 | 
 0  | 
 5  | 
 		if (!idx->pack_committed)  | 
 
| 
1335
 | 
 0  | 
 5  | 
 	while (git_oidmap_iterate((void **) &value, idx->expected_oids, &iter, &key) == 0)  |