| line | true | false | branch | 
 
| 79 | 34 | 19 | if (!name) | 
 
| 87 | 108 | 19 | while ((c = *name++) != 0) { | 
 
| 88 | 0 | 108 | if (git__isspace(c)) | 
 
| 101 | 0 | 7 | if ((ret = git_repository_config_snapshot(&config, pb->repo)) < 0) | 
 
| 119 | 0 | 7 | config_get("pack.deltaCacheSize", pb->max_delta_cache_size, | 
 
|  | 0 | 0 | config_get("pack.deltaCacheSize", pb->max_delta_cache_size, | 
 
|  | 7 | 0 | config_get("pack.deltaCacheSize", pb->max_delta_cache_size, | 
 
|  | 0 | 0 | config_get("pack.deltaCacheSize", pb->max_delta_cache_size, | 
 
| 121 | 0 | 7 | config_get("pack.deltaCacheLimit", pb->cache_max_small_delta_size, | 
 
|  | 0 | 0 | config_get("pack.deltaCacheLimit", pb->cache_max_small_delta_size, | 
 
|  | 7 | 0 | config_get("pack.deltaCacheLimit", pb->cache_max_small_delta_size, | 
 
|  | 0 | 0 | config_get("pack.deltaCacheLimit", pb->cache_max_small_delta_size, | 
 
| 123 | 0 | 7 | config_get("pack.deltaCacheSize", pb->big_file_threshold, | 
 
|  | 0 | 0 | config_get("pack.deltaCacheSize", pb->big_file_threshold, | 
 
|  | 7 | 0 | config_get("pack.deltaCacheSize", pb->big_file_threshold, | 
 
|  | 0 | 0 | config_get("pack.deltaCacheSize", pb->big_file_threshold, | 
 
| 125 | 0 | 7 | config_get("pack.windowMemory", pb->window_memory_limit, 0); | 
 
|  | 0 | 0 | config_get("pack.windowMemory", pb->window_memory_limit, 0); | 
 
|  | 7 | 0 | config_get("pack.windowMemory", pb->window_memory_limit, 0); | 
 
|  | 0 | 0 | config_get("pack.windowMemory", pb->window_memory_limit, 0); | 
 
| 142 | 0 | 7 | GIT_ERROR_CHECK_ALLOC(pb); | 
 
| 145 | 7 | 0 | git_oidmap_new(&pb->walk_objects) < 0 || | 
 
| 153 | 7 | 0 | git_zstream_init(&pb->zstream, GIT_ZSTREAM_DEFLATE) < 0 || | 
 
| 154 | 7 | 0 | git_repository_odb(&pb->odb, repo) < 0 || | 
 
| 180 | 0 | 6 | assert(pb); | 
 
| 186 | 0 | 6 | assert(1 == pb->nr_threads); | 
 
| 199 | 0 | 6 | for (i = 0, po = pb->object_list; i < pb->nr_objects; i++, po++) { | 
 
| 200 | 0 | 0 | if (git_oidmap_set(pb->object_ix, &po->id, po) < 0) | 
 
| 214 | 64 | 0 | assert(pb && oid); | 
 
|  | 0 | 64 | assert(pb && oid); | 
 
| 218 | 11 | 53 | if (git_oidmap_exists(pb->object_ix, oid)) | 
 
| 221 | 6 | 47 | if (pb->nr_objects >= pb->nr_alloc) { | 
 
| 222 | 0 | 6 | GIT_ERROR_CHECK_ALLOC_ADD(&newsize, pb->nr_alloc, 1024); | 
 
|  | 0 | 6 | GIT_ERROR_CHECK_ALLOC_ADD(&newsize, pb->nr_alloc, 1024); | 
 
| 223 | 0 | 6 | GIT_ERROR_CHECK_ALLOC_MULTIPLY(&newsize, newsize / 2, 3); | 
 
|  | 0 | 6 | GIT_ERROR_CHECK_ALLOC_MULTIPLY(&newsize, newsize / 2, 3); | 
 
| 225 | 0 | 6 | if (!git__is_uint32(newsize)) { | 
 
| 234 | 0 | 6 | GIT_ERROR_CHECK_ALLOC(pb->object_list); | 
 
| 236 | 0 | 6 | if (rehash(pb) < 0) | 
 
| 243 | 0 | 53 | if ((ret = git_odb_read_header(&po->size, &po->type, pb->odb, oid)) < 0) | 
 
| 250 | 0 | 53 | if (git_oidmap_set(pb->object_ix, &po->id, po) < 0) { | 
 
| 257 | 32 | 21 | if (pb->progress_cb) { | 
 
| 261 | 2 | 30 | if (elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) { | 
 
| 268 | 0 | 2 | if (ret) | 
 
| 294 | 0 | 0 | if (error < 0 && error != GIT_EBUFS) | 
 
|  | 0 | 0 | if (error < 0 && error != GIT_EBUFS) | 
 
| 297 | 0 | 0 | if (error == GIT_EBUFS || delta_size != po->delta_size) { | 
 
|  | 0 | 0 | if (error == GIT_EBUFS || delta_size != po->delta_size) { | 
 
| 332 | 3 | 50 | if (po->delta) { | 
 
| 333 | 3 | 0 | if (po->delta_data) | 
 
| 335 | 0 | 0 | else if ((error = get_delta(&data, pb->odb, po)) < 0) | 
 
| 341 | 0 | 50 | if ((error = git_odb_read(&obj, pb->odb, &po->id)) < 0) | 
 
| 352 | 53 | 0 | if ((error = write_cb(hdr, hdr_len, cb_data)) < 0 || | 
 
|  | 53 | 0 | if ((error = write_cb(hdr, hdr_len, cb_data)) < 0 || | 
 
| 356 | 3 | 50 | if (type == GIT_OBJECT_REF_DELTA) { | 
 
| 357 | 3 | 0 | if ((error = write_cb(po->delta->id.id, GIT_OID_RAWSZ, cb_data)) < 0 || | 
 
|  | 3 | 0 | if ((error = write_cb(po->delta->id.id, GIT_OID_RAWSZ, cb_data)) < 0 || | 
 
| 363 | 3 | 50 | if (po->z_delta_size) { | 
 
| 366 | 3 | 0 | if ((error = write_cb(data, data_len, cb_data)) < 0 || | 
 
|  | 3 | 0 | if ((error = write_cb(data, data_len, cb_data)) < 0 || | 
 
| 371 | 0 | 50 | GIT_ERROR_CHECK_ALLOC(zbuf); | 
 
| 375 | 0 | 50 | if ((error = git_zstream_set_input(&pb->zstream, data, data_len)) < 0) | 
 
| 378 | 50 | 50 | while (!git_zstream_done(&pb->zstream)) { | 
 
| 379 | 50 | 0 | if ((error = git_zstream_get_output(zbuf, &zbuf_len, &pb->zstream)) < 0 || | 
 
|  | 50 | 0 | if ((error = git_zstream_get_output(zbuf, &zbuf_len, &pb->zstream)) < 0 || | 
 
| 380 | 50 | 0 | (error = write_cb(zbuf, zbuf_len, cb_data)) < 0 || | 
 
| 395 | 3 | 50 | if (po->delta) { | 
 
| 424 | 0 | 56 | if (po->recursing) { | 
 
| 427 | 3 | 53 | } else if (po->written) { | 
 
| 432 | 3 | 50 | if (po->delta) { | 
 
| 435 | 0 | 3 | if ((error = write_one(status, pb, po->delta, write_cb, cb_data)) < 0) | 
 
| 439 | 0 | 3 | if (*status == WRITE_ONE_RECURSIVE) | 
 
| 453 | 0 | 53 | if (po->filled) | 
 
| 463 | 0 | 0 | while (po) { | 
 
| 464 | 0 | 0 | if (add_to_order) { | 
 
| 469 | 0 | 0 | for (s = po->delta_sibling; s; s = s->delta_sibling) { | 
 
| 474 | 0 | 0 | if (po->delta_child) { | 
 
| 480 | 0 | 0 | if (po->delta_sibling) { | 
 
| 486 | 0 | 0 | while (po && !po->delta_sibling) { | 
 
|  | 0 | 0 | while (po && !po->delta_sibling) { | 
 
| 491 | 0 | 0 | if (!po) { | 
 
| 506 | 0 | 0 | for (root = po; root->delta; root = root->delta) | 
 
| 518 | 0 | 0 | if ((po = git_oidmap_get(pb->object_ix, oid)) == NULL) | 
 
| 533 | 0 | 7 | if ((wo = git__mallocarray(pb->nr_objects, sizeof(*wo))) == NULL) | 
 
| 536 | 53 | 7 | for (i = 0; i < pb->nr_objects; i++) { | 
 
| 549 | 53 | 7 | for (i = pb->nr_objects; i > 0;) { | 
 
| 551 | 50 | 3 | if (!po->delta) | 
 
| 561 | 0 | 7 | if (git_tag_foreach(pb->repo, &cb_tag_foreach, pb) < 0) { | 
 
| 570 | 53 | 7 | for (i = wo_end = 0; i < pb->nr_objects; i++) { | 
 
| 572 | 0 | 53 | if (po->tagged) | 
 
| 581 | 0 | 7 | for (; i < pb->nr_objects; i++) { | 
 
| 583 | 0 | 0 | if (po->tagged) | 
 
| 590 | 0 | 7 | for (i = last_untagged; i < pb->nr_objects; i++) { | 
 
| 592 | 0 | 0 | if (po->type != GIT_OBJECT_COMMIT && | 
 
|  | 0 | 0 | if (po->type != GIT_OBJECT_COMMIT && | 
 
| 601 | 0 | 7 | for (i = last_untagged; i < pb->nr_objects; i++) { | 
 
| 603 | 0 | 0 | if (po->type != GIT_OBJECT_TREE) | 
 
| 611 | 0 | 7 | for (i = last_untagged; i < pb->nr_objects; i++) { | 
 
| 613 | 0 | 0 | if (!po->filled) | 
 
| 617 | 0 | 7 | if (wo_end != pb->nr_objects) { | 
 
| 639 | 0 | 7 | if (write_order == NULL) | 
 
| 642 | 0 | 7 | if (!git__is_uint32(pb->nr_objects)) { | 
 
| 652 | 7 | 0 | if ((error = write_cb(&ph, sizeof(ph), cb_data)) < 0 || | 
 
|  | 7 | 0 | if ((error = write_cb(&ph, sizeof(ph), cb_data)) < 0 || | 
 
| 659 | 53 | 7 | for ( ; i < pb->nr_objects; ++i) { | 
 
| 662 | 0 | 53 | if ((error = write_one(&status, pb, po, write_cb, cb_data)) < 0) | 
 
| 667 | 0 | 7 | } while (pb->nr_remaining && i < pb->nr_objects); | 
 
|  | 0 | 0 | } while (pb->nr_remaining && i < pb->nr_objects); | 
 
| 669 | 0 | 7 | if ((error = git_hash_final(&entry_oid, &pb->ctx)) < 0) | 
 
| 676 | 0 | 7 | for ( ; i < pb->nr_objects; ++i) { | 
 
| 678 | 0 | 0 | if (po->delta_data) { | 
 
| 699 | 9 | 34 | if (a->type > b->type) | 
 
| 701 | 17 | 17 | if (a->type < b->type) | 
 
| 703 | 0 | 17 | if (a->hash > b->hash) | 
 
| 705 | 0 | 17 | if (a->hash < b->hash) | 
 
| 715 | 6 | 11 | if (a->size > b->size) | 
 
| 717 | 6 | 5 | if (a->size < b->size) | 
 
| 719 | 4 | 1 | return a < b ? -1 : (a > b); /* newest first */ | 
 
| 730 | 0 | 3 | if (git__add_sizet_overflow(&new_size, pb->delta_cache_size, delta_size)) | 
 
| 733 | 3 | 0 | if (pb->max_delta_cache_size && new_size > pb->max_delta_cache_size) | 
 
|  | 0 | 3 | if (pb->max_delta_cache_size && new_size > pb->max_delta_cache_size) | 
 
| 736 | 3 | 0 | if (delta_size < pb->cache_max_small_delta_size) | 
 
| 740 | 0 | 0 | if ((src_size >> 20) + (trg_size >> 21) > (delta_size >> 10)) | 
 
| 758 | 13 | 20 | if (trg_object->type != src_object->type) { | 
 
| 768 | 0 | 20 | if (src->depth >= max_depth) | 
 
| 773 | 20 | 0 | if (!trg_object->delta) { | 
 
| 783 | 0 | 20 | if (max_size == 0) | 
 
| 787 | 0 | 20 | sizediff = src_size < trg_size ? trg_size - src_size : 0; | 
 
| 788 | 0 | 20 | if (sizediff >= max_size) | 
 
| 790 | 0 | 20 | if (trg_size < src_size / 32) | 
 
| 794 | 12 | 8 | if (!trg->data) { | 
 
| 795 | 0 | 12 | if (git_odb_read(&obj, pb->odb, &trg_object->id) < 0) | 
 
| 800 | 0 | 12 | GIT_ERROR_CHECK_ALLOC(trg->data); | 
 
| 805 | 0 | 12 | if (sz != trg_size) { | 
 
| 813 | 6 | 14 | if (!src->data) { | 
 
| 816 | 6 | 0 | if (git_odb_read(&obj, pb->odb, &src_object->id) < 0 || | 
 
|  | 0 | 6 | if (git_odb_read(&obj, pb->odb, &src_object->id) < 0 || | 
 
| 822 | 0 | 6 | GIT_ERROR_CHECK_ALLOC(src->data); | 
 
| 827 | 0 | 6 | if (sz != src_size) { | 
 
| 835 | 12 | 8 | if (!src->index) { | 
 
| 836 | 0 | 12 | if (git_delta_index_init(&src->index, src->data, src_size) < 0) | 
 
| 842 | 17 | 3 | if (git_delta_create_from_index(&delta_buf, &delta_size, src->index, trg->data, trg_size, | 
 
| 846 | 0 | 3 | if (trg_object->delta) { | 
 
| 848 | 0 | 0 | if (delta_size == trg_object->delta_size && | 
 
|  | 0 | 0 | if (delta_size == trg_object->delta_size && | 
 
| 856 | 0 | 3 | if (trg_object->delta_data) { | 
 
| 858 | 0 | 0 | assert(pb->delta_cache_size >= trg_object->delta_size); | 
 
| 862 | 3 | 0 | if (delta_cacheable(pb, src_size, trg_size, delta_size)) { | 
 
| 868 | 0 | 3 | if (overflow) { | 
 
| 874 | 0 | 3 | GIT_ERROR_CHECK_ALLOC(trg_object->delta_data); | 
 
| 894 | 0 | 0 | while (child) { | 
 
| 896 | 0 | 0 | if (m < c) | 
 
| 907 | 0 | 24 | if (n->index) { | 
 
| 913 | 0 | 24 | if (n->data) { | 
 
| 928 | 19 | 11 | if (pb->progress_cb) { | 
 
| 932 | 16 | 3 | if (force || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) { | 
 
|  | 1 | 15 | if (force || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) { | 
 
| 939 | 0 | 4 | if (ret) | 
 
| 959 | 0 | 6 | GIT_ERROR_CHECK_ALLOC(array); | 
 
| 966 | 6 | 24 | if (!*list_size) { | 
 
| 981 | 0 | 24 | while (pb->window_memory_limit && | 
 
|  | 0 | 0 | while (pb->window_memory_limit && | 
 
| 982 | 0 | 0 | mem_usage > pb->window_memory_limit && | 
 
| 995 | 0 | 24 | if (po->delta_child) { | 
 
| 998 | 0 | 0 | if (delta_limit > max_depth) | 
 
| 1005 | 44 | 0 | while (--j > 0) { | 
 
| 1010 | 33 | 11 | if (other_idx >= window) | 
 
| 1014 | 11 | 33 | if (!m->object) | 
 
| 1017 | 0 | 33 | if (try_delta(pb, n, m, max_depth, &mem_usage, &ret) < 0) | 
 
| 1019 | 13 | 20 | if (ret < 0) | 
 
| 1021 | 3 | 17 | else if (ret > 0) | 
 
| 1039 | 3 | 21 | if (po->delta_data) { | 
 
| 1040 | 0 | 3 | if (git_zstream_deflatebuf(&zbuf, po->delta_data, po->delta_size) < 0) | 
 
| 1045 | 0 | 3 | GIT_ERROR_CHECK_ALLOC(po->delta_data); | 
 
| 1062 | 3 | 21 | if (po->delta && max_depth <= n->depth) | 
 
|  | 0 | 3 | if (po->delta && max_depth <= n->depth) | 
 
| 1070 | 3 | 21 | if (po->delta) { | 
 
| 1074 | 5 | 3 | while (dist--) { | 
 
| 1084 | 24 | 0 | if (count + 1 < window) | 
 
| 1086 | 0 | 24 | if (idx >= window) | 
 
| 1092 | 66 | 6 | for (i = 0; i < window; ++i) { | 
 
| 1316 | 10 | 1 | if (pb->nr_objects == 0 || pb->done) | 
 
|  | 4 | 6 | if (pb->nr_objects == 0 || pb->done) | 
 
| 1323 | 3 | 3 | if (pb->progress_cb) | 
 
| 1327 | 0 | 6 | GIT_ERROR_CHECK_ALLOC(delta_list); | 
 
| 1329 | 53 | 6 | for (i = 0; i < pb->nr_objects; ++i) { | 
 
| 1333 | 24 | 29 | if (po->size < 50 || po->size > pb->big_file_threshold) | 
 
|  | 0 | 24 | if (po->size < 50 || po->size > pb->big_file_threshold) | 
 
| 1339 | 6 | 0 | if (n > 1) { | 
 
| 1341 | 0 | 6 | if (ll_find_deltas(pb, delta_list, n, | 
 
| 1360 | 0 | 4 | PREPARE_PACK; | 
 
| 1366 | 0 | 3 | PREPARE_PACK; | 
 
| 1392 | 0 | 4 | PREPARE_PACK; | 
 
| 1394 | 0 | 4 | if (path == NULL) { | 
 
| 1395 | 0 | 0 | if ((error = git_repository_item_path(&object_path, pb->repo, GIT_REPOSITORY_ITEM_OBJECTS)) < 0) | 
 
| 1397 | 0 | 0 | if ((error = git_buf_joinpath(&object_path, git_buf_cstr(&object_path), "pack")) < 0) | 
 
| 1405 | 0 | 4 | if ((error = git_indexer_new(&indexer, path, mode, pb->odb, &opts)) < 0) | 
 
| 1408 | 4 | 0 | if (!git_repository__configmap_lookup(&t, pb->repo, GIT_CONFIGMAP_FSYNCOBJECTFILES) && t) | 
 
|  | 0 | 4 | if (!git_repository__configmap_lookup(&t, pb->repo, GIT_CONFIGMAP_FSYNCOBJECTFILES) && t) | 
 
| 1414 | 0 | 4 | if ((error = git_packbuilder_foreach(pb, write_cb, &ctx)) < 0) | 
 
| 1417 | 0 | 4 | if ((error = git_indexer_commit(indexer, &stats)) < 0) | 
 
| 1443 | 0 | 11 | if (git_tree_entry_type(entry) == GIT_OBJECT_COMMIT) | 
 
| 1446 | 11 | 0 | if (!(error = git_buf_sets(&ctx->buf, root)) && | 
 
|  | 11 | 0 | if (!(error = git_buf_sets(&ctx->buf, root)) && | 
 
| 1462 | 0 | 4 | if (git_packbuilder_insert_tree(pb, git_commit_tree_id(commit)) < 0) | 
 
| 1475 | 4 | 0 | if (!(error = git_tree_lookup(&tree, pb->repo, oid)) && | 
 
|  | 4 | 0 | if (!(error = git_tree_lookup(&tree, pb->repo, oid)) && | 
 
| 1489 | 1 | 0 | assert(pb && id); | 
 
|  | 0 | 1 | assert(pb && id); | 
 
| 1491 | 0 | 1 | if ((error = git_object_lookup(&obj, pb->repo, id, GIT_OBJECT_ANY)) < 0) | 
 
| 1505 | 0 | 0 | if ((error = git_packbuilder_insert(pb, id, name)) < 0) | 
 
| 1535 | 0 | 36 | if (!obj) { | 
 
| 1551 | 36 | 8 | if ((obj = git_oidmap_get(pb->walk_objects, id)) == NULL) { | 
 
| 1552 | 0 | 36 | if ((error = lookup_walk_object(&obj, pb, id)) < 0) | 
 
| 1555 | 0 | 36 | if ((error = git_oidmap_set(pb->walk_objects, &obj->id, obj)) < 0) | 
 
| 1568 | 0 | 0 | if ((error = retrieve_object(&obj, pb, id)) < 0) | 
 
| 1583 | 0 | 0 | if ((error = retrieve_object(&obj, pb, id)) < 0) | 
 
| 1586 | 0 | 0 | if (obj->uninteresting) | 
 
| 1591 | 0 | 0 | if ((error = git_tree_lookup(&tree, pb->repo, id)) < 0) | 
 
| 1594 | 0 | 0 | for (i = 0; i < git_tree_entrycount(tree); i++) { | 
 
| 1599 | 0 | 0 | if ((error = mark_tree_uninteresting(pb, entry_id)) < 0) | 
 
| 1603 | 0 | 0 | if ((error = mark_blob_uninteresting(pb, entry_id)) < 0) | 
 
| 1628 | 3 | 3 | for (list = commits; list; list = list->next) { | 
 
| 1629 | 3 | 0 | if (!list->item->uninteresting) | 
 
| 1632 | 0 | 0 | if ((error = git_commit_lookup(&commit, pb->repo, &list->item->oid)) < 0) | 
 
| 1638 | 0 | 0 | if (error < 0) | 
 
| 1653 | 0 | 17 | if ((error = retrieve_object(&obj, pb, git_tree_id(tree))) < 0) | 
 
| 1656 | 17 | 0 | if (obj->seen || obj->uninteresting) | 
 
|  | 0 | 17 | if (obj->seen || obj->uninteresting) | 
 
| 1661 | 0 | 17 | if ((error = git_packbuilder_insert(pb, &obj->id, NULL))) | 
 
| 1664 | 26 | 17 | for (i = 0; i < git_tree_entrycount(tree); i++) { | 
 
| 1669 | 0 | 8 | if ((error = git_tree_lookup(&subtree, pb->repo, entry_id)) < 0) | 
 
| 1675 | 0 | 8 | if (error < 0) | 
 
| 1680 | 0 | 18 | if ((error = retrieve_object(&obj, pb, entry_id)) < 0) | 
 
| 1682 | 0 | 18 | if (obj->uninteresting) | 
 
| 1685 | 0 | 18 | if ((error = git_packbuilder_insert(pb, entry_id, name)) < 0) | 
 
| 1706 | 0 | 9 | if ((error = git_packbuilder_insert(pb, &obj->id, NULL)) < 0) | 
 
| 1709 | 0 | 9 | if ((error = git_commit_lookup(&commit, pb->repo, &obj->id)) < 0) | 
 
| 1712 | 0 | 9 | if ((error = git_tree_lookup(&tree, pb->repo, git_commit_tree_id(commit))) < 0) | 
 
| 1715 | 0 | 9 | if ((error = pack_objects_insert_tree(pb, tree)) < 0) | 
 
| 1730 | 3 | 0 | assert(pb && walk); | 
 
|  | 0 | 3 | assert(pb && walk); | 
 
| 1732 | 0 | 3 | if ((error = mark_edges_uninteresting(pb, walk->user_input)) < 0) | 
 
| 1743 | 9 | 3 | while ((error = git_revwalk_next(&id, walk)) == 0) { | 
 
| 1744 | 0 | 9 | if ((error = retrieve_object(&obj, pb, &id)) < 0) | 
 
| 1747 | 9 | 0 | if (obj->seen || obj->uninteresting) | 
 
|  | 0 | 9 | if (obj->seen || obj->uninteresting) | 
 
| 1750 | 0 | 9 | if ((error = pack_objects_insert_commit(pb, obj)) < 0) | 
 
| 1754 | 3 | 0 | if (error == GIT_ITEROVER) | 
 
| 1762 | 0 | 3 | if (!pb) | 
 
| 1773 | 0 | 7 | if (pb == NULL) | 
 
| 1784 | 7 | 0 | if (pb->odb) | 
 
| 1787 | 7 | 0 | if (pb->object_ix) | 
 
| 1790 | 6 | 1 | if (pb->object_list) |