Skip to content

Commit

Permalink
Consistent message encoding while reusing log from an existing commit.
Browse files Browse the repository at this point in the history
The following commands can reuse log message from an existing
commit while creating a new commit:

	git-cherry-pick
	git-rebase (both with and without --merge)
	git-commit (-c and -C)

When the original commit was made in a different encoding from
the current i18n.commitencoding, "cat-file commit" would give a
string that is inconsistent with what the resulting commit will
claim to be in.  Replace them with "git show -s --encoding".

"git-rebase" without --merge is "git format-patch" piped to "git
am" in essence, and has been taken care of before this commit.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Jan 13, 2007
1 parent a731ec5 commit 5ac2715
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
7 changes: 5 additions & 2 deletions git-commit.sh
Expand Up @@ -435,7 +435,9 @@ then
fi
elif test "$use_commit" != ""
then
git-cat-file commit "$use_commit" | sed -e '1,/^$/d'
encoding=$(git repo-config i18n.commitencoding || echo UTF-8)
git show -s --pretty=raw --encoding="$encoding" "$use_commit" |
sed -e '1,/^$/d' -e 's/^ //'
elif test -f "$GIT_DIR/MERGE_MSG"
then
cat "$GIT_DIR/MERGE_MSG"
Expand Down Expand Up @@ -497,7 +499,8 @@ then
q
}
'
set_author_env=`git-cat-file commit "$use_commit" |
encoding=$(git repo-config i18n.commitencoding || echo UTF-8)
set_author_env=`git show -s --pretty=raw --encoding="$encoding" "$use_commit" |
LANG=C LC_ALL=C sed -ne "$pick_author_script"`
eval "$set_author_env"
export GIT_AUTHOR_NAME
Expand Down
14 changes: 10 additions & 4 deletions git-revert.sh
Expand Up @@ -78,17 +78,20 @@ prev=$(git-rev-parse --verify "$commit^1" 2>/dev/null) ||
git-rev-parse --verify "$commit^2" >/dev/null 2>&1 &&
die "Cannot run $me a multi-parent commit."

encoding=$(git repo-config i18n.commitencoding || echo UTF-8)

# "commit" is an existing commit. We would want to apply
# the difference it introduces since its first parent "prev"
# on top of the current HEAD if we are cherry-pick. Or the
# reverse of it if we are revert.

case "$me" in
revert)
git-rev-list --pretty=oneline --max-count=1 $commit |
git show -s --pretty=oneline --encoding="$encoding" $commit |
sed -e '
s/^[^ ]* /Revert "/
s/$/"/'
s/$/"/
'
echo
echo "This reverts commit $commit."
test "$rev" = "$commit" ||
Expand Down Expand Up @@ -117,14 +120,17 @@ cherry-pick)
q
}'
set_author_env=`git-cat-file commit "$commit" |

logmsg=`git show -s --pretty=raw --encoding="$encoding" "$commit"`
set_author_env=`echo "$logmsg" |
LANG=C LC_ALL=C sed -ne "$pick_author_script"`
eval "$set_author_env"
export GIT_AUTHOR_NAME
export GIT_AUTHOR_EMAIL
export GIT_AUTHOR_DATE

git-cat-file commit $commit | sed -e '1,/^$/d'
echo "$logmsg" |
sed -e '1,/^$/d' -e 's/^ //'
case "$replay" in
'')
echo "(cherry picked from commit $commit)"
Expand Down

0 comments on commit 5ac2715

Please sign in to comment.