From: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
To: rohit.ashiwal265@gmail.com
Cc: Johannes.Schindelin@gmx.de, git@vger.kernel.org,
gitster@pobox.com, martin.agren@gmail.com, newren@gmail.com,
phillip.wood123@gmail.com, t.gummerer@gmail.com
Subject: [PATCH v5 0/6] rebase -i: support more options
Date: Fri, 1 Nov 2019 19:29:57 +0530 [thread overview]
Message-ID: <20191101140003.13960-1-rohit.ashiwal265@gmail.com> (raw)
In-Reply-To: <20190806173638.17510-1-rohit.ashiwal265@gmail.com>
Hey Everyone
I got really busy lately, posting the patch now.
- Now handles the combination of --ignore-date and
--committer-date-is-author-date properly.
- Improved code coverage
- addressed the compatibility of --rebase-merges with --strategy
Thanks
Rohit
Rohit Ashiwal (6):
rebase -i: add --ignore-whitespace flag
sequencer: allow callers of read_author_script() to ignore fields
rebase -i: support --committer-date-is-author-date
sequencer: rename amend_author to author_to_rename
rebase -i: support --ignore-date
rebase: add --reset-author-date
Documentation/git-rebase.txt | 25 ++++-
builtin/rebase.c | 48 ++++++--
sequencer.c | 141 ++++++++++++++++++++++--
sequencer.h | 2 +
t/t3422-rebase-incompatible-options.sh | 2 -
t/t3433-rebase-options-compatibility.sh | 131 ++++++++++++++++++++++
6 files changed, 321 insertions(+), 28 deletions(-)
create mode 100755 t/t3433-rebase-options-compatibility.sh
Range-diff:
2: 77af1d66db ! 491: e155af5a39 rebase -i: add --ignore-whitespace flag
@@ -16,7 +16,7 @@
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@
- default is `--no-fork-point`, otherwise the default is `--fork-point`.
+ with `--keep-base` in order to drop those commits from your branch.
--ignore-whitespace::
+ Behaves differently depending on which backend is selected.
@@ -46,9 +46,8 @@
* --preserve-merges and --signoff
* --preserve-merges and --rebase-merges
+ * --preserve-merges and --ignore-whitespace
-+ * --rebase-merges and --ignore-whitespace
- * --rebase-merges and --strategy
- * --rebase-merges and --strategy-option
+ * --keep-base and --onto
+ * --keep-base and --root
diff --git a/builtin/rebase.c b/builtin/rebase.c
@@ -124,16 +123,6 @@
OPT_PASSTHRU_ARGV(0, "whitespace", &options.git_am_opts,
N_("action"), N_("passed to 'git apply'"), 0),
OPT_BIT('f', "force-rebase", &options.flags,
-@@
- }
-
- if (options.rebase_merges) {
-+ if (options.ignore_whitespace)
-+ die(_("cannot combine '--rebase-merges' with "
-+ "'--ignore-whitespace'"));
- if (strategy_options.nr)
- die(_("cannot combine '--rebase-merges' with "
- "'--strategy-option'"));
diff --git a/t/t3422-rebase-incompatible-options.sh b/t/t3422-rebase-incompatible-options.sh
--- a/t/t3422-rebase-incompatible-options.sh
3: 1f7f1407b2 = 492: 7ec673ebcb sequencer: allow callers of read_author_script() to ignore fields
4: cc1614154e ! 493: 5af0d628de rebase -i: support --committer-date-is-author-date
@@ -40,9 +40,9 @@
* --preserve-merges and --rebase-merges
* --preserve-merges and --ignore-whitespace
+ * --preserve-merges and --committer-date-is-author-date
- * --rebase-merges and --ignore-whitespace
- * --rebase-merges and --strategy
- * --rebase-merges and --strategy-option
+ * --keep-base and --onto
+ * --keep-base and --root
+
diff --git a/builtin/rebase.c b/builtin/rebase.c
--- a/builtin/rebase.c
@@ -173,10 +173,14 @@
+ struct ident_split ident;
+ struct strbuf date = STRBUF_INIT;
+
-+ if (split_ident_line(&ident, author, len) < 0)
-+ return error(_("malformed ident line"));
-+ if (!ident.date_begin)
-+ return error(_("corrupted author without date information"));
++ if (split_ident_line(&ident, author, len) < 0) {
++ res = error(_("malformed ident line"));
++ goto out;
++ }
++ if (!ident.date_begin) {
++ res = error(_("corrupted author without date information"));
++ goto out;
++ }
+
+ strbuf_addf(&date, "@%.*s %.*s",
+ (int)(ident.date_end - ident.date_begin), ident.date_begin,
@@ -296,7 +300,7 @@
+
+test_expect_success '--committer-date-is-author-date works with rebase -r' '
+ git checkout side &&
-+ git merge commit3 &&
++ git merge --no-ff commit3 &&
+ git rebase -r --root --committer-date-is-author-date &&
+ git rev-list HEAD >rev_list &&
+ while read HASH
5: 9e92c79bda = 494: c7846945dd sequencer: rename amend_author to author_to_rename
6: fc68e55e78 ! 495: 02f797b84d rebase -i: support --ignore-date
@@ -17,8 +17,8 @@
--ignore-date::
- This flag is passed to 'git am' to change the author date
- of each rebased commit (see linkgit:git-am[1]).
-+ Instead of using the given author date, reset it to the value
-+ same as the current time. This implies --force-rebase.
++ Instead of using the given author date, reset it to the
++ current time. This implies --force-rebase.
+
See also INCOMPATIBLE OPTIONS below.
@@ -35,9 +35,9 @@
* --preserve-merges and --ignore-whitespace
* --preserve-merges and --committer-date-is-author-date
+ * --preserve-merges and --ignore-date
- * --rebase-merges and --ignore-whitespace
- * --rebase-merges and --strategy
- * --rebase-merges and --strategy-option
+ * --keep-base and --onto
+ * --keep-base and --root
+
diff --git a/builtin/rebase.c b/builtin/rebase.c
--- a/builtin/rebase.c
@@ -83,10 +83,6 @@
}
- if (options.committer_date_is_author_date)
-+ if (options.ignore_date) {
-+ options.committer_date_is_author_date = 0;
-+ setenv("GIT_COMMITTER_DATE", "", 1);
-+ }
+ if (options.committer_date_is_author_date ||
+ options.ignore_date)
options.flags |= REBASE_FORCE;
@@ -128,35 +124,56 @@
+ }
+ len = ident.mail_end - ident.name_begin + 1;
+
-+ strbuf_addf(&new_author, "%.*s ", len, author);
++ strbuf_addf(&new_author, "%.*s ", len, ident.name_begin);
+ datestamp(&new_author);
+ return strbuf_detach(&new_author, NULL);
+}
+
-+static void push_dates(struct child_process *child)
++static void push_dates(struct child_process *child, int change_committer_date)
+{
+ time_t now = time(NULL);
+ struct strbuf date = STRBUF_INIT;
+
+ strbuf_addf(&date, "@%"PRIuMAX, (uintmax_t)now);
+ argv_array_pushf(&child->env_array, "GIT_AUTHOR_DATE=%s", date.buf);
-+ argv_array_pushf(&child->env_array, "GIT_COMMITTER_DATE=%s", date.buf);
++ if (change_committer_date)
++ argv_array_pushf(&child->env_array, "GIT_COMMITTER_DATE=%s", date.buf);
+ strbuf_release(&date);
+}
+
static const char staged_changes_advice[] =
N_("you have staged changes in your working tree\n"
"If these changes are meant to be squashed into the previous commit, run:\n"
+@@
+ return -1;
+
+ strbuf_addf(&datebuf, "@%s", date);
+- res = setenv("GIT_COMMITTER_DATE", datebuf.buf, 1);
++ res = setenv("GIT_COMMITTER_DATE",
++ opts->ignore_date ? "" : datebuf.buf, 1);
+
+ strbuf_release(&datebuf);
+ free(date);
@@
argv_array_push(&cmd.args, "--amend");
if (opts->gpg_sign)
argv_array_pushf(&cmd.args, "-S%s", opts->gpg_sign);
+ if (opts->ignore_date)
-+ push_dates(&cmd);
++ push_dates(&cmd, opts->committer_date_is_author_date);
if (defmsg)
argv_array_pushl(&cmd.args, "-F", defmsg, NULL);
else if (!(flags & EDIT_MSG))
@@
+ strbuf_addf(&date, "@%.*s %.*s",
+ (int)(ident.date_end - ident.date_begin), ident.date_begin,
+ (int)(ident.tz_end - ident.tz_begin), ident.tz_begin);
+- res = setenv("GIT_COMMITTER_DATE", date.buf, 1);
++ res = setenv("GIT_COMMITTER_DATE",
++ opts->ignore_date ? "" : date.buf, 1);
+ strbuf_release(&date);
+
+ if (res)
+@@
reset_ident_date();
@@ -198,7 +215,7 @@
if (opts->gpg_sign)
argv_array_push(&cmd.args, opts->gpg_sign);
+ if (opts->ignore_date)
-+ push_dates(&cmd);
++ push_dates(&cmd, opts->committer_date_is_author_date);
/* Add the tips to be merged */
for (j = to_merge; j; j = j->next)
@@ -239,31 +256,25 @@
+ git commit --amend --date="$GIT_AUTHOR_DATE" &&
+ git rebase --ignore-date HEAD^ &&
+ git show HEAD --pretty="format:%ai" >authortime &&
-+ git show HEAD --pretty="format:%ci" >committertime &&
-+ grep "+0000" authortime &&
-+ grep "+0000" committertime
++ grep "+0000" authortime
+'
+
+test_expect_success '--ignore-date works with interactive backend' '
+ git commit --amend --date="$GIT_AUTHOR_DATE" &&
+ git rebase --ignore-date -i HEAD^ &&
+ git show HEAD --pretty="format:%ai" >authortime &&
-+ git show HEAD --pretty="format:%ci" >committertime &&
-+ grep "+0000" authortime &&
-+ grep "+0000" committertime
++ grep "+0000" authortime
+'
+
+test_expect_success '--ignore-date works with rebase -r' '
+ git checkout side &&
-+ git merge commit3 &&
++ git merge --no-ff commit3 &&
+ git rebase -r --root --ignore-date &&
+ git rev-list HEAD >rev_list &&
+ while read HASH
+ do
+ git show $HASH --pretty="format:%ai" >authortime
-+ git show $HASH --pretty="format:%ci" >committertime
+ grep "+0000" authortime
-+ grep "+0000" committertime
+ done <rev_list
+'
+
7: 396d5f16eb ! 496: 7a9fe1e612 rebase: add --reset-author-date
@@ -17,8 +17,8 @@
--ignore-date::
+--reset-author-date::
- Instead of using the given author date, reset it to the value
- same as the current time. This implies --force-rebase.
+ Instead of using the given author date, reset it to the
+ current time. This implies --force-rebase.
+
diff --git a/builtin/rebase.c b/builtin/rebase.c
--
2.21.0
next prev parent reply other threads:[~2019-11-01 14:01 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-06 17:36 [GSoC][PATCHl 0/6] rebase -i: support more options Rohit Ashiwal
2019-08-06 17:36 ` [GSoC][PATCHl 1/6] rebase -i: add --ignore-whitespace flag Rohit Ashiwal
2019-08-07 5:38 ` Junio C Hamano
2019-08-07 20:25 ` Rohit Ashiwal
2019-08-08 16:44 ` Phillip Wood
2019-08-12 17:43 ` Rohit Ashiwal
2019-08-06 17:36 ` [GSoC][PATCHl 2/6] sequencer: add NULL checks under read_author_script Rohit Ashiwal
2019-08-06 17:36 ` [GSoC][PATCHl 3/6] rebase -i: support --committer-date-is-author-date Rohit Ashiwal
2019-08-08 11:29 ` Phillip Wood
2019-08-08 16:00 ` Junio C Hamano
2019-08-06 17:36 ` [GSoC][PATCHl 4/6] sequencer: rename amend_author to author_to_rename Rohit Ashiwal
2019-08-08 11:30 ` Phillip Wood
2019-08-06 17:36 ` [GSoC][PATCHl 5/6] rebase -i: support --ignore-date Rohit Ashiwal
2019-08-07 19:41 ` Johannes Schindelin
2019-08-07 20:22 ` Junio C Hamano
2019-08-07 20:33 ` Rohit Ashiwal
2019-08-08 11:42 ` Phillip Wood
2019-08-08 16:53 ` Phillip Wood
2019-08-06 17:36 ` [GSoC][PATCHl 6/6] rebase: add --author-date-is-committer-date Rohit Ashiwal
2019-08-08 11:42 ` Phillip Wood
2019-08-12 19:42 ` [GSoC][PATCH v2 0/6] rebase -i: support more options Rohit Ashiwal
2019-08-12 19:42 ` [GSoC][PATCH v2 1/6] rebase -i: add --ignore-whitespace flag Rohit Ashiwal
2019-08-13 12:07 ` Phillip Wood
2019-08-12 19:42 ` [GSoC][PATCH v2 2/6] sequencer: add NULL checks under read_author_script Rohit Ashiwal
2019-08-12 19:42 ` [GSoC][PATCH v2 3/6] rebase -i: support --committer-date-is-author-date Rohit Ashiwal
2019-08-13 10:38 ` Phillip Wood
2019-08-13 12:09 ` Phillip Wood
2019-08-13 17:06 ` Junio C Hamano
2019-08-14 18:38 ` Phillip Wood
2019-08-13 13:35 ` Phillip Wood
2019-08-12 19:42 ` [GSoC][PATCH v2 4/6] sequencer: rename amend_author to author_to_rename Rohit Ashiwal
2019-08-13 13:29 ` Phillip Wood
2019-08-12 19:42 ` [GSoC][PATCH v2 5/6] rebase -i: support --ignore-date Rohit Ashiwal
2019-08-13 13:28 ` Phillip Wood
2019-08-13 17:21 ` Junio C Hamano
2019-08-14 18:47 ` Phillip Wood
2019-08-13 21:45 ` Junio C Hamano
2019-08-14 18:51 ` Phillip Wood
2019-08-14 19:33 ` Junio C Hamano
2019-08-17 9:28 ` Phillip Wood
2019-08-12 19:43 ` [GSoC][PATCH v2 6/6] rebase: add --author-date-is-committer-date Rohit Ashiwal
2019-08-13 17:28 ` Junio C Hamano
2019-08-20 3:45 ` [PATCH v3 0/6] rebase -i: support more options Rohit Ashiwal
2019-08-20 3:45 ` [PATCH v3 1/6] rebase -i: add --ignore-whitespace flag Rohit Ashiwal
2019-08-20 18:40 ` Phillip Wood
2019-08-20 18:47 ` Rohit Ashiwal
2019-08-20 3:45 ` [PATCH v3 2/6] sequencer: add NULL checks under read_author_script Rohit Ashiwal
2019-08-23 15:20 ` Junio C Hamano
2019-08-20 3:45 ` [PATCH v3 3/6] rebase -i: support --committer-date-is-author-date Rohit Ashiwal
2019-08-20 13:32 ` Phillip Wood
2019-08-20 3:45 ` [PATCH v3 4/6] sequencer: rename amend_author to author_to_rename Rohit Ashiwal
2019-08-20 3:45 ` [PATCH v3 5/6] rebase -i: support --ignore-date Rohit Ashiwal
2019-08-20 13:45 ` Phillip Wood
2019-08-20 17:42 ` Junio C Hamano
2019-08-20 18:30 ` Phillip Wood
2019-08-20 3:45 ` [GSoC][PATCH v2 6/6] rebase: add --author-date-is-committer-date Rohit Ashiwal
2019-08-20 4:00 ` Rohit Ashiwal
2019-08-20 3:45 ` [PATCH v3 6/6] rebase: add --reset-author-date Rohit Ashiwal
2019-08-20 3:54 ` [PATCH v3 0/6] rebase -i: support more options Rohit Ashiwal
2019-08-20 13:56 ` Phillip Wood
2019-08-20 17:53 ` Junio C Hamano
2019-08-20 18:37 ` Phillip Wood
2019-09-07 11:50 ` [PATCH v4 " Rohit Ashiwal
2019-09-07 11:50 ` [PATCH v4 1/6] rebase -i: add --ignore-whitespace flag Rohit Ashiwal
2019-10-04 9:29 ` Phillip Wood
2019-10-05 18:12 ` Elijah Newren
2019-10-06 17:57 ` Rohit Ashiwal
2019-09-07 11:50 ` [PATCH v4 2/6] sequencer: allow callers of read_author_script() to ignore fields Rohit Ashiwal
2019-09-07 11:50 ` [PATCH v4 3/6] rebase -i: support --committer-date-is-author-date Rohit Ashiwal
2019-10-04 9:37 ` Phillip Wood
2019-10-06 17:57 ` Rohit Ashiwal
2019-10-24 13:28 ` Phillip Wood
2019-09-07 11:50 ` [PATCH v4 4/6] sequencer: rename amend_author to author_to_rename Rohit Ashiwal
2019-09-07 11:50 ` [PATCH v4 5/6] rebase -i: support --ignore-date Rohit Ashiwal
2019-09-07 20:56 ` Rohit Ashiwal
2019-09-27 10:00 ` Phillip Wood
2019-10-06 17:57 ` Rohit Ashiwal
2019-10-24 20:36 ` Phillip Wood
2019-09-07 11:50 ` [PATCH v4 6/6] rebase: add --reset-author-date Rohit Ashiwal
2019-09-09 18:02 ` [PATCH v4 0/6] rebase -i: support more options Junio C Hamano
2019-09-09 18:51 ` Phillip Wood
2019-09-09 19:24 ` Junio C Hamano
2019-11-01 13:59 ` Rohit Ashiwal [this message]
2019-11-01 13:59 ` [PATCH v5 1/6] rebase -i: add --ignore-whitespace flag Rohit Ashiwal
2019-11-01 13:59 ` [PATCH v5 2/6] sequencer: allow callers of read_author_script() to ignore fields Rohit Ashiwal
2019-11-01 14:00 ` [PATCH v5 3/6] rebase -i: support --committer-date-is-author-date Rohit Ashiwal
2019-11-01 14:00 ` [PATCH v5 4/6] sequencer: rename amend_author to author_to_rename Rohit Ashiwal
2019-11-01 14:00 ` [PATCH v5 5/6] rebase -i: support --ignore-date Rohit Ashiwal
2019-11-02 7:32 ` Junio C Hamano
2019-11-02 7:48 ` Junio C Hamano
2019-11-01 14:00 ` [PATCH v5 6/6] rebase: add --reset-author-date Rohit Ashiwal
2019-11-02 7:34 ` Junio C Hamano
2019-11-21 6:14 ` [PATCH v5 0/6] rebase -i: support more options Junio C Hamano
2019-11-21 8:17 ` Alban Gruin
2019-11-22 6:32 ` Junio C Hamano
2019-11-28 11:14 ` Phillip Wood
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191101140003.13960-1-rohit.ashiwal265@gmail.com \
--to=rohit.ashiwal265@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=martin.agren@gmail.com \
--cc=newren@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=t.gummerer@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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).