All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Đoàn Trần Công Danh" <congdanhqx@gmail.com>
To: git@vger.kernel.org
Cc: "Đoàn Trần Công Danh" <congdanhqx@gmail.com>,
	"Taylor Blau" <me@ttaylorr.com>, "Jeff King" <peff@peff.net>,
	"Christian Couder" <chriscool@tuxfamily.org>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH v2 00/11] Turn git-bisect to be builtin
Date: Thu, 10 Nov 2022 23:36:35 +0700	[thread overview]
Message-ID: <cover.1668097962.git.congdanhqx@gmail.com> (raw)
In-Reply-To: <cover.1668097286.git.congdanhqx@gmail.com>

This series finish the git-bisect porting from shell script into a C builtin.

This series can't be applied cleaned on master, it needs to be applied on top
of the series posted at:
https://lore.kernel.org/git/cover.1668097286.git.congdanhqx@gmail.com/
AND the series rs/no-more-run-command-v, which has been integrated to next.

Johannes Schindelin (2):
  bisect--helper: handle states directly
  Turn `git bisect` into a full built-in

Ævar Arnfjörð Bjarmason (4):
  bisect tests: test for v2.30.0 "bisect run" regressions
  bisect: refactor bisect_run() to match CodingGuidelines
  bisect test: test exit codes on bad usage
  bisect--helper: emit usage for "git bisect"

Đoàn Trần Công Danh (5):
  bisect: fix output regressions in v2.30.0
  bisect run: keep some of the post-v2.30.0 output
  bisect-run: verify_good: account for non-negative exit status
  bisect--helper: identify as bisect when report error
  bisect--helper: log: allow arbitrary number of arguments

 Makefile                               |   3 +-
 builtin.h                              |   2 +-
 builtin/{bisect--helper.c => bisect.c} | 126 ++++++++++++---------
 git-bisect.sh                          |   4 -
 git.c                                  |   2 +-
 t/t6030-bisect-porcelain.sh            | 148 +++++++++++++++++++++++++
 6 files changed, 225 insertions(+), 60 deletions(-)
 rename builtin/{bisect--helper.c => bisect.c} (92%)

