diff options
author | Elijah Newren <newren@gmail.com> | 2019-05-13 21:31:00 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-05-14 16:48:56 +0900 |
commit | ccbfc96dc480a1395f2068c706f53fe0881c8356 (patch) | |
tree | 7c40bffdd5106c9199ffec5e30cdccc6c1b3ed73 /builtin | |
parent | fast-import: support 'encoding' commit header (diff) | |
download | tgif-ccbfc96dc480a1395f2068c706f53fe0881c8356.tar.xz |
fast-export: avoid stripping encoding header if we cannot reencode
When fast-export encounters a commit with an 'encoding' header, it tries
to reencode in UTF-8 and then drops the encoding header. However, if it
fails to reencode in UTF-8 because e.g. one of the characters in the
commit message was invalid in the old encoding, then we need to retain
the original encoding or otherwise we lose information needed to
understand all the other (valid) characters in the original commit
message.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/fast-export.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/builtin/fast-export.c b/builtin/fast-export.c index 9e283482ef..7734a9f5a5 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -642,9 +642,12 @@ static void handle_commit(struct commit *commit, struct rev_info *rev, printf("commit %s\nmark :%"PRIu32"\n", refname, last_idnum); if (show_original_ids) printf("original-oid %s\n", oid_to_hex(&commit->object.oid)); - printf("%.*s\n%.*s\ndata %u\n%s", + printf("%.*s\n%.*s\n", (int)(author_end - author), author, - (int)(committer_end - committer), committer, + (int)(committer_end - committer), committer); + if (!reencoded && encoding) + printf("encoding %s\n", encoding); + printf("data %u\n%s", (unsigned)(reencoded ? strlen(reencoded) : message ? strlen(message) : 0), |