Also I think we need this patch for completeness on top of what we have in 'master'. -- >8 -- [PATCH] Move commit reencoding parameter parsing to revision.c This way, git-rev-list and git-diff-tree with --pretty can use it. Because they are both plumbing, we default not to do any conversion unless --encoding=<encoding> is explicitly given from the command line. Signed-off-by: Junio C Hamano <junkio@xxxxxxx> --- Documentation/git-rev-list.txt | 1 + Documentation/pretty-formats.txt | 8 ++++++++ builtin-diff-tree.c | 6 ++++++ builtin-rev-list.c | 6 ++++++ revision.c | 8 ++++++++ 5 files changed, 29 insertions(+), 0 deletions(-) diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt index 9e0dcf8..86c94e7 100644 --- a/Documentation/git-rev-list.txt +++ b/Documentation/git-rev-list.txt @@ -21,6 +21,7 @@ SYNOPSIS [ \--stdin ] [ \--topo-order ] [ \--parents ] + [ \--encoding[=<encoding>] ] [ \--(author|committer|grep)=<pattern> ] [ [\--objects | \--objects-edge] [ \--unpacked ] ] [ \--pretty | \--header ] diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index 996f628..8cba13f 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -76,3 +76,11 @@ displayed in full, regardless of whether --abbrev or --no-abbrev are used, and 'parents' information show the true parent commits, without taking grafts nor history simplification into account. + + +--encoding[=<encoding>]:: + The commit objects record the encoding used for the log message + in their encoding header; this option can be used to tell the + command to re-code the commit log message in the encoding + preferred by the user. For non plumbing commands this + defaults to UTF-8. diff --git a/builtin-diff-tree.c b/builtin-diff-tree.c index 24cb2d7..6ce2c0f 100644 --- a/builtin-diff-tree.c +++ b/builtin-diff-tree.c @@ -67,6 +67,12 @@ int cmd_diff_tree(int argc, const char **argv, const char *prefix) static struct rev_info *opt = &log_tree_opt; int read_stdin = 0; + /* default to turn the conversion off -- diff-tree is not a + * Porcelain but as low plumbing as it can go, as far as + * two-tree comparison is concerned. + */ + git_log_output_encoding = ""; + init_revisions(opt, prefix); git_config(git_default_config); /* no "diff" UI options */ nr_sha1 = 0; diff --git a/builtin-rev-list.c b/builtin-rev-list.c index 1bb3a06..0c3dce6 100644 --- a/builtin-rev-list.c +++ b/builtin-rev-list.c @@ -226,6 +226,12 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) int i; int read_from_stdin = 0; + /* default to turn the conversion off -- rev-list is not a + * Porcelain but as low plumbing as it can go, as far as + * revision traversal is concerned. + */ + git_log_output_encoding = ""; + init_revisions(&revs, prefix); revs.abbrev = 0; revs.commit_format = CMIT_FMT_UNSPECIFIED; diff --git a/revision.c b/revision.c index af9f874..6e4ec46 100644 --- a/revision.c +++ b/revision.c @@ -1039,6 +1039,14 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch all_match = 1; continue; } + if (!strncmp(arg, "--encoding=", 11)) { + arg += 11; + if (strcmp(arg, "none")) + git_log_output_encoding = strdup(arg); + else + git_log_output_encoding = ""; + continue; + } opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i); if (opts > 0) { -- 1.5.0.rc0.g6bb1 - 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