Skip to contentSkip to conversation

rebase: drop the unwanted -y

PATCH Superseded Johannes Schindelin via GitGitGadget 2 participants 6 messages Feb 5, 2019 – Feb 6, 2019 Documentation

lore
Share & tools
lore
#0 lore raw

cover rebase: drop the unwanted -y

I totally missed that this patch, despite my pledge to not include it, made it into master. Sorry about that.

Johannes Schindelin (1):
Revert "rebase: introduce a shortcut for --reschedule-failed-exec"

 Documentation/git-rebase.txt |  6 ------
 builtin/rebase.c             | 21 ---------------------
 git-legacy-rebase.sh         |  6 ------
 t/t3418-rebase-continue.sh   |  3 ---
 4 files changed, 36 deletions(-)

base-commit: b5101f929789889c2e536d915698f58d5c5c6b7a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-118%2Fdscho%2Frevert-rebase-y-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-118/dscho/revert-rebase-y-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/118

Signature · 1 line
gitgitgadget
#1 lore raw

PATCH 1/1 Revert "rebase: introduce a shortcut for --reschedule-failed-exec"

From: Johannes Schindelin <[email protected]>

When contributing the patch series, the cover letter tried to convey clearly that the patch introducing the shortcut -y was included only to show that it is possible, with a slight bias against it.

During the review, there were a couple reviewers who agreed with this sentiment, and the author was happy that this patch was not needed and concurred that it should be dropped. See e.g. Stefan Beller's reply:
<CAGZ79kZL5CRqCDRb6B-EedUm8Z_i4JuSF2=UtwwdRXMitrrOBw@mail.gmail.com>

However, it slipped by the original patch author (yours truly) that the patch *was* included when the branch made it to next and then when it made it to master.

So let's back out that patch before it even slips into an official release (in which case we would even have to support this unwanted flag).

This reverts commit 81ef8ee75d5f348d3c71ff633d13d302124e1a5e.

---
 Documentation/git-rebase.txt |  6 ------
 builtin/rebase.c             | 21 ---------------------
 git-legacy-rebase.sh         |  6 ------
 t/t3418-rebase-continue.sh   |  3 ---
 4 files changed, 36 deletions(-)
Documentation/git-rebase.txt +0 -6
index 4dd5853d6e..44ffe2c8c5 100644
@@ -462,12 +462,6 @@ without an explicit `--interactive`.
 +
 See also INCOMPATIBLE OPTIONS below.
 
--y <cmd>::
-	This is the same as passing `--reschedule-failed-exec` before
-	`-x <cmd>`, i.e. it appends the specified `exec` command and
-	turns on the mode where failed `exec` commands are automatically
-	rescheduled.
-
 --root::
 	Rebase all commits reachable from <branch>, instead of
 	limiting them with an <upstream>.  This allows you to rebase
builtin/rebase.c +0 -21
index 774264bae8..7c77a80687 100644
@@ -760,23 +760,6 @@ static int parse_opt_interactive(const struct option *opt, const char *arg,
 	return 0;
 }
 
