{"thread":{"id":"49590","subject":"Git Test Coverage Report (Wednesday, Oct 17)","startedAt":"2018-10-17T13:39:01Z","lastAt":"2018-10-17T13:39:01Z","messageCount":1,"participants":["Derrick Stolee"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"360750","messageId":"8dc21d96-eaf9-cd23-20be-6249e356c7d4@gmail.com","threadId":"49590","inReplyTo":null,"subject":"Git Test Coverage Report (Wednesday, Oct 17)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-10-17T13:38:53Z","receivedAt":"2018-10-17T13:39:01Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"In an effort to ensure new code is reasonably covered by the test suite, \nwe now have contrib/coverage-diff.sh to combine the gcov output from \n'make coverage-test ; make coverage-report' with the output from 'git \ndiff A B' to discover _new_lines of code that are not covered. This \nreport ignores lines including \"BUG(\".\n\nThis report takes the output of these results after running on four \nbranches:\n\n         pu: 9b314678659b2d0a69e4ca4f77444ba66f158564\n             (build is broken)\n\n        jch: e6b0db6626cabc387dd5a8c60088421ce65e1686\n             (build is broken)\n\n       next: 3377e82b59874c0e626c00f29bf7526a27f29d65\n\n     master: a4b8ab5363a32f283a61ef3a962853556d136c0e\n\nmaster@{1}: 5a0cc8aca797dbd7d2be3b67458ff880ed45cddf\n\nI ran the test suite on each of these branches on an Ubuntu Linux VM, \nand I'm missing some dependencies (like apache, svn, and perforce) so \nnot all tests are run\n\nThanks,\n-Stolee\n\n\nUncovered Code in 'next' (3377e82) but not in 'master' (a4b8ab5)\n----------------------------------------------------------------\n\nblame.c\na470beea39  113)  !strcmp(r->index->cache[-1 - pos]->name, path))\na470beea39  272) int pos = index_name_pos(r->index, path, len);\na470beea39  274) mode = r->index->cache[pos]->ce_mode;\n\nbuiltin/am.c\n2abf350385 1414) repo_init_revisions(the_repository, &rev_info, NULL);\n\nbuiltin/archive.c\ne001fd3a50 builtin/archive.c  78) die(_(\"git archive: expected ACK/NAK, \ngot a flush packet\"));\ne001fd3a50 builtin/archive.c  80) if (starts_with(reader.line, \"NACK \"))\ne001fd3a50 builtin/archive.c  81) die(_(\"git archive: NACK %s\"), \nreader.line + 5);\ne001fd3a50 builtin/archive.c  82) if (starts_with(reader.line, \"ERR \"))\ne001fd3a50 builtin/archive.c  83) die(_(\"remote error: %s\"), reader.line \n+ 4);\ne001fd3a50 builtin/archive.c  84) die(_(\"git archive: protocol error\"));\ne001fd3a50 builtin/archive.c  89) die(_(\"git archive: expected a flush\"));\nfb19d32f05 builtin/archive.c  99) if (version != discover_version(&reader))\nfb19d32f05 builtin/archive.c 100) die(_(\"git archive: received different \nprotocol versions in subsequent requests\"));\n\nbuiltin/rev-list.c\n7c0fe330d5 builtin/rev-list.c 227) die(\"unexpected missing %s object '%s'\",\n7c0fe330d5 builtin/rev-list.c 228)     type_name(obj->type), \noid_to_hex(&obj->oid));\n\nbuiltin/upload-archive.c\ne001fd3a50 builtin/upload-archive.c 111) if (version == protocol_v0 || \nversion == protocol_v1)\ne001fd3a50 builtin/upload-archive.c 112) packet_write_fmt(1, \"NACK \nunable to spawn subprocess\\n\");\ne001fd3a50 builtin/upload-archive.c 113) else if (version == protocol_v2)\ne001fd3a50 builtin/upload-archive.c 114) error_clnt(\"unable to spawn \nsubprocess\\n\");\n\nconfig.c\nc780b9cfe8 2298) return val;\nc780b9cfe8 2301) if (is_bool)\nc780b9cfe8 2302) return val ? 0 : 1;\nc780b9cfe8 2304) return val;\n\ndiff.c\nb78ea5fc35 4128) add_external_diff_name(o->repo, &argv, other, two);\n\nhelp.c\n26c7d06783 help.c         500) static int get_alias(const char *var, \nconst char *value, void *data)\n26c7d06783 help.c         502) struct string_list *list = data;\n26c7d06783 help.c         504) if (skip_prefix(var, \"alias.\", &var))\n26c7d06783 help.c         505) string_list_append(list, var)->util = \nxstrdup(value);\n26c7d06783 help.c         507) return 0;\n26c7d06783 help.c         530) printf(\"\\n%s\\n\", _(\"Command aliases\"));\n26c7d06783 help.c         531) ALLOC_ARRAY(aliases, alias_list.nr + 1);\n26c7d06783 help.c         532) for (i = 0; i < alias_list.nr; i++) {\n26c7d06783 help.c         533) aliases[i].name = alias_list.items[i].string;\n26c7d06783 help.c         534) aliases[i].help = alias_list.items[i].util;\n26c7d06783 help.c         535) aliases[i].category = 1;\n26c7d06783 help.c         537) aliases[alias_list.nr].name = NULL;\n26c7d06783 help.c         538) print_command_list(aliases, 1, longest);\n26c7d06783 help.c         539) free(aliases);\n\nhttp-backend.c\nfb19d32f05 646) argv[1] = \".\";\nfb19d32f05 647) argv[2] = NULL;\n\nlist-objects-filter-options.c\nbc5975d24f  55) if (errbuf) {\nbc5975d24f  56) strbuf_addstr(\nbc5975d24f  60) return 1;\ncc0b05a4cc  86) if (errbuf)\n\nlist-objects-filter.c\nlist-objects.c\nf447a499db 197) ctx->show_object(obj, base->buf, ctx->show_data);\n\noidset.c\n8b2f8cbcb1 29) kh_del_oid(&set->set, pos);\n8b2f8cbcb1 30) return 1;\n\npreload-index.c\nae9af12287  73) struct progress_data *pd = p->progress;\nae9af12287  75) pthread_mutex_lock(&pd->mutex);\nae9af12287  76) pd->n += last_nr - nr;\nae9af12287  77) display_progress(pd->progress, pd->n);\nae9af12287  78) pthread_mutex_unlock(&pd->mutex);\nae9af12287  79) last_nr = nr;\nae9af12287  93) struct progress_data *pd = p->progress;\nae9af12287  95) pthread_mutex_lock(&pd->mutex);\nae9af12287  96) display_progress(pd->progress, pd->n + last_nr);\nae9af12287  97) pthread_mutex_unlock(&pd->mutex);\nae9af12287 128) pd.progress = start_delayed_progress(_(\"Refreshing \nindex\"), index->cache_nr);\nae9af12287 129) pthread_mutex_init(&pd.mutex, NULL);\nae9af12287 140) p->progress = &pd;\n\nread-cache.c\nae9af12287 1490) progress = start_delayed_progress(_(\"Refresh index\"),\nae9af12287 1491)   istate->cache_nr);\nae9af12287 1533) display_progress(progress, i);\nae9af12287 1566) display_progress(progress, istate->cache_nr);\nae9af12287 1567) stop_progress(&progress);\n252d079cbd 1778) const unsigned char *cp = (const unsigned char *)name;\n252d079cbd 1782) strip_len = decode_varint(&cp);\n77ff1127a4 1783) if (previous_ce) {\n77ff1127a4 1784) previous_len = previous_ce->ce_namelen;\n77ff1127a4 1785) if (previous_len < strip_len)\n252d079cbd 1786) die(_(\"malformed name field in the index, near path '%s'\"),\n77ff1127a4 1787) previous_ce->name);\n77ff1127a4 1788) copy_len = previous_len - strip_len;\n77ff1127a4 1790) copy_len = 0;\n252d079cbd 1792) name = (const char *)cp;\n252d079cbd 1798) len += copy_len;\n252d079cbd 1819) if (copy_len)\n252d079cbd 1820) memcpy(ce->name, previous_ce->name, copy_len);\n252d079cbd 1821) memcpy(ce->name + copy_len, name, len + 1 - copy_len);\n252d079cbd 1822) *ent_size = (name - ((char *)ondisk)) + len + 1 - copy_len;\nabb4bb8384 1959) munmap((void *)p->mmap, p->mmap_size);\nabb4bb8384 1960) die(_(\"index file corrupt\"));\n77ff1127a4 2001) mem_pool_init(&istate->ce_mem_pool,\n77ff1127a4 2041) static void *load_cache_entries_thread(void *_data)\n77ff1127a4 2043) struct load_cache_entries_thread_data *p = _data;\n77ff1127a4 2047) for (i = p->ieot_start; i < p->ieot_start + \np->ieot_blocks; i++) {\n77ff1127a4 2048) p->consumed += load_cache_entry_block(p->istate, \np->ce_mem_pool,\n77ff1127a4 2049) p->offset, p->ieot->entries[i].nr, p->mmap, \np->ieot->entries[i].offset, NULL);\n77ff1127a4 2050) p->offset += p->ieot->entries[i].nr;\n77ff1127a4 2052) return NULL;\n77ff1127a4 2055) static unsigned long load_cache_entries_threaded(struct \nindex_state *istate, const char *mmap, size_t mmap_size,\n77ff1127a4 2060) unsigned long consumed = 0;\n77ff1127a4 2063) if (istate->name_hash_initialized)\n77ff1127a4 2066) mem_pool_init(&istate->ce_mem_pool, 0);\n77ff1127a4 2069) if (nr_threads > ieot->nr)\n77ff1127a4 2070) nr_threads = ieot->nr;\n77ff1127a4 2071) data = xcalloc(nr_threads, sizeof(*data));\n77ff1127a4 2073) offset = ieot_start = 0;\n77ff1127a4 2074) ieot_blocks = DIV_ROUND_UP(ieot->nr, nr_threads);\n77ff1127a4 2075) for (i = 0; i < nr_threads; i++) {\n77ff1127a4 2076) struct load_cache_entries_thread_data *p = &data[i];\n77ff1127a4 2079) if (ieot_start + ieot_blocks > ieot->nr)\n77ff1127a4 2080) ieot_blocks = ieot->nr - ieot_start;\n77ff1127a4 2082) p->istate = istate;\n77ff1127a4 2083) p->offset = offset;\n77ff1127a4 2084) p->mmap = mmap;\n77ff1127a4 2085) p->ieot = ieot;\n77ff1127a4 2086) p->ieot_start = ieot_start;\n77ff1127a4 2087) p->ieot_blocks = ieot_blocks;\n77ff1127a4 2090) nr = 0;\n77ff1127a4 2091) for (j = p->ieot_start; j < p->ieot_start + \np->ieot_blocks; j++)\n77ff1127a4 2092) nr += p->ieot->entries[j].nr;\n77ff1127a4 2093) if (istate->version == 4) {\n77ff1127a4 2094) mem_pool_init(&p->ce_mem_pool,\n77ff1127a4 2097) mem_pool_init(&p->ce_mem_pool,\n77ff1127a4 2101) err = pthread_create(&p->pthread, NULL, \nload_cache_entries_thread, p);\n77ff1127a4 2102) if (err)\n77ff1127a4 2103) die(_(\"unable to create load_cache_entries thread: \n%s\"), strerror(err));\n77ff1127a4 2106) for (j = 0; j < ieot_blocks; j++)\n77ff1127a4 2107) offset += ieot->entries[ieot_start + j].nr;\n77ff1127a4 2108) ieot_start += ieot_blocks;\n77ff1127a4 2111) for (i = 0; i < nr_threads; i++) {\n77ff1127a4 2112) struct load_cache_entries_thread_data *p = &data[i];\n77ff1127a4 2114) err = pthread_join(p->pthread, NULL);\n77ff1127a4 2115) if (err)\n77ff1127a4 2116) die(_(\"unable to join load_cache_entries thread: %s\"), \nstrerror(err));\n77ff1127a4 2117) mem_pool_combine(istate->ce_mem_pool, p->ce_mem_pool);\n77ff1127a4 2118) consumed += p->consumed;\n77ff1127a4 2121) free(data);\n77ff1127a4 2123) return consumed;\n77ff1127a4 2192) nr_threads = cpus;\nabb4bb8384 2196) extension_offset = read_eoie_extension(mmap, mmap_size);\nabb4bb8384 2197) if (extension_offset) {\nabb4bb8384 2200) p.src_offset = extension_offset;\nabb4bb8384 2201) err = pthread_create(&p.pthread, NULL, \nload_index_extensions, &p);\nabb4bb8384 2202) if (err)\nabb4bb8384 2203) die(_(\"unable to create load_index_extensions thread: \n%s\"), strerror(err));\nabb4bb8384 2205) nr_threads--;\n77ff1127a4 2214) ieot = read_ieot_extension(mmap, mmap_size, \nextension_offset);\n77ff1127a4 2217) src_offset += load_cache_entries_threaded(istate, mmap, \nmmap_size, src_offset, nr_threads, ieot);\n77ff1127a4 2218) free(ieot);\nabb4bb8384 2232) int ret = pthread_join(p.pthread, NULL);\nabb4bb8384 2233) if (ret)\nabb4bb8384 2234) die(_(\"unable to join load_index_extensions thread: \n%s\"), strerror(ret));\n3255089ada 2775) ieot_blocks = nr_threads;\n77ff1127a4 2776) if (ieot_blocks > istate->cache_nr)\n77ff1127a4 2777) ieot_blocks = istate->cache_nr;\n3255089ada 2785) ieot = xcalloc(1, sizeof(struct index_entry_offset_table)\n3255089ada 2786) + (ieot_blocks * sizeof(struct index_entry_offset)));\n77ff1127a4 2787) ieot_entries = DIV_ROUND_UP(entries, ieot_blocks);\n3255089ada 2794) free(ieot);\n3b1d9e045e 2795) return -1;\n3255089ada 2821) ieot->entries[ieot->nr].nr = nr;\n3255089ada 2822) ieot->entries[ieot->nr].offset = offset;\n3255089ada 2823) ieot->nr++;\n3255089ada 2829) if (previous_name)\n3255089ada 2830) previous_name->buf[0] = 0;\n3255089ada 2831) nr = 0;\n3255089ada 2832) offset = lseek(newfd, 0, SEEK_CUR);\n3255089ada 2833) if (offset < 0) {\n3255089ada 2834) free(ieot);\n3255089ada 2835) return -1;\n3255089ada 2837) offset += write_buffer_len;\n3255089ada 2847) ieot->entries[ieot->nr].nr = nr;\n3255089ada 2848) ieot->entries[ieot->nr].offset = offset;\n3255089ada 2849) ieot->nr++;\n3255089ada 2861) free(ieot);\n3b1d9e045e 2862) return -1;\n3255089ada 2876) struct strbuf sb = STRBUF_INIT;\n3255089ada 2878) write_ieot_extension(&sb, ieot);\n3255089ada 2879) err = write_index_ext_header(&c, &eoie_c, newfd, \nCACHE_EXT_INDEXENTRYOFFSETTABLE, sb.len) < 0\n3255089ada 2880) || ce_write(&c, newfd, sb.buf, sb.len) < 0;\n3255089ada 2881) strbuf_release(&sb);\n3255089ada 2882) free(ieot);\n3255089ada 2883) if (err)\n3255089ada 2884) return -1;\n3b1d9e045e 3372) static size_t read_eoie_extension(const char *mmap, \nsize_t mmap_size)\n3b1d9e045e 3390) if (mmap_size < sizeof(struct cache_header) + \nEOIE_SIZE_WITH_HEADER + the_hash_algo->rawsz)\n3b1d9e045e 3391) return 0;\n3b1d9e045e 3394) index = eoie = mmap + mmap_size - EOIE_SIZE_WITH_HEADER \n- the_hash_algo->rawsz;\n3b1d9e045e 3395) if (CACHE_EXT(index) != CACHE_EXT_ENDOFINDEXENTRIES)\n3b1d9e045e 3396) return 0;\n3b1d9e045e 3397) index += sizeof(uint32_t);\n3b1d9e045e 3400) extsize = get_be32(index);\n3b1d9e045e 3401) if (extsize != EOIE_SIZE)\n3b1d9e045e 3402) return 0;\n3b1d9e045e 3403) index += sizeof(uint32_t);\n3b1d9e045e 3409) offset = get_be32(index);\n3b1d9e045e 3410) if (mmap + offset < mmap + sizeof(struct cache_header))\n3b1d9e045e 3411) return 0;\n3b1d9e045e 3412) if (mmap + offset >= eoie)\n3b1d9e045e 3413) return 0;\n3b1d9e045e 3414) index += sizeof(uint32_t);\n3b1d9e045e 3425) src_offset = offset;\n3b1d9e045e 3426) the_hash_algo->init_fn(&c);\n3b1d9e045e 3427) while (src_offset < mmap_size - the_hash_algo->rawsz - \nEOIE_SIZE_WITH_HEADER) {\n3b1d9e045e 3435) memcpy(&extsize, mmap + src_offset + 4, 4);\n3b1d9e045e 3436) extsize = ntohl(extsize);\n3b1d9e045e 3439) if (src_offset + 8 + extsize < src_offset)\n3b1d9e045e 3440) return 0;\n3b1d9e045e 3442) the_hash_algo->update_fn(&c, mmap + src_offset, 8);\n3b1d9e045e 3444) src_offset += 8;\n3b1d9e045e 3445) src_offset += extsize;\n3b1d9e045e 3447) the_hash_algo->final_fn(hash, &c);\n3b1d9e045e 3448) if (!hasheq(hash, (const unsigned char *)index))\n3b1d9e045e 3449) return 0;\n3b1d9e045e 3452) if (src_offset != mmap_size - the_hash_algo->rawsz - \nEOIE_SIZE_WITH_HEADER)\n3b1d9e045e 3453) return 0;\n3b1d9e045e 3455) return offset;\n3255089ada 3475) static struct index_entry_offset_table \n*read_ieot_extension(const char *mmap, size_t mmap_size, size_t offset)\n3255089ada 3477)        const char *index = NULL;\n3255089ada 3483)        if (!offset)\n3255089ada 3484)        return NULL;\n3255089ada 3485)        while (offset <= mmap_size - \nthe_hash_algo->rawsz - 8) {\n3255089ada 3486)        extsize = get_be32(mmap + offset + 4);\n3255089ada 3487)        if (CACHE_EXT((mmap + offset)) == \nCACHE_EXT_INDEXENTRYOFFSETTABLE) {\n3255089ada 3488)        index = mmap + offset + 4 + 4;\n3255089ada 3489)        break;\n3255089ada 3491)        offset += 8;\n3255089ada 3492)        offset += extsize;\n3255089ada 3494)        if (!index)\n3255089ada 3495)        return NULL;\n3255089ada 3498)        ext_version = get_be32(index);\n3255089ada 3499)        if (ext_version != IEOT_VERSION) {\n3255089ada 3500)        error(\"invalid IEOT version %d\", ext_version);\n3255089ada 3501)        return NULL;\n3255089ada 3503)        index += sizeof(uint32_t);\n3255089ada 3506)        nr = (extsize - sizeof(uint32_t)) / \n(sizeof(uint32_t) + sizeof(uint32_t));\n3255089ada 3507)        if (!nr) {\n3255089ada 3508)        error(\"invalid number of IEOT entries %d\", nr);\n3255089ada 3509)        return NULL;\n3255089ada 3511)        ieot = xmalloc(sizeof(struct \nindex_entry_offset_table)\n3255089ada 3512)        + (nr * sizeof(struct index_entry_offset)));\n3255089ada 3513)        ieot->nr = nr;\n3255089ada 3514)        for (i = 0; i < nr; i++) {\n3255089ada 3515)        ieot->entries[i].offset = get_be32(index);\n3255089ada 3516)        index += sizeof(uint32_t);\n3255089ada 3517)        ieot->entries[i].nr = get_be32(index);\n3255089ada 3518)        index += sizeof(uint32_t);\n3255089ada 3521)        return ieot;\n3255089ada 3524) static void write_ieot_extension(struct strbuf *sb, \nstruct index_entry_offset_table *ieot)\n3255089ada 3530)        put_be32(&buffer, IEOT_VERSION);\n3255089ada 3531)        strbuf_add(sb, &buffer, sizeof(uint32_t));\n3255089ada 3534)        for (i = 0; i < ieot->nr; i++) {\n3255089ada 3537)        put_be32(&buffer, ieot->entries[i].offset);\n3255089ada 3538)        strbuf_add(sb, &buffer, sizeof(uint32_t));\n3255089ada 3541)        put_be32(&buffer, ieot->entries[i].nr);\n3255089ada 3542)        strbuf_add(sb, &buffer, sizeof(uint32_t));\n3255089ada 3544) }\n\nrevision.c\n2abf350385 1525) if (ce_path_match(istate, ce, &revs->prune_data, NULL)) {\n2abf350385 1531) while ((i+1 < istate->cache_nr) &&\n2abf350385 1532)        ce_same_name(ce, istate->cache[i+1]))\n\nsplit-index.c\ne3d837989e 335) ce->ce_flags |= CE_UPDATE_IN_BASE;\n\ntransport-helper.c\nfb19d32f05  643) if (!data->connect && !data->stateless_connect)\n\ntransport.c\nwt-status.c\nf3bd35fa0d  671) s->committable = 1;\n73ba5d78b4 1953) if (s->state.rebase_in_progress ||\n73ba5d78b4 1954)     s->state.rebase_interactive_in_progress)\n73ba5d78b4 1955) branch_name = s->state.onto;\n73ba5d78b4 1956) else if (s->state.detached_from)\n73ba5d78b4 1957) branch_name = s->state.detached_from;\n\nCommits introducing uncovered code:\nBen Peart      3255089ad: ieot: add Index Entry Offset Table (IEOT) \nextension\nBen Peart      3b1d9e045: eoie: add End of Index Entry (EOIE) extension\nBen Peart      77ff1127a: read-cache: load cache entries on worker threads\nBen Peart      abb4bb838: read-cache: load cache extensions on a worker \nthread\nBen Peart      c780b9cfe: config: add new index.threads config setting\nJosh Steadmon      e001fd3a5: archive: implement protocol v2 archive command\nJosh Steadmon      fb19d32f0: archive: allow archive over HTTP(S) with \nproto v2\nMatthew DeVore      7c0fe330d: rev-list: handle missing tree objects \nproperly\nMatthew DeVore      bc5975d24: list-objects-filter: implement filter tree:0\nMatthew DeVore      cc0b05a4c: list-objects-filter-options: do not \nover-strbuf_init\nMatthew DeVore      f447a499d: list-objects: store common func args in \nstruct\nNguyễn Thái Ngọc Duy      252d079cb: read-cache.c: optimize reading \nindex format v4\nNguyễn Thái Ngọc Duy      26c7d0678: help -a: improve and make --verbose \ndefault\nNguyễn Thái Ngọc Duy      2abf35038: revision.c: remove implicit \ndependency on the_index\nNguyễn Thái Ngọc Duy      a470beea3: blame.c: rename \"repo\" argument to \"r\"\nNguyễn Thái Ngọc Duy      ae9af1228: status: show progress bar if \nrefreshing the index takes too long\nNguyễn Thái Ngọc Duy      b78ea5fc3: diff.c: reduce implicit dependency \non the_index\nRené Scharfe      8b2f8cbcb: oidset: use khash\nStephen P. Smith      73ba5d78b: roll wt_status_state into wt_status and \npopulate in the collect phase\nStephen P. Smith      f3bd35fa0: wt-status.c: set the committable flag \nin the collect phase\nSZEDER Gábor      e3d837989: split-index: don't compare cached data of \nentries already marked for split index\n\n\nUncovered Code in 'master' (a4b8ab5) but not in 5a0cc8a\n-------------------------------------------------------\n\nbuiltin/gc.c\n3029970275 builtin/gc.c 461) ret = error_errno(_(\"cannot stat '%s'\"), \ngc_log_path);\n3029970275 builtin/gc.c 470) ret = error_errno(_(\"cannot read '%s'\"), \ngc_log_path);\nfec2ed2187 builtin/gc.c 495) die(FAILED_RUN, pack_refs_cmd.argv[0]);\nfec2ed2187 builtin/gc.c 498) die(FAILED_RUN, reflog.argv[0]);\n3029970275 builtin/gc.c 585) exit(128);\nfec2ed2187 builtin/gc.c 637) die(FAILED_RUN, repack.argv[0]);\nfec2ed2187 builtin/gc.c 647) die(FAILED_RUN, prune.argv[0]);\nfec2ed2187 builtin/gc.c 654) die(FAILED_RUN, prune_worktrees.argv[0]);\nfec2ed2187 builtin/gc.c 658) die(FAILED_RUN, rerere.argv[0]);\n\nbuiltin/pack-objects.c\n2fa233a554 builtin/pack-objects.c 1512) hashcpy(base_oid.hash, base_sha1);\n2fa233a554 builtin/pack-objects.c 1513) if \n(!in_same_island(&delta->idx.oid, &base_oid))\n2fa233a554 builtin/pack-objects.c 1514) return 0;\n\ncommit-graph.c\n5cef295f28   67) return 0;\n20fd6d5799   79) return 0;\n\nmidx.c\ne43d2dcce1  285) if (hasheq(oid.hash,\ne43d2dcce1  286)    p->bad_object_sha1 + the_hash_algo->rawsz * i))\n\nrefs.c\n4a6067cda5 1405) return 0;\n\nCommits introducing uncovered code:\nDerrick Stolee      20fd6d579: commit-graph: not compatible with grafts\nDerrick Stolee      5cef295f2: commit-graph: not compatible with \nuninitialized repo\nJeff King      2fa233a55: pack-objects: handle island check for \n\"external\" delta base\nJeff King      e43d2dcce: more oideq/hasheq conversions\nJonathan Nieder      302997027: gc: do not return error for prior errors \nin daemonized mode\nJonathan Nieder      fec2ed218: gc: exit with status 128 on failure\nStefan Beller      4a6067cda: refs.c: migrate internal ref iteration to \npass thru repository argument\n"}]}