All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: phillip.wood@dunelm.org.uk
Cc: Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>,
	git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH 1/1] rebase: deprecate --preserve-merges
Date: Mon, 11 Mar 2019 20:31:47 +0100 (STD)	[thread overview]
Message-ID: <nycvar.QRO.7.76.6.1903112025470.41@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <3a418266-6506-d2c0-45d3-5f1c6f0375c6@gmail.com>

Hi Phillip,

On Thu, 7 Mar 2019, Phillip Wood wrote:

> It's great to see this. Do we need the deprecation warning in both
> builtin/rebase.c and rebase--preserve-merges.sh? Won't that end up warning
> twice - maybe that's a good thing but if we go for only one I prefer the
> wording in rebase--preserve-merges.sh

Good point.

I also considered adding a warning to the todo list, in case the rebase is
run interactively, but that would have required way too many changes in
the test suite (the test cases using `FAKE_LINES` select lines from the
todo list based on their line number, not their content, which does not
play well with inserting 3 lines with a warning at the beginning of the
todo list).

Ciao,
Dscho

> 
> Best Wishes
> 
> Phillip
> 
> On 07/03/2019 10:00, Johannes Schindelin via GitGitGadget wrote:
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> > 
> > We have something much better now: --rebase-merges (which is a
> > complete re-design --preserve-merges, with a lot of issues fixed such as
> > the inability to reorder commits with --preserve-merges).
> > 
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> >   Documentation/config/branch.txt |  6 +++---
> >   Documentation/config/pull.txt   |  6 +++---
> >   Documentation/git-rebase.txt    | 23 ++++++++++++-----------
> >   builtin/rebase.c                |  8 ++++++--
> >   git-rebase--preserve-merges.sh  |  2 ++
> >   5 files changed, 26 insertions(+), 19 deletions(-)
> > 
> > diff --git a/Documentation/config/branch.txt
> > b/Documentation/config/branch.txt
> > index 019d60ede2..8f4b3faadd 100644
> > --- a/Documentation/config/branch.txt
> > +++ b/Documentation/config/branch.txt
> > @@ -85,9 +85,9 @@ When `merges`, pass the `--rebase-merges` option to 'git
> > rebase'
> >   so that the local merge commits are included in the rebase (see
> >   linkgit:git-rebase[1] for details).
> >   +
> > -When preserve, also pass `--preserve-merges` along to 'git rebase'
> > -so that locally committed merge commits will not be flattened
> > -by running 'git pull'.
> > +When `preserve` (deprecated in favor of `merges`), also pass
> > +`--preserve-merges` along to 'git rebase' so that locally committed merge
> > +commits will not be flattened by running 'git pull'.
> >   +
> >   When the value is `interactive`, the rebase is run in interactive mode.
> >   +
> > diff --git a/Documentation/config/pull.txt b/Documentation/config/pull.txt
> > index bb23a9947d..b87cab31b3 100644
> > --- a/Documentation/config/pull.txt
> > +++ b/Documentation/config/pull.txt
> > @@ -18,9 +18,9 @@ When `merges`, pass the `--rebase-merges` option to 'git
> > rebase'
> >   so that the local merge commits are included in the rebase (see
> >   linkgit:git-rebase[1] for details).
> >   +
> > -When preserve, also pass `--preserve-merges` along to 'git rebase'
> > -so that locally committed merge commits will not be flattened
> > -by running 'git pull'.
> > +When `preserve` (deprecated in favor of `merges`), also pass
> > +`--preserve-merges` along to 'git rebase' so that locally committed merge
> > +commits will not be flattened by running 'git pull'.
> >   +
> >   When the value is `interactive`, the rebase is run in interactive mode.
> >   +
> > diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
> > index 5629ba4c5d..89202dbb93 100644
> > --- a/Documentation/git-rebase.txt
> > +++ b/Documentation/git-rebase.txt
> > @@ -415,9 +415,9 @@ i.e. commits that would be excluded by
> > gitlink:git-log[1]'s
> >   the `rebase-cousins` mode is turned on, such commits are instead rebased
> >   onto `<upstream>` (or `<onto>`, if specified).
> >   +
> > -The `--rebase-merges` mode is similar in spirit to `--preserve-merges`, but
> > -in contrast to that option works well in interactive rebases: commits can
> > be
> > -reordered, inserted and dropped at will.
> > +The `--rebase-merges` mode is similar in spirit to the deprecated
> > +`--preserve-merges`, but in contrast to that option works well in
> > interactive
> > +rebases: commits can be reordered, inserted and dropped at will.
> >   +
> >   It is currently only possible to recreate the merge commits using the
> >   `recursive` merge strategy; Different merge strategies can be used only
> >   via
> > @@ -427,9 +427,10 @@ See also REBASING MERGES and INCOMPATIBLE OPTIONS
> > below.
> >   
> >   -p::
> >   --preserve-merges::
> > -	Recreate merge commits instead of flattening the history by replaying
> > -	commits a merge commit introduces. Merge conflict resolutions or
> > manual
> > -	amendments to merge commits are not preserved.
> > +	[DEPRECATED: use --rebase-merges instead] Recreate merge commits
> > +	instead of flattening the history by replaying commits a merge commit
> > +	introduces. Merge conflict resolutions or manual amendments to merge
> > +	commits are not preserved.
> >   +
> >   This uses the `--interactive` machinery internally, but combining it
> >   with the `--interactive` option explicitly is generally not a good
> > @@ -1020,11 +1021,11 @@ merge cmake
> >   
> >   BUGS
> >   ----
> > -The todo list presented by `--preserve-merges --interactive` does not
> > -represent the topology of the revision graph.  Editing commits and
> > -rewording their commit messages should work fine, but attempts to
> > -reorder commits tend to produce counterintuitive results. Use
> > -`--rebase-merges` in such scenarios instead.
> > +The todo list presented by the deprecated `--preserve-merges --interactive`
> > +does not represent the topology of the revision graph (use
> > `--rebase-merges`
> > +instead).  Editing commits and rewording their commit messages should work
> > +fine, but attempts to reorder commits tend to produce counterintuitive
> > results.
> > +Use `--rebase-merges` in such scenarios instead.
> >   
> >   For example, an attempt to rearrange
> >   ------------
> > diff --git a/builtin/rebase.c b/builtin/rebase.c
> > index 7c7bc13e91..c5f5edf321 100644
> > --- a/builtin/rebase.c
> > +++ b/builtin/rebase.c
> > @@ -1092,8 +1092,8 @@ int cmd_rebase(int argc, const char **argv, const char
> > *prefix)
> >      PARSE_OPT_NOARG | PARSE_OPT_NONEG,
> >      parse_opt_interactive },
> >   		OPT_SET_INT('p', "preserve-merges", &options.type,
> > -			    N_("try to recreate merges instead of ignoring "
> > -			       "them"), REBASE_PRESERVE_MERGES),
> > +			    N_("(DEPRECATED) try to recreate merges instead of
> > "
> > +			       "ignoring them"), REBASE_PRESERVE_MERGES),
> >     OPT_BOOL(0, "rerere-autoupdate",
> >       &options.allow_rerere_autoupdate,
> >       N_("allow rerere to update index with resolved "
> > @@ -1204,6 +1204,10 @@ int cmd_rebase(int argc, const char **argv, const
> > char *prefix)
> >     usage_with_options(builtin_rebase_usage,
> >          builtin_rebase_options);
> >   +	if (options.type == REBASE_PRESERVE_MERGES)
> > +		warning(_("--preserve-merges is deprecated in favor of "
> > +			  "--rebase-merges"));
> > +
> >    if (action != NO_ACTION && !in_progress)
> >    	die(_("No rebase in progress?"));
> >   	setenv(GIT_REFLOG_ACTION_ENVIRONMENT, "rebase", 0);
> > diff --git a/git-rebase--preserve-merges.sh b/git-rebase--preserve-merges.sh
> > index afbb65765d..eab2e40dc6 100644
> > --- a/git-rebase--preserve-merges.sh
> > +++ b/git-rebase--preserve-merges.sh
> > @@ -105,6 +105,8 @@ warn () {
> >   	printf '%s\n' "$*" >&2
> >   }
> >   
> > +warn "git rebase --preserve-merges is deprecated. Use --rebase-merges
> > instead."
> > +
> >   # Output the commit message for the specified commit.
> >   commit_message () {
> >    git cat-file commit "$1" | sed "1,/^$/d"
> > 
> 

  reply	other threads:[~2019-03-11 19:32 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-07 10:00 [PATCH 0/1] Deprecate git rebase --preserve-merges Johannes Schindelin via GitGitGadget
2019-03-07 10:00 ` [PATCH 1/1] rebase: deprecate --preserve-merges Johannes Schindelin via GitGitGadget
2019-03-07 16:25   ` Phillip Wood
2019-03-11 19:31     ` Johannes Schindelin [this message]
2019-03-07 16:47   ` Eric Sunshine
2019-03-11 19:33     ` Johannes Schindelin
2019-03-11 19:57 ` [PATCH v2 0/1] Deprecate git rebase --preserve-merges Johannes Schindelin via GitGitGadget
2019-03-11 19:57   ` [PATCH v2 1/1] rebase: deprecate --preserve-merges Johannes Schindelin via GitGitGadget
2019-05-02 14:52     ` Ævar Arnfjörð Bjarmason
2019-05-09 14:36       ` Johannes Schindelin

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=nycvar.QRO.7.76.6.1903112025470.41@tvgsbejvaqbjf.bet \
    --to=johannes.schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=phillip.wood@dunelm.org.uk \
    /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.