am: use get_author_ident_from_commit instead of mailinfo when rebasing
In certain situations, commit authorship can consist of an invalid e-mail address. For example, this is the case when working with git svn repos where the author email has had the svn repo UUID appended such as: author@example.com <author@example.com@deadbeef-dead-beef-dead-beefdeadbeef> Given such an address, mailinfo extracts the authorship incorrectly as it assumes a valid domain. However, when rebasing the original authorship should be preserved irrespective of its validity as an email address. Using get_author_ident_from_commit instead of mailinfo when rebasing preserves the original authorship. Signed-off-by: Jay Soffian <jaysoffian@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jay Soffian committed
Jun 16, 2010 at 03:12 UTC
43c23251f924db4188cf74361cb7cc3257accce3
2 files changed
+17
-6
git-am.sh
+10
-4
@@ -593,7 +593,7 @@ do
593
echo "Patch is empty. Was it split wrong?"
594
stop_here $this
595
}
596
- rm -f "$dotest/original-commit"
596
+ rm -f "$dotest/original-commit" "$dotest/author-script"
597
if test -f "$dotest/rebasing" &&
598
commit=$(sed -e 's/^From \([0-9a-f]*\) .*/\1/' \
599
-e q "$dotest/$msgnum") &&
@@ -602,6 +602,7 @@ do
602
git cat-file commit "$commit" |
603
sed -e '1,/^$/d' >"$dotest/msg-clean"
604
echo "$commit" > "$dotest/original-commit"
605
+ get_author_ident_from_commit "$commit" > "$dotest/author-script"
606
else
607
{
608
sed -n '/^Subject/ s/Subject: //p' "$dotest/info"
@@ -613,9 +614,14 @@ do
614
;;
615
esac
616
616
- GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$dotest/info")"
617
- GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
618
- GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
617
+ if test -f "$dotest/author-script"
618
+ then
619
+ eval $(cat "$dotest/author-script")
620
+ else
621
+ GIT_AUTHOR_NAME="$(sed -n '/^Author/ s/Author: //p' "$dotest/info")"
622
+ GIT_AUTHOR_EMAIL="$(sed -n '/^Email/ s/Email: //p' "$dotest/info")"
623
+ GIT_AUTHOR_DATE="$(sed -n '/^Date/ s/Date: //p' "$dotest/info")"
624
+ fi
625
626
if test -z "$GIT_AUTHOR_EMAIL"
627
then
t/t3400-rebase.sh
+7
-2
@@ -10,8 +10,9 @@ among other things.
10
'
11
. ./test-lib.sh
12
13
-GIT_AUTHOR_EMAIL=bogus_email_address
14
-export GIT_AUTHOR_EMAIL
13
+GIT_AUTHOR_NAME=author@name
14
+GIT_AUTHOR_EMAIL=bogus@email@address
15
+export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
16
17
test_expect_success \
18
'prepare repository with topic branches' \
@@ -80,6 +81,10 @@ test_expect_success \
81
'the rebase operation should not have destroyed author information' \
82
'! (git log | grep "Author:" | grep "<>")'
83
84
+test_expect_success \
85
+ 'the rebase operation should not have destroyed author information (2)' \
86
+ "git log -1 | grep 'Author: $GIT_AUTHOR_NAME <$GIT_AUTHOR_EMAIL>'"
87
+
88
test_expect_success 'HEAD was detached during rebase' '
89
test $(git rev-parse HEAD@{1}) != $(git rev-parse my-topic-branch@{1})
90
'