{"thread":{"id":"51258","subject":"Git Test Coverage Report (Thursday, June 6 2019)","startedAt":"2019-06-07T01:19:15Z","lastAt":"2019-06-08T22:16:03Z","messageCount":3,"participants":["Derrick Stolee","Philip Oakley"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"376807","messageId":"396091fc-5572-19a5-4f18-61c258590dd5@gmail.com","threadId":"51258","inReplyTo":null,"subject":"Git Test Coverage Report (Thursday, June 6 2019)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2019-06-07T01:19:08Z","receivedAt":"2019-06-07T01:19:15Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"Here is today's test coverage report.\n\nThanks,\n-Stolee\n\n[1] https://derrickstolee.github.io/git-test-coverage/reports/2019-06-06.htm\n[2] https://derrickstolee.github.io/git-test-coverage/reports/2019-06-06.txt\n\n---\n\npu\t4f91bbec8a3cc2fff435fb3dbb0dfa5f9d223141\njch\te1895a3c3b1fef6d1bc80251d09598e219d3908d\nnext\tee3066bb6536c68f973b3c0ffaaa13f4bfda5ea3\nmaster\t74583d89127e21255c12dd3c8a3bf60b497d7d03\nmaster@{1}\taa25c82427ae70aebf3b8f970f2afd54e9a2a8c6\n\n\nUncovered code in 'pu' not in 'jch'\n--------------------------------------------------------\n\nblame.c\n170072f9 846)     (result[i] >= most_certain_line_a ||\n170072f9 847)      second_best_result[i] >= most_certain_line_a)) {\n170072f9 848) certainties[i] = CERTAINTY_NOT_CALCULATED;\n170072f9 951) max_search_distance_b = 0;\n1fc73384 998) return;\n8934ac8c 1190)     ent->ignored == next->ignored &&\n8934ac8c 1191)     ent->unblamable == next->unblamable) {\n43885768 1607) continue;\nae3f36de 2425) continue;\n\nbuiltin/blame.c\n\nbuiltin/cat-file.c\n\nbuiltin/fetch-pack.c\n\nbuiltin/pack-objects.c\n\nbuiltin/remote.c\nf39a9c65 1551) die(_(\"--save-to-push cannot be used with other options\"));\nf39a9c65 1575) die(_(\"--save-to-push can only be used when only one url is defined\"));\n\nfetch-pack.c\n\nhttp-fetch.c\n\nhttp.c\nb472070f 2302) target ? hash_to_hex(target->hash) : base_url,\n\noidset.c\n\npromisor-remote.c\n0ba08c05 25) die(_(\"Remote with no URL\"));\n54248706 61) warning(_(\"promisor remote name cannot begin with '/': %s\"),\n54248706 63) return NULL;\n7bdf0926 93) previous->next = r->next;\n7b6e1b04 108) return git_config_string(&core_partial_clone_filter_default,\nb21a55f3 139) return 0;\ndcc8b4e9 202) static int remove_fetched_oids(struct object_id **oids, int oid_nr, int to_free)\ndcc8b4e9 204) int i, missing_nr = 0;\ndcc8b4e9 205) int *missing = xcalloc(oid_nr, sizeof(*missing));\ndcc8b4e9 206) struct object_id *old_oids = *oids;\ndcc8b4e9 208) int old_fetch_if_missing = fetch_if_missing;\ndcc8b4e9 210) fetch_if_missing = 0;\ndcc8b4e9 212) for (i = 0; i < oid_nr; i++)\ndcc8b4e9 213) if (oid_object_info_extended(the_repository, &old_oids[i], NULL, 0)) {\ndcc8b4e9 214) missing[i] = 1;\ndcc8b4e9 215) missing_nr++;\ndcc8b4e9 218) fetch_if_missing = old_fetch_if_missing;\ndcc8b4e9 220) if (missing_nr) {\ndcc8b4e9 221) int j = 0;\ndcc8b4e9 222) new_oids = xcalloc(missing_nr, sizeof(*new_oids));\ndcc8b4e9 223) for (i = 0; i < oid_nr; i++)\ndcc8b4e9 224) if (missing[i])\ndcc8b4e9 225) oidcpy(&new_oids[j++], &old_oids[i]);\ndcc8b4e9 226) *oids = new_oids;\ndcc8b4e9 227) if (to_free)\ndcc8b4e9 228) free(old_oids);\ndcc8b4e9 231) free(missing);\ndcc8b4e9 233) return missing_nr;\ndcc8b4e9 248) if (missing_nr == 1)\ndcc8b4e9 249) continue;\ndcc8b4e9 250) missing_nr = remove_fetched_oids(&missing_oids, missing_nr, to_free);\ndcc8b4e9 251) if (missing_nr) {\ndcc8b4e9 252) to_free = 1;\ndcc8b4e9 253) continue;\ndcc8b4e9 261) free(missing_oids);\n\nprotocol.c\n\nremote-curl.c\n\nupload-pack.c\na8d662e3 130) return readsz;\n820a5361 149) BUG(\"packfile_uris requires sideband-all\");\na8d662e3 355) send_client_data(1, output_state.buffer, output_state.used);\n820a5361 1386) string_list_clear(&data->uri_protocols, 0);\n\nwrapper.c\n\nCommits introducting uncovered code:\nBarret Rhoden\t1fc73384 blame: optionally track line fingerprints during fill_blame_origin()\nBarret Rhoden\t8934ac8c blame: add config options for the output of ignored or unblamable lines\nBarret Rhoden\t43885768 blame: use the fingerprint heuristic to match ignored lines\nBarret Rhoden\tae3f36de blame: add the ability to ignore commits and their changes\nChristian Couder\tdcc8b4e9 promisor-remote: implement promisor_remote_get_direct()\nChristian Couder\tb21a55f3 promisor-remote: parse remote.*.partialclonefilter\nChristian Couder\t7bdf0926 promisor-remote: use repository_format_partial_clone\nChristian Couder\t0ba08c05 Remove fetch-object.{c,h} in favor of promisor-remote.{c,h}\nChristian Couder\t54248706 Add initial support for many promisor remotes\nChristian Couder\t7b6e1b04 Move core_partial_clone_filter_default to promisor-remote.c\nDenton Liu\tf39a9c65 remote: add --save-to-push option to git remote set-url\nJonathan Tan\ta8d662e3 upload-pack: refactor reading of pack-objects out\nJonathan Tan\t820a5361 upload-pack: send part of packfile response as uri\nJunio C Hamano\tb472070f Merge branch 'jt/fetch-cdn-offload' into pu\nMichael Platings\t170072f9 blame: add a fingerprint heuristic to match ignored lines\n\n\nUncovered code in 'jch' not in 'next'\n--------------------------------------------------------\n\nbuiltin/branch.c\n1fde99cf 841) die(_(\"The -a, and -r, options to 'git branch' do not take a branch name.\\n\"\n\nbuiltin/checkout.c\n\nbuiltin/commit.c\n\nbuiltin/gc.c\n\nbuiltin/rebase.c\nd559f502 759) ret = error(_(\"could not remove '%s'\"),\n526c03b5 1272) goto done;\n10572de1 1288) goto done;\nd559f502 1675) error(_(\"could not remove '%s'\"),\n\ncommit-graph.c\na53af50b 269) chunk_repeated = 1;\na53af50b 339) warning(_(\"commit-graph has no base graphs chunk\"));\na53af50b 340) return 0;\ncd556367 344) n--;\na53af50b 346) if (!oideq(&oids[n], &cur_g->oid) ||\na53af50b 347)     !hasheq(oids[n].hash, g->chunk_base_graphs + g->hash_len * n)) {\na53af50b 348) warning(_(\"commit-graph chain does not match\"));\na53af50b 349) return 0;\ncd556367 353) cur_g = cur_g->base_graph;\ncd556367 380) free(chain_name);\ncd556367 381) return NULL;\ncd556367 388) return NULL;\ncd556367 396) warning(_(\"invalid commit-graph chain: line '%s' not a hash\"),\ncd556367 398) valid = 0;\ncd556367 399) break;\nc6b73769 414) valid = 0;\n2d06258b 531) BUG(\"NULL commit-graph\");\n2d06258b 537) BUG(\"position %d is beyond the scope of this commit-graph (%d local + %d base commits)\",\n2d06258b 598) BUG(\"position %d is beyond the scope of this commit-graph (%d local + %d base commits)\",\n4ece4fc1 945) if (find_commit_in_graph(parent->item,\n4ece4fc1 948) edge_value = pos;\n4ece4fc1 1043) continue;\nd83160e8 1165) error(_(\"error opening index for %s\"), packname.buf);\nd83160e8 1166) return 1;\n63a8be62 1205) continue;\n93ba1867 1228) display_progress(ctx->progress, ctx->approx_nr_objects);\n4ece4fc1 1317) error(_(\"failed to write correct number of base graph ids\"));\n4ece4fc1 1318) return -1;\n8520d7fc 1350) error(_(\"unable to create leading directories of %s\"),\n8520d7fc 1352) return errno;\n4ece4fc1 1362) error(_(\"unable to create '%s'\"), ctx->graph_name);\n4ece4fc1 1363) return -1;\n4ece4fc1 1437) return -1;\n4ece4fc1 1463) error(_(\"unable to open commit-graph chain file\"));\n4ece4fc1 1464) return -1;\nda09c6fe 1475) error(_(\"failed to rename base commit-graph file\"));\n4ece4fc1 1495) error(_(\"failed to rename temporary commit-graph file\"));\n4ece4fc1 1496) return -1;\n00a8cb54 1523)     (max_commits && num_commits > max_commits))) {\nc6b73769 1525) break;\nc6b73769 1540) ctx->num_commit_graphs_after = 1;\nc6b73769 1541) ctx->new_base_graph = NULL;\n0e2ec504 1617) duplicates++;\n0e2ec504 1620) ctx->commits.list[last_distinct + 1] = ctx->commits.list[i];\n0e2ec504 1628) ctx->num_extra_edges += num_parents - 2;\n00a8cb54 1788) ctx->oids.alloc = split_opts->max_commits;\nefeb229e 1824) error(_(\"the commit graph format cannot write %d commits\"), count_distinct);\nefeb229e 1825) res = 1;\nefeb229e 1826) goto cleanup;\nefeb229e 1835) error(_(\"too many commits to write graph\"));\nefeb229e 1836) res = 1;\nefeb229e 1837) goto cleanup;\n\nconfig.c\n07b2c0ea 283) return 0;\n\nread-cache.c\nee70c128 1723) if (advice_unknown_index_extension) {\nee70c128 1724) warning(_(\"ignoring optional %.4s index extension\"), ext);\nee70c128 1725) advise(_(\"This is likely due to the file having been written by a newer\\n\"\n\nref-filter.c\n2582083f 93) keydata_aka_refname ? keydata_aka_refname : k->wt->head_ref);\n\nsequencer.c\n37e9ee5c 293) ret = -1;\n37e9ee5c 311) ret = error(_(\"could not remove '%s'\"), buf.buf);\n\nCommits introducting uncovered code:\nDenton Liu\t07b2c0ea config: learn the \"onbranch:\" includeIf condition\nDenton Liu\t526c03b5 rebase: refactor can_fast_forward into goto tower\nDenton Liu\t10572de1 rebase: fast-forward --onto in more cases\nDerrick Stolee\t0e2ec504 commit-graph: merge commit-graph chains\nDerrick Stolee\tefeb229e commit-graph: return with errors during write\nDerrick Stolee\t00a8cb54 commit-graph: create options for split files\nDerrick Stolee\tda09c6fe commit-graph: add --split option to builtin\nDerrick Stolee\t8520d7fc commit-graph: extract write_commit_graph_file()\nDerrick Stolee\t63a8be62 commit-graph: extract fill_oids_from_commit_hex()\nDerrick Stolee\t93ba1867 commit-graph: extract fill_oids_from_all_packs()\nDerrick Stolee\t4ece4fc1 commit-graph: write commit-graph chains\nDerrick Stolee\t2d06258b commit-graph: prepare for commit-graph chains\nDerrick Stolee\tc6b73769 commit-graph: allow cross-alternate chains\nDerrick Stolee\tcd556367 commit-graph: load commit-graph chains\nDerrick Stolee\ta53af50b commit-graph: add base graphs chunk\nDerrick Stolee\td83160e8 commit-graph: extract fill_oids_from_packs()\nJonathan Nieder\tee70c128 index: offer advice for unknown index extensions\nNickolai Belakovski\t2582083f ref-filter: add worktreepath atom\nPhilip Oakley\t1fde99cf doc branch: provide examples for listing remote tracking branches\nPhillip Wood\t37e9ee5c sequencer: return errors from sequencer_remove_state()\nPhillip Wood\td559f502 rebase --abort/--quit: cleanup refs/rewritten\n\n\nUncovered code in 'next' not in 'master'\n--------------------------------------------------------\n\nbuiltin/am.c\n97387c8b 1662) die(\"unable to read from stdin; aborting\");\n6e7baf24 2336) die(_(\"interactive mode requires patches on the command line\"));\n\nbuiltin/bisect--helper.c\n7877ac3d 574) retval = error(_(\"invalid ref: '%s'\"), start_head.buf);\n7877ac3d 575) goto finish;\n\nbuiltin/fast-export.c\ne80001f8 81) static int parse_opt_reencode_mode(const struct option *opt,\ne80001f8 84) if (unset) {\ne80001f8 85) reencode_mode = REENCODE_ABORT;\ne80001f8 86) return 0;\ne80001f8 89) switch (git_parse_maybe_bool(arg)) {\ne80001f8 91) reencode_mode = REENCODE_NO;\ne80001f8 92) break;\ne80001f8 94) reencode_mode = REENCODE_YES;\ne80001f8 95) break;\ne80001f8 97) if (!strcasecmp(arg, \"abort\"))\ne80001f8 98) reencode_mode = REENCODE_ABORT;\ne80001f8 100) return error(\"Unknown reencoding mode: %s\", arg);\ne80001f8 103) return 0;\ne80001f8 665) switch(reencode_mode) {\ne80001f8 667) reencoded = reencode_string(message, \"UTF-8\", encoding);\ne80001f8 668) break;\ne80001f8 670) break;\ne80001f8 672) die(\"Encountered commit-specific encoding %s in commit \"\ne80001f8 674)     encoding, oid_to_hex(&commit->object.oid));\nccbfc96d 686) printf(\"encoding %s\\n\", encoding);\n\nbuiltin/index-pack.c\n8a30a1ef 1365) continue;\n\nbuiltin/log.c\n13cdf780 873) return 0;\n\nbuiltin/merge.c\nf3f8311e 1290) usage_msg_opt(_(\"--quit expects no arguments\"),\n\nbuiltin/worktree.c\n1de16aec 297) BUG(\"How come '%s' becomes empty after sanitization?\", sb.buf);\n\nbuiltin/write-tree.c\n76a7bc09 53) die(\"%s: prefix %s not found\", me, tree_prefix);\n\nfast-import.c\n3edfcc65 2612) read_next_command();\n3edfcc65 2679) strbuf_addf(&new_data,\n\ngrep.c\nde99eb0c 1784) BUG(\"grep call which could print a name requires \"\n\nlist-objects-filter-options.c\n5c03bc8b 94) strbuf_addf(errbuf, _(\"invalid filter-spec '%s'\"), arg);\n\nread-cache.c\n7bd9631b 2201) src_offset += load_cache_entries_threaded(istate, mmap, mmap_size, nr_threads, ieot);\n\nrefs.c\n1de16aec 111) sanitized->buf[sanitized->len-1] = '-';\n1de16aec 170) if (sanitized)\n1de16aec 171) strbuf_addch(sanitized, '-');\n1de16aec 173) return -1;\n1de16aec 178) strbuf_complete(sanitized, '/');\n1de16aec 215) BUG(\"sanitizing refname '%s' check returned error\", refname);\n\nserver-info.c\nf4f476b6 110) ret = -1;\nf4f476b6 111) goto out;\nf4f476b6 123) goto out;\nf4f476b6 125) goto out;\nf4f476b6 134) if (uic.cur_fp)\nf4f476b6 135) fclose(uic.cur_fp);\n\nCommits introducting uncovered code:\nDenton Liu\t13cdf780 format-patch: teach format.notes config option\nElijah Newren\te80001f8 fast-export: do automatic reencoding of commit messages only if requested\nElijah Newren\tccbfc96d fast-export: avoid stripping encoding header if we cannot reencode\nElijah Newren\t3edfcc65 fast-import: support 'encoding' commit header\nEmily Shaffer\tde99eb0c grep: fail if call could output and name is null\nEric Wong\tf4f476b6 update-server-info: avoid needless overwrites\nJeff King\t97387c8b am: read interactive input from stdin\nJeff King\t6e7baf24 am: drop tty requirement for --interactive\nJeff King\t76a7bc09 cmd_{read,write}_tree: rename \"unused\" variable that is used\nJeff King\t7bd9631b read-cache: drop unused parameter from threaded load\nJohannes Schindelin\t7877ac3d bisect--helper: verify HEAD could be parsed before continuing\nJonathan Tan\t8a30a1ef index-pack: prefetch missing REF_DELTA bases\nMatthew DeVore\t5c03bc8b list-objects-filter-options: error is localizeable\nNguyễn Thái Ngọc Duy\tf3f8311e merge: add --quit\nNguyễn Thái Ngọc Duy\t1de16aec worktree add: sanitize worktree names\n\n\nUncovered code in 'master' not in 'master@{1}'\n--------------------------------------------------------\n\nbuiltin/rebase.c\n4c785c0e 1206) opts->flags &= ~REBASE_DIFFSTAT;\n\ndiff.c\n8ef05193 5217) return error(_(\"%s expects a numerical value\"), \"--unified\");\n\nparse-options-cb.c\nf7e68a08 20) return error(_(\"option `%s' expects a numerical value\"),\n\nparse-options.c\nf7e68a08 199) return error(_(\"%s expects a numerical value\"),\n\nprogress.c\n1aed1a5f 131)     cols - progress->title_len - 1 : 0;\n\nremote-curl.c\n8a1569d6 1120) die(_(\"protocol error: expected sha/ref, got '%s'\"), p);\n8a1569d6 1126) die(_(\"protocol error: expected sha/ref, got '%s'\"), p);\n\ntrace2/tr2_tls.c\n5fdae9d3 87) return pthread_getspecific(tr2tls_key) == tr2tls_thread_main;\n\nCommits introducting uncovered code:\nJeff Hostetler\t5fdae9d3 trace2: fix tracing when NO_PTHREADS is defined\nJiang Xin\t8a1569d6 i18n: fix typos found during l10n for git 2.22.0\nJohannes Schindelin\t4c785c0e rebase: replace incorrect logical negation by correct bitwise one\nNguyễn Thái Ngọc Duy\t8ef05193 diff-parseopt: restore -U (no argument) behavior\nNguyễn Thái Ngọc Duy\tf7e68a08 parse-options: check empty value in OPT_INTEGER and OPT_ABBREV\nSZEDER Gábor\t1aed1a5f progress: avoid empty line when breaking the progress line\n\n"},{"id":"376821","messageId":"29379827-541e-fe75-f46a-661eb727fc1d@gmail.com","threadId":"51258","inReplyTo":"396091fc-5572-19a5-4f18-61c258590dd5@gmail.com","subject":"Re: Git Test Coverage Report (Thursday, June 6 2019)","fromName":"Derrick Stolee","fromEmail":"stolee@gmail.com","sentAt":"2019-06-07T14:43:29Z","receivedAt":"2019-06-07T14:43:34Z","isPatch":false,"sender":{"key":"stolee@gmail.com","avatar":"https://avatars.githubusercontent.com/u/570044?v=4"},"body":"On 6/6/2019 9:19 PM, Derrick Stolee wrote:\n> commit-graph.c\n> a53af50b 346) if (!oideq(&oids[n], &cur_g->oid) ||\n> a53af50b 347)     !hasheq(oids[n].hash, g->chunk_base_graphs + g->hash_len * n)) {\n> a53af50b 348) warning(_(\"commit-graph chain does not match\"));\n> a53af50b 349) return 0;\n\nI'm calling myself out that this warning() should be hit by the \"verify\" checks, as\nthis is a critical behavior check.\n\n> cd556367 353) cur_g = cur_g->base_graph;\n\nHere is an example of a line where I definitely hit this block when I add a die()\nstatement.\n\nI think I figured out the reason the coverage report was reporting coverage\nincorrectly sometimes: I was accidentally running the test suite in parallel.\nThis causes lots of issues with how gcov tracks coverage as there are lots of\nrace conditions. Running without parallelism takes a LOT longer, so I'll need\nto use my own machine instead of a hosted build.\n\n> cd556367 396) warning(_(\"invalid commit-graph chain: line '%s' not a hash\"),\n\nI'm lukewarm on how important it is to test this, but I'll give it a try.\n\n> 4ece4fc1 945) if (find_commit_in_graph(parent->item,\n> 4ece4fc1 948) edge_value = pos;\n\nThis case is triggered by an octopus merge with a not-first parent being\nin the base graph instead of in the tip file. I'll add a test that covers\nthis situation, as it could be prone to errors.\n\n> 00a8cb54 1523)     (max_commits && num_commits > max_commits))) {\n\nThis is a reminder that I forgot to add tests for the '--max-commits' argument.\n\n> c6b73769 1540) ctx->num_commit_graphs_after = 1;\n> c6b73769 1541) ctx->new_base_graph = NULL;\n\nThis is another subtle case that I should test: we are writing a commit-graph\nwith the --split option and we think we should write a tip graph, but the\ncurrent file is the old (non-split) commit-graph file _and_ it is in an alternate.\nThis prevents us from trying to move the commit-graph in the alternate, and we\nmust write a single commit-graph file in our object directory.\n\n> 0e2ec504 1617) duplicates++;\n> 0e2ec504 1620) ctx->commits.list[last_distinct + 1] = ctx->commits.list[i];\n> 0e2ec504 1628) ctx->num_extra_edges += num_parents - 2;\n\nThis code in deduplicate_commits() is doing somewhat important work: it takes\nthe combined commit lists from multiple levels of the commit-graph and then\nde-duplicates the lists. However, if we are writing the commit-graphs properly\nthen they will never have duplicates at this point. I don't think it is valid\nto have duplicates, either, as then a commit will have ambiguous graph position.\n\nPerhaps deduplicate_commits() should remove the duplicate logic and replace it\nwith a BUG() or die() statement upon finding a duplicate. The sorting and\nchecking for octopus merges is still important.\n\nThanks,\n-Stolee\n"},{"id":"376867","messageId":"f28dd5b1-fda8-cf51-5582-067a7d2c2472@iee.org","threadId":"51258","inReplyTo":"396091fc-5572-19a5-4f18-61c258590dd5@gmail.com","subject":"Re: Git Test Coverage Report (Thursday, June 6 2019)","fromName":"Philip Oakley","fromEmail":"philipoakley@iee.org","sentAt":"2019-06-08T22:15:56Z","receivedAt":"2019-06-08T22:16:03Z","isPatch":false,"sender":{"key":"philipoakley@iee.email","avatar":"https://avatars.githubusercontent.com/u/914343?v=4"},"body":"Hi Stollee\n\nOn 07/06/2019 02:19, Derrick Stolee wrote:\n> Here is today's test coverage report.\n>\n> Thanks,\n> -Stolee\n>\n> [1] https://derrickstolee.github.io/git-test-coverage/reports/2019-06-06.htm\n> [2] https://derrickstolee.github.io/git-test-coverage/reports/2019-06-06.txt\n>\n> ---\n>\n> pu\t4f91bbec8a3cc2fff435fb3dbb0dfa5f9d223141\n> jch\te1895a3c3b1fef6d1bc80251d09598e219d3908d\n> next\tee3066bb6536c68f973b3c0ffaaa13f4bfda5ea3\n> master\t74583d89127e21255c12dd3c8a3bf60b497d7d03\n> master@{1}\taa25c82427ae70aebf3b8f970f2afd54e9a2a8c6\n>\n>\n> Uncovered code in 'pu' not in 'jch'\n> --------------------------------------------------------\n>\n> [snip]\n>\n>\n> Uncovered code in 'jch' not in 'next'\n> --------------------------------------------------------\n>\n> builtin/branch.c\n> 1fde99cf 841) die(_(\"The -a, and -r, options to 'git branch' do not take a branch name.\\n\"\n>\n> [nip]\n>\n> Commits introducting uncovered code:\n> ...\n> Philip Oakley\t1fde99cf doc branch: provide examples for listing remote tracking branches\n> [snip rest]\n\nThe change was just a change to the die() message, but was not tested \npreviously.\n\nI've guessed that t3203 would be the right place for an extra test which \nI've hacked (but not yet tested) as\n\n---\nphili@Philip-Win10 MINGW64 /usr/src/git (branch-patterns-v2)\n$ git show -1\ncommit d5a799d8833b0ae195915eefd5365f3fc4c7c0a4 (HEAD -> \nbranch-patterns-v2, my/branch-patterns-v2)\nAuthor: Philip Oakley <philipoakley@iee.org>\nDate:   Sat Jun 8 22:50:06 2019 +0100\n\n     t3203-branch-output: test -a & -r pattern options\n\n     Users may wrongly use the -r and -a options with a branch pattern when\n     looking for a remote tracking branch. Test that we fail for that \nmisuse.\n\n     Signed-off-by: Philip Oakley <philipoakley@iee.org>\n\ndiff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh\nindex ee6787614c..e78bd1c56d 100755\n--- a/t/t3203-branch-output.sh\n+++ b/t/t3203-branch-output.sh\n@@ -264,4 +264,9 @@ test_expect_success '--color overrides auto-color' '\n         test_cmp expect.color actual\n  '\n\n+test_expect_success '-a & -r options do not take a branch name, without \n--list' '\n+       test_must_fail git branch -a HEAD\n+       test_must_fail git branch -r HEAD\n+'\n+\n  test_done\n---\nhttps://github.com/PhilipOakley/git/commit/d5a799d8833b0ae195915eefd5365f3fc4c7c0a4\n\nNot sure if that's the right way to do it (Its my first proper try at \ntests themselves..)\n\nI'm going to be away for about a week with only intermittent internet \nhence the unfinished reply.\n--\nPhilip\n"}]}