{"thread":{"id":"49699","subject":"Git Test Coverage Report (Saturday, Oct 27)","startedAt":"2018-10-27T13:27:28Z","lastAt":"2018-10-27T19:47:24Z","messageCount":4,"participants":["Derrick Stolee","Junio C Hamano","brian m. carlson"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"361784","messageId":"5db6213b-b7d0-b995-de80-9671604416a5@gmail.com","threadId":"49699","inReplyTo":null,"subject":"Git Test Coverage Report (Saturday, Oct 27)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-10-27T13:27:21Z","receivedAt":"2018-10-27T13:27:28Z","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: a5dda2204a27a14f65171e29307400194b522051\n        jch: 280dd2581eb7191db037cf1243dd64fd200455ba\n       next: 0250525e6984e0e5e803c7e2e3417279b036f1c9\n     master: c670b1f876521c9f7cd40184bf7ed05aad843433\nmaster@{1}: c4df23f7927d8d00e666a3c8d1b3375f1dc8a3c1\n\n\nUncovered in pu not in jch\n--------------------------\n(Note: t4041-diff-submodule-option.sh failed with extra test options, so \nsome lines that\nwould be covered by that test run were not covered.)\n\nbuiltin/blame.c\na5dda2204a builtin/blame.c    200) \nrepo_unuse_commit_buffer(the_repository, commit, message);\n74e8221b52 builtin/blame.c    924) blame_date_width = sizeof(\"Thu Oct 19 \n16:00\");\n74e8221b52 builtin/blame.c    925) break;\n\nbuiltin/describe.c\na5dda2204a builtin/describe.c 257) repo_parse_commit(the_repository, p);\n\nbuiltin/fsck.c\nb29759d89a builtin/fsck.c 613) fprintf(stderr, \"Checking %s link\\n\", \nhead_ref_name);\nb29759d89a builtin/fsck.c 618) return error(\"Invalid %s\", head_ref_name);\n\nbuiltin/grep.c\nc22b820141 builtin/grep.c  442) grep_read_unlock();\n\nbuiltin/pack-objects.c\na5dda2204a builtin/pack-objects.c 2852) if \n(!repo_has_object_file(the_repository, &obj->oid) && \nis_promisor_object(&obj->oid))\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\nbuiltin/reflog.c\nc9ef0d95eb builtin/reflog.c 581) all_worktrees = 0;\nc9ef0d95eb builtin/reflog.c 617) continue;\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\nfsck.c\na5dda2204a  858) repo_unuse_commit_buffer(the_repository, commit, buffer);\na5dda2204a  878) repo_read_object_file(the_repository,\na5dda2204a  879)       &tag->object.oid, &type, &size);\n\nhttp-push.c\na5dda2204a 1635) if (!repo_has_object_file(the_repository, &head_oid))\na5dda2204a 1642) if (!repo_has_object_file(the_repository, \n&remote_ref->old_oid))\n\nmerge-recursive.c\n4cdc48e412 1585) return -1;\n4cdc48e412 1588) return -1;\n4cdc48e412 1594) return -1;\n4cdc48e412 1596) if (update_file(o, 1, b_oid, b_mode, collide_path))\n4cdc48e412 1597) return -1;\n4cdc48e412 1664) return -1;\n4cdc48e412 1667) return -1;\n4cdc48e412 1670) return -1;\nb58ae691c0 1703) return -1;\n387361a6a7 1738) return -1;\n387361a6a7 1786) return -1;\n387361a6a7 1795) new_path = unique_path(o, a->path, ci->branch1);\n387361a6a7 1796) output(o, 1, _(\"Refusing to lose untracked file\"\n387361a6a7 1802) return -1;\n387361a6a7 1805) return -1;\n387361a6a7 1815) return -1;\n387361a6a7 1831) return -1;\n387361a6a7 1834) return -1;\n\nmidx.c\n1dcd9f2043  184) return;\n\nnegotiator/default.c\na5dda2204a  71) if (repo_parse_commit(the_repository, commit))\n\npackfile.c\ndc7d664335  350) close_midx(o->multi_pack_index);\ndc7d664335  351) o->multi_pack_index = NULL;\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\nrefs.c\n3a3b9d8cde  657) return 0;\n\nrefs/files-backend.c\nrevision.c\na5dda2204a  726) if (repo_parse_commit(the_repository, p) < 0)\n\nsequencer.c\na5dda2204a 1597) repo_unuse_commit_buffer(the_repository, head_commit,\na5dda2204a 3821) repo_unuse_commit_buffer(the_repository,\nb5d6062402 4486) strbuf_insert(buf, todo_list->items[insert].offset_in_buf +\nb5d6062402 4498) int sequencer_add_exec_commands(const char *commands)\n06d8136126 4505) return error_errno(_(\"could not read '%s'.\"), todo_file);\nb5d6062402 4507) if (todo_list_parse_insn_buffer(todo_list.buf.buf, \n&todo_list)) {\nb5d6062402 4512) todo_list_add_exec_commands(&todo_list, commands);\nb5d6062402 4513) res = write_message(todo_list.buf.buf, \ntodo_list.buf.len, todo_file, 0);\n0cce4a2756 4514) todo_list_release(&todo_list);\nb5d6062402 4516) return res;\nb74a37a5a7 4576) goto out;\nb74a37a5a7 4581) goto out;\nb8dac44d10 4721) todo_list_release(&new_todo);\n009173ed7b 4726) todo_list_release(&new_todo);\n009173ed7b 4727) return error_errno(_(\"could not write '%s'\"), todo_file);\n9787d17d40 4921) int rearrange_squash_in_todo_file(void)\n9787d17d40 4923) const char *todo_file = rebase_path_todo();\n9787d17d40 4924) struct todo_list todo_list = TODO_LIST_INIT;\n9787d17d40 4925) int res = 0;\n9787d17d40 4927) if (strbuf_read_file_or_whine(&todo_list.buf, \ntodo_file) < 0)\n9787d17d40 4928) return -1;\n9787d17d40 4929) if (todo_list_parse_insn_buffer(todo_list.buf.buf, \n&todo_list) < 0) {\n9787d17d40 4930) todo_list_release(&todo_list);\n9787d17d40 4931) return -1;\n9787d17d40 4934) res = todo_list_rearrange_squash(&todo_list);\n9787d17d40 4935) if (!res)\n9787d17d40 4936) res = rewrite_file(todo_file, todo_list.buf.buf, \ntodo_list.buf.len);\n9787d17d40 4938) todo_list_release(&todo_list);\n\nsetup.c\n58b284a2e9  413) return config_error_nonbool(var);\n\nsha1-array.c\n7fdf90d541 91) oidcpy(&oids[dst], &oids[src]);\n\nsubmodule-config.c\nbcbc780d14 740) return CONFIG_INVALID_KEY;\n45f5ef3d77 755) warning(_(\"Could not update .gitmodules entry %s\"), key);\n\nsubmodule.c\nb303ef65e7  524) the_repository->submodule_prefix :\n060675d4fc 1378) strbuf_release(&gitdir);\n183be9660a 1501) struct get_next_submodule_task *task = task_cb;\n183be9660a 1505) get_next_submodule_task_release(task);\n183be9660a 1532) return 0;\n183be9660a 1536) goto out;\n183be9660a 1551) return 0;\n\ntree.c\na5dda2204a 108) if (repo_parse_commit(the_repository, commit))\n\nworktree.c\n3a3b9d8cde 495) return -1;\n3a3b9d8cde 508) return -1;\n3a3b9d8cde 517) return -1;\nab3e1f78ae 537) break;\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      bcbc780d1: submodule: add a \nprint_config_from_gitmodules() helper\nAntonio Ospite      c22b82014: submodule: support reading .gitmodules \nwhen it's not in the working tree\nDerrick Stolee      1dcd9f204: midx: close multi-pack-index on repack\nDerrick Stolee      dc7d66433: packfile: close multi-pack-index in \nclose_all_packs\nElijah Newren      387361a6a: merge-recursive: improve \nrename/rename(1to2)/add[/add] handling\nElijah Newren      4cdc48e41: merge-recursive: new function for better \ncolliding conflict resolutions\nElijah Newren      b58ae691c: merge-recursive: fix rename/add conflict \nhandling\nJunio C Hamano      a5dda2204: treewide: apply cocci patch\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\nNguyễn Thái Ngọc Duy      3a3b9d8cd: refs: new ref types to make \nper-worktree refs visible to all worktrees\nNguyễn Thái Ngọc Duy      58b284a2e: worktree: add per-worktree config files\nNguyễn Thái Ngọc Duy      ab3e1f78a: revision.c: better error reporting \non ref from different worktrees\nNguyễn Thái Ngọc Duy      b29759d89: fsck: check HEAD and reflog from \nother worktrees\nNguyễn Thái Ngọc Duy      c9ef0d95e: reflog expire: cover reflog from \nall worktrees\nStefan Beller      060675d4f: submodule: migrate get_next_submodule to \nuse repository structs\nStefan Beller      183be9660: fetch: try fetching submodules if needed \nobjects were not fetched\nStefan Beller      7fdf90d54: sha1-array: provide oid_array_filter\nStefan Beller      b303ef65e: submodule: use submodule repos for object \nlookup\n\n\nUncovered in jch not in next\n----------------------------\n\nbuiltin/branch.c\n0ecb1fc726 builtin/branch.c 452) die(_(\"could not resolve HEAD\"));\n0ecb1fc726 builtin/branch.c 458) die(_(\"HEAD (%s) points outside of \nrefs/heads/\"), refname);\n\nbuiltin/fetch.c\nc806111692 builtin/fetch.c  373) continue; /* can this happen??? */\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\nbuiltin/submodule--helper.c\ne0a862fdaf 1648) url = sub->url;\n\nhex.c\nb3a41547ce  93) char *sha1_to_hex_r(char *buffer, const unsigned char *sha1)\nb3a41547ce  95) return hash_to_hex_algop_r(buffer, sha1, \n&hash_algos[GIT_HASH_SHA1]);\nb3a41547ce 116) char *hash_to_hex(const unsigned char *hash)\nb3a41547ce 118) return hash_to_hex_algop(hash, the_hash_algo);\n\nrevision.c\na63d88e595 2932) return;\na63d88e595 2935) return;\na63d88e595 2941) c->object.flags |= UNINTERESTING;\na63d88e595 2944) return;\na63d88e595 2947) mark_parents_uninteresting(c);\na63d88e595 2970) return;\na63d88e595 2973) return;\na63d88e595 2978) return;\na63d88e595 3042) continue;\nf33f8de6af 3090) if (!revs->ignore_missing_links)\nf33f8de6af 3091) die(\"Failed to traverse parents of commit %s\",\na63d88e595 3092) oid_to_hex(&commit->object.oid));\na63d88e595 3100) continue;\n\nsequencer.c\n08b6ba5cc0  683) np = strchrnul(buf, '\\n');\n08b6ba5cc0  684) return error(_(\"unable to parse '%.*s'\"),\n08b6ba5cc0  695) return error(_(\"unable to dequote value of '%s'\"),\n08b6ba5cc0  737) goto finish;\n08b6ba5cc0  742) name_i = error(_(\"'GIT_AUTHOR_NAME' already given\"));\n08b6ba5cc0  747) email_i = error(_(\"'GIT_AUTHOR_EMAIL' already given\"));\n08b6ba5cc0  752) date_i = error(_(\"'GIT_AUTHOR_DATE' already given\"));\n08b6ba5cc0  756) err = error(_(\"unknown variable '%s'\"),\n08b6ba5cc0  761) error(_(\"missing 'GIT_AUTHOR_NAME'\"));\n08b6ba5cc0  763) error(_(\"missing 'GIT_AUTHOR_EMAIL'\"));\n08b6ba5cc0  765) error(_(\"missing 'GIT_AUTHOR_DATE'\"));\n\nsha1-file.c\n2f90b9d9b4 sha1-file.c  172) int hash_algo_by_name(const char *name)\n2f90b9d9b4 sha1-file.c  175) if (!name)\n2f90b9d9b4 sha1-file.c  176) return GIT_HASH_UNKNOWN;\n2f90b9d9b4 sha1-file.c  177) for (i = 1; i < GIT_HASH_NALGOS; i++)\n2f90b9d9b4 sha1-file.c  178) if (!strcmp(name, hash_algos[i].name))\n2f90b9d9b4 sha1-file.c  179) return i;\n2f90b9d9b4 sha1-file.c  180) return GIT_HASH_UNKNOWN;\n2f90b9d9b4 sha1-file.c  183) int hash_algo_by_id(uint32_t format_id)\n2f90b9d9b4 sha1-file.c  186) for (i = 1; i < GIT_HASH_NALGOS; i++)\n2f90b9d9b4 sha1-file.c  187) if (format_id == hash_algos[i].format_id)\n2f90b9d9b4 sha1-file.c  188) return i;\n2f90b9d9b4 sha1-file.c  189) return GIT_HASH_UNKNOWN;\n\nupload-pack.c\n1d1243fe63 1403) deepen(INFINITE_DEPTH, data->deepen_relative, \n&data->shallows,\n\nCommits introducing uncovered code:\nbrian m. carlson      2f90b9d9b: sha1-file: provide functions to look up \nhash algorithms\nbrian m. carlson      b3a41547c: hex: introduce functions to print \narbitrary hashes\nDaniels Umanovskis      0ecb1fc72: branch: introduce --show-current \ndisplay option\nDerrick Stolee      a63d88e59: revision.c: generation-based topo-order \nalgorithm\nDerrick Stolee      f33f8de6a: 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\nJonathan Tan      1d1243fe6: upload-pack: make want_obj not global\nJunio C Hamano      c80611169: 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\nPhillip Wood      08b6ba5cc: add read_author_script() to libgit\nStefan Beller      e0a862fda: submodule helper: convert relative URL to \nabsolute URL if needed\n\n\nUncovered in next not in master\n-------------------------------\n\napply.c\neccb5a5f3d 4071) return get_oid_hex(p->old_oid_prefix, oid);\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/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/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 113) if (version == protocol_v0 || \nversion == protocol_v1)\ne001fd3a50 builtin/upload-archive.c 114) packet_write_fmt(1, \"NACK \nunable to spawn subprocess\\n\");\ne001fd3a50 builtin/upload-archive.c 115) else if (version == protocol_v2)\ne001fd3a50 builtin/upload-archive.c 116) error_clnt(\"unable to spawn \nsubprocess\\n\");\n\ngpg-interface.c\n4de9394dcb 155) break;\n\nhttp-backend.c\nfb19d32f05 646) argv[1] = \".\";\nfb19d32f05 647) argv[2] = NULL;\n\nhttp.c\n21084e84a4  316) free(http_ssl_backend);\n21084e84a4  317) http_ssl_backend = xstrdup_or_null(value);\n21084e84a4  318) return 0;\n93aef7c79b  322) http_schannel_check_revoke = git_config_bool(var, value);\n93aef7c79b  323) return 0;\nb67d40adbb  327) http_schannel_use_ssl_cainfo = git_config_bool(var, value);\nb67d40adbb  328) return 0;\n93aef7c79b  833)     !http_schannel_check_revoke) {\n93aef7c79b  835) curl_easy_setopt(result, CURLOPT_SSL_OPTIONS, \nCURLSSLOPT_NO_REVOKE);\nb67d40adbb  883)     !http_schannel_use_ssl_cainfo) {\nb67d40adbb  884) curl_easy_setopt(result, CURLOPT_CAINFO, 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 200) ctx->show_object(obj, base->buf, ctx->show_data);\n\npretty.c\n4de9394dcb 1264) if (c->signature_check.primary_key_fingerprint)\n4de9394dcb 1265) strbuf_addstr(sb, \nc->signature_check.primary_key_fingerprint);\n4de9394dcb 1266) break;\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\nref-filter.c\nf0062d3b74 1035) v->s = xstrdup(\"\");\nf0062d3b74 1298) free((char *)to_free);\nf0062d3b74 1299) return xstrdup(\"\");\nf0062d3b74 1336) free((char *)to_free);\nf0062d3b74 1337) return xstrdup(\"\");\nf0062d3b74 1387) *s = xstrdup(\"=\");\nf0062d3b74 1389) *s = xstrdup(\"<\");\nf0062d3b74 1514) ref->symref = xstrdup(\"\");\nf0062d3b74 1583) v->s = xstrdup(\"\");\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\nstrbuf.c\nf95736288a  127) --sb->len;\n\ntransport-helper.c\nfb19d32f05  643) if (!data->connect && !data->stateless_connect)\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\nBrendan Forster      93aef7c79: http: add support for disabling SSL \nrevocation checks in cURL\nbrian m. carlson      2f0c9e9a9: builtin/repack: replace hard-coded \nconstants\nbrian m. carlson      eccb5a5f3: apply: rename new_sha1_prefix and \nold_sha1_prefix\nJohannes Schindelin      21084e84a: http: add support for selecting SSL \nbackends at runtime\nJohannes Schindelin      71f82465b: rebase -i: introduce the 'break' command\nJohannes Schindelin      b67d40adb: http: when using Secure Channel, \nignore sslCAInfo by default\nJohannes Schindelin      bc24382c2: builtin rebase: prepare for builtin \nrebase -i\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\nMichał Górny      4de9394dc: gpg-interface.c: obtain primary key \nfingerprint as well\nOlga Telezhnaya      f0062d3b7: ref-filter: free item->value and \nitem->value->s\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\n\n\nUncovered in mater not in master@{1}\n------------------------------------\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\ngit.c\na9a60b94cc 322) fprintf_ln(stderr, _(\"'%s' is aliased to '%s'\"),\n\nident.c\n501afcb8b0 172) strbuf_addstr(&git_default_email, email);\n501afcb8b0 173) free((char *)email);\n\npackfile.c\n1127a98cce  117) return error(\"index file %s is too small\", path);\n1127a98cce  119) return error(\"empty data\");\n\nsplit-index.c\ne3d837989e 335) ce->ce_flags |= CE_UPDATE_IN_BASE;\n\nCommits introducing uncovered code:\nJohannes Schindelin      501afcb8b: mingw: use domain information for \ndefault email\nJosh Steadmon      1127a98cc: fuzz: add fuzz testing for packfile indices.\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\"\nSZEDER Gábor      e3d837989: split-index: don't compare cached data of \nentries already marked for split index\n\n"},{"id":"361785","messageId":"xmqqsh0ra3yx.fsf@gitster-ct.c.googlers.com","threadId":"49699","inReplyTo":"5db6213b-b7d0-b995-de80-9671604416a5@gmail.com","subject":"Re: Git Test Coverage Report (Saturday, Oct 27)","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2018-10-27T13:55:50Z","receivedAt":"2018-10-27T13:55:59Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Derrick Stolee <stolee@gmail.com> writes:\n\n> In an effort to ensure new code is reasonably covered by the test\n> suite, we now have contrib/coverage-diff.sh to combine the gcov output\n> from 'make coverage-test ; make coverage-report' with the output from\n> 'git diff A B' to discover _new_lines of code that are not\n> covered. This report ignores lines including \"BUG(\".\n\nThanks.\n\n> Uncovered in mater not in master@{1}\n> ------------------------------------\n\nDoes this typo indicate that some part of the process to produce and\nsend out this report involve manual editing?\n\nI noticed that my name appeared in this report, but I've updated the\nline to BUG(), so hopefully it would disappear from it again ;-).\n\n"},{"id":"361802","messageId":"20181027191003.GG6119@genre.crustytoothpaste.net","threadId":"49699","inReplyTo":"5db6213b-b7d0-b995-de80-9671604416a5@gmail.com","subject":"Re: Git Test Coverage Report (Saturday, Oct 27)","fromName":"brian m. carlson","fromEmail":"sandals@crustytoothpaste.net","sentAt":"2018-10-27T19:10:03Z","receivedAt":"2018-10-27T19:10:14Z","isPatch":false,"sender":{"key":"sandals@crustytoothpaste.net","avatar":"https://avatars.githubusercontent.com/u/497054?v=4"},"body":"On Sat, Oct 27, 2018 at 09:27:21AM -0400, Derrick Stolee wrote:\n> In an effort to ensure new code is reasonably covered by the test suite, we\n> now have contrib/coverage-diff.sh to combine the gcov output from 'make\n> coverage-test ; make coverage-report' with the output from 'git diff A B' to\n> discover _new_lines of code that are not covered. This report ignores lines\n> including \"BUG(\".\n\nThanks for producing this.\n\n> Commits introducing uncovered code:\n> brian m. carlson      2f90b9d9b: sha1-file: provide functions to look up\n> hash algorithms\n> brian m. carlson      b3a41547c: hex: introduce functions to print arbitrary\n> hashes\n\nThese two are expected.  One this series makes its way to master, I'll\nsend patches that use it in a bunch more places, and these functions\nwill be adequately covered by multiple code paths.\n\n> Uncovered in next not in master\n> -------------------------------\n> \n> apply.c\n> eccb5a5f3d 4071) return get_oid_hex(p->old_oid_prefix, oid);\n\nThis one is just a name change.  However, I think it's interesting that\nthis code path isn't covered in the normal case (and presumably isn't\ncovered before my patch).  From the comment, this appears to be limited\nto the case where the index line in the patch contains the full object\nID.\n\nI'll try to see if I can come up with a test to cover this case.\n\n> builtin/repack.c\n> 2f0c9e9a9b 239) die(\"repack: Expecting full hex object ID lines only from\n> pack-objects.\");\n> 2f0c9e9a9b 411) die(\"repack: Expecting full hex object ID lines only from\n> pack-objects.\");\n\nThese are a change solely in text from what was there before.\nConsidering that git pack-objects would have to be modified to produce\ninvalid data in order to trigger these (as discussed in the series that\nchanged them), I think it's okay that these are uncovered.\n-- \nbrian m. carlson: Houston, Texas, US\nOpenPGP: https://keybase.io/bk2204\n"},{"id":"361803","messageId":"649cac55-7fb0-d23b-eaf6-6f1dab30a0da@gmail.com","threadId":"49699","inReplyTo":"xmqqsh0ra3yx.fsf@gitster-ct.c.googlers.com","subject":"Re: Git Test Coverage Report (Saturday, Oct 27)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2018-10-27T19:47:20Z","receivedAt":"2018-10-27T19:47:24Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 10/27/2018 9:55 AM, Junio C Hamano wrote:\n> Derrick Stolee <stolee@gmail.com> writes:\n>\n>\n>> Uncovered in mater not in master@{1}\n>> ------------------------------------\n> Does this typo indicate that some part of the process to produce and\n> send out this report involve manual editing?\nI kick off four builds with on Azure Pipelines [1], wait for the builds \nto finish, then copy the appropriate sections out of the output \n(trimming the timestamps). If I were more familiar with the Pipelines \nfeatures, I'm pretty sure I could make four parallel jobs inside the \nsame build that ran the tests on each branch, export the logs as \nartifacts, then auto-assemble the email at the end. I plan to do that \nsoon, but I'm still keeping a close eye on the results to see when and \nwhere failures occur.\n\nThanks,\n-Stolee\n\n[1] https://dev.azure.com/git/git/_build?definitionId=5\n"}]}