All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: "Đoàn Trần Công Danh" <congdanhqx@gmail.com>
Cc: git@vger.kernel.org, Taylor Blau <me@ttaylorr.com>,
	Jeff King <peff@peff.net>,
	Christian Couder <chriscool@tuxfamily.org>
Subject: Re: [PATCH 05/13] bisect run: keep some of the post-v2.30.0 output
Date: Tue, 08 Nov 2022 04:11:27 +0100	[thread overview]
Message-ID: <221108.86y1smrube.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <Y2mwN3bpaiN/7vJh@danh.dev>


On Tue, Nov 08 2022, Đoàn Trần Công Danh wrote:

> On 2022-11-07 22:40:33+0100, Ævar Arnfjörð Bjarmason <avarab@gmail.com> wrote:
>> 
>> On Sun, Nov 06 2022, Đoàn Trần Công Danh wrote:
>> 
>> > From: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
>> >
>> > Preceding commits fixed output and behavior regressions in
>> > d1bbbe45df8 (bisect--helper: reimplement `bisect_run` shell function
>> > in C, 2021-09-13), which did not claim to be changing the output of
>> > "git bisect run".
>> >
>> > But some of the output it emitted was subjectively better, so once
>> > we've asserted that we're back on v2.29.0 behavior, let's change some
>> > of it back:
>> >
>> > - We now quote the arguments again, but omit the first " " when
>> >   printing the "running" line.
>> > - Ditto for other cases where we emitted the argument
>> > - We say "found first bad commit" again, not just "run success"
>> 
>> So, something you refactored here was that there's now a
>> do_bisect_run(), and:
>> 
>> > -static int do_bisect_run(const char *command, int argc, const char **argv)
>> > +static int do_bisect_run(const char *command, int argc UNUSED, const char **argv UNUSED)
>> >  {
>> >  	struct child_process cmd = CHILD_PROCESS_INIT;
>> > -	struct strbuf buf = STRBUF_INIT;
>> > +	const char *trimed = command;
>> >  
>> > -	strbuf_join_argv(&buf, argc, argv, ' ');
>> > -	printf(_("running %s\n"), buf.buf);
>> > -	strbuf_release(&buf);
>> > +	while (*trimed && isspace(*trimed))
>> > +		trimed++;
>> > +	printf(_("running %s\n"), trimed);
>> >  	cmd.use_shell = 1;
>> >  	strvec_push(&cmd.args, command);
>> >  	return run_command(&cmd);
>> 
>> Instead of trimming with strbuf_ltrim() we're now using this loop, but
>> in any case, this has had the effect that you're only fixing one of many
>> of the output changes. We're still adding this leading whitespace to the
>> other messages we emit.
>
> Sorry, I can't follow, we're fixing in do_bisect_run, which meant we
> fixed all of the output changes for leading whitespace, no?
>
> 'do_bisect_run' will be called from normal 'git bisect run' iteration
> and also after receiving code 126/127 for the very first run.
>
> Which is the other cases you're talking about?

The other uses of command.buf in my initial version, i.e. I did:
	
	-       strbuf_reset(&command);
	-       strbuf_join_argv(&command, argc, argv, ' ');
	+       /* Quoted, but skip initial " " */
	+       strbuf_ltrim(&command);

And the command.buf is then used by:

	printf(_("running %s\n"), command.buf);
	res = run_command_v_opt(run_args.v, RUN_USING_SHELL);

Which your version covers, but also this, in bisect_run() just a few
lines later:

	error(_("unable to verify '%s' on good"
	      " revision"), command.buf);

And, for:

	error(_("bisect run failed: exit code %d from"
	      " '%s' is < 0 or >= 128"), res, command.buf);

In the original *.sh version of this it used the same variable.

But yours deals with the refactored do_bisect_run() from René's
e8de018438e (bisect--helper: factor out do_bisect_run(), 2022-10-27).

So that first "running" takes place in its ownown do_bisect_run()
function, and you only skip past the whitespace in the "const char
*command" local to that function.

Thus you're only trimming the whitespace for 1/3 cases, the 2/3 being
noted in the 04/13 as the ones I didn't write a test for.

I think this squashed in should be functionally equivalent:
	
	diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
	index f16b9df8fd6..493e062e76d 100644
	--- a/builtin/bisect--helper.c
	+++ b/builtin/bisect--helper.c
	@@ -1141,20 +1141,17 @@ static int get_first_good(const char *refname UNUSED,
	 	return 1;
	 }
	 
	-static int do_bisect_run(const char *command, int argc UNUSED, const char **argv UNUSED)
	+static int do_bisect_run(const char *command, const char *trimmed)
	 {
	 	struct child_process cmd = CHILD_PROCESS_INIT;
	-	const char *trimed = command;
	 
	-	while (*trimed && isspace(*trimed))
	-		trimed++;
	-	printf(_("running %s\n"), trimed);
	+	printf(_("running %s\n"), trimmed);
	 	cmd.use_shell = 1;
	 	strvec_push(&cmd.args, command);
	 	return run_command(&cmd);
	 }
	 
	-static int verify_good(const struct bisect_terms *terms, const char *command, int argc, const char **argv)
	+static int verify_good(const struct bisect_terms *terms, const char *command, const char *trimmed)
	 {
	 	int rc;
	 	enum bisect_error res;
	@@ -1174,7 +1171,7 @@ static int verify_good(const struct bisect_terms *terms, const char *command, in
	 	if (res != BISECT_OK)
	 		return -1;
	 
	-	rc = do_bisect_run(command, argc, argv);
	+	rc = do_bisect_run(command, trimmed);
	 
	 	res = bisect_checkout(&current_rev, no_checkout);
	 	if (res != BISECT_OK)
	@@ -1187,6 +1184,7 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
	 {
	 	int res = BISECT_OK;
	 	struct strbuf command = STRBUF_INIT;
	+	struct strbuf trimmed = STRBUF_INIT;
	 	const char *new_state;
	 	int temporary_stdout_fd, saved_stdout;
	 	int is_first_run = 1;
	@@ -1200,8 +1198,10 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
	 	}
	 
	 	sq_quote_argv(&command, argv);
	+	strbuf_addbuf(&trimmed, &command);
	+	strbuf_ltrim(&trimmed);
	 	while (1) {
	-		res = do_bisect_run(command.buf, argc, argv);
	+		res = do_bisect_run(command.buf, trimmed.buf);
	 
	 		/*
	 		 * Exit code 126 and 127 can either come from the shell
	@@ -1211,7 +1211,7 @@ static int bisect_run(struct bisect_terms *terms, const char **argv, int argc)
	 		 * missing or non-executable script.
	 		 */
	 		if (is_first_run && (res == 126 || res == 127)) {
	-			int rc = verify_good(terms, command.buf, argc, argv);
	+			int rc = verify_good(terms, command.buf, trimmed.buf);
	 			is_first_run = 0;
	 			if (rc < 0) {
	 				error(_("unable to verify '%s' on good"

Some of that's a bit of a hassle with e8de018438e, but this way we use
the whitespace-prefixed for run_command(), but not for the output. Maybe
we can just always use the trimmed version, I didn't check.

This approach would also mean that you can drop your 03/13 and 06/13
surrounding this commit, in 03/13 you added that argv/argc because:

	[...]	
	In a later change, we would like to restore the old behaviours,
	which would need information regarding argc and argv.

That "later change" is your 04/13, then in 05/13 you're back to them
being UNUSED, before 06/13 finally drops them.

But if we just pass both trimmed & non-trimmed into do_bisect_run() to
begin with we don't need to go through all of that...

  reply	other threads:[~2022-11-08  3:36 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 [this message]
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     ` [PATCH v2 00/11] Turn git-bisect to be builtin Đoàn Trần Công Danh
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=221108.86y1smrube.gmgdl@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=chriscool@tuxfamily.org \
    --cc=congdanhqx@gmail.com \
    --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.