git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>,
	git@vger.kernel.org, Vas Sudanagunta <vas@commonkarma.org>
Subject: Re: [PATCH 1/1] Let rebase.reschedulefailedexec only affect interactive rebases
Date: Fri, 28 Jun 2019 13:49:46 +0200 (CEST)	[thread overview]
Message-ID: <nycvar.QRO.7.76.6.1906281342280.44@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <xmqqzhm2ang5.fsf@gitster-ct.c.googlers.com>

Hi Junio,

On Thu, 27 Jun 2019, Junio C Hamano wrote:

> "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
> writes:
>
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> >
> > It does not make sense to stop non-interactive rebases when that config
> > setting is set to `true`.
>
> The reader is assumed to know that that config setting is only about
> interactive rebases, including "rebase -x", which probably is an OK
> explanation.

You're right, it is okay, but could be better.

> The subject needs a bit more work, though.
>
> "rebase: ignore rebase.reschedulefailedexec unless interative"
>
> or something like that, perhaps.

Right.

> > @@ -929,7 +930,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> >  		OPT_BOOL(0, "root", &options.root,
> >  			 N_("rebase all reachable commits up to the root(s)")),
> >  		OPT_BOOL(0, "reschedule-failed-exec",
> > -			 &options.reschedule_failed_exec,
> > +			 &reschedule_failed_exec,
> >  			 N_("automatically re-schedule any `exec` that fails")),
> >  		OPT_END(),
> >  	};
> > @@ -1227,8 +1228,10 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
> >  		break;
> >  	}
> >
> > -	if (options.reschedule_failed_exec && !is_interactive(&options))
> > +	if (reschedule_failed_exec > 0 && !is_interactive(&options))
>
> OK, it used to be that we got affected by what came from "options",
> which was read from the configuration.  Now we only pay attention to
> the command line, which makes sense.
>
> At this point, we have already examined '-x' and called
> imply_interative(), so this should trigger for '-x' (without '-i'),
> right?

Yes, at this point we have done all the parsing and automatic implying,
and check for incompatible options.

> >  		die(_("--reschedule-failed-exec requires an interactive rebase"));
>
> I wonder if users understand that '-x' is "an interctive rebase".
> The documentation can read both ways, and one of these may want to
> be clarified.
>
> 	-x <cmd>, --exec <cmd>
> 	...
> 	This uses the --interactive machinery internally, but it can
> 	be run without an explicit --interactive.
>
> Is it saying that use of interactive machinery is an impelementation
> detail the users should not concern themselves (in which case, the
> message given to "die()" above is misleading---not a new problem
> with this patch, though)?  Is it saying "-x" makes it plenty clear
> that the user wants interactive behaviour, so the users do not need
> to spell out --interactive in order to ask for it (in which case,
> "die()" message is fine, but "... internally, but ..." is
> misleading)?

Hmm. What would you think about:

  		die(_("--reschedule-failed-exec requires --exec or --interactive"));

?

It is still not _complete_, but at least it should be a ton less
confusing.

> > +	if (reschedule_failed_exec >= 0)
> > +		options.reschedule_failed_exec = reschedule_failed_exec;
>
> OK, here we recover the bit that is only stored in a local variable
> and pass it into cmd_rebase__interactive() machinery via the options
> structure, which lets the codepath after this point oblivious to
> this change, which is good ;-).
>
> >  	if (options.git_am_opts.argc) {
> >  		/* all am options except -q are compatible only with --am */
> > diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
> > index bdaa511bb0..4eff14dae5 100755
> > --- a/t/t3418-rebase-continue.sh
> > +++ b/t/t3418-rebase-continue.sh
> > @@ -265,4 +265,12 @@ test_expect_success '--reschedule-failed-exec' '
> >  	test_i18ngrep "has been rescheduled" err
> >  '
> >
> > +test_expect_success 'rebase.reschedulefailedexec only affects `rebase -i`' '
> > +	test_config rebase.reschedulefailedexec true &&
> > +	test_must_fail git rebase -x false HEAD^ &&
>
> These three lines gives us a concise summary of this patch ;-)
>
>  - The test title can serve as a starting point for a much better
>    patch title.
>
>  - We trigger for '-x' without requiring '-i'.

I changed the oneline to

	rebase --am: ignore rebase.reschedulefailedexec

This gives credit to the implementation details, as appropriate for commit
messages, and the error message still tries to be as helpful as possible
for users (who do not necessarily need to know that there are two
backends).

At this point, I am _really_ glad that we only have two backends left (for
all practical purposes, I don't count --preserve-merges).

Ciao,
Dscho

> > +	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
> > +	git rebase --abort &&
> > +	git rebase HEAD^
> > +'
> > +
> >  test_done
>

  reply	other threads:[~2019-06-28 11:49 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-27  8:12 [PATCH 0/1] Make rebase.reschedulefailedexec less overzealous Johannes Schindelin via GitGitGadget
2019-06-27  8:12 ` [PATCH 1/1] Let rebase.reschedulefailedexec only affect interactive rebases Johannes Schindelin via GitGitGadget
2019-06-27 18:32   ` Junio C Hamano
2019-06-28 11:49     ` Johannes Schindelin [this message]
2019-06-28 13:44       ` Phillip Wood
2019-06-28 22:08         ` Junio C Hamano
2019-06-28 23:52           ` Vas Sudanagunta
2019-06-30 10:03           ` Phillip Wood
2019-07-01 11:52             ` Johannes Schindelin
     [not found]           ` <0F745CE4-3203-4447-B1D5-937CCDCC64C7@commonkarma.org>
2019-07-01 11:48             ` Johannes Schindelin
2019-07-01 11:49           ` Johannes Schindelin
2019-07-01 11:58 ` [PATCH v2 0/1] Make rebase.reschedulefailedexec less overzealous Johannes Schindelin via GitGitGadget
2019-07-01 11:58   ` [PATCH v2 1/1] rebase --am: ignore rebase.reschedulefailedexec Johannes Schindelin via GitGitGadget

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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=nycvar.QRO.7.76.6.1906281342280.44@tvgsbejvaqbjf.bet \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=vas@commonkarma.org \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).