diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-10-04 12:49:08 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-10-04 12:49:08 -0700 |
commit | 03a01824a4ee07cd06b152bbff45066d6cf5542b (patch) | |
tree | 4a038a3a4036c0faa7f38a86d160540eff9adcb6 | |
parent | Merge branch 'jc/blame-ignore-fix' (diff) | |
parent | bisect: don't use invalid oid as rev when starting (diff) | |
download | tgif-03a01824a4ee07cd06b152bbff45066d6cf5542b.tar.xz |
Merge branch 'cc/bisect-start-fix'
"git bisect start X Y", when X and Y are not valid committish
object names, should take X and Y as pathspec, but didn't.
* cc/bisect-start-fix:
bisect: don't use invalid oid as rev when starting
-rw-r--r-- | builtin/bisect--helper.c | 13 | ||||
-rwxr-xr-x | t/t6030-bisect-porcelain.sh | 7 |
2 files changed, 13 insertions, 7 deletions
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c index 7dcc1b5188..2f8ef0ea30 100644 --- a/builtin/bisect--helper.c +++ b/builtin/bisect--helper.c @@ -484,14 +484,13 @@ static int bisect_start(struct bisect_terms *terms, const char **argv, int argc) terms->term_bad = xstrdup(arg); } else if (starts_with(arg, "--")) { return error(_("unrecognized option: '%s'"), arg); - } else { - char *commit_id = xstrfmt("%s^{commit}", arg); - if (get_oid(commit_id, &oid) && has_double_dash) - die(_("'%s' does not appear to be a valid " - "revision"), arg); - + } else if (!get_oidf(&oid, "%s^{commit}", arg)) { string_list_append(&revs, oid_to_hex(&oid)); - free(commit_id); + } else if (has_double_dash) { + die(_("'%s' does not appear to be a valid " + "revision"), arg); + } else { + break; } } pathspec_pos = i; diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh index b886529e59..aa226381be 100755 --- a/t/t6030-bisect-porcelain.sh +++ b/t/t6030-bisect-porcelain.sh @@ -82,6 +82,13 @@ test_expect_success 'bisect fails if given any junk instead of revs' ' git bisect bad $HASH4 ' +test_expect_success 'bisect start without -- takes unknown arg as pathspec' ' + git bisect reset && + git bisect start foo bar && + grep foo ".git/BISECT_NAMES" && + grep bar ".git/BISECT_NAMES" +' + test_expect_success 'bisect reset: back in the master branch' ' git bisect reset && echo "* master" > branch.expect && |