All of lore.kernel.org
 help / color / mirror / Atom feed
From: Phillip Wood <phillip.wood123@gmail.com>
To: Rohit Ashiwal <rohit.ashiwal265@gmail.com>
Cc: Johannes.Schindelin@gmx.de, git@vger.kernel.org,
	gitster@pobox.com, martin.agren@gmail.com, newren@gmail.com,
	t.gummerer@gmail.com
Subject: Re: [PATCH v5 0/6] rebase -i: support more options
Date: Thu, 28 Nov 2019 11:14:21 +0000	[thread overview]
Message-ID: <5bab5b95-b8e3-5e63-b592-b5cac30c8068@gmail.com> (raw)
In-Reply-To: <20191101140003.13960-1-rohit.ashiwal265@gmail.com>

Hi Rohit

On 01/11/2019 13:59, Rohit Ashiwal wrote:
> 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

Looking at the range-diff there's only a one line change to the tests. I 
sound like a broken record but Stolee's latest test report[1] shows 
there are still uncovered lines.

 > Rohit Ashiwal	c068bcc5 sequencer: allow callers of 
read_author_script() to ignore fields
 > sequencer.c
 > c068bcc5 840) free(kv.items[date_i].util);
 >
 > Rohit Ashiwal	cbd8db17 rebase -i: support --committer-date-is-author-date
 > sequencer.c
 > cbd8db17 890) return NULL;
 > cbd8db17 989) return -1;
 > cbd8db17 1428) goto out;
 > cbd8db17 1432) goto out;
 > cbd8db17 2603) opts->allow_ff = 0;
 > cbd8db17 2604) opts->committer_date_is_author_date = 1;

These last two should be tested I think

 > Rohit Ashiwal	08187b4c rebase -i: support --ignore-date
 > sequencer.c
 > 08187b4c 903) return NULL;
 > 08187b4c 920) argv_array_pushf(&child->env_array, 
"GIT_COMMITTER_DATE=%s", date.buf);

This should be tested

 > 08187b4c 1508) res = -1;
 > 08187b4c 1509) goto out;
 > 08187b4c 2608) opts->allow_ff = 0;
 > 08187b4c 2609) opts->ignore_date = 1;
 > 08187b4c 3639) push_dates(&cmd, opts->committer_date_is_author_date);

As should these three

Best Wishes

Phillip

[1] 
https://lore.kernel.org/git/1cb7ddbf-020e-d63a-85b6-5a9267c0a5a3@gmail.com/


>   - 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
> 

      parent reply	other threads:[~2019-11-28 11:14 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 ` [PATCH v5 " Rohit Ashiwal
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 [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=5bab5b95-b8e3-5e63-b592-b5cac30c8068@gmail.com \
    --to=phillip.wood123@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.wood@dunelm.org.uk \
    --cc=rohit.ashiwal265@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.
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.