From: Fabian Ruch <bafain@gmail.com>
To: git@vger.kernel.org
Cc: Michael Haggerty <mhagger@alum.mit.edu>,
Thomas Rast <tr@thomasrast.ch>, Jeff King <peff@peff.net>
Subject: [PATCH v3 25/27] rebase -i: do not overwrite user author information
Date: Mon, 18 Aug 2014 23:23:08 +0200 [thread overview]
Message-ID: <38063822188190750b20942d242f5826fe97df4f.1408396036.git.bafain@gmail.com> (raw)
In-Reply-To: <cover.1408396036.git.bafain@gmail.com>
The shell function `get_author_ident_from_commit` defined by
git-sh-setup retrieves the author information from the named commit
and returns assignments of the environment variables
GIT_AUTHOR_NAME
GIT_AUTHOR_EMAIL
GIT_AUTHOR_DATE
ready for evaluation by the shell.
This interface is used in conjunction with the so-called author
script which is a git-rebase--interactive state file that contains
the `get_author_ident_from_commit` output. It is sourced when `git
rebase --continue` is executed after conflict resolution to retain
the original commit authorship.
The variable assignments are only exported by the subshell that
executes the git-commit command line that commits the resolved
conflicts. That is taken care of by wrapping the git-commit call in
`do_with_author`. However, this is not enough protection from
modifying the git environment variables unintentionally because the
user running git-rebase could have already exported those herself.
And therefore, a bare git-commit could result in an authorship that
is neither intended by the user nor by git-rebase--interactive.
While it is not an issue now (either `do_with_author`,
git-cherry-pick or `--amend` are used to create commits), the
unnecessary loss of the author name and e-mail copied from the user
environment, and the unneeded fixing of the author date might become
a problem when we decide to support something similar to
`--reset-author` or `--ignore-date in interactive git-rebase.
Do not assign the git environment variables until in the
`do_with_author` subshell.
Signed-off-by: Fabian Ruch <bafain@gmail.com>
---
git-rebase--interactive.sh | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 73c97a1..8fbfe6d 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -166,7 +166,7 @@ make_patch () {
test -f "$msg" ||
commit_message "$1" > "$msg"
test -f "$author_script" ||
- get_author_ident_from_commit "$1" > "$author_script"
+ echo "$1" > "$author_script"
}
die_with_patch () {
@@ -215,9 +215,13 @@ is_merge_commit()
}
# Run command with GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL, and
-# GIT_AUTHOR_DATE exported from the current environment.
+# GIT_AUTHOR_DATE assigned the author information extracted from the
+# named commit and exported.
do_with_author () {
(
+ sha1=$1
+ shift
+ eval $(get_author_ident_from_commit $sha1)
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL GIT_AUTHOR_DATE
"$@"
)
@@ -348,13 +352,11 @@ pick_one_preserving_merges () {
test "a$1" = a-n && die "Refusing to squash a merge: $sha1"
# redo merge
- author_script_content=$(get_author_ident_from_commit $sha1)
- eval "$author_script_content"
msg_content="$(commit_message $sha1)"
# No point in merging the first parent, that's HEAD
new_parents=${new_parents# $first_parent}
merge_args="--no-log --no-ff"
- if ! do_with_author output eval \
+ if ! do_with_author $sha1 output eval \
'git merge ${gpg_sign_opt:+"$gpg_sign_opt"} \
$merge_args $strategy_args -m "$msg_content" $new_parents'
then
@@ -592,8 +594,7 @@ do_pick () {
do_with_author=
if test -z "$rewrite_reset_author" && test -z "$rewrite_amend"
then
- eval $(get_author_ident_from_commit $1)
- do_with_author=do_with_author
+ do_with_author="do_with_author $1"
fi
$do_with_author output git commit \
--allow-empty --no-post-rewrite -n --no-edit \
@@ -1041,9 +1042,9 @@ first and then run 'git rebase --continue' again."
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
else
- . "$author_script" ||
+ test -r "$author_script" ||
die "Error trying to find the author identity to amend commit"
- do_with_author git commit --no-verify -F "$msg" -e \
+ do_with_author $(cat "$author_script") git commit --no-verify -F "$msg" -e \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die "Could not commit staged changes."
fi
--
2.0.1
next prev parent reply other threads:[~2014-08-18 21:24 UTC|newest]
Thread overview: 148+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-19 3:28 [RFC PATCH 0/7] rebase -i: Implement `reword` and `squash` in terms of `do_pick` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 00/19] Enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 01/19] rebase -i: Failed reword prints redundant error message Fabian Ruch
2014-07-08 20:31 ` Junio C Hamano
2014-07-10 14:30 ` Andrew Wong
2014-07-10 16:35 ` Fabian Ruch
2014-07-10 17:04 ` Andrew Wong
2014-07-02 17:47 ` [PATCH RFC v2 02/19] rebase -i: reword complains about empty commit despite --keep-empty Fabian Ruch
2014-07-08 20:37 ` Junio C Hamano
2014-07-09 18:02 ` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 03/19] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-07-08 20:43 ` Junio C Hamano
2014-07-13 11:00 ` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 04/19] rebase -i: Teach do_pick the option --edit Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 05/19] rebase -i: Implement reword in terms of do_pick Fabian Ruch
2014-08-04 15:16 ` Matthieu Moy
2014-08-04 15:45 ` Fabian Ruch
2014-07-02 17:47 ` [PATCH RFC v2 06/19] rebase -i: Stop on root commits with empty log messages Fabian Ruch
2014-07-08 22:26 ` Junio C Hamano
2014-07-10 9:29 ` Fabian Ruch
2014-07-10 16:57 ` Junio C Hamano
2014-07-10 17:33 ` Junio C Hamano
2014-07-02 17:47 ` [PATCH RFC v2 07/19] rebase -i: The replay of root commits is not shown with --verbose Fabian Ruch
2014-07-08 22:29 ` Junio C Hamano
2014-07-11 13:46 ` Fabian Ruch
2014-07-15 9:29 ` Chris Webb
2014-07-02 17:48 ` [PATCH RFC v2 08/19] rebase -i: Root commits are replayed with an unnecessary option Fabian Ruch
2014-07-08 22:32 ` Junio C Hamano
2014-07-18 9:16 ` Fabian Ruch
2014-07-18 16:52 ` Junio C Hamano
2014-07-19 18:14 ` Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 09/19] rebase -i: Commit only once when rewriting picks Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 10/19] rebase -i: Do not die in do_pick Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 11/19] rebase -i: Teach do_pick the option --amend Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 12/19] rebase -i: Teach do_pick the option --file Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 13/19] rebase -i: Prepare for squash in terms of do_pick --amend Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 14/19] rebase -i: Implement squash in terms of do_pick Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 15/19] rebase -i: Explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-07-10 20:03 ` Junio C Hamano
2014-07-02 17:48 ` [PATCH RFC v2 16/19] rebase -i: Parse to-do list command line options Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 17/19] rebase -i: Teach do_pick the option --reset-author Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 18/19] rebase -i: Teach do_pick the option --signoff Fabian Ruch
2014-07-02 17:48 ` [PATCH RFC v2 19/19] rebase -i: Enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-07-03 10:33 ` [PATCH RFC v2 00/19] " Michael Haggerty
2014-07-08 20:45 ` Junio C Hamano
2014-07-09 16:08 ` Fabian Ruch
2014-07-18 12:10 ` Thomas Rast
2014-07-28 23:18 ` [PATCH v1 " Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 01/19] rebase -i: failed reword prints redundant error message Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 02/19] rebase -i: allow rewording an empty commit without complaints Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 03/19] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-08-01 23:47 ` Jeff King
2014-08-04 18:51 ` Fabian Ruch
2014-08-06 21:46 ` Jeff King
2014-07-28 23:18 ` [PATCH v1 04/19] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 05/19] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 06/19] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 07/19] rebase -i: log the replay of root commits Fabian Ruch
2014-08-02 0:04 ` Jeff King
2014-08-04 21:21 ` Fabian Ruch
2014-08-06 22:01 ` Jeff King
2014-07-28 23:18 ` [PATCH v1 08/19] rebase -i: root commits are replayed with an unnecessary option Fabian Ruch
2014-08-02 0:13 ` Jeff King
2014-08-04 21:31 ` Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 09/19] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-02 0:22 ` Jeff King
2014-08-07 0:24 ` Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 10/19] rebase -i: do not die in do_pick Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 11/19] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 12/19] rebase -i: teach do_pick the option --file Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 13/19] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 14/19] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 15/19] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 16/19] rebase -i: parse to-do list command line options Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 17/19] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 18/19] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-07-28 23:18 ` [PATCH v1 19/19] rebase -i: enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-08-02 13:52 ` [PATCH v1 00/19] Enable " Jeff King
2014-08-04 8:37 ` Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 00/23] " Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 01/23] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 02/23] rebase -i: allow squashing empty commits without complaints Fabian Ruch
2014-08-07 7:16 ` Peter Krefting
2014-08-07 22:03 ` Eric Sunshine
2014-08-11 7:01 ` Fabian Ruch
2014-08-13 19:24 ` Phil Hord
2014-08-06 23:59 ` [PATCH v2 03/23] rebase -i: allow rewording " Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 04/23] rebase -i: hide interactive command messages in verbose mode Fabian Ruch
2014-08-08 19:09 ` Thomas Rast
2014-08-11 8:26 ` Fabian Ruch
2014-08-11 18:22 ` Thomas Rast
2014-08-06 23:59 ` [PATCH v2 05/23] rebase -i: failed reword prints redundant error message Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 06/23] commit: allow disabling pre-commit and commit-msg separately Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 07/23] rebase -i: squash skips commit-msg hook Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 08/23] rebase -i: reword executes pre-commit hook on interim commit Fabian Ruch
2014-08-08 19:09 ` Thomas Rast
2014-08-11 8:45 ` Fabian Ruch
2014-08-11 18:22 ` Thomas Rast
2014-08-06 23:59 ` [PATCH v2 09/23] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 10/23] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 11/23] rebase -i: log the replay of root commits Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 12/23] rebase -i: root commits are replayed with an unnecessary option Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 13/23] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 14/23] rebase -i: do not die in do_pick Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 15/23] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 16/23] rebase -i: teach do_pick the option --file Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 17/23] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 18/23] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 19/23] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 20/23] rebase -i: parse to-do list command line options Fabian Ruch
2014-08-08 19:10 ` Thomas Rast
2014-08-11 20:56 ` Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 21/23] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 22/23] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-08-06 23:59 ` [PATCH v2 23/23] rebase -i: enable options --signoff, --reset-author for pick, reword Fabian Ruch
2014-08-08 19:10 ` Thomas Rast
2014-08-12 21:04 ` Fabian Ruch
2014-08-13 12:47 ` Michael Haggerty
2014-08-14 17:24 ` Fabian Ruch
2014-09-21 16:59 ` Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 00/27] Enable options --signoff, --reset-author for pick, reword, edit Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 01/27] rebase -i: allow replaying commits with empty log messages Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 02/27] rebase -i: allow squashing empty commits without complaints Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 03/27] rebase -i: allow rewording " Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 04/27] fake_editor: leave standard output unchanged Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 05/27] rebase -i: hide interactive command messages in verbose mode Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 06/27] rebase -i: discard redundant message when rewording fails Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 07/27] commit: allow disabling pre-commit and commit-msg separately Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 08/27] rebase -i: verify squash messages using commit-msg Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 09/27] rebase -i: do not verify reworded patches using pre-commit Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 10/27] rebase -i: teach do_pick the option --edit Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 11/27] rebase -i: implement reword in terms of do_pick Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 12/27] rebase -i: log the replay of root commits Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 13/27] rebase -i: do not use -C when --no-edit is sufficient Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 14/27] rebase -i: commit only once when rewriting picks Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 15/27] rebase -i: do not die in do_pick Fabian Ruch
2014-08-18 21:22 ` [PATCH v3 16/27] rebase -i: teach do_pick the option --amend Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 17/27] rebase -i: teach do_pick the option --file Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 18/27] rebase -i: remove no-op do_with_author git commit --amend Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 19/27] rebase -i: prepare for squash in terms of do_pick --amend Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 20/27] rebase -i: implement squash in terms of do_pick Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 21/27] rebase -i: explicitly distinguish replay commands and exec tasks Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 22/27] rebase -i: parse to-do list command line options Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 23/27] rebase -i: teach do_pick the option --reset-author Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 24/27] rebase -i: teach do_pick the option --signoff Fabian Ruch
2014-08-18 21:23 ` Fabian Ruch [this message]
2014-08-18 21:23 ` [PATCH v3 26/27] rebase -i: refuse to commit when resuming with updated head Fabian Ruch
2014-08-18 21:23 ` [PATCH v3 27/27] rebase -i: enable --signoff, --reset-author for pick, reword, edit Fabian Ruch
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=38063822188190750b20942d242f5826fe97df4f.1408396036.git.bafain@gmail.com \
--to=bafain@gmail.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=peff@peff.net \
--cc=tr@thomasrast.ch \
/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).