Range-diff against v1:
 1:  5571bc36b8 !  1:  b6fd4ecd66 bisect tests: test for v2.30.0 "bisect run" regressions
    @@ Commit message
         with 127. That edge case is a bit too insane to preserve, so let's not
         add it to these regression tests.
     
    +    There was another regression that 'git bisect' consumed some options
    +    that was meant to passed down to program run with 'git bisect run'.
    +    Since that regression is breaking user's expectation, it has been fixed
    +    earlier without this patch queued.
    +
         1. 0a4cb1f1f2f (Merge branch 'mr/bisect-in-c-4', 2021-09-23)
         2. d1bbbe45df8 (bisect--helper: reimplement `bisect_run` shell
            function in C, 2021-09-13)
    @@ t/t6030-bisect-porcelain.sh: test_expect_success 'bisect skip: with commit both
     +	test_cmp expect.args actual.args
     +}
     +
    -+test_expect_failure 'git bisect run: args, stdout and stderr with no arguments' '
    -+	test_bisect_run_args <<-\EOF_ARGS 6<<-EOF_OUT 7<<-\EOF_ERR
    ++test_expect_failure 'git bisect run: args, stdout and stderr with no arguments' "
    ++	test_bisect_run_args <<-'EOF_ARGS' 6<<-EOF_OUT 7<<-'EOF_ERR'
     +	EOF_ARGS
     +	running ./run.sh
     +	$HASH4 is the first bad commit
     +	bisect run success
     +	EOF_OUT
     +	EOF_ERR
    -+'
    ++"
     +
    -+test_expect_failure 'git bisect run: args, stdout and stderr: "--" argument' '
    -+	test_bisect_run_args -- <<-\EOF_ARGS 6<<-EOF_OUT 7<<-\EOF_ERR
    ++test_expect_failure 'git bisect run: args, stdout and stderr: "--" argument' "
    ++	test_bisect_run_args -- <<-'EOF_ARGS' 6<<-EOF_OUT 7<<-'EOF_ERR'
     +	<-->
     +	EOF_ARGS
     +	running ./run.sh --
    @@ t/t6030-bisect-porcelain.sh: test_expect_success 'bisect skip: with commit both
     +	bisect run success
     +	EOF_OUT
     +	EOF_ERR
    -+'
    ++"
     +
    -+test_expect_failure 'git bisect run: args, stdout and stderr: "--log foo --no-log bar" arguments' '
    -+	test_bisect_run_args --log foo --no-log bar <<-\EOF_ARGS 6<<-EOF_OUT 7<<-\EOF_ERR
    ++test_expect_failure 'git bisect run: args, stdout and stderr: "--log foo --no-log bar" arguments' "
    ++	test_bisect_run_args --log foo --no-log bar <<-'EOF_ARGS' 6<<-EOF_OUT 7<<-'EOF_ERR'
     +	<--log>
     +	<foo>
     +	<--no-log>
    @@ t/t6030-bisect-porcelain.sh: test_expect_success 'bisect skip: with commit both
     +	bisect run success
     +	EOF_OUT
     +	EOF_ERR
    -+'
    ++"
     +
    -+test_expect_failure 'git bisect run: args, stdout and stderr: "--bisect-start" argument' '
    -+	test_bisect_run_args --bisect-start <<-\EOF_ARGS 6<<-EOF_OUT 7<<-\EOF_ERR
    ++test_expect_failure 'git bisect run: args, stdout and stderr: "--bisect-start" argument' "
    ++	test_bisect_run_args --bisect-start <<-'EOF_ARGS' 6<<-EOF_OUT 7<<-'EOF_ERR'
     +	<--bisect-start>
     +	EOF_ARGS
     +	running ./run.sh --bisect-start
    @@ t/t6030-bisect-porcelain.sh: test_expect_success 'bisect skip: with commit both
     +	bisect run success
     +	EOF_OUT
     +	EOF_ERR
    -+'
    ++"
     +
      # We want to automatically find the commit that
      # added "Another" into hello.
 2:  dc6ed4c453 =  2:  d82c7eaabf bisect: refactor bisect_run() to match CodingGuidelines
 3:  8a815e2311 <  -:  ---------- bisect--helper: pass arg[cv] down to do_bisect_run
 4:  31cd78f538 <  -:  ---------- bisect: fix output regressions in v2.30.0
 5:  5ba3bafdd4 <  -:  ---------- bisect run: keep some of the post-v2.30.0 output
 6:  32ad47ddc5 <  -:  ---------- bisect--helper: remove unused arguments from do_bisect_run
 -:  ---------- >  3:  912f32ceda bisect: fix output regressions in v2.30.0
 -:  ---------- >  4:  17bef3e951 bisect run: keep some of the post-v2.30.0 output
 -:  ---------- >  5:  d6c57af9cc bisect-run: verify_good: account for non-negative exit status
 7:  f212e64288 !  6:  8039b010c8 bisect--helper: pretend we're real bisect when report error
    @@ Metadata
     Author: Đoàn Trần Công Danh <congdanhqx@gmail.com>
     
      ## Commit message ##
    -    bisect--helper: pretend we're real bisect when report error
    +    bisect--helper: identify as bisect when report error
     
         In a later change, we will convert the bisect--helper to be builtin
    -    bisect. Let's start by pretending it's the real bisect when reporting
    +    bisect. Let's start by self-identifying it's the real bisect when reporting
         error.
     
    +    This change is safe since 'git bisect--helper' is an implementation
    +    detail, users aren't expected to call 'git bisect--helper'.
    +
         Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
     
      ## builtin/bisect--helper.c ##
    @@ builtin/bisect--helper.c: static int bisect_run(struct bisect_terms *terms, cons
      }
      
     @@ builtin/bisect--helper.c: static int cmd_bisect__terms(int argc, const char **argv, const char *prefix UNU
    - 	struct bisect_terms terms = { .term_good = NULL, .term_bad = NULL };
    + 	struct bisect_terms terms = { 0 };
      
      	if (argc > 1)
     -		return error(_("--bisect-terms requires 0 or 1 argument"));
    @@ builtin/bisect--helper.c: static int cmd_bisect__terms(int argc, const char **ar
      	free_terms(&terms);
      	return res;
     @@ builtin/bisect--helper.c: static int cmd_bisect__next(int argc, const char **argv UNUSED, const char *pref
    - 	struct bisect_terms terms = { .term_good = NULL, .term_bad = NULL };
    + 	struct bisect_terms terms = { 0 };
      
      	if (argc)
     -		return error(_("--bisect-next requires 0 arguments"));
    @@ builtin/bisect--helper.c: static int cmd_bisect__state(int argc, const char **ar
      }
      
     @@ builtin/bisect--helper.c: static int cmd_bisect__run(int argc, const char **argv, const char *prefix UNUSE
    - 	struct bisect_terms terms = { .term_good = NULL, .term_bad = NULL };
    + 	struct bisect_terms terms = { 0 };
      
      	if (!argc)
     -		return error(_("bisect run failed: no command provided."));
 8:  4c1beb8bf8 =  7:  7c43abfcef bisect test: test exit codes on bad usage
 9:  b494a4cf4e =  8:  4500867d56 bisect--helper: emit usage for "git bisect"
10:  a53e0c61ca !  9:  3752c0348b bisect--helper: make `state` optional
    @@ Metadata
     Author: Johannes Schindelin <Johannes.Schindelin@gmx.de>
     
      ## Commit message ##
    -    bisect--helper: make `state` optional
    +    bisect--helper: handle states directly
     
         In preparation for making `git bisect` a real built-in, let's prepare
         the `bisect--helper` built-in to handle `git bisect--helper good` and
    -    `git bisect--helper bad`, i.e. do not require the `state` subcommand to
    -    be passed explicitly.
    +    `git bisect--helper bad`, i.e. eliminate the need of `state` subcommand.
     
         Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## builtin/bisect--helper.c ##
    +@@ builtin/bisect--helper.c: static int cmd_bisect__next(int argc, const char **argv UNUSED, const char *pref
    + 	return res;
    + }
    + 
    +-static int cmd_bisect__state(int argc, const char **argv, const char *prefix UNUSED)
    +-{
    +-	int res;
    +-	struct bisect_terms terms = { 0 };
    +-
    +-	set_terms(&terms, "bad", "good");
    +-	get_terms(&terms);
    +-	res = bisect_state(&terms, argv, argc);
    +-	free_terms(&terms);
    +-	return res;
    +-}
    +-
    + static int cmd_bisect__log(int argc, const char **argv UNUSED, const char *prefix UNUSED)
    + {
    + 	if (argc)
    +@@ builtin/bisect--helper.c: int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
    + 		OPT_SUBCOMMAND("terms", &fn, cmd_bisect__terms),
    + 		OPT_SUBCOMMAND("start", &fn, cmd_bisect__start),
    + 		OPT_SUBCOMMAND("next", &fn, cmd_bisect__next),
    +-		OPT_SUBCOMMAND("state", &fn, cmd_bisect__state),
    + 		OPT_SUBCOMMAND("log", &fn, cmd_bisect__log),
    + 		OPT_SUBCOMMAND("replay", &fn, cmd_bisect__replay),
    + 		OPT_SUBCOMMAND("skip", &fn, cmd_bisect__skip),
     @@ builtin/bisect--helper.c: int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
      		OPT_SUBCOMMAND("run", &fn, cmd_bisect__run),
      		OPT_END()
11:  8037667da0 <  -:  ---------- bisect--helper: remove subcommand state
12:  3b13350977 = 10:  de3075eff9 bisect--helper: log: allow arbitrary number of arguments
13:  0441cf2554 = 11:  dadca7adbe Turn `git bisect` into a full built-in
-- 
2.38.1.157.gedabe22e0a


  parent reply	other threads:[~2022-11-10 16:37 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-04  6:31 "git bisect run" strips "--log" from the list of arguments Lukáš Doktor
2022-11-04  9:45 ` Jeff King
2022-11-04 11:10   ` Đoàn Trần Công Danh
2022-11-04 12:51     ` Jeff King
2022-11-04 11:36   ` Ævar Arnfjörð Bjarmason
2022-11-04 12:45     ` Jeff King
2022-11-04 13:07       ` Ævar Arnfjörð Bjarmason
2022-11-04 12:37   ` SZEDER Gábor
2022-11-04 12:44     ` Jeff King
2022-11-04 11:40 ` [PATCH 0/3] Convert git-bisect--helper to OPT_SUBCOMMAND Đoàn Trần Công Danh
2022-11-04 11:40   ` [PATCH 1/3] bisect--helper: remove unused options Đoàn Trần Công Danh
2022-11-04 12:53     ` Jeff King
2022-11-04 11:40   ` [PATCH 2/3] bisect--helper: move all subcommands into their own functions Đoàn Trần Công Danh
2022-11-04 12:55     ` Jeff King
2022-11-04 13:32     ` Ævar Arnfjörð Bjarmason
2022-11-04 14:03       ` Đoàn Trần Công Danh
2022-11-04 11:40   ` [PATCH 3/3] bisect--helper: parse subcommand with OPT_SUBCOMMAND Đoàn Trần Công Danh
2022-11-04 13:00     ` Jeff King
2022-11-04 13:46     ` Ævar Arnfjörð Bjarmason
2022-11-04 14:07       ` Đoàn Trần Công Danh
2022-11-04 13:55   ` [PATCH 0/3] Convert git-bisect--helper to OPT_SUBCOMMAND Ævar Arnfjörð Bjarmason
2022-11-05 17:03   ` [PATCH v2 " Đoàn Trần Công Danh
2022-11-05 17:03     ` [PATCH v2 1/3] bisect--helper: remove unused options Đoàn Trần Công Danh
2022-11-05 17:03     ` [PATCH v2 2/3] bisect--helper: move all subcommands into their own functions Đoàn Trần Công Danh
2022-11-05 17:13       ` Đoàn Trần Công Danh
2022-11-05 17:03     ` [PATCH v2 3/3] bisect--helper: parse subcommand with OPT_SUBCOMMAND Đoàn Trần Công Danh
2022-11-05 17:07     ` [PATCH 00/13] Turn git-bisect to be builtin Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 01/13] bisect tests: test for v2.30.0 "bisect run" regressions Đoàn Trần Công Danh
2022-11-07 21:31         ` Ævar Arnfjörð Bjarmason
2022-11-08  1:17           ` Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 02/13] bisect: refactor bisect_run() to match CodingGuidelines Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 03/13] bisect--helper: pass arg[cv] down to do_bisect_run Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 04/13] bisect: fix output regressions in v2.30.0 Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 05/13] bisect run: keep some of the post-v2.30.0 output Đoàn Trần Công Danh
2022-11-07 21:40         ` Ævar Arnfjörð Bjarmason
2022-11-08  1:26           ` Đoàn Trần Công Danh
2022-11-08  3:11             ` Ævar Arnfjörð Bjarmason
2022-11-05 17:07       ` [PATCH 06/13] bisect--helper: remove unused arguments from do_bisect_run Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 07/13] bisect--helper: pretend we're real bisect when report error Đoàn Trần Công Danh
2022-11-07 21:29         ` Ævar Arnfjörð Bjarmason
2022-11-05 17:07       ` [PATCH 08/13] bisect test: test exit codes on bad usage Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 09/13] bisect--helper: emit usage for "git bisect" Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 10/13] bisect--helper: make `state` optional Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 11/13] bisect--helper: remove subcommand state Đoàn Trần Công Danh
2022-11-07 21:45         ` Ævar Arnfjörð Bjarmason
2022-11-08  1:27           ` Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 12/13] bisect--helper: log: allow arbitrary number of arguments Đoàn Trần Công Danh
2022-11-05 17:07       ` [PATCH 13/13] Turn `git bisect` into a full built-in Đoàn Trần Công Danh
2022-11-05 23:18     ` [PATCH v2 0/3] Convert git-bisect--helper to OPT_SUBCOMMAND Taylor Blau
2022-11-10 16:36   ` [PATCH v3 " Đoàn Trần Công Danh
2022-11-10 16:36     ` [PATCH v3 1/3] bisect--helper: remove unused options Đoàn Trần Công Danh
2022-11-11 12:42       ` Ævar Arnfjörð Bjarmason
2022-11-10 16:36     ` [PATCH v3 2/3] bisect--helper: move all subcommands into their own functions Đoàn Trần Công Danh
2022-11-11 13:51       ` Ævar Arnfjörð Bjarmason
2022-11-10 16:36     ` [PATCH v3 3/3] bisect--helper: parse subcommand with OPT_SUBCOMMAND Đoàn Trần Công Danh
2022-11-10 16:36     ` Đoàn Trần Công Danh [this message]
2022-11-10 16:36       ` [PATCH v2 01/11] bisect tests: test for v2.30.0 "bisect run" regressions Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 02/11] bisect: refactor bisect_run() to match CodingGuidelines Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 03/11] bisect: fix output regressions in v2.30.0 Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 04/11] bisect run: keep some of the post-v2.30.0 output Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 05/11] bisect-run: verify_good: account for non-negative exit status Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 06/11] bisect--helper: identify as bisect when report error Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 07/11] bisect test: test exit codes on bad usage Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 08/11] bisect--helper: emit usage for "git bisect" Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 09/11] bisect--helper: handle states directly Đoàn Trần Công Danh
2022-11-10 16:36       ` [PATCH v2 10/11] bisect--helper: log: allow arbitrary number of arguments Đoàn Trần Công Danh
2022-11-11 14:01         ` Ævar Arnfjörð Bjarmason
2022-11-10 16:36       ` [PATCH v2 11/11] Turn `git bisect` into a full built-in Đoàn Trần Công Danh
2022-11-11 13:53         ` Ævar Arnfjörð Bjarmason
2022-11-11 15:37           ` Jeff King
2022-11-11 21:09             ` Ævar Arnfjörð Bjarmason
2022-11-11 22:07       ` [PATCH v2 00/11] Turn git-bisect to be builtin Taylor Blau
2022-11-15 19:18         ` Taylor Blau
2022-11-15 19:36           ` Jeff King
2022-11-15 19:40             ` Taylor Blau
2022-11-11 12:32     ` [PATCH v3 0/3] Convert git-bisect--helper to OPT_SUBCOMMAND Ævar Arnfjörð Bjarmason
2022-11-04 13:22 ` [PATCH 00/13] bisect: v2.30.0 "run" regressions + make it built-in Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 01/13] bisect tests: test for v2.30.0 "bisect run" regressions Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 02/13] bisect: refactor bisect_run() to match CodingGuidelines Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 03/13] bisect: fix output regressions in v2.30.0 Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 04/13] bisect run: fix "--log" eating regression " Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 05/13] bisect run: keep some of the post-v2.30.0 output Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 06/13] bisect test: test exit codes on bad usage Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 07/13] bisect--helper: emit usage for "git bisect" Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 08/13] bisect--helper: have all functions take state, argc, argv, prefix Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 09/13] parse-options API: don't restrict OPT_SUBCOMMAND() to one *_fn type Ævar Arnfjörð Bjarmason
2022-11-05  8:32     ` René Scharfe
2022-11-05 11:34       ` Đoàn Trần Công Danh
2022-11-05 21:32         ` Phillip Wood
2022-11-05 13:52       ` Ævar Arnfjörð Bjarmason
2022-11-05 16:36         ` Phillip Wood
2022-11-05 21:59           ` Ævar Arnfjörð Bjarmason
2022-11-05 17:26         ` René Scharfe
2022-11-05 22:33           ` Ævar Arnfjörð Bjarmason
2022-11-06  8:25             ` René Scharfe
2022-11-06 13:28               ` Ævar Arnfjörð Bjarmason
2022-11-12 10:42                 ` René Scharfe
2022-11-12 16:34                   ` Jeff King
2022-11-12 16:55                     ` Ævar Arnfjörð Bjarmason
2022-11-13 17:31                       ` René Scharfe
2022-11-04 13:22   ` [PATCH 10/13] bisect--helper: remove dead --bisect-{next-check,autostart} code Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 11/13] bisect--helper: convert to OPT_SUBCOMMAND_CB() Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 12/13] bisect--helper: make `state` optional Ævar Arnfjörð Bjarmason
2022-11-04 13:22   ` [PATCH 13/13] Turn `git bisect` into a full built-in Ævar Arnfjörð Bjarmason
2022-11-05  0:13   ` [PATCH 00/13] bisect: v2.30.0 "run" regressions + make it built-in Taylor Blau
2022-11-10 12:50   ` Johannes Schindelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1668097962.git.congdanhqx@gmail.com \
    --to=congdanhqx@gmail.com \
    --cc=avarab@gmail.com \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=me@ttaylorr.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.