From: Christian Couder <chriscool@tuxfamily.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Stephan Beyer <s-beyer@gmx.net>,
Daniel Barkalow <barkalow@iabervon.org>
Subject: [PATCH 2/2] rebase -i: use some kind of config file to save author information
Date: Sat, 20 Jun 2009 04:34:12 +0200 [thread overview]
Message-ID: <20090620023413.3995.3630.chriscool@tuxfamily.org> (raw)
This is better than saving in a shell script, because it will make
it much easier to port "rebase -i" to C. This also removes some sed
regexps and some "eval"s.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
git-rebase--interactive.sh | 78 +++++++++++++++++++++++---------------------
1 files changed, 41 insertions(+), 37 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 92e2523..73f888a 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -40,6 +40,7 @@ MSG="$DOTEST"/message
SQUASH_MSG="$DOTEST"/message-squash
REWRITTEN="$DOTEST"/rewritten
DROPPED="$DOTEST"/dropped
+SAVE_AUTHOR_INFO="$DOTEST"/save-author-info
PRESERVE_MERGES=
STRATEGY=
ONTO=
@@ -117,30 +118,31 @@ mark_action_done () {
}
get_author_ident_from_commit () {
- pick_author_script='
- /^author /{
- s/'\''/'\''\\'\'\''/g
- h
- s/^author \([^<]*\) <[^>]*> .*$/\1/
- s/'\''/'\''\'\'\''/g
- s/.*/GIT_AUTHOR_NAME='\''&'\''/p
-
- g
- s/^author [^<]* <\([^>]*\)> .*$/\1/
- s/'\''/'\''\'\'\''/g
- s/.*/GIT_AUTHOR_EMAIL='\''&'\''/p
-
- g
- s/^author [^<]* <[^>]*> \(.*\)$/\1/
- s/'\''/'\''\'\'\''/g
- s/.*/GIT_AUTHOR_DATE='\''&'\''/p
-
- q
- }
- '
- encoding=$(git config i18n.commitencoding || echo UTF-8)
- git show -s --pretty=raw --encoding="$encoding" "$1" -- |
- LANG=C LC_ALL=C sed -ne "$pick_author_script"
+ encoding=$(git config i18n.commitencoding || echo UTF-8) &&
+ author_ident_name=$(git show -s --pretty="format:%an" \
+ --encoding="$encoding" "$1" --) &&
+ author_ident_mail=$(git show -s --pretty="format:%ae" \
+ --encoding="$encoding" "$1" --) &&
+ author_ident_date=$(git show -s --pretty="format:%ai" \
+ --encoding="$encoding" "$1" --)
+}
+
+save_author_ident () {
+ GIT_CONFIG="$SAVE_AUTHOR_INFO" git config rebase.author.name \
+ "$author_ident_name" &&
+ GIT_CONFIG="$SAVE_AUTHOR_INFO" git config rebase.author.mail \
+ "$author_ident_mail" &&
+ GIT_CONFIG="$SAVE_AUTHOR_INFO" git config rebase.author.date \
+ "$author_ident_date"
+}
+
+load_author_ident () {
+ GIT_AUTHOR_NAME=$(GIT_CONFIG="$SAVE_AUTHOR_INFO" \
+ git config rebase.author.name) &&
+ GIT_AUTHOR_EMAIL=$(GIT_CONFIG="$SAVE_AUTHOR_INFO" \
+ git config rebase.author.mail) &&
+ GIT_AUTHOR_DATE=$(GIT_CONFIG="$SAVE_AUTHOR_INFO" \
+ git config rebase.author.date)
}
make_patch () {
@@ -158,8 +160,10 @@ make_patch () {
esac > "$DOTEST"/patch
test -f "$DOTEST"/message ||
git cat-file commit "$1" | sed "1,/^$/d" > "$DOTEST"/message
- test -f "$DOTEST"/author-script ||
- get_author_ident_from_commit "$1" > "$DOTEST"/author-script
+ test -f "$SAVE_AUTHOR_INFO" || {
+ get_author_ident_from_commit "$1"
+ save_author_ident
+ }
}
die_with_patch () {
@@ -294,8 +298,10 @@ pick_one_preserving_merges () {
test "a$1" = a-n && die "Refusing to squash a merge: $sha1"
# redo merge
- author_script=$(get_author_ident_from_commit $sha1)
- eval "$author_script"
+ get_author_ident_from_commit $sha1
+ GIT_AUTHOR_NAME="$author_ident_name"
+ GIT_AUTHOR_EMAIL="$author_ident_mail"
+ GIT_AUTHOR_DATE="$author_ident_date"
msg="$(git cat-file commit $sha1 | sed -e '1,/^$/d')"
# No point in merging the first parent, that's HEAD
new_parents=${new_parents# $first_parent}
@@ -353,8 +359,7 @@ peek_next_command () {
}
do_next () {
- rm -f "$DOTEST"/message "$DOTEST"/author-script \
- "$DOTEST"/amend || exit
+ rm -f "$DOTEST"/message "$DOTEST"/amend "$SAVE_AUTHOR_INFO" || exit
read command sha1 rest < "$TODO"
case "$command" in
'#'*|''|noop)
@@ -395,7 +400,7 @@ do_next () {
mark_action_done
make_squash_message $sha1 > "$MSG"
failed=f
- author_script=$(get_author_ident_from_commit HEAD)
+ get_author_ident_from_commit HEAD
output git reset --soft HEAD^
pick_one -n $sha1 || failed=t
case "$(peek_next_command)" in
@@ -414,14 +419,13 @@ do_next () {
rm -f "$GIT_DIR"/MERGE_MSG || exit
;;
esac
- echo "$author_script" > "$DOTEST"/author-script
+ save_author_ident
if test $failed = f
then
# This is like --amend, but with a different message
- eval "$author_script"
- GIT_AUTHOR_NAME="$GIT_AUTHOR_NAME" \
- GIT_AUTHOR_EMAIL="$GIT_AUTHOR_EMAIL" \
- GIT_AUTHOR_DATE="$GIT_AUTHOR_DATE" \
+ GIT_AUTHOR_NAME="$author_ident_name" \
+ GIT_AUTHOR_EMAIL="$author_ident_mail" \
+ GIT_AUTHOR_DATE="$author_ident_date" \
$USE_OUTPUT git commit --no-verify \
$MSG_OPT "$EDIT_OR_FILE" || failed=t
fi
@@ -536,7 +540,7 @@ do
then
: Nothing to commit -- skip this
else
- . "$DOTEST"/author-script ||
+ load_author_ident ||
die "Cannot find the author identity"
amend=
if test -f "$DOTEST"/amend
--
1.6.3.GIT
next reply other threads:[~2009-06-20 2:35 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-20 2:34 Christian Couder [this message]
2009-06-20 9:27 ` [PATCH 2/2] rebase -i: use some kind of config file to save author information Jakub Narebski
2009-06-21 5:15 ` Christian Couder
2009-06-21 21:55 ` Johannes Schindelin
2009-06-21 23:15 ` Junio C Hamano
2009-06-22 4:50 ` Christian Couder
2009-06-22 9:19 ` Johannes Schindelin
2009-06-23 5:30 ` Christian Couder
2009-06-23 9:40 ` Johannes Schindelin
2009-06-24 4:36 ` Christian Couder
2009-06-23 4:57 ` Christian Couder
2009-06-23 5:25 ` Junio C Hamano
2009-06-24 4:29 ` Christian Couder
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=20090620023413.3995.3630.chriscool@tuxfamily.org \
--to=chriscool@tuxfamily.org \
--cc=Johannes.Schindelin@gmx.de \
--cc=barkalow@iabervon.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=s-beyer@gmx.net \
/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 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 NNTP newsgroup(s).