git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Should the --encoding argument to log/show commands make any guarantees about their output?

From
Jeff King <peff@peff.net>
Date
Jun 17, 2015, 18:46 UTC
Message-ID
<20150617184607.GA28455@peff.net>
In-Reply-To
<5581A964.4000500@googlemail.com>
On Wed, Jun 17, 2015 at 07:07:48PM +0200, Jan-Philip Gehrcke wrote:
Show 6 quoted lines
> The two-option scenario is totally clear. Although one must stress that the
> "error-out" option can, as discussed, be kept minimally invasive: it is
> sufficient (and common) to just skip those byte sequences (and replace them
> with a replacement symbol) that would be invalid in the requested output
> encoding. This would retain as much information as possible while
> guaranteeing a subsequent decoder to retrieve valid input.

I think "munge into valid UTF-8, even if it means losing data" is a totally valid and useful option. I'm not completely sure that git should do that, though. E.g., you could just as easily do:

  git log --encoding=utf8 | drop_invalid_utf8 | your_script

Or quite possibly, your_script could do the munging itself while reading the data. I do not know much about Python's input handling, but in Perl, it is easy to say "the input is utf8, and replace anything bogus with a substitution character"[1].

Show 7 quoted lines
> Should we
> 
> * just make this more clear in the docs and/or
> * should we adjust the behavior of --encoding or
> * should we do something entirely different, like adding a new command line
> option or
> * should we just leave things as they are?
I would vote for a documentation change, perhaps like:
Subject: docs: clarify that --encoding can produce invalid sequences

In the common case that the commit encoding matches the output encoding, we do not touch the buffer at all, which makes things much more efficient. But it might be unclear to a consumer that we will pass through bogus sequences.

Signed-off-by: Jeff King <peff@peff.net>
---
 Documentation/pretty-options.txt | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
index 74aa01a..642af6e 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.txt
@@ -37,7 +37,10 @@ people using 80-column terminals.
 	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.
+	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.
 
 --notes[=<ref>]::
 	Show the notes (see linkgit:git-notes[1]) that annotate the
-- 
2.4.4.719.g3984bc6
Previous: Jan-Philip GehrckeNext: Junio C Hamano
Message 7 of 9 in “Should the --encoding argument to log/show commands make any guarantees about their output?”
  1. Jan-Philip GehrckeJun 15, 2015
  2. Torsten BögershausenJun 15, 2015
  3. Jan-Philip GehrckeJun 16, 2015
  4. Torsten BögershausenJun 16, 2015
  5. Junio C HamanoJun 17, 2015
  6. Jan-Philip GehrckeJun 17, 2015
  7. Jeff KingJun 17, 2015
  8. Junio C HamanoJun 17, 2015
  9. Torsten BögershausenJun 17, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.