-struct opt_y {
-	struct string_list *list;
-	struct rebase_options *options;
-};
-
-static int parse_opt_y(const struct option *opt, const char *arg, int unset)
-{
-	struct opt_y *o = opt->value;
-
-	if (unset || !arg)
-		return -1;
-
-	o->options->reschedule_failed_exec = 1;
-	string_list_append(o->list, arg);
-	return 0;
-}
-
 static void NORETURN error_on_missing_default_upstream(void)
 {
 	struct branch *current_branch = branch_get(NULL);
@@ -857,7 +840,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 	struct string_list strategy_options = STRING_LIST_INIT_NODUP;
 	struct object_id squash_onto;
 	char *squash_onto_name = NULL;
-	struct opt_y opt_y = { .list = &exec, .options = &options };
 	struct option builtin_rebase_options[] = {
 		OPT_STRING(0, "onto", &options.onto_name,
 			   N_("revision"),
@@ -935,9 +917,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		OPT_STRING_LIST('x', "exec", &exec, N_("exec"),
 				N_("add exec lines after each commit of the "
 				   "editable list")),
-		{ OPTION_CALLBACK, 'y', NULL, &opt_y, N_("<cmd>"),
-			N_("same as --reschedule-failed-exec -x <cmd>"),
-			PARSE_OPT_NONEG, parse_opt_y },
 		OPT_BOOL(0, "allow-empty-message",
 			 &options.allow_empty_message,
 			 N_("allow rebasing commits with empty messages")),
git-legacy-rebase.sh +0 -6
index 3bb0682db5..37db5a7ca4 100755
@@ -26,7 +26,6 @@ f,force-rebase!    cherry-pick all commits, even if unchanged
 m,merge!           use merging strategies to rebase
 i,interactive!     let the user edit the list of commits to rebase
 x,exec=!           add exec lines after each commit of the editable list
-y=!                same as --reschedule-failed-exec -x
 k,keep-empty	   preserve empty commits during rebase
 allow-empty-message allow rebasing commits with empty messages
 stat!              display a diffstat of what changed upstream
@@ -263,11 +262,6 @@ do
 		cmd="${cmd}exec ${1#--exec=}${LF}"
 		test -z "$interactive_rebase" && interactive_rebase=implied
 		;;
-	-y*)
-		reschedule_failed_exec=--reschedule-failed-exec
-		cmd="${cmd}exec ${1#-y}${LF}"
-		test -z "$interactive_rebase" && interactive_rebase=implied
-		;;
 	--interactive)
 		interactive_rebase=explicit
 		;;
t/t3418-rebase-continue.sh +0 -3
index 25aaacacfc..bdaa511bb0 100755
@@ -262,9 +262,6 @@ test_expect_success '--reschedule-failed-exec' '
 	test_must_fail git -c rebase.rescheduleFailedExec=true \
 		rebase -x false HEAD^ 2>err &&
 	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
-	test_i18ngrep "has been rescheduled" err &&
-	git rebase --abort &&
-	test_must_fail git rebase -y false HEAD^ 2>err &&
 	test_i18ngrep "has been rescheduled" err
 '
 
Signature · 1 line
gitgitgadget
#2 lore raw

Re: [PATCH 1/1] Revert "rebase: introduce a shortcut for --reschedule-failed-exec"

"Johannes Schindelin via GitGitGadget" <[email protected]>

Quoted 15 lines · writes:

From: Johannes Schindelin <[email protected]>

When contributing the patch series, the cover letter tried to convey clearly that the patch introducing the shortcut -y was included only to show that it is possible, with a slight bias against it.

During the review, there were a couple reviewers who agreed with this sentiment, and the author was happy that this patch was not needed and concurred that it should be dropped. See e.g. Stefan Beller's reply:
<CAGZ79kZL5CRqCDRb6B-EedUm8Z_i4JuSF2=UtwwdRXMitrrOBw@mail.gmail.com>

However, it slipped by the original patch author (yours truly) that the patch *was* included when the branch made it to next and then when it made it to master.

Quoted 8 lines

So let's back out that patch before it even slips into an official release (in which case we would even have to support this unwanted flag).

This reverts commit 81ef8ee75d5f348d3c71ff633d13d302124e1a5e.

---

Thanks for catching before feature freeze, but read the above again with cooler head. The revert message is less useful than if you said

The patch was sent for completeness just in case it turns out to be too cumbersome not to have a short-hand option, but during the discussion, reviewers agreed that [FOR SUCH AND SUCH REASONS --- fill in the blank here] we are better off without. The maintainer missed that conclusion and forgot to drop it while merging the topic down, and contributors did not notice the mistake, either.

As the reason is missing, the only thing a reader can get from it is "the patch was not intended to be included, but we screwed up". I do not see why a more useful "why it wasn't intended to be included" needs to be hidden behind an external reference.

#3 lore raw

v2 cover rebase: drop the unwanted -y

In reply to Johannes Schindelin via GitGitGadget

I totally missed that this patch made it into next, and then master. Sorry about that.

Changes since v1:

* Focused on the "why?" in the commit message.

Johannes Schindelin (1):
Revert "rebase: introduce a shortcut for --reschedule-failed-exec"

 Documentation/git-rebase.txt |  6 ------
 builtin/rebase.c             | 21 ---------------------
 git-legacy-rebase.sh         |  6 ------
 t/t3418-rebase-continue.sh   |  3 ---
 4 files changed, 36 deletions(-)

base-commit: b5101f929789889c2e536d915698f58d5c5c6b7a
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-118%2Fdscho%2Frevert-rebase-y-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-118/dscho/revert-rebase-y-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/118

Range-diff vs v1:

1: e61ebc3060 ! 1: a4857fb32d Revert "rebase: introduce a shortcut for --reschedule-failed-exec"
@@ -2,22 +2,20 @@

Revert "rebase: introduce a shortcut for --reschedule-failed-exec"

- When contributing the patch series, the cover letter tried to convey
- clearly that the patch introducing the shortcut -y was included only to
- show that it is possible, with a slight bias against it.
+ This patch was contributed only as a tentative "we could introduce a
+ convenient short option if we do not want to change the default behavior
+ in the long run" patch, opening the discussion whether other people
+ agree with deprecating the current behavior in favor of the rescheduling
+ behavior.

- During the review, there were a couple reviewers who agreed with this
- sentiment, and the author was happy that this patch was not needed and
- concurred that it should be dropped. See e.g. Stefan Beller's reply:
+ But the consensus on the Git mailing list was that it would make sense
+ to show a warning in the near future, and flip the default
+ rebase.rescheduleFailedExec to reschedule failed exec commands by
+ default. See e.g.
<CAGZ79kZL5CRqCDRb6B-EedUm8Z_i4JuSF2=UtwwdRXMitrrOBw@mail.gmail.com>

- However, it slipped by the original patch author (yours truly) that the
- patch *was* included when the branch made it to next and then when it
- made it to master.
-
- So let's back out that patch before it even slips into an official
- release (in which case we would even have to support this unwanted
- flag).
+ So let's back out that patch that added the -y short option that we
+ agreed was not necessary or desirable.

This reverts commit 81ef8ee75d5f348d3c71ff633d13d302124e1a5e.

Signature · 1 line
gitgitgadget
#4 lore raw

PATCH v2 1/1 Revert "rebase: introduce a shortcut for --reschedule-failed-exec"

From: Johannes Schindelin <[email protected]>

This patch was contributed only as a tentative "we could introduce a convenient short option if we do not want to change the default behavior in the long run" patch, opening the discussion whether other people agree with deprecating the current behavior in favor of the rescheduling behavior.

But the consensus on the Git mailing list was that it would make sense to show a warning in the near future, and flip the default rebase.rescheduleFailedExec to reschedule failed exec commands by default. See e.g. <CAGZ79kZL5CRqCDRb6B-EedUm8Z_i4JuSF2=UtwwdRXMitrrOBw@mail.gmail.com>

So let's back out that patch that added the -y short option that we agreed was not necessary or desirable.

This reverts commit 81ef8ee75d5f348d3c71ff633d13d302124e1a5e.

---
 Documentation/git-rebase.txt |  6 ------
 builtin/rebase.c             | 21 ---------------------
 git-legacy-rebase.sh         |  6 ------
 t/t3418-rebase-continue.sh   |  3 ---
 4 files changed, 36 deletions(-)
Documentation/git-rebase.txt +0 -6
index 4dd5853d6e..44ffe2c8c5 100644
@@ -462,12 +462,6 @@ without an explicit `--interactive`.
 +
 See also INCOMPATIBLE OPTIONS below.
 
--y <cmd>::
-	This is the same as passing `--reschedule-failed-exec` before
-	`-x <cmd>`, i.e. it appends the specified `exec` command and
-	turns on the mode where failed `exec` commands are automatically
-	rescheduled.
-
 --root::
 	Rebase all commits reachable from <branch>, instead of
 	limiting them with an <upstream>.  This allows you to rebase
builtin/rebase.c +0 -21
index 774264bae8..7c77a80687 100644
@@ -760,23 +760,6 @@ static int parse_opt_interactive(const struct option *opt, const char *arg,
 	return 0;
 }
 
-struct opt_y {
-	struct string_list *list;
-	struct rebase_options *options;
-};
-
-static int parse_opt_y(const struct option *opt, const char *arg, int unset)
-{
-	struct opt_y *o = opt->value;
-
-	if (unset || !arg)
-		return -1;
-
-	o->options->reschedule_failed_exec = 1;
-	string_list_append(o->list, arg);
-	return 0;
-}
-
 static void NORETURN error_on_missing_default_upstream(void)
 {
 	struct branch *current_branch = branch_get(NULL);
@@ -857,7 +840,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 	struct string_list strategy_options = STRING_LIST_INIT_NODUP;
 	struct object_id squash_onto;
 	char *squash_onto_name = NULL;
-	struct opt_y opt_y = { .list = &exec, .options = &options };
 	struct option builtin_rebase_options[] = {
 		OPT_STRING(0, "onto", &options.onto_name,
 			   N_("revision"),
@@ -935,9 +917,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		OPT_STRING_LIST('x', "exec", &exec, N_("exec"),
 				N_("add exec lines after each commit of the "
 				   "editable list")),
-		{ OPTION_CALLBACK, 'y', NULL, &opt_y, N_("<cmd>"),
-			N_("same as --reschedule-failed-exec -x <cmd>"),
-			PARSE_OPT_NONEG, parse_opt_y },
 		OPT_BOOL(0, "allow-empty-message",
 			 &options.allow_empty_message,
 			 N_("allow rebasing commits with empty messages")),
git-legacy-rebase.sh +0 -6
index 3bb0682db5..37db5a7ca4 100755
@@ -26,7 +26,6 @@ f,force-rebase!    cherry-pick all commits, even if unchanged
 m,merge!           use merging strategies to rebase
 i,interactive!     let the user edit the list of commits to rebase
 x,exec=!           add exec lines after each commit of the editable list
-y=!                same as --reschedule-failed-exec -x
 k,keep-empty	   preserve empty commits during rebase
 allow-empty-message allow rebasing commits with empty messages
 stat!              display a diffstat of what changed upstream
@@ -263,11 +262,6 @@ do
 		cmd="${cmd}exec ${1#--exec=}${LF}"
 		test -z "$interactive_rebase" && interactive_rebase=implied
 		;;
-	-y*)
-		reschedule_failed_exec=--reschedule-failed-exec
-		cmd="${cmd}exec ${1#-y}${LF}"
-		test -z "$interactive_rebase" && interactive_rebase=implied
-		;;
 	--interactive)
 		interactive_rebase=explicit
 		;;
t/t3418-rebase-continue.sh +0 -3
index 25aaacacfc..bdaa511bb0 100755
@@ -262,9 +262,6 @@ test_expect_success '--reschedule-failed-exec' '
 	test_must_fail git -c rebase.rescheduleFailedExec=true \
 		rebase -x false HEAD^ 2>err &&
 	grep "^exec false" .git/rebase-merge/git-rebase-todo &&
-	test_i18ngrep "has been rescheduled" err &&
-	git rebase --abort &&
-	test_must_fail git rebase -y false HEAD^ 2>err &&
 	test_i18ngrep "has been rescheduled" err
 '
 
Signature · 1 line
gitgitgadget