Merge branch 'jk/log-warn-on-bogus-encoding'

Doc update plus improved error reporting.

* jk/log-warn-on-bogus-encoding:
  docs: use "character encoding" to refer to commit-object encoding
  logmsg_reencode(): warn when iconv() fails
This commit is contained in:
Junio C Hamano 2021-09-10 11:46:30 -07:00
commit bfe37f3dc5
4 changed files with 17 additions and 4 deletions

View file

@ -11,7 +11,7 @@ gui.displayUntracked::
in the file list. The default is "true".
gui.encoding::
Specifies the default encoding to use for displaying of
Specifies the default character encoding to use for displaying of
file contents in linkgit:git-gui[1] and linkgit:gitk[1].
It can be overridden by setting the 'encoding' attribute
for relevant files (see linkgit:gitattributes[5]).

View file

@ -33,14 +33,16 @@ people using 80-column terminals.
used together.
--encoding=<encoding>::
The commit objects record the encoding used for the log message
Commit objects record the character 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. Note that if an object claims to be encoded
in `X` and we are outputting in `X`, we will output the object
verbatim; this means that invalid sequences in the original
commit may be copied to the output.
commit may be copied to the output. Likewise, if iconv(3) fails
to convert the commit, we will output the original object
verbatim, along with a warning.
--expand-tabs=<n>::
--expand-tabs::

View file

@ -671,7 +671,11 @@ const char *repo_logmsg_reencode(struct repository *r,
* If the re-encoding failed, out might be NULL here; in that
* case we just return the commit message verbatim.
*/
return out ? out : msg;
if (!out) {
warning("unable to reencode commit to '%s'", output_encoding);
return msg;
}
return out;
}
static int mailmap_name(const char **email, size_t *email_len,

View file

@ -131,4 +131,11 @@ do
fi
done
test_expect_success 'log shows warning when conversion fails' '
enc=this-encoding-does-not-exist &&
git log -1 --encoding=$enc 2>err &&
echo "warning: unable to reencode commit to ${SQ}${enc}${SQ}" >expect &&
test_cmp expect err
'
test_done