All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Eric Wong" <e@80x24.org>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Johannes Sixt" <j6t@kdbg.org>,
	"Alban Gruin" <alban.gruin@gmail.com>,
	"Phillip Wood" <phillip.wood123@gmail.com>,
	"Johannes Schindelin" <johannes.schindelin@gmx.de>
Subject: [PATCH v3 00/11] Drop support for git rebase --preserve-merges
Date: Tue, 07 Sep 2021 21:05:01 +0000	[thread overview]
Message-ID: <pull.195.v3.git.1631048712.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.195.v2.git.1630497435.gitgitgadget@gmail.com>

In 427c3bd28ab (rebase: deprecate --preserve-merges, 2019-03-11) (which was
included in v2.22.0), we officially deprecated the --preserve-merges
backend. Over two years later, it is time to drop that backend, and here is
a patch series that does just that.

Changes since v2:

 * Removed the no-longer-needed script_snippet variable
 * Enhanced the commit message of the git svn patch to clarify that the
   deprecation happened only in v2.25 there
 * Adjusted code comments that still talked about the removed option
 * Removed some no-longer-needed ACTION_* enum values
 * We now also drop check_todo_list_from_file() because it is no longer
   needed
 * The todo_list_add_exec_commands() function is now scoped to the file
   (because there are no longer any outside users)
 * When users still use the options, they are no longer met by Git's blank
   stares, but by a helpful error message suggesting to use --rebase-merges
   instead

Changes since v1:

 * Rebased onto v2.33.0

Johannes Schindelin (11):
  t5520: do not use `pull.rebase=preserve`
  remote: warn about unhandled branch.<name>.rebase values
  tests: stop testing `git rebase --preserve-merges`
  pull: remove support for `--rebase=preserve`
  rebase: drop support for `--preserve-merges`
  git-svn: drop support for `--preserve-merges`
  rebase: drop the internal `rebase--interactive` command
  rebase: remove obsolete code comment
  rebase: stop mentioning the -p option in comments
  rebase: remove a no-longer-used function
  sequencer: restrict scope of a formerly public function

 .github/workflows/main.yml                |    1 -
 .gitignore                                |    1 -
 Documentation/config/branch.txt           |    4 -
 Documentation/config/pull.txt             |    4 -
 Documentation/git-pull.txt                |    6 +-
 Documentation/git-rebase.txt              |   51 -
 Documentation/git-svn.txt                 |    1 -
 Makefile                                  |    2 -
 builtin/pull.c                            |    9 +-
 builtin/rebase.c                          |  335 +------
 builtin/remote.c                          |    3 +
 contrib/completion/git-completion.bash    |    2 +-
 git-rebase--preserve-merges.sh            | 1057 ---------------------
 git-svn.perl                              |    1 -
 git.c                                     |    1 -
 rebase-interactive.c                      |   29 -
 rebase-interactive.h                      |    2 -
 rebase.c                                  |    5 +-
 rebase.h                                  |    1 -
 sequencer.c                               |    4 +-
 sequencer.h                               |    2 -
 t/t3404-rebase-interactive.sh             |   76 --
 t/t3408-rebase-multi-line.sh              |   10 -
 t/t3409-rebase-preserve-merges.sh         |  130 ---
 t/t3410-rebase-preserve-dropped-merges.sh |   90 --
 t/t3411-rebase-preserve-around-merges.sh  |   80 --
 t/t3412-rebase-root.sh                    |   37 -
 t/t3414-rebase-preserve-onto.sh           |   85 --
 t/t3418-rebase-continue.sh                |   15 -
 t/t3421-rebase-topology-linear.sh         |   19 -
 t/t3422-rebase-incompatible-options.sh    |   11 -
 t/t3425-rebase-topology-merges.sh         |  151 ---
 t/t3427-rebase-subtree.sh                 |   26 +-
 t/t5520-pull.sh                           |   24 +-
 t/t7505-prepare-commit-msg-hook.sh        |    1 -
 t/t7517-per-repo-email.sh                 |   13 -
 t/test-lib.sh                             |    4 -
 37 files changed, 33 insertions(+), 2260 deletions(-)
 delete mode 100644 git-rebase--preserve-merges.sh
 delete mode 100755 t/t3409-rebase-preserve-merges.sh
 delete mode 100755 t/t3410-rebase-preserve-dropped-merges.sh
 delete mode 100755 t/t3411-rebase-preserve-around-merges.sh
 delete mode 100755 t/t3414-rebase-preserve-onto.sh


