git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCHv3 1/2] rebase: decouple --exec from --interactive

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 18, 2016, 21:33 UTC
Message-ID
<xmqqh9g3pj3e.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1458336377-28296-1-git-send-email-sbeller@google.com>
Stefan Beller <sbeller@google.com> writes:
Show 24 quoted lines
> In the later steps of preparing a patch series I do not want to
> edit or reorder the patches any more, but just make sure the
> test suite passes after each patch and also to fix breakage
> right there if some of the steps fail.  I could run
>
>     EDITOR=true git rebase -i <anchor> -x "make test"
>
> but it would be simpler if it can be spelled like so:
>
>     git rebase <anchor> -x "make test"
>
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
>
>   Thanks Junio, Johannes for review!
>  
>  * Reworded the commit message (took your suggestion)
>  
>  * Diff to v2 in t3404:
>         test_expect_success 'rebase --exec works without -i ' '
>                 git reset --hard execute &&
>                 rm -rf exec_output &&
>         -	git rebase --exec "echo a line >>exec_output"  HEAD~2 2>actual &&
>         +	EDITOR="echo >invoked_editor" git rebase --exec "echo a line >>exec_output"  HEAD~2 2>actual &&

Hmph. If you add "-i" to the command line, do you see the 'invoked_editor' file created?

I ask this because I thought we override GIT_EDITOR, which has higher precedence than EDITOR, in the test-lib framework.

Show 90 quoted lines
>                 test_i18ngrep  "Successfully rebased and updated" actual &&
>         -	test_line_count = 2 exec_output
>         +	test_line_count = 2 exec_output &&
>         +	test_path_is_missing invoked_editor
>         '
>   * I just resend this patch instead of the whole series, so do not expect a
>     [PATCHv3 2/2] nor cover letter 0/2
>         
>
>  Documentation/git-rebase.txt  |  6 +++---
>  git-rebase.sh                 |  7 +------
>  t/t3404-rebase-interactive.sh | 13 ++++++-------
>  3 files changed, 10 insertions(+), 16 deletions(-)
>
> diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
> index 6ed610a..0387b40 100644
> --- a/Documentation/git-rebase.txt
> +++ b/Documentation/git-rebase.txt
> @@ -391,9 +391,6 @@ idea unless you know what you are doing (see BUGS below).
>  	final history. <cmd> will be interpreted as one or more shell
>  	commands.
>  +
> -This option can only be used with the `--interactive` option
> -(see INTERACTIVE MODE below).
> -+
>  You may execute several commands by either using one instance of `--exec`
>  with several commands:
>  +
> @@ -406,6 +403,9 @@ or by giving more than one `--exec`:
>  If `--autosquash` is used, "exec" lines will not be appended for
>  the intermediate commits, and will only appear at the end of each
>  squash/fixup series.
> ++
> +This uses the `--interactive` machinery internally, but it can be run
> +without an explicit `--interactive`.
>  
>  --root::
>  	Rebase all commits reachable from <branch>, instead of
> diff --git a/git-rebase.sh b/git-rebase.sh
> index cf60c43..0bf41ee 100755
> --- a/git-rebase.sh
> +++ b/git-rebase.sh
> @@ -248,6 +248,7 @@ do
>  		;;
>  	--exec=*)
>  		cmd="${cmd}exec ${1#--exec=}${LF}"
> +		test -z "$interactive_rebase" && interactive_rebase=implied
>  		;;
>  	--interactive)
>  		interactive_rebase=explicit
> @@ -348,12 +349,6 @@ do
>  done
>  test $# -gt 2 && usage
>  
> -if test -n "$cmd" &&
> -   test "$interactive_rebase" != explicit
> -then
> -	die "$(gettext "The --exec option must be used with the --interactive option")"
> -fi
> -
>  if test -n "$action"
>  then
>  	test -z "$in_progress" && die "$(gettext "No rebase in progress?")"
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index 544f9ad..21b1f95 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -876,16 +876,15 @@ test_expect_success 'rebase -ix with --autosquash' '
>  	test_cmp expected actual
>  '
>  
> -
> -test_expect_success 'rebase --exec without -i shows error message' '
> +test_expect_success 'rebase --exec works without -i ' '
>  	git reset --hard execute &&
> -	set_fake_editor &&
> -	test_must_fail git rebase --exec "git show HEAD" HEAD~2 2>actual &&
> -	echo "The --exec option must be used with the --interactive option" >expected &&
> -	test_i18ncmp expected actual
> +	rm -rf exec_output &&
> +	EDITOR="echo >invoked_editor" git rebase --exec "echo a line >>exec_output"  HEAD~2 2>actual &&
> +	test_i18ngrep  "Successfully rebased and updated" actual &&
> +	test_line_count = 2 exec_output &&
> +	test_path_is_missing invoked_editor
>  '
>  
> -
>  test_expect_success 'rebase -i --exec without <CMD>' '
>  	git reset --hard execute &&
>  	set_fake_editor &&
Previous: Stefan BellerNext: Junio C Hamano
Message 5 of 10 in “[PATCHV2 0/2] Decouple rebase --exec from --interactive”
  1. Stefan BellerMar 17, 2016
  2. 1/2 rebase -x: do not die without -iStefan Beller, Mar 17, 2016
  3. Junio C HamanoMar 17, 2016
  4. 1/2 rebase: decouple --exec from --interactiveStefan Beller, Mar 18, 2016
  5. Junio C HamanoMar 18, 2016
  6. Junio C HamanoMar 18, 2016
  7. Stefan BellerMar 18, 2016
  8. Johannes SchindelinMar 18, 2016
  9. 2/2 t3404: cleanup double empty lines between testsStefan Beller, Mar 17, 2016
  10. Matthieu MoyMar 19, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.