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 | ||||
| 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" | ||||
|  | @ -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 | ||||
|  |  | |||
|  | @ -78,6 +78,8 @@ 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 | ||||
|  | @ -85,10 +87,11 @@ git-rev-parse --verify "$commit^2" >/dev/null 2>&1 && | |||
|  | ||||
| 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" || | ||||
|  | @ -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)" | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano