Subject: [PATCH v2 0/4] Die preserve ggg

From: "Philip Oakley via GitGitGadget" <[email-masked]>
Date: Sat, 04 Jun 2022 11:17:45 +0000

This [2] short series is a follow up to GitGitGadget "Update the die()
preserve-merges messages to help some users (PR #1155)" [1].

Since v1: Additional patch to translate the user facing die message. Bring
the --abort preclusion to the start of the if && condition for clarity.
Clarify that the pull.rebase config is complementary to this particular
'die'. Updates to the commit messages.

v0: The first patch is a tidy up of the --preserve option to highlight that
it is now Deleted, rather than Deprecated.

In response to Avar's comments that the former error message merely
'tantilised without telling' the user what to do, it became obvious that the
underling problem was that the user was unable to git rebase --abort which
was also fatal, when a preserve-rebase was in progress.

Thus the main update is to allow the rebase --abort command, even when a
--preserve is in progress, to proceed. The --abort code was unchanged by the
removal of the preserve option, as the resetting and clean up of internal
state is common to the other rebase options.

The user facing fatal message now simply advises to abort, or downgrade to a
version that has preserve-merges to complete the rebase.

The final patch highlights that some IDEs still allow the setting of the
preserve-merges option as a pull config setup.

Philip Oakly

[1] GitLore ref [email-masked]
https://lore.kernel.org/git/[email-masked]/

[2]
https://lore.kernel.org/git/[email-masked]/t/#u

Philip Oakley (4):
  rebase.c: state preserve-merges has been removed
  rebase: help users when dying with `preserve-merges`
  rebase: note `preserve` merges may be a pull config option
  rebase: translate a die(preserve-merges) message

 builtin/rebase.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

base-commit: c4f0e309ae745751d08727f24e8ff55e56355755
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1242%2FPhilipOakley%2Fdie_preserve_ggg-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1242/PhilipOakley/die_preserve_ggg-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1242

Range-diff vs v1:

 1:  0a4c81d8caf ! 1:  d60ec67cb06 rebase.c: state preserve-merges has been removed
     @@ Commit message
          Since feebd2d256 (rebase: hide --preserve-merges option, 2019-10-18)
          this option is now removed as stated in the subsequent release notes.
      
     -    Fix the option tip.
     +    Fix and reflow the option tip.
      
          Signed-off-by: Philip Oakley <[email-masked]>
      
     @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
       			parse_opt_interactive),
       		OPT_SET_INT_F('p', "preserve-merges", &preserve_merges_selected,
      -			      N_("(DEPRECATED) try to recreate merges instead of "
     -+			      N_("(REMOVED) try to recreate merges instead of "
     - 				 "ignoring them"),
     +-				 "ignoring them"),
     ++			      N_("(REMOVED) was: try to recreate merges "
     ++				 "instead of ignoring them"),
       			      1, PARSE_OPT_HIDDEN),
       		OPT_RERERE_AUTOUPDATE(&options.allow_rerere_autoupdate),
     + 		OPT_CALLBACK_F(0, "empty", &options, "{drop,keep,ask}",
 2:  d0fb5410594 ! 2:  47f27187529 rebase: help users when dying with `preserve-merges`
     @@ Metadata
       ## Commit message ##
          rebase: help users when dying with `preserve-merges`
      
     -    Git will die if a "rebase --preserve-merges" is in progress.
     -    Users cannot --quit, --abort or --continue the rebase.
     +    Git would die if a "rebase --preserve-merges" was in progress.
     +    Users could neither --quit, --abort, nor --continue the rebase.
      
          Make the `rebase --abort` option available to allow users to remove
          traces of any preserve-merges rebase, even if they had upgraded
          during a rebase.
      
     -    One trigger was an unexpectedly difficult to resolve conflict, as
     +    One trigger case was an unexpectedly difficult to resolve conflict, as
          reported on the `git-users` group.
          (https://groups.google.com/g/git-for-windows/c/3jMWbBlXXHM)
      
     -    Tell the user the options to resolve the problem manually.
     +    Other potential use-cases include git-experts using the portable
     +    'Git on a stick' to help users with an older git version.
      
          Signed-off-by: Philip Oakley <[email-masked]>
      
     @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
       		strbuf_addf(&buf, "%s/rewritten", merge_dir());
      -		if (is_directory(buf.buf)) {
      -			die("`rebase -p` is no longer supported");
     -+		if (is_directory(buf.buf) && !(action == ACTION_ABORT)) {
     ++		if (!(action == ACTION_ABORT) && is_directory(buf.buf)) {
      +			die("`rebase --preserve-merges` (-p) is no longer supported.\n"
      +			"Use `git rebase --abort` to terminate current rebase.\n"
     -+			"Or downgrade to v2.33, or earlier, to complete the rebase.\n");
     ++			"Or downgrade to v2.33, or earlier, to complete the rebase.");
       		} else {
       			strbuf_reset(&buf);
       			strbuf_addf(&buf, "%s/interactive", merge_dir());
 3:  ece3eecdc4d ! 3:  fe000f06207 rebase: note `preserve` merges may be a pull config option
     @@ Metadata
       ## Commit message ##
          rebase: note `preserve` merges may be a pull config option
      
     -    The `--preserve-merges` option was removed by v2.35.0. However
     -    users may not be aware that it is also a Pull option, and it is
     -    still offered by major IDE vendors such as Visual Studio.
     +    The `--preserve-merges` option was removed by v2.34.0. However
     +    users may not be aware that it is also a Pull configuration option,
     +    which is still offered by major IDE vendors such as Visual Studio.
      
          Extend the `--preserve-merges` die message to also direct users to
     -    the use of the `preserve` option in the `pull` config.
     +    the possible use of the `preserve` option in the `pull.rebase` config.
     +    This is an additional 'belt and braces' information statement.
      
          Signed-off-by: Philip Oakley <[email-masked]>
      
     @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
       	if (preserve_merges_selected)
      -		die(_("--preserve-merges was replaced by --rebase-merges"));
      +		die(_("--preserve-merges was replaced by --rebase-merges\n"
     -+			"Your `pull` configuration, may also invoke this option."));
     ++			"Note: Your `pull.rebase` configuration may also be  set to 'preserve',\n"
     ++			"which is no longer supported; use 'merges' instead"));
       
       	if (action != ACTION_NONE && total_argc != 2) {
       		usage_with_options(builtin_rebase_usage,
 -:  ----------- > 4:  ae02c6d5a6e rebase: translate a die(preserve-merges) message

-- 
gitgitgadget