base-commit: 225bc32a989d7a22fa6addafd4ce7dcd04675dbf
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-195%2Fdscho%2Fdrop-rebase-p-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-195/dscho/drop-rebase-p-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/195

Range-diff vs v2:

  1:  8da29d539fc =  1:  8da29d539fc t5520: do not use `pull.rebase=preserve`
  2:  acda0f59947 =  2:  acda0f59947 remote: warn about unhandled branch.<name>.rebase values
  3:  cdb9fae4b93 !  3:  e4b683f0cd6 tests: stop testing `git rebase --preserve-merges`
     @@ t/t3425-rebase-topology-merges.sh: test_run_rebase success 'd n o e' --apply
       test_done
      
       ## t/t3427-rebase-subtree.sh ##
     +@@ t/t3427-rebase-subtree.sh: commit_message() {
     + # where the root commit adds three files: topic_1.t, topic_2.t and topic_3.t.
     + #
     + # This commit history is then rebased onto `topic_3` with the
     +-# `-Xsubtree=files_subtree` option in three different ways:
     ++# `-Xsubtree=files_subtree` option in two different ways:
     + #
     +-# 1. using `--preserve-merges`
     +-# 2. using `--preserve-merges` and --keep-empty
     +-# 3. without specifying a rebase backend
     ++# 1. without specifying a rebase backend
     ++# 2. using the `--rebase-merges` backend
     + 
     + test_expect_success 'setup' '
     + 	test_commit README &&
      @@ t/t3427-rebase-subtree.sh: test_expect_success 'setup' '
       	git commit -m "Empty commit" --allow-empty
       '
  4:  b493046134d !  4:  6e45e90abe5 pull: remove support for `--rebase=preserve`
     @@ Commit message
          In preparation for `git-rebase--preserve-merges.sh` entering its after
          life, we remove this (deprecated) option that would still rely on it.
      
     +    To help users transition who still did not receive the memo about the
     +    deprecation, we offer a helpful error message instead of throwing our
     +    hands in the air and saying that we don't know that option, never heard
     +    of it.
     +
          Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
      
       ## Documentation/config/branch.txt ##
     @@ contrib/completion/git-completion.bash: __git_complete_config_variable_value ()
       	remote.pushdefault)
      
       ## rebase.c ##
     +@@
     + #include "rebase.h"
     + #include "config.h"
     ++#include "gettext.h"
     + 
     + /*
     +  * Parses textual value for pull.rebase, branch.<name>.rebase, etc.
      @@ rebase.c: enum rebase_type rebase_parse_value(const char *value)
       		return REBASE_FALSE;
       	else if (v > 0)
     @@ rebase.c: enum rebase_type rebase_parse_value(const char *value)
       	else if (!strcmp(value, "merges") || !strcmp(value, "m"))
       		return REBASE_MERGES;
       	else if (!strcmp(value, "interactive") || !strcmp(value, "i"))
     + 		return REBASE_INTERACTIVE;
     ++	else if (!strcmp(value, "preserve") || !strcmp(value, "p"))
     ++		error(_("%s: 'preserve' superseded by 'merges'"), value);
     + 	/*
     + 	 * Please update _git_config() in git-completion.bash when you
     + 	 * add new rebase modes.
      
       ## rebase.h ##
      @@ rebase.h: enum rebase_type {
  5:  eb738b1bf05 !  5:  2d7a4a2c564 rebase: drop support for `--preserve-merges`
     @@ Commit message
          This option was deprecated in favor of `--rebase-merges` some time ago,
          and now we retire it.
      
     +    To assist users to transition away, we do not _actually_ remove the
     +    option, but now we no longer implement the functionality. Instead, we
     +    offer a helpful error message suggesting which option to use.
     +
          Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
      
       ## .gitignore ##
     @@ builtin/rebase.c: static int run_am(struct rebase_options *opts)
       {
      -	const char *argv[] = { NULL, NULL };
      -	struct strbuf script_snippet = STRBUF_INIT, buf = STRBUF_INIT;
     -+	struct strbuf script_snippet = STRBUF_INIT;
       	int status;
      -	const char *backend, *backend_func;
       
     @@ builtin/rebase.c: static int run_specific_rebase(struct rebase_options *opts, en
       		BUG("Unhandled rebase type %d", opts->type);
      -		break;
      -	}
     - 
     +-
      -	strbuf_addf(&script_snippet,
      -		    ". git-sh-setup && . %s && %s", backend, backend_func);
      -	argv[0] = script_snippet.buf;
     --
     + 
      -	status = run_command_v_opt(argv, RUN_USING_SHELL);
      -finished_rebase:
       	if (opts->dont_finish_rebase)
       		; /* do nothing */
       	else if (opts->type == REBASE_MERGE)
     +@@ builtin/rebase.c: finished_rebase:
     + 		die("Nothing to do");
     + 	}
     + 
     +-	strbuf_release(&script_snippet);
     +-
     + 	return status ? -1 : 0;
     + }
     + 
     +@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
     + 	char *squash_onto_name = NULL;
     + 	int reschedule_failed_exec = -1;
     + 	int allow_preemptive_ff = 1;
     ++	int preserve_merges_selected = 0;
     + 	struct option builtin_rebase_options[] = {
     + 		OPT_STRING(0, "onto", &options.onto_name,
     + 			   N_("revision"),
      @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
       			N_("let the user edit the list of commits to rebase"),
       			PARSE_OPT_NOARG | PARSE_OPT_NONEG,
       			parse_opt_interactive),
      -		OPT_SET_INT_F('p', "preserve-merges", &options.type,
     --			      N_("(DEPRECATED) try to recreate merges instead of "
     --				 "ignoring them"),
     ++		OPT_SET_INT_F('p', "preserve-merges", &preserve_merges_selected,
     + 			      N_("(DEPRECATED) try to recreate merges instead of "
     + 				 "ignoring them"),
      -			      REBASE_PRESERVE_MERGES, PARSE_OPT_HIDDEN),
     ++			      1, PARSE_OPT_HIDDEN),
       		OPT_RERERE_AUTOUPDATE(&options.allow_rerere_autoupdate),
       		OPT_CALLBACK_F(0, "empty", &options, "{drop,keep,ask}",
       			       N_("how to handle commits that become empty"),
     @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
       		} else {
       			strbuf_reset(&buf);
       			strbuf_addf(&buf, "%s/interactive", merge_dir());
     +@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
     + 			     builtin_rebase_options,
     + 			     builtin_rebase_usage, 0);
     + 
     ++	if (preserve_merges_selected)
     ++		die(_("--preserve-merges was replaced by --rebase-merges"));
     ++
     + 	if (action != ACTION_NONE && total_argc != 2) {
     + 		usage_with_options(builtin_rebase_usage,
     + 				   builtin_rebase_options);
      @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
       		usage_with_options(builtin_rebase_usage,
       				   builtin_rebase_options);
  6:  a987e9439af !  6:  913647d8e76 git-svn: drop support for `--preserve-merges`
     @@ Commit message
          We already passed the `--rebase-merges` option to `git rebase` instead,
          now we make this move permanent.
      
     +    As pointed out by Ævar Arnfjörð Bjarmason, in contrast to the
     +    deprecation of `git rebase`'s `--preserve-merges` backend, `git svn`
     +    only deprecated this option in v2.25.0 (because this developer missed
     +    `git svn`'s use of that backend when deprecating the rebase backend
     +    running up to Git v2.22).
     +
     +    Still, v2.25.0 has been released on January 13th, 2020. In other words,
     +    `git svn` deprecated this option over one and a half years ago, _and_
     +    has been redirecting to the `--rebase-merges` option during all that
     +    time (read: `git svn rebase --preserve-merges` didn't do _precisely_
     +    what the user asked, since v2.25.0, anyway, it fell back to pretending
     +    that the user asked for `git svn rebase --rebase-merges` instead).
     +
     +    It is time to act on that deprecation and remove that option after all.
     +
          Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
      
       ## Documentation/git-svn.txt ##
  7:  4492cca369c !  7:  b5a16e205e6 rebase: drop the internal `rebase--interactive` command
     @@ Commit message
          It was only used by the `--preserve-merges` backend, which we just
          removed.
      
     +    Helped-by: Alban Gruin <alban.gruin@gmail.com>
          Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
      
       ## builtin/rebase.c ##
     +@@ builtin/rebase.c: enum action {
     + 	ACTION_ABORT,
     + 	ACTION_QUIT,
     + 	ACTION_EDIT_TODO,
     +-	ACTION_SHOW_CURRENT_PATCH,
     +-	ACTION_SHORTEN_OIDS,
     +-	ACTION_EXPAND_OIDS,
     +-	ACTION_CHECK_TODO_LIST,
     +-	ACTION_REARRANGE_SQUASH,
     +-	ACTION_ADD_EXEC
     ++	ACTION_SHOW_CURRENT_PATCH
     + };
     + 
     + static const char *action_names[] = { "undefined",
      @@ builtin/rebase.c: static const char *action_names[] = { "undefined",
       				      "edit_todo",
       				      "show_current_patch" };
     @@ builtin/rebase.c: static const char *action_names[] = { "undefined",
       {
       	const char *todo_file = rebase_path_todo();
      @@ builtin/rebase.c: static int run_sequencer_rebase(struct rebase_options *opts,
     + 	flags |= opts->rebase_merges ? TODO_LIST_REBASE_MERGES : 0;
     + 	flags |= opts->rebase_cousins > 0 ? TODO_LIST_REBASE_COUSINS : 0;
     + 	flags |= opts->root_with_onto ? TODO_LIST_ROOT_WITH_ONTO : 0;
     +-	flags |= command == ACTION_SHORTEN_OIDS ? TODO_LIST_SHORTEN_IDS : 0;
     + 	flags |= opts->reapply_cherry_picks ? TODO_LIST_REAPPLY_CHERRY_PICKS : 0;
     + 
     + 	switch (command) {
     +@@ builtin/rebase.c: static int run_sequencer_rebase(struct rebase_options *opts,
       
       		break;
       	}
  -:  ----------- >  8:  d23f245b684 rebase: remove obsolete code comment
  -:  ----------- >  9:  6905c8746ba rebase: stop mentioning the -p option in comments
  -:  ----------- > 10:  5bb04ea3f6c rebase: remove a no-longer-used function
  -:  ----------- > 11:  aae9323b25f sequencer: restrict scope of a formerly public function

-- 
gitgitgadget

  parent reply	other threads:[~2021-09-07 21:05 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-23 20:50 [PATCH 0/8] Drop support for git rebase --preserve-merges Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 1/8] t5520: do not use `pull.rebase=preserve` Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 2/8] remote: warn about unhandled branch.<name>.rebase values Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 3/8] tests: stop testing `git rebase --preserve-merges` Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 4/8] pull: remove support for `--rebase=preserve` Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 5/8] rebase: drop support for `--preserve-merges` Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 6/8] git-svn: " Johannes Schindelin via GitGitGadget
2019-11-23 22:08   ` Eric Wong
2019-11-24 21:29     ` Johannes Schindelin
2019-11-25  3:15       ` Eric Wong
2019-11-23 20:50 ` [PATCH 7/8] rebase: drop the internal `rebase--interactive` command Johannes Schindelin via GitGitGadget
2019-11-23 20:50 ` [PATCH 8/8] remote: no longer claim that branch.*.rebase=preserve is a thing Johannes Schindelin via GitGitGadget
2021-09-01 11:57 ` [PATCH v2 0/7] Drop support for git rebase --preserve-merges Johannes Schindelin via GitGitGadget
2021-09-01 11:57   ` [PATCH v2 1/7] t5520: do not use `pull.rebase=preserve` Johannes Schindelin via GitGitGadget
2021-09-01 11:57   ` [PATCH v2 2/7] remote: warn about unhandled branch.<name>.rebase values Johannes Schindelin via GitGitGadget
2021-09-01 11:57   ` [PATCH v2 3/7] tests: stop testing `git rebase --preserve-merges` Johannes Schindelin via GitGitGadget
2021-09-01 13:26     ` Ævar Arnfjörð Bjarmason
2021-09-01 11:57   ` [PATCH v2 4/7] pull: remove support for `--rebase=preserve` Johannes Schindelin via GitGitGadget
2021-09-01 11:57   ` [PATCH v2 5/7] rebase: drop support for `--preserve-merges` Johannes Schindelin via GitGitGadget
2021-09-01 12:21     ` Ævar Arnfjörð Bjarmason
2021-09-02 13:54       ` Johannes Schindelin
2021-09-02 14:11         ` Ævar Arnfjörð Bjarmason
2021-09-01 13:33     ` Ævar Arnfjörð Bjarmason
2021-09-02 13:59       ` Johannes Schindelin
2021-09-02 14:16         ` Ævar Arnfjörð Bjarmason
2021-09-02 14:28     ` Ævar Arnfjörð Bjarmason
2021-09-02 14:34     ` Ævar Arnfjörð Bjarmason
2021-09-02 14:56       ` Ævar Arnfjörð Bjarmason
2021-09-02 15:34         ` Ævar Arnfjörð Bjarmason
2021-09-04 19:41       ` Johannes Schindelin
2021-09-05  7:32         ` Ævar Arnfjörð Bjarmason
2021-09-05 22:36           ` Junio C Hamano
2021-09-06 10:15     ` Phillip Wood
2021-09-07 12:32       ` Johannes Schindelin
2021-09-07 15:31         ` Phillip Wood
2021-09-07 19:44           ` Johannes Schindelin
2021-09-01 11:57   ` [PATCH v2 6/7] git-svn: " Johannes Schindelin via GitGitGadget
2021-09-01 13:25     ` Ævar Arnfjörð Bjarmason
2021-09-02 14:00       ` Johannes Schindelin
2021-09-02 14:08       ` Johannes Schindelin
2021-09-01 11:57   ` [PATCH v2 7/7] rebase: drop the internal `rebase--interactive` command Johannes Schindelin via GitGitGadget
2021-09-06 10:10     ` Phillip Wood
2021-09-07 12:39       ` Johannes Schindelin
2021-09-01 13:37   ` [PATCH v2 0/7] Drop support for git rebase --preserve-merges Ævar Arnfjörð Bjarmason
2021-09-02 14:16     ` Johannes Schindelin
2021-09-02 14:51       ` Ævar Arnfjörð Bjarmason
2021-09-01 22:25   ` Junio C Hamano
2021-09-02 14:18     ` Johannes Schindelin
2021-09-02 20:06       ` Johannes Sixt
2021-09-07 17:33         ` Johannes Schindelin
2021-09-07 22:48           ` Elijah Newren
2021-09-10 12:08             ` Johannes Schindelin
2021-09-10 17:16               ` Elijah Newren
2021-09-13 11:24                 ` merge-ort and --rebase-merges, was " Johannes Schindelin
2021-09-13 15:53                   ` Elijah Newren
2021-09-06  6:58     ` Ævar Arnfjörð Bjarmason
2021-09-07 18:27       ` Junio C Hamano
2021-09-07 19:52         ` Ævar Arnfjörð Bjarmason
2021-09-04 22:30   ` Alban Gruin
2021-09-06 10:17     ` Phillip Wood
2021-09-07 12:48     ` Johannes Schindelin
2021-09-07 21:05   ` Johannes Schindelin via GitGitGadget [this message]
2021-09-07 21:05     ` [PATCH v3 01/11] t5520: do not use `pull.rebase=preserve` Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 02/11] remote: warn about unhandled branch.<name>.rebase values Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 03/11] tests: stop testing `git rebase --preserve-merges` Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 04/11] pull: remove support for `--rebase=preserve` Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 05/11] rebase: drop support for `--preserve-merges` Johannes Schindelin via GitGitGadget
2021-09-10 14:53       ` Ævar Arnfjörð Bjarmason
2022-07-21 19:02       ` re-mentioning --preserve-merges in the docs (was: [PATCH v3 05/11] rebase: drop support for `--preserve-merges`) Ævar Arnfjörð Bjarmason
2022-07-21 20:15         ` re-mentioning --preserve-merges in the docs Junio C Hamano
2022-07-29 13:24           ` Johannes Schindelin
2021-09-07 21:05     ` [PATCH v3 06/11] git-svn: drop support for `--preserve-merges` Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 07/11] rebase: drop the internal `rebase--interactive` command Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 08/11] rebase: remove obsolete code comment Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 09/11] rebase: stop mentioning the -p option in comments Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 10/11] rebase: remove a no-longer-used function Johannes Schindelin via GitGitGadget
2021-09-07 21:05     ` [PATCH v3 11/11] sequencer: restrict scope of a formerly public function Johannes Schindelin via GitGitGadget
2021-09-08  1:30     ` [PATCH v3 00/11] Drop support for git rebase --preserve-merges Ævar Arnfjörð Bjarmason

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=pull.195.v3.git.1631048712.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=alban.gruin@gmail.com \
    --cc=avarab@gmail.com \
    --cc=e@80x24.org \
    --cc=git@vger.kernel.org \
    --cc=j6t@kdbg.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=phillip.wood123@gmail.com \
    /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.