{"thread":{"id":"49574","subject":"Git Test Coverage Report (Monday, Oct 15)","startedAt":"2018-10-15T16:24:51Z","lastAt":"2018-10-15T19:43:13Z","messageCount":2,"participants":["Derrick Stolee"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"360541","messageId":"6be9fe04-138d-01b7-91c1-6c029ab7c9be@gmail.com","threadId":"49574","inReplyTo":null,"subject":"Git Test Coverage Report (Monday, Oct 15)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-10-15T16:24:44Z","receivedAt":"2018-10-15T16:24:51Z","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: 78bfaf7bc1efe6892fe4dbedf9ed80f9dd48146c\n\n        jch: d67e018e0f57ebbb4fa0354a58a0a6d47e25a948\n\n       next: 152ad8e3369ac77026886a2910e3a407c281df35\n\n     master: 5a0cc8aca797dbd7d2be3b67458ff880ed45cddf\n\n      maint: 04861070400d3ca9d487bd0d736ca818b9ffe371\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\nI submit this output without comment. I'm taking a look especially at my \nown lines to see where coverage can be improved.\n\nThanks,\n\n-Stolee\n\nUncovered code in 'pu' (12227c8) and not in 'jch' (22f2f0f)\n-----------------------------------------------------------\nbuiltin/blame.c\n74e8221b52 builtin/blame.c    924) blame_date_width = sizeof(\"Thu Oct 19 \n16:00\");\n74e8221b52 builtin/blame.c    925) break;\n\nbuiltin/branch.c\nba8ba9df26 builtin/branch.c 452) die(_(\"could not resolve HEAD\"));\nba8ba9df26 builtin/branch.c 458) die(_(\"HEAD (%s) points outside of \nrefs/heads/\"), refname);\n\nbuiltin/grep.c\na8ace17bd4 builtin/grep.c  439) grep_read_unlock();\n\nbuiltin/help.c\ne6e76baaf4 builtin/help.c 429) if (!exclude_guides || alias[0] == '!') {\ne6e76baaf4 builtin/help.c 430) printf_ln(_(\"'%s' is aliased to '%s'\"), \ncmd, alias);\ne6e76baaf4 builtin/help.c 431) free(alias);\ne6e76baaf4 builtin/help.c 432) exit(0);\ne6e76baaf4 builtin/help.c 441) fprintf_ln(stderr, _(\"'%s' is aliased to \n'%s'\"), cmd, alias);\ne6e76baaf4 builtin/help.c 442) count = split_cmdline(alias, &argv);\ne6e76baaf4 builtin/help.c 443) if (count < 0)\ne6e76baaf4 builtin/help.c 444) die(_(\"bad alias.%s string: %s\"), cmd,\ne6e76baaf4 builtin/help.c 446) free(argv);\ne6e76baaf4 builtin/help.c 448) return alias;\n\nbuiltin/rebase--interactive.c\n6424061be4 builtin/rebase--interactive.c   23) return \nerror_errno(_(\"could not read '%s'.\"), todo_file);\n6424061be4 builtin/rebase--interactive.c   28) return \nerror_errno(_(\"could not write '%s'\"), todo_file);\n7ccfac40bc builtin/rebase--interactive.c   43) return \nerror_errno(_(\"could not read '%s'.\"), todo_file);\n7ccfac40bc builtin/rebase--interactive.c   46) \ntodo_list_release(&todo_list);\n7ccfac40bc builtin/rebase--interactive.c   47) return error(_(\"unusable \ntodo list: '%s'\"), todo_file);\n9787d17d40 builtin/rebase--interactive.c  294) ret = \nrearrange_squash_in_todo_file();\n\ndate.c\n74e8221b52  113) die(\"Timestamp too large for this system: %\"PRItime, time);\n74e8221b52  216) if (tm->tm_mon == human_tm->tm_mon) {\n74e8221b52  217) if (tm->tm_mday > human_tm->tm_mday) {\n74e8221b52  219) } else if (tm->tm_mday == human_tm->tm_mday) {\n74e8221b52  220) hide.date = hide.wday = 1;\n74e8221b52  221) } else if (tm->tm_mday + 5 > human_tm->tm_mday) {\n74e8221b52  223) hide.date = 1;\n74e8221b52  231) gettimeofday(&now, NULL);\n74e8221b52  232) show_date_relative(time, tz, &now, buf);\n74e8221b52  233) return;\n74e8221b52  246) hide.seconds = 1;\n74e8221b52  247) hide.tz |= !hide.date;\n74e8221b52  248) hide.wday = hide.time = !hide.year;\n74e8221b52  262) strbuf_rtrim(buf);\n74e8221b52  287) gettimeofday(&now, NULL);\n74e8221b52  290) human_tz = local_time_tzoffset(now.tv_sec, &human_tm);\n74e8221b52  886) static int auto_date_style(void)\n74e8221b52  888) return (isatty(1) || pager_in_use()) ? DATE_HUMAN : \nDATE_NORMAL;\n74e8221b52  909) return DATE_HUMAN;\n74e8221b52  911) return auto_date_style();\n\ngit.c\na9a60b94cc 322) fprintf_ln(stderr, _(\"'%s' is aliased to '%s'\"),\n\nrebase-interactive.c\nb74a37a5a7  26) warning(_(\"unrecognized setting %s for option \"\n6424061be4 107) return error_errno(_(\"could not write '%s''\"), todo_file);\n6424061be4 110) return error(_(\"could not copy '%s' to '%s'.\"), todo_file,\nb74a37a5a7 174) goto leave_check;\n\nsequencer.c\nb5d6062402 4425) strbuf_insert(buf, todo_list->items[insert].offset_in_buf +\nb5d6062402 4437) int sequencer_add_exec_commands(const char *commands)\n06d8136126 4444) return error_errno(_(\"could not read '%s'.\"), todo_file);\nb5d6062402 4446) if (todo_list_parse_insn_buffer(todo_list.buf.buf, \n&todo_list)) {\nb5d6062402 4451) todo_list_add_exec_commands(&todo_list, commands);\nb5d6062402 4452) res = write_message(todo_list.buf.buf, \ntodo_list.buf.len, todo_file, 0);\n0cce4a2756 4453) todo_list_release(&todo_list);\nb5d6062402 4455) return res;\nb74a37a5a7 4515) goto out;\nb74a37a5a7 4520) goto out;\nb8dac44d10 4660) todo_list_release(&new_todo);\n009173ed7b 4665) todo_list_release(&new_todo);\n009173ed7b 4666) return error_errno(_(\"could not write '%s'\"), todo_file);\n9787d17d40 4859) int rearrange_squash_in_todo_file(void)\n9787d17d40 4861) const char *todo_file = rebase_path_todo();\n9787d17d40 4862) struct todo_list todo_list = TODO_LIST_INIT;\n9787d17d40 4863) int res = 0;\n9787d17d40 4865) if (strbuf_read_file_or_whine(&todo_list.buf, \ntodo_file) < 0)\n9787d17d40 4866) return -1;\n9787d17d40 4867) if (todo_list_parse_insn_buffer(todo_list.buf.buf, \n&todo_list) < 0) {\n9787d17d40 4868) todo_list_release(&todo_list);\n9787d17d40 4869) return -1;\n9787d17d40 4872) res = todo_list_rearrange_squash(&todo_list);\n9787d17d40 4873) if (!res)\n9787d17d40 4874) res = rewrite_file(todo_file, todo_list.buf.buf, \ntodo_list.buf.len);\n9787d17d40 4876) todo_list_release(&todo_list);\n\nsubmodule-config.c\nbcbc780d14 739) return CONFIG_INVALID_KEY;\n45f5ef3d77 754) warning(_(\"Could not update .gitmodules entry %s\"), key);\n\nwrapper.c\n5efde212fc  70) die(\"Out of memory, malloc failed (tried to allocate %\" \nPRIuMAX \" bytes)\",\n5efde212fc  73) error(\"Out of memory, malloc failed (tried to allocate \n%\" PRIuMAX \" bytes)\",\n\nCommits introducing uncovered code:\nAlban Gruin      009173ed7: sequencer: change complete_action() to use \nthe refactored functions\nAlban Gruin      06d813612: sequencer: fix a call to error() in \ntransform_todo_file()\nAlban Gruin      6424061be: rebase-interactive: rewrite edit_todo_list() \nto handle the initial edit\nAlban Gruin      7ccfac40b: rebase--interactive: move \ntransform_todo_file() to rebase--interactive.c\nAlban Gruin      9787d17d4: sequencer: refactor rearrange_squash() to \nwork on a todo_list\nAlban Gruin      b5d606240: sequencer: refactor \nsequencer_add_exec_commands() to work on a todo_list\nAlban Gruin      b74a37a5a: sequencer: refactor check_todo_list() to \nwork on a todo_list\nAlban Gruin      b8dac44d1: sequencer: refactor skip_unnecessary_picks() \nto work on a todo_list\nAntonio Ospite      45f5ef3d7: submodule: factor out a \nconfig_set_in_gitmodules_file_gently function\nAntonio Ospite      a8ace17bd: submodule: support reading .gitmodules \nwhen it's not in the working tree\nAntonio Ospite      bcbc780d1: submodule: add a \nprint_config_from_gitmodules() helper\nDaniels Umanovskis      ba8ba9df2: branch: introduce --show-current \ndisplay option\nLiam Beguin      0cce4a275: rebase -i -x: add exec commands via the \nrebase--helper\nLinus Torvalds      74e8221b5: Add 'human' date format\nMartin Koegler      5efde212f: zlib.c: use size_t for size\nRasmus Villemoes      a9a60b94c: git.c: handle_alias: prepend alias info \nwhen first argument is -h\nRasmus Villemoes      e6e76baaf: help: redirect to aliased commands for \n\"git cmd --help\"\n\nUncovered code in 'jch' (22f2f0f) and not in 'next' (152ad8e)\n-------------------------------------------------------------\napply.c\neccb5a5f3d 4071) return get_oid_hex(p->old_oid_prefix, oid);\n\nbuiltin/fetch.c\n7bbc53a589 builtin/fetch.c  385) continue; /* can this happen??? */\n\nbuiltin/rebase--interactive.c\n53bbcfbde7 builtin/rebase--interactive2.c  24) return error(_(\"no HEAD?\"));\n53bbcfbde7 builtin/rebase--interactive2.c  51) return \nerror_errno(_(\"could not create temporary %s\"), path_state_dir());\n53bbcfbde7 builtin/rebase--interactive2.c  57) return \nerror_errno(_(\"could not mark as interactive\"));\n53bbcfbde7 builtin/rebase--interactive2.c  77) return -1;\n53bbcfbde7 builtin/rebase--interactive2.c  81) return -1;\n53bbcfbde7 builtin/rebase--interactive2.c  87) free(revisions);\n53bbcfbde7 builtin/rebase--interactive2.c  88) free(shortrevisions);\n53bbcfbde7 builtin/rebase--interactive2.c  90) return -1;\n53bbcfbde7 builtin/rebase--interactive2.c  98) free(revisions);\n53bbcfbde7 builtin/rebase--interactive2.c  99) free(shortrevisions);\n53bbcfbde7 builtin/rebase--interactive2.c 101) return \nerror_errno(_(\"could not open %s\"), rebase_path_todo());\n53bbcfbde7 builtin/rebase--interactive2.c 106) \nargv_array_push(&make_script_args, restrict_revision);\n53bbcfbde7 builtin/rebase--interactive2.c 114) error(_(\"could not \ngenerate todo list\"));\n53bbcfbde7 builtin/rebase--interactive2.c 206) \nusage_with_options(builtin_rebase_interactive_usage, options);\n53bbcfbde7 builtin/rebase--interactive2.c 220) \nwarning(_(\"--[no-]rebase-cousins has no effect without \"\n0af129b2ed builtin/rebase--interactive2.c 226) die(_(\"a base commit must \nbe provided with --upstream or --onto\"));\n34b47315d9 builtin/rebase--interactive.c  261) ret = rearrange_squash();\n34b47315d9 builtin/rebase--interactive.c  262) break;\n34b47315d9 builtin/rebase--interactive.c  264) ret = \nsequencer_add_exec_commands(cmd);\n34b47315d9 builtin/rebase--interactive.c  265) break;\n\nbuiltin/rebase.c\n55071ea248   61) strbuf_trim(&out);\n55071ea248   62) ret = !strcmp(\"true\", out.buf);\n55071ea248   63) strbuf_release(&out);\n002ee2fe68  115) die(_(\"%s requires an interactive rebase\"), option);\nf95736288a  148) return error_errno(_(\"could not read '%s'\"), path);\nf95736288a  162) return -1;\nf95736288a  167) return error(_(\"could not get 'onto': '%s'\"), buf.buf);\nf95736288a  178) return -1;\nf95736288a  179) } else if (read_one(state_dir_path(\"head\", opts), &buf))\nf95736288a  180) return -1;\nf95736288a  182) return error(_(\"invalid orig-head: '%s'\"), buf.buf);\nf95736288a  186) return -1;\nf95736288a  188) opts->flags &= ~REBASE_NO_QUIET;\n73d51ed0a5  196) opts->signoff = 1;\n73d51ed0a5  197) opts->flags |= REBASE_FORCE;\nead98c111b  204) return -1;\n12026a412c  219) return -1;\nba1905a5fe  227) return -1;\nba1905a5fe  235) return -1;\n6defce2b02  255) return error(_(\"Could not read '%s'\"), path);\n6defce2b02  271) res = error(_(\"Cannot store %s\"), autostash.buf);\n6defce2b02  275) return res;\nbc24382c2b  373) argv_array_pushf(&child.args,\nbc24382c2b  375) oid_to_hex(&opts->restrict_revision->object.oid));\nac7f467fef  507) struct strbuf dir = STRBUF_INIT;\n6defce2b02  509) apply_autostash(opts);\nac7f467fef  510) strbuf_addstr(&dir, opts->state_dir);\nac7f467fef  511) remove_dir_recursively(&dir, 0);\nac7f467fef  512) strbuf_release(&dir);\nac7f467fef  513) die(\"Nothing to do\");\nac7f467fef  543) return -1;\nac7f467fef  547) rollback_lock_file(&lock);\nac7f467fef  548) return error(_(\"could not determine HEAD revision\"));\nac7f467fef  565) rollback_lock_file(&lock);\nac7f467fef  566) return error(_(\"could not read index\"));\nac7f467fef  570) error(_(\"failed to find tree of %s\"), oid_to_hex(oid));\nac7f467fef  571) rollback_lock_file(&lock);\nac7f467fef  572) free((void *)desc.buffer);\nac7f467fef  573) return -1;\nac7f467fef  586) ret = error(_(\"could not write index\"));\nac7f467fef  590) return ret;\nac7f467fef  606) } else if (old_orig)\nac7f467fef  607) delete_ref(NULL, \"ORIG_HEAD\", old_orig, 0);\nbff014dac7  635) opts->flags &= !REBASE_DIFFSTAT;\n9a48a615b4  669) return 1;\n9a48a615b4  685) return 0;\n55071ea248  893) const char *path = mkpath(\"%s/git-legacy-rebase\",\n55071ea248  896) if (sane_execvp(path, (char **)argv) < 0)\n55071ea248  897) die_errno(_(\"could not exec %s\"), path);\n0eabf4b95c  915) die(_(\"It looks like 'git am' is in progress. Cannot \nrebase.\"));\nf28d40d3a9  952) usage_with_options(builtin_rebase_usage,\nf95736288a  972) die(_(\"Cannot read HEAD\"));\nf95736288a  976) die(_(\"could not read index\"));\nf95736288a  990) exit(1);\n122420c295 1002) die(_(\"could not discard worktree changes\"));\n122420c295 1004) exit(1);\n5e5d96197c 1015) exit(1);\n5e5d96197c 1018) die(_(\"could not move back to %s\"),\n5a61494539 1028) die(_(\"could not remove '%s'\"), options.state_dir);\nc54dacb50e 1047) const char *last_slash = strrchr(options.state_dir, '/');\nc54dacb50e 1048) const char *state_dir_base =\nc54dacb50e 1049) last_slash ? last_slash + 1 : options.state_dir;\nc54dacb50e 1050) const char *cmd_live_rebase =\nc54dacb50e 1052) strbuf_reset(&buf);\nc54dacb50e 1053) strbuf_addf(&buf, \"rm -fr \\\"%s\\\"\", options.state_dir);\nc54dacb50e 1054) die(_(\"It seems that there is already a %s directory, \nand\\n\"\n53f9e5be94 1078) strbuf_addstr(&options.git_am_opt, \" --ignore-date\");\n53f9e5be94 1079) options.flags |= REBASE_FORCE;\n7998dbe1ec 1091) strbuf_addf(&options.git_am_opt, \" -C%d\", opt_c);\n3c3588c7d3 1123) else if (strcmp(\"no-rebase-cousins\", rebase_merges))\n3c3588c7d3 1124) die(_(\"Unknown mode: %s\"), rebase_merges);\nba1905a5fe 1146) die(_(\"--strategy requires --merge or --interactive\"));\ncda614e489 1164) strbuf_addstr(&options.git_format_patch_opt, \" \n--progress\");\nac7f467fef 1173) options.state_dir = apply_dir();\nac7f467fef 1174) break;\nac7f467fef 1251) die(_(\"invalid upstream '%s'\"), options.upstream_name);\n9dba809a69 1257) die(_(\"Could not create new root commit\"));\ne65123a71d 1307) die(_(\"fatal: no such branch/commit '%s'\"),\nac7f467fef 1315) die(_(\"No such ref: %s\"), \"HEAD\");\nac7f467fef 1327) die(_(\"Could not resolve HEAD to a revision\"));\ne0333e5c63 1340) die(_(\"could not read index\"));\n6defce2b02 1367) die(_(\"Cannot autostash\"));\n6defce2b02 1370) die(_(\"Unexpected stash response: '%s'\"),\n6defce2b02 1376) die(_(\"Could not create directory for '%s'\"),\n6defce2b02 1382) die(_(\"could not reset --hard\"));\ne65123a71d 1426) ret = !!error(_(\"could not parse '%s'\"),\ne65123a71d 1428) goto cleanup;\ne65123a71d 1437) ret = !!error(_(\"could not switch to \"\n1ed9c14ff2 1447)  resolve_ref_unsafe(\"HEAD\", 0, NULL, &flag))\n1ed9c14ff2 1448) puts(_(\"HEAD is up to date.\"));\n9a48a615b4 1457)  resolve_ref_unsafe(\"HEAD\", 0, NULL, &flag))\n9a48a615b4 1458) puts(_(\"HEAD is up to date, rebase forced.\"));\n\nbuiltin/repack.c\n2f0c9e9a9b 239) die(\"repack: Expecting full hex object ID lines only \nfrom pack-objects.\");\n2f0c9e9a9b 411) die(\"repack: Expecting full hex object ID lines only \nfrom pack-objects.\");\n\nbuiltin/stash.c\n3d5ec65ce8 builtin/stash--helper.c  126) error(_(\"'%s' is not a \nstash-like commit\"), revision);\n3d5ec65ce8 builtin/stash--helper.c  127) free_stash_info(info);\n3d5ec65ce8 builtin/stash--helper.c  128) exit(128);\n3d5ec65ce8 builtin/stash--helper.c  161) free_stash_info(info);\n3d5ec65ce8 builtin/stash--helper.c  162) fprintf_ln(stderr, _(\"No stash \nentries found.\"));\n3d5ec65ce8 builtin/stash--helper.c  163) return -1;\n3d5ec65ce8 builtin/stash--helper.c  198) free_stash_info(info);\n7005771171 builtin/stash--helper.c  225) return error(_(\"git stash clear \nwith parameters is \"\n3d5ec65ce8 builtin/stash--helper.c  241) return -1;\n3d5ec65ce8 builtin/stash--helper.c  249) return -1;\n3d5ec65ce8 builtin/stash--helper.c  262) return -1;\n3d5ec65ce8 builtin/stash--helper.c  265) return error(_(\"unable to write \nnew index file\"));\n3d5ec65ce8 builtin/stash--helper.c  377) remove_path(stash_index_path.buf);\n3d5ec65ce8 builtin/stash--helper.c  378) return -1;\n3d5ec65ce8 builtin/stash--helper.c  405) return -1;\n3d5ec65ce8 builtin/stash--helper.c  408) return error(_(\"cannot apply a \nstash in the middle of a merge\"));\n3d5ec65ce8 builtin/stash--helper.c  418) strbuf_release(&out);\n3d5ec65ce8 builtin/stash--helper.c  419) return error(_(\"Could not \ngenerate diff %s^!.\"),\n3d5ec65ce8 builtin/stash--helper.c  426) return error(_(\"Conflicts in \nindex.\"\n3d5ec65ce8 builtin/stash--helper.c  432) return error(_(\"Could not save \nindex tree\"));\n3d5ec65ce8 builtin/stash--helper.c  439) return error(_(\"could not \nrestore untracked files from stash\"));\n3d5ec65ce8 builtin/stash--helper.c  470) return -1;\n3d5ec65ce8 builtin/stash--helper.c  475) strbuf_release(&out);\n3d5ec65ce8 builtin/stash--helper.c  480) strbuf_release(&out);\n3d5ec65ce8 builtin/stash--helper.c  481) return -1;\n7005771171 builtin/stash--helper.c  557) return error(_(\"%s: Could not \ndrop stash entry\"),\n5bf62a19c0 builtin/stash--helper.c  632) printf_ln(_(\"The stash entry is \nkept in case \"\n104eb50d14 builtin/stash--helper.c  766) free_stash_info(&info);\n193c3e3516 builtin/stash.c          767) \nusage_with_options(git_stash_show_usage, options);\n813904a0ce builtin/stash--helper.c  783) stash_msg = \"Created via \\\"git \nstash store\\\".\";\n813904a0ce builtin/stash--helper.c  789) if (!quiet) {\n813904a0ce builtin/stash--helper.c  790) fprintf_ln(stderr, _(\"Cannot \nupdate %s with %s\"),\n813904a0ce builtin/stash--helper.c  793) return -1;\n813904a0ce builtin/stash--helper.c  817) if (!quiet)\n813904a0ce builtin/stash--helper.c  818) fprintf_ln(stderr, _(\"\\\"git \nstash store\\\" requires one \"\n813904a0ce builtin/stash--helper.c  820) return -1;\n9f630e7480 builtin/stash--helper.c  902) return -1;\n9f630e7480 builtin/stash--helper.c  962) ret = -1;\n9f630e7480 builtin/stash--helper.c  963) goto done;\n9f630e7480 builtin/stash--helper.c  968) ret = -1;\n9f630e7480 builtin/stash--helper.c  969) goto done;\n9f630e7480 builtin/stash--helper.c  974) ret = -1;\n9f630e7480 builtin/stash--helper.c  975) goto done;\n9f630e7480 builtin/stash--helper.c 1001) ret = -1;\n9f630e7480 builtin/stash--helper.c 1002) goto done;\n9f630e7480 builtin/stash--helper.c 1013) ret = -1;\n9f630e7480 builtin/stash--helper.c 1014) goto done;\n9f630e7480 builtin/stash--helper.c 1020) ret = -1;\n9f630e7480 builtin/stash--helper.c 1021) goto done;\n9f630e7480 builtin/stash--helper.c 1028) ret = -1;\n9f630e7480 builtin/stash--helper.c 1029) goto done;\n9f630e7480 builtin/stash--helper.c 1054) ret = -1;\n9f630e7480 builtin/stash--helper.c 1055) goto done;\n9f630e7480 builtin/stash--helper.c 1067) ret = -1;\n9f630e7480 builtin/stash--helper.c 1068) goto done;\n9f630e7480 builtin/stash--helper.c 1074) ret = -1;\n9f630e7480 builtin/stash--helper.c 1075) goto done;\n9f630e7480 builtin/stash--helper.c 1086) ret = -1;\n9f630e7480 builtin/stash--helper.c 1087) goto done;\n9f630e7480 builtin/stash--helper.c 1092) ret = -1;\n9f630e7480 builtin/stash--helper.c 1093) goto done;\nc2cc69f192 builtin/stash--helper.c 1128) fprintf_ln(stderr, _(\"You do \nnot have \"\n9f630e7480 builtin/stash--helper.c 1137) ret = 1;\n9f630e7480 builtin/stash--helper.c 1138) goto done;\nc2cc69f192 builtin/stash--helper.c 1154) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1155) fprintf_ln(stderr, _(\"Cannot \nsave the current \"\n9f630e7480 builtin/stash--helper.c 1157) ret = -1;\n9f630e7480 builtin/stash--helper.c 1158) goto done;\nc2cc69f192 builtin/stash--helper.c 1163) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1164) fprintf_ln(stderr, _(\"Cannot save \"\n9f630e7480 builtin/stash--helper.c 1166) ret = -1;\n9f630e7480 builtin/stash--helper.c 1167) goto done;\nc2cc69f192 builtin/stash--helper.c 1174) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1175) fprintf_ln(stderr, _(\"Cannot \nsave the current \"\n9f630e7480 builtin/stash--helper.c 1177) goto done;\nc2cc69f192 builtin/stash--helper.c 1183) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1184) fprintf_ln(stderr, _(\"Cannot \nsave the current \"\n9f630e7480 builtin/stash--helper.c 1186) ret = -1;\n9f630e7480 builtin/stash--helper.c 1187) goto done;\nc2cc69f192 builtin/stash--helper.c 1213) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1214) fprintf_ln(stderr, _(\"Cannot \nrecord \"\n9f630e7480 builtin/stash--helper.c 1216) ret = -1;\n9f630e7480 builtin/stash--helper.c 1217) goto done;\n1a0f0409a7 builtin/stash--helper.c 1289) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1290) goto done;\n1a0f0409a7 builtin/stash--helper.c 1300) ret = -1;\nc2cc69f192 builtin/stash--helper.c 1301) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1302) fprintf_ln(stderr, _(\"Cannot \ninitialize stash\"));\n1a0f0409a7 builtin/stash--helper.c 1303) goto done;\n1a0f0409a7 builtin/stash--helper.c 1313) ret = -1;\nc2cc69f192 builtin/stash--helper.c 1314) if (!quiet)\nc2cc69f192 builtin/stash--helper.c 1315) fprintf_ln(stderr, _(\"Cannot \nsave the current status\"));\n1a0f0409a7 builtin/stash--helper.c 1316) goto done;\n1a0f0409a7 builtin/stash--helper.c 1333) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1352) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1353) goto done;\n1a0f0409a7 builtin/stash--helper.c 1362) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1363) goto done;\n1a0f0409a7 builtin/stash--helper.c 1371) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1380) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1391) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1392) goto done;\n1a0f0409a7 builtin/stash--helper.c 1401) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1402) goto done;\n1a0f0409a7 builtin/stash--helper.c 1410) ret = -1;\n1a0f0409a7 builtin/stash--helper.c 1436) ret = -1;\n193c3e3516 builtin/stash.c         1568) \nusage_msg_opt(xstrfmt(_(\"unknown subcommand: %s\"), argv[0]),\n193c3e3516 builtin/stash.c         1596) continue;\n\npackfile.c\n1127a98cce  117) return error(\"index file %s is too small\", path);\n1127a98cce  119) return error(\"empty data\");\n\nprio-queue.c\n2d181390f3 94) return queue->array[queue->nr - 1].data;\n\nrebase-interactive.c\n64a43cbd5d 62) return error_errno(_(\"could not read '%s'.\"), todo_file);\n64a43cbd5d 66) strbuf_release(&buf);\n64a43cbd5d 67) return -1;\na9f5476fbc 75) return error_errno(_(\"could not read '%s'.\"), todo_file);\na9f5476fbc 79) strbuf_release(&buf);\na9f5476fbc 80) return -1;\n64a43cbd5d 86) return -1;\n\nrevision.c\n4943d28849 2931) return;\n4943d28849 2934) return;\n4943d28849 2937) c->object.flags |= UNINTERESTING;\n4943d28849 2940) return;\n4943d28849 2943) mark_parents_uninteresting(c);\n4943d28849 2966) return;\n4943d28849 2969) return;\n4943d28849 2974) return;\n4943d28849 3022) init_author_date_slab(&info->author_date);\n4943d28849 3023) info->topo_queue.compare = compare_commits_by_author_date;\n4943d28849 3024) info->topo_queue.cb_data = &info->author_date;\n4943d28849 3025) break;\n4943d28849 3038) continue;\n4943d28849 3048) record_author_date(&info->author_date, c);\n6c04ff3001 3086) if (!revs->ignore_missing_links)\n6c04ff3001 3087) die(\"Failed to traverse parents of commit %s\",\n4943d28849 3088) oid_to_hex(&commit->object.oid));\n4943d28849 3096) continue;\n\nsequencer.c\n65850686cf 2278) return;\n65850686cf 2375) write_file(rebase_path_quiet(), \"%s\\n\", quiet);\n2c58483a59 3373) return error(_(\"could not checkout %s\"), commit);\n4df66c40b0 3387) return error(_(\"%s: not a valid OID\"), orig_head);\n71f82465b1 3407) fprintf(stderr, _(\"Stopped at HEAD\\n\"));\nb97e187364 4771) return -1;\nb97e187364 4774) return -1;\nb97e187364 4780) return error_errno(_(\"could not read '%s'.\"), todo_file);\nb97e187364 4783) todo_list_release(&todo_list);\nb97e187364 4784) return error(_(\"unusable todo list: '%s'\"), todo_file);\nb97e187364 4803) todo_list_release(&todo_list);\nb97e187364 4804) return -1;\nb97e187364 4808) return error(_(\"could not copy '%s' to '%s'.\"), todo_file,\nb97e187364 4812) return error(_(\"could not transform the todo list\"));\nb97e187364 4841) return error(_(\"could not transform the todo list\"));\nb97e187364 4844) return error(_(\"could not skip unnecessary pick \ncommands\"));\nb97e187364 4850) return -1;\n\nsplit-index.c\ne3d837989e 335) ce->ce_flags |= CE_UPDATE_IN_BASE;\n\nstrbuf.c\nf95736288a  127) --sb->len;\n\nCommits introducing uncovered code:\nAlban Gruin      0af129b2e: rebase--interactive2: rewrite the submodes \nof interactive rebase in C\nAlban Gruin      2c58483a5: rebase -i: rewrite setup_reflog_action() in C\nAlban Gruin      34b47315d: rebase -i: move rebase--helper modes to \nrebase--interactive\nAlban Gruin      4df66c40b: rebase -i: rewrite checkout_onto() in C\nAlban Gruin      53bbcfbde: rebase -i: implement the main part of \ninteractive rebase as a builtin\nAlban Gruin      64a43cbd5: rebase -i: rewrite the edit-todo \nfunctionality in C\nAlban Gruin      65850686c: rebase -i: rewrite write_basic_state() in C\nAlban Gruin      a9f5476fb: sequencer: refactor append_todo_help() to \nwrite its message to a buffer\nAlban Gruin      b97e18736: rebase -i: rewrite complete_action() in C\nbrian m. carlson      2f0c9e9a9: builtin/repack: replace hard-coded \nconstants\nbrian m. carlson      eccb5a5f3: apply: rename new_sha1_prefix and \nold_sha1_prefix\nDerrick Stolee      2d181390f: prio-queue: add 'peek' operation\nDerrick Stolee      4943d2884: revision.c: refactor basic topo-order logic\nDerrick Stolee      6c04ff300: revision.c: begin refactoring \n--topo-order logic\nJoel Teichroeb      3d5ec65ce: stash: convert apply to builtin\nJoel Teichroeb      5bf62a19c: stash: convert pop to builtin\nJoel Teichroeb      700577117: stash: convert drop and clear to builtin\nJohannes Schindelin      71f82465b: rebase -i: introduce the 'break' command\nJohannes Schindelin      bc24382c2: builtin rebase: prepare for builtin \nrebase -i\nJosh Steadmon      1127a98cc: fuzz: add fuzz testing for packfile indices.\nJunio C Hamano      7bbc53a58: fetch: replace string-list used as a \nlook-up table with a hashmap\nPaul-Sebastian Ungureanu      104eb50d1: stash: convert show to builtin\nPaul-Sebastian Ungureanu      193c3e351: stash: convert \n`stash--helper.c` into `stash.c`\nPaul-Sebastian Ungureanu      1a0f0409a: stash: convert push to builtin\nPaul-Sebastian Ungureanu      813904a0c: stash: convert store to builtin\nPaul-Sebastian Ungureanu      9f630e748: stash: convert create to builtin\nPaul-Sebastian Ungureanu      c2cc69f19: stash: make push -q quiet\nPratik Karki      002ee2fe6: builtin rebase: support `keep-empty` option\nPratik Karki      0eabf4b95: builtin rebase: stop if `git am` is in progress\nPratik Karki      12026a412: builtin rebase: support `--gpg-sign` option\nPratik Karki      122420c29: builtin rebase: support --skip\nPratik Karki      1ed9c14ff: builtin rebase: support --force-rebase\nPratik Karki      3c3588c7d: builtin rebase: support \n--rebase-merges[=[no-]rebase-cousins]\nPratik Karki      53f9e5be9: builtin rebase: support `ignore-date` option\nPratik Karki      55071ea24: rebase: start implementing it as a builtin\nPratik Karki      5a6149453: builtin rebase: support --quit\nPratik Karki      5e5d96197: builtin rebase: support --abort\nPratik Karki      6defce2b0: builtin rebase: support `--autostash` option\nPratik Karki      73d51ed0a: builtin rebase: support --signoff\nPratik Karki      7998dbe1e: builtin rebase: support `-C` and \n`--whitespace=<type>`\nPratik Karki      9a48a615b: builtin rebase: try to fast forward when \npossible\nPratik Karki      9dba809a6: builtin rebase: support --root\nPratik Karki      ac7f467fe: builtin/rebase: support running \"git rebase \n<upstream>\"\nPratik Karki      ba1905a5f: builtin rebase: add support for custom \nmerge strategies\nPratik Karki      bff014dac: builtin rebase: support the `verbose` and \n`diffstat` options\nPratik Karki      c54dacb50: builtin rebase: start a new rebase only if \nnone is in progress\nPratik Karki      cda614e48: builtin rebase: show progress when \nconnected to a terminal\nPratik Karki      e0333e5c6: builtin rebase: require a clean worktree\nPratik Karki      e65123a71: builtin rebase: support `git rebase \n<upstream> <switch-to>`\nPratik Karki      ead98c111: builtin rebase: support --rerere-autoupdate\nPratik Karki      f28d40d3a: builtin rebase: support --onto\nPratik Karki      f95736288: builtin rebase: support --continue\nSZEDER Gábor      e3d837989: split-index: don't compare cached data of \nentries already marked for split index\n\n\nUncovered code in 'next' (152ad8e) and not in 'master' (5a0cc8a)\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/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\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\ncommit-graph.c\n5cef295f28   67) return 0;\n20fd6d5799   79) return 0;\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 4130) 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\nmidx.c\ne43d2dcce1  285) if (hasheq(oid.hash,\ne43d2dcce1  286)    p->bad_object_sha1 + the_hash_algo->rawsz * i))\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\nrefs.c\n4a6067cda5 1405) return 0;\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\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\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\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\nStefan Beller      4a6067cda: refs.c: migrate internal ref iteration to \npass thru repository argument\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\n\n\nUncovered code in 'master' (5a0cc8a) and not in (fe8321ec05)\n-----------------------------------------------------------------\nbuiltin/fsck.c\n66ec0390e7 builtin/fsck.c 862) midx_argv[2] = \"--object-dir\";\n66ec0390e7 builtin/fsck.c 863) midx_argv[3] = alt->path;\n66ec0390e7 builtin/fsck.c 864) if (run_command(&midx_verify))\n66ec0390e7 builtin/fsck.c 865) errors_found |= ERROR_COMMIT_GRAPH;\n\nfsck.c\nfb8952077d  214) die_errno(\"Could not read '%s'\", path);\n\nmidx.c\n56ee7ff156  949) return 0;\ncc6af73c02  990) midx_report(_(\"failed to load pack-index for packfile %s\"),\ncc6af73c02  991)     e.p->pack_name);\ncc6af73c02  992) break;\n\nCommits introducing uncovered code:\nDerrick Stolee      56ee7ff15: multi-pack-index: add 'verify' verb\nDerrick Stolee      66ec0390e: fsck: verify multi-pack-index\nDerrick Stolee      cc6af73c0: multi-pack-index: verify object offsets\nRené Scharfe      fb8952077: fsck: use strbuf_getline() to read skiplist \nfile\n\n\n[1] https://dev.azure.com/git/git/_build/results?buildId=184&view=results\n     Build running coverage-test for 'pu' and coverage-diff.sh against 'jch'\n\n[2] https://dev.azure.com/git/git/_build/results?buildId=185&view=results\n     Build running coverage-test for 'jch' and coverage-diff.sh against \n'next'\n\n[3] https://dev.azure.com/git/git/_build/results?buildId=186&view=results\n     Build running coverage-test for 'next' and coverage-diff.sh against \n'master'\n\n[4] https://dev.azure.com/git/git/_build/results?buildId=187&view=logs\n     Build running coverage-test for 'master' and coverage-diff.sh \nagainst 'master@{1}'\n"},{"id":"360551","messageId":"1f6513e1-24f1-496a-2f3b-6ed6e96b99d1@gmail.com","threadId":"49574","inReplyTo":"6be9fe04-138d-01b7-91c1-6c029ab7c9be@gmail.com","subject":"Re: Git Test Coverage Report (Monday, Oct 15)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-10-15T19:43:08Z","receivedAt":"2018-10-15T19:43:13Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 10/15/2018 12:24 PM, Derrick Stolee wrote:\n>\n> Uncovered code in 'jch' (22f2f0f) and not in 'next' (152ad8e)\n> -------------------------------------------------------------\n>\n> prio-queue.c\n> 2d181390f3 94) return queue->array[queue->nr - 1].data;\n(I have a fix to cover this in my private branch for this topic.)\n\n>\n> revision.c\n> 4943d28849 2931) return;\n> 4943d28849 2934) return;\n> 4943d28849 2937) c->object.flags |= UNINTERESTING;\n> 4943d28849 2940) return;\n> 4943d28849 2943) mark_parents_uninteresting(c);\n> 4943d28849 2966) return;\n> 4943d28849 2969) return;\n> 4943d28849 2974) return;\n> 4943d28849 3022) init_author_date_slab(&info->author_date);\n> 4943d28849 3023) info->topo_queue.compare = \n> compare_commits_by_author_date;\n> 4943d28849 3024) info->topo_queue.cb_data = &info->author_date;\n> 4943d28849 3025) break;\n> 4943d28849 3038) continue;\n> 4943d28849 3048) record_author_date(&info->author_date, c);\n> 6c04ff3001 3086) if (!revs->ignore_missing_links)\n> 6c04ff3001 3087) die(\"Failed to traverse parents of commit %s\",\n> 4943d28849 3088) oid_to_hex(&commit->object.oid));\n> 4943d28849 3096) continue;\nLooks like a number of these lines are important to cover, but are not \ncovered by tests that _also_ specify '--topo-order'. I bet I can cover \nmore of these by overriding the sort logic to use the new algorithm if \nGIT_TEST_COMMIT_GRAPH is specified. Or, should I create yet another test \nvariable to cover these cases?\n\n(Note: I run these coverage reports with a variety of optional test \nvariables.)\n\n> Uncovered code in 'next' (152ad8e) and not in 'master' (5a0cc8a)\n> ----------------------------------------------------------------\n> builtin/rev-list.c\n> 7c0fe330d5 builtin/rev-list.c 227) die(\"unexpected missing %s object \n> '%s'\",\n> 7c0fe330d5 builtin/rev-list.c 228)     type_name(obj->type), \n> oid_to_hex(&obj->oid));\n>\n> commit-graph.c\n> 5cef295f28   67) return 0;\n> 20fd6d5799   79) return 0;\nThese are two ways to say the commit-graph should not be used, but are \nnot covered by tests currently. One is if we say \"is the repo shallow?\" \nwhich happens to return when the repo has grafts (but we keep the check \nhere in case the way shallows are implemented changes) and the other is \nif the repo is not initialized, but I fixed the test-helpers that had \nnot initialized the repo yet.\n>\n> Uncovered code in 'master' (5a0cc8a) and not in (fe8321ec05)\n> -----------------------------------------------------------------\n> builtin/fsck.c\n> 66ec0390e7 builtin/fsck.c 862) midx_argv[2] = \"--object-dir\";\n> 66ec0390e7 builtin/fsck.c 863) midx_argv[3] = alt->path;\n> 66ec0390e7 builtin/fsck.c 864) if (run_command(&midx_verify))\n> 66ec0390e7 builtin/fsck.c 865) errors_found |= ERROR_COMMIT_GRAPH;\nThese are underneath the \"for all alternates\" loop, and _should_ be \ncovered with the coming GIT_TEST_MULTI_PACK_INDEX test variable.\n\nThanks,\n-Stolee\n"}]}