зеркало из https://github.com/microsoft/git.git
Merge branch 'jc/same-encoding' into maint
Various codepaths checked if two encoding names are the same using ad-hoc code and some of them ended up asking iconv() to convert between "utf8" and "UTF-8". The former is not a valid way to spell the encoding name, but often people use it by mistake, and we equated them in some but not all codepaths. Introduce a new helper function to make these codepaths consistent. * jc/same-encoding: reencode_string(): introduce and use same_encoding()
This commit is contained in:
Коммит
fff26a6805
|
@ -483,7 +483,8 @@ static void convert_to_utf8(struct strbuf *line, const char *charset)
|
||||||
|
|
||||||
if (!charset || !*charset)
|
if (!charset || !*charset)
|
||||||
return;
|
return;
|
||||||
if (!strcasecmp(metainfo_charset, charset))
|
|
||||||
|
if (same_encoding(metainfo_charset, charset))
|
||||||
return;
|
return;
|
||||||
out = reencode_string(line->buf, metainfo_charset, charset);
|
out = reencode_string(line->buf, metainfo_charset, charset);
|
||||||
if (!out)
|
if (!out)
|
||||||
|
|
2
notes.c
2
notes.c
|
@ -1231,7 +1231,7 @@ static void format_note(struct notes_tree *t, const unsigned char *object_sha1,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (output_encoding && *output_encoding &&
|
if (output_encoding && *output_encoding &&
|
||||||
strcmp(utf8, output_encoding)) {
|
!is_encoding_utf8(output_encoding)) {
|
||||||
char *reencoded = reencode_string(msg, output_encoding, utf8);
|
char *reencoded = reencode_string(msg, output_encoding, utf8);
|
||||||
if (reencoded) {
|
if (reencoded) {
|
||||||
free(msg);
|
free(msg);
|
||||||
|
|
2
pretty.c
2
pretty.c
|
@ -571,7 +571,7 @@ char *logmsg_reencode(const struct commit *commit,
|
||||||
return NULL;
|
return NULL;
|
||||||
encoding = get_header(commit, "encoding");
|
encoding = get_header(commit, "encoding");
|
||||||
use_encoding = encoding ? encoding : utf8;
|
use_encoding = encoding ? encoding : utf8;
|
||||||
if (!strcmp(use_encoding, output_encoding))
|
if (same_encoding(use_encoding, output_encoding))
|
||||||
if (encoding) /* we'll strip encoding header later */
|
if (encoding) /* we'll strip encoding header later */
|
||||||
out = xstrdup(commit->buffer);
|
out = xstrdup(commit->buffer);
|
||||||
else
|
else
|
||||||
|
|
|
@ -60,7 +60,7 @@ static int get_message(struct commit *commit, struct commit_message *out)
|
||||||
|
|
||||||
out->reencoded_message = NULL;
|
out->reencoded_message = NULL;
|
||||||
out->message = commit->buffer;
|
out->message = commit->buffer;
|
||||||
if (strcmp(encoding, git_commit_encoding))
|
if (same_encoding(encoding, git_commit_encoding))
|
||||||
out->reencoded_message = reencode_string(commit->buffer,
|
out->reencoded_message = reencode_string(commit->buffer,
|
||||||
git_commit_encoding, encoding);
|
git_commit_encoding, encoding);
|
||||||
if (out->reencoded_message)
|
if (out->reencoded_message)
|
||||||
|
|
7
utf8.c
7
utf8.c
|
@ -423,6 +423,13 @@ int is_encoding_utf8(const char *name)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int same_encoding(const char *src, const char *dst)
|
||||||
|
{
|
||||||
|
if (is_encoding_utf8(src) && is_encoding_utf8(dst))
|
||||||
|
return 1;
|
||||||
|
return !strcasecmp(src, dst);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given a buffer and its encoding, return it re-encoded
|
* Given a buffer and its encoding, return it re-encoded
|
||||||
* with iconv. If the conversion fails, returns NULL.
|
* with iconv. If the conversion fails, returns NULL.
|
||||||
|
|
1
utf8.h
1
utf8.h
|
@ -7,6 +7,7 @@ int utf8_width(const char **start, size_t *remainder_p);
|
||||||
int utf8_strwidth(const char *string);
|
int utf8_strwidth(const char *string);
|
||||||
int is_utf8(const char *text);
|
int is_utf8(const char *text);
|
||||||
int is_encoding_utf8(const char *name);
|
int is_encoding_utf8(const char *name);
|
||||||
|
int same_encoding(const char *, const char *);
|
||||||
|
|
||||||
int strbuf_add_wrapped_text(struct strbuf *buf,
|
int strbuf_add_wrapped_text(struct strbuf *buf,
|
||||||
const char *text, int indent, int indent2, int width);
|
const char *text, int indent, int indent2, int width);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче