@matheusbsbs / matheus-bagliano / commits / 43c23251f9
Fork 0

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 '