Consistent message encoding while reusing log from an existing commit.
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>maint
							parent
							
								
									a731ec5eb8
								
							
						
					
					
						commit
						5ac2715f2e
					
				|  | @ -435,7 +435,9 @@ then | ||||||
| 	fi | 	fi | ||||||
| elif test "$use_commit" != "" | elif test "$use_commit" != "" | ||||||
| then | 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" | elif test -f "$GIT_DIR/MERGE_MSG" | ||||||
| then | then | ||||||
| 	cat "$GIT_DIR/MERGE_MSG" | 	cat "$GIT_DIR/MERGE_MSG" | ||||||
|  | @ -497,7 +499,8 @@ then | ||||||
| 		q | 		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"` | 	LANG=C LC_ALL=C sed -ne "$pick_author_script"` | ||||||
| 	eval "$set_author_env" | 	eval "$set_author_env" | ||||||
| 	export GIT_AUTHOR_NAME | 	export GIT_AUTHOR_NAME | ||||||
|  |  | ||||||
|  | @ -78,6 +78,8 @@ prev=$(git-rev-parse --verify "$commit^1" 2>/dev/null) || | ||||||
| git-rev-parse --verify "$commit^2" >/dev/null 2>&1 && | git-rev-parse --verify "$commit^2" >/dev/null 2>&1 && | ||||||
| 	die "Cannot run $me a multi-parent commit." | 	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 | # "commit" is an existing commit.  We would want to apply | ||||||
| # the difference it introduces since its first parent "prev" | # the difference it introduces since its first parent "prev" | ||||||
| # on top of the current HEAD if we are cherry-pick.  Or the | # on top of the current HEAD if we are cherry-pick.  Or the | ||||||
|  | @ -85,10 +87,11 @@ git-rev-parse --verify "$commit^2" >/dev/null 2>&1 && | ||||||
|  |  | ||||||
| case "$me" in | case "$me" in | ||||||
| revert) | revert) | ||||||
| 	git-rev-list --pretty=oneline --max-count=1 $commit | | 	git show -s --pretty=oneline --encoding="$encoding" $commit | | ||||||
| 	sed -e ' | 	sed -e ' | ||||||
| 		s/^[^ ]* /Revert "/ | 		s/^[^ ]* /Revert "/ | ||||||
| 		s/$/"/' | 		s/$/"/ | ||||||
|  | 	' | ||||||
| 	echo | 	echo | ||||||
| 	echo "This reverts commit $commit." | 	echo "This reverts commit $commit." | ||||||
| 	test "$rev" = "$commit" || | 	test "$rev" = "$commit" || | ||||||
|  | @ -117,14 +120,17 @@ cherry-pick) | ||||||
|  |  | ||||||
| 		q | 		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"` | 	LANG=C LC_ALL=C sed -ne "$pick_author_script"` | ||||||
| 	eval "$set_author_env" | 	eval "$set_author_env" | ||||||
| 	export GIT_AUTHOR_NAME | 	export GIT_AUTHOR_NAME | ||||||
| 	export GIT_AUTHOR_EMAIL | 	export GIT_AUTHOR_EMAIL | ||||||
| 	export GIT_AUTHOR_DATE | 	export GIT_AUTHOR_DATE | ||||||
|  |  | ||||||
| 	git-cat-file commit $commit | sed -e '1,/^$/d' | 	echo "$logmsg" | | ||||||
|  | 	sed -e '1,/^$/d' -e 's/^    //' | ||||||
| 	case "$replay" in | 	case "$replay" in | ||||||
| 	'') | 	'') | ||||||
| 		echo "(cherry picked from commit $commit)" | 		echo "(cherry picked from commit $commit)" | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano