From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: alexander.berg@atos.net, Elijah Newren <newren@gmail.com>,
Elijah Newren <newren@gmail.com>
Subject: [PATCH v2] rebase: display an error if --root and --fork-point are both provided
Date: Mon, 27 Apr 2020 17:59:49 +0000 [thread overview]
Message-ID: <pull.771.v2.git.git.1588010390778.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.771.git.git.1588004500766.gitgitgadget@gmail.com>
From: Elijah Newren <newren@gmail.com>
--root implies we want to rebase all commits since the beginning of
history. --fork-point means we want to use the reflog of the specified
upstream to find the best common ancestor between <upstream> and
<branch> and only rebase commits since that common ancestor. These
options are clearly contradictory, so throw an error (instead of
segfaulting on a NULL pointer) if both are specified.
Reported-by: Alexander Berg <alexander.berg@atos.net>
Documentation-by: Alban Gruin <alban.gruin@gmail.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
---
rebase: display an error if --root and --fork-point are both provided
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-771%2Fnewren%2Frebase-fork-point-root-error-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-771/newren/rebase-fork-point-root-error-v2
Pull-Request: https://github.com/git/git/pull/771
Range-diff vs v1:
1: c4508c7ddae ! 1: 307124b00d4 rebase: display an error if --root and --fork-point are both provided
@@ Commit message
segfaulting on a NULL pointer) if both are specified.
Reported-by: Alexander Berg <alexander.berg@atos.net>
+ Documentation-by: Alban Gruin <alban.gruin@gmail.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
+ ## Documentation/git-rebase.txt ##
+@@ Documentation/git-rebase.txt: When --fork-point is active, 'fork_point' will be used instead of
+ <branch>` command (see linkgit:git-merge-base[1]). If 'fork_point'
+ ends up being empty, the <upstream> will be used as a fallback.
+ +
+-If either <upstream> or --root is given on the command line, then the
+-default is `--no-fork-point`, otherwise the default is `--fork-point`.
++If <upstream> is given on the command line, then the default is
++`--no-fork-point`, otherwise the default is `--fork-point`.
+ +
+ If your branch was based on <upstream> but <upstream> was rewound and
+ your branch contains commits which were dropped, this option can be used
+ with `--keep-base` in order to drop those commits from your branch.
+++
++See also INCOMPATIBLE OPTIONS below.
+
+ --ignore-whitespace::
+ --whitespace=<option>::
+@@ Documentation/git-rebase.txt: In addition, the following pairs of options are incompatible:
+ * --preserve-merges and --empty=
+ * --keep-base and --onto
+ * --keep-base and --root
++ * --fork-point and --root
+
+ BEHAVIORAL DIFFERENCES
+ -----------------------
+
## builtin/rebase.c ##
@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
die(_("cannot combine '--keep-base' with '--root'"));
Documentation/git-rebase.txt | 7 +++++--
builtin/rebase.c | 3 +++
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index f7a6033607f..fbad356c68e 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -414,12 +414,14 @@ When --fork-point is active, 'fork_point' will be used instead of
<branch>` command (see linkgit:git-merge-base[1]). If 'fork_point'
ends up being empty, the <upstream> will be used as a fallback.
+
-If either <upstream> or --root is given on the command line, then the
-default is `--no-fork-point`, otherwise the default is `--fork-point`.
+If <upstream> is given on the command line, then the default is
+`--no-fork-point`, otherwise the default is `--fork-point`.
+
If your branch was based on <upstream> but <upstream> was rewound and
your branch contains commits which were dropped, this option can be used
with `--keep-base` in order to drop those commits from your branch.
++
+See also INCOMPATIBLE OPTIONS below.
--ignore-whitespace::
--whitespace=<option>::
@@ -600,6 +602,7 @@ In addition, the following pairs of options are incompatible:
* --preserve-merges and --empty=
* --keep-base and --onto
* --keep-base and --root
+ * --fork-point and --root
BEHAVIORAL DIFFERENCES
-----------------------
diff --git a/builtin/rebase.c b/builtin/rebase.c
index bff53d5d167..287ac1aa21b 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1652,6 +1652,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
die(_("cannot combine '--keep-base' with '--root'"));
}
+ if (options.root && fork_point > 0)
+ die(_("cannot combine '--root' with '--fork-point'"));
+
if (action != ACTION_NONE && !in_progress)
die(_("No rebase in progress?"));
setenv(GIT_REFLOG_ACTION_ENVIRONMENT, "rebase", 0);
base-commit: af6b65d45ef179ed52087e80cb089f6b2349f4ec
--
gitgitgadget
prev parent reply other threads:[~2020-04-27 17:59 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-27 16:21 [PATCH] rebase: display an error if --root and --fork-point are both provided Elijah Newren via GitGitGadget
2020-04-27 16:46 ` Alban Gruin
2020-04-27 17:59 ` Elijah Newren via GitGitGadget [this message]
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.771.v2.git.git.1588010390778.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=alexander.berg@atos.net \
--cc=git@vger.kernel.org \
--cc=newren@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.