Re: [PATCH] Try URI quoting for embedded TAB and LF in pathnames
- From
Paul Eggert <eggert@cs.ucla.edu>
- Date
- Oct 11, 2005, 18:03 UTC
- Message-ID
- <87ek6s0w34.fsf@penguin.cs.ucla.edu>
- In-Reply-To
- <Pine.LNX.4.64.0510110802470.14597@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
> Personally, I'd like the normal C quoting the best.
That would be fine with me too. How about if we use the equivalent of --quoting-style="c" for file names that contain funny bytes, and no quoting for other file names? So, for example, something like this:
diff --git "space tab\tnewline\nquote\"backslash\\" b/dee/pqr
similarity index 72%
rename from "space tab\tnewline\nquote\"backslash\\"
rename to dee/pqr
index 9ee055c..243fbbc 100644
--- "space tab\tnewline\nquote\"backslash\\"
+++ b/dee/pqr
@@ -1 +1,3 @@
Fri Oct 7 23:19:04 PDT 2005
+foo
+fooThe surrounding double-quotes are an extra indication to the human reader that there is something weird about the quoted file name.
> Use filenames as if they are just binary blobs of data, > that's the only thing that has a high chance of success.
Thanks for thinking those things through. I agree mostly, but there's still a technical problem, in that we have to decide what a "funny byte" is if we are using C-style quoting. For example, the simplest approach is to say a byte is funny if it is space, backslash, quote, an ASCII control character, or is non-ASCII. But this will cause perfectly-reasonable UTF-8 file names to be presented in git format using unreadable strings like "a\293\203\257b" or whatever.
Perhaps it would be better to say that a byte is "funny" if it is space, backslash, quote, an ASCII control character, or a byte that is not part of a valid UTF-8 encoding. This will let UTF-8 file names through unscathed, while still warning the reader when funny business is going on. File names with other encodings (e.g., Shift-JIS) will contain lots of backslashes, but that's OK: we don't mind making nonstandard encodings hard-to-read, so long as we preserve the bytes correctly.
We could implement in other GNU applications by having a new quoting style that supports this quoting behavior. I can arrange for that.
> If somebody wants to use names with tabs and newlines, is he really > going to work with diffs? Or is it just a driver error?
The current-supported scheme with 'diff' and 'patch' should work for everything but newlines. I like the idea of getting it to work even with newlines, and I am willing to sacrifice old patches with file names starting with '"' (extremely rare, if any) to get newlines to work. Among other things I worry about people submitting purposely-malformed patches in non-git environments.