summaryrefslogtreecommitdiff
path: root/commit.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-12-27 16:41:33 -0800
committerJunio C Hamano <junkio@cox.net>2006-12-27 16:41:33 -0800
commitd2c11a38c476bdfa3dd2387a0d933b8c00e4dfe3 (patch)
tree1b1a4f6c735c576d1d6736ca9031d2e826926a5e /commit.c
parent52883fbd767f8a79a6f98a08907d0a9f6ba1ece1 (diff)
downloadgit-d2c11a38c476bdfa3dd2387a0d933b8c00e4dfe3.tar.gz
UTF-8: introduce i18n.logoutputencoding.
It is plausible for somebody to want to view the commit log in a different encoding from i18n.commitencoding -- the project's policy may be UTF-8 and the user may be using a commit message hook to run iconv to conform to that policy (and either not have i18n.commitencoding to default to UTF-8 or have it explicitly set to UTF-8). Even then, Latin-1 may be more convenient for the usual pager and the terminal the user uses. The new variable i18n.logoutputencoding is used in preference to i18n.commitencoding to decide what encoding to recode the log output in when git-log and friends formats the commit log message. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/commit.c b/commit.c
index df4bc0775a..6f2839a5cd 100644
--- a/commit.c
+++ b/commit.c
@@ -592,12 +592,20 @@ static char *get_header(const struct commit *commit, const char *key)
static char *logmsg_reencode(const struct commit *commit)
{
- char *encoding = get_header(commit, "encoding");
+ char *encoding;
char *out;
+ char *output_encoding = (git_log_output_encoding
+ ? git_log_output_encoding
+ : git_commit_encoding);
- if (!encoding || !strcmp(encoding, git_commit_encoding))
+ if (!output_encoding)
return NULL;
- out = reencode_string(commit->buffer, git_commit_encoding, encoding);
+ encoding = get_header(commit, "encoding");
+ if (!encoding || !strcmp(encoding, output_encoding)) {
+ free(encoding);
+ return NULL;
+ }
+ out = reencode_string(commit->buffer, output_encoding, encoding);
free(encoding);
if (!out)
return NULL;
@@ -618,15 +626,10 @@ unsigned long pretty_print_commit(enum cmit_fmt fmt,
int parents_shown = 0;
const char *msg = commit->buffer;
int plain_non_ascii = 0;
- char *reencoded = NULL;
+ char *reencoded = logmsg_reencode(commit);
- if (*git_commit_encoding) {
- reencoded = logmsg_reencode(commit);
- if (reencoded) {
- msg = reencoded;
- len = strlen(msg);
- }
- }
+ if (reencoded)
+ msg = reencoded;
if (fmt == CMIT_FMT_ONELINE || fmt == CMIT_FMT_EMAIL)
indent = 0;
@@ -643,7 +646,7 @@ unsigned long pretty_print_commit(enum cmit_fmt fmt,
for (in_body = i = 0; (ch = msg[i]) && i < len; i++) {
if (!in_body) {
/* author could be non 7-bit ASCII but
- * the log may so; skip over the
+ * the log may be so; skip over the
* header part first.
*/
if (ch == '\n' &&