From: Paul Eggert Date: Tue, 11 Oct 2005 18:03:59 GMT Subject: Re: [PATCH] Try URI quoting for embedded TAB and LF in pathnames Message-ID: <87ek6s0w34.fsf@penguin.cs.ucla.edu> In-Reply-To: Linus Torvalds 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 +foo The 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.