When this parameter is specified, patch will be converted to a target encoding before applied. The target encoding defaults to UTF-8. It could also be specified by i18n.patchencoding. Signed-off-by: ZHANG, Le <r0bertz@xxxxxxxxxx> --- Documentation/git-mailinfo.txt | 6 +++++- builtin/mailinfo.c | 11 +++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Documentation/git-mailinfo.txt b/Documentation/git-mailinfo.txt index 3ea5aad..3e84817 100644 --- a/Documentation/git-mailinfo.txt +++ b/Documentation/git-mailinfo.txt @@ -45,7 +45,7 @@ OPTIONS them. This used to be optional but now it is the default. + Note that the patch is always used as-is without charset -conversion, even with this flag. +conversion, even with this flag; use '--recode-patch' for that. --encoding=<encoding>:: Similar to -u. But when re-coding, the charset specified here is @@ -54,6 +54,10 @@ conversion, even with this flag. -n:: Disable all charset re-coding of the metadata. +--recode-patch:: + Convert the patch from the e-mail to UTF-8 (or the value of the + configuration variable i18n.patchencoding if it is set). + --scissors:: Remove everything in body before a scissors line. A line that mainly consists of scissors (either ">8" or "8<") and perforation diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c index 1406d9f..96181e6 100644 --- a/builtin/mailinfo.c +++ b/builtin/mailinfo.c @@ -12,6 +12,8 @@ static FILE *cmitmsg, *patchfile, *fin, *fout; static int keep_subject; static int keep_non_patch_brackets_in_subject; static const char *metainfo_charset; +static const char *patch_charset; +static int recode_patch; static struct strbuf line = STRBUF_INIT; static struct strbuf name = STRBUF_INIT; static struct strbuf email = STRBUF_INIT; @@ -828,8 +830,10 @@ static int handle_commit_msg(struct strbuf *line) return 0; } -static void handle_patch(const struct strbuf *line) +static void handle_patch(struct strbuf *line) { + if (recode_patch) + convert_to_utf8(line, charset.buf, patch_charset); fwrite(line->buf, 1, line->len, patchfile); patch_lines++; } @@ -1021,7 +1025,7 @@ static int git_mailinfo_config(const char *var, const char *value, void *unused) } static const char mailinfo_usage[] = - "git mailinfo [-k|-b] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] msg patch < mail >info"; + "git mailinfo [-k|-b] [-u | --encoding=<encoding> | -n] [--recode-patch] [--scissors | --no-scissors] msg patch < mail >info"; int cmd_mailinfo(int argc, const char **argv, const char *prefix) { @@ -1034,6 +1038,7 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) def_charset = (git_commit_encoding ? git_commit_encoding : "UTF-8"); metainfo_charset = def_charset; + patch_charset = git_patch_encoding ? git_patch_encoding : "UTF-8"; while (1 < argc && argv[1][0] == '-') { if (!strcmp(argv[1], "-k")) @@ -1046,6 +1051,8 @@ int cmd_mailinfo(int argc, const char **argv, const char *prefix) metainfo_charset = NULL; else if (!prefixcmp(argv[1], "--encoding=")) metainfo_charset = argv[1] + 11; + else if (!prefixcmp(argv[1], "--recode-patch")) + recode_patch = 1; else if (!strcmp(argv[1], "--scissors")) use_scissors = 1; else if (!strcmp(argv[1], "--no-scissors")) -- 1.7.3.2.344.gb3680.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html