Re: `git status --porcelain` disagrees with documentation about quoting filenames with spaces
- From
Kevin Ballard <kevin@sb.org>
- Date
- Oct 29, 2010, 01:51 UTC
- Message-ID
- <A2E979E4-899B-4295-A8CF-72EF8E585D3A@sb.org>
- In-Reply-To
- <7vaalx9430.fsf@alter.siamese.dyndns.org>
If you don't mind I've brought this back onto the list.
On Oct 28, 2010, at 6:32 PM, Junio C Hamano wrote:
Show 8 quoted lines
>> BTW, I'm trying an experiment here to see if I can just paste the patch into >> Mail.app without it being mangled. I sent it to myself first, and Mail.app >> is applying quoted-printable encoding to the patch, but it appears git-am >> can still understand it. Please let me know if this isn't acceptable and I >> will send it separately. > > Almost but not quite; it appears that all the leading SP on the context > lines and the diffstat are lost by somebody.
Well, it looks like I screwed up. I sent a test email to myself and it came through fine, so I selected all, hit copy, and pasted that into the new reply to the list. Unfortunately, copying from Mail.app's rich markup view seems to have lost the spaces. If I copy from the Raw Source view it works fine. I'll have to try again without making that mistake.
Show 7 quoted lines
> The patch seems to unconditionally dq even when there is no rename > (i.e. when d->head_path is NULL). > > I think it _is_ intended (otherwise it becomes unwieldy to tell if you > renamed "foo" to "bar" or if you touched "foo -> bar" without looking at > the status letters) but the behaviour does not seem to match what the log > message says it does.
Good point. I hadn't thought this through properly. Here's an updated patch with a fixed description. And this time I'm not copying it from a test email ;)
---8<--- Subject: status: Quote paths with spaces in short format
According to the documentation for git-status, in short-format mode, paths with spaces or unprintable characters are quoted. However 28fba29 (Do not quote SP., 2005-10-17) removed the behavior that quotes paths that have spaces but not unprintable characters. Unfortunately this makes the output of `git status --porcelain` non-parseable in certain (rather unusual) edge cases. In the interest of removing ambiguity when parsing the output of `git status --porcelain`, restore the behavior of quoting paths with spaces in git-status's short-format mode.
Signed-off-by: Kevin Ballard <kevin@sb.org> --- wt-status.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/wt-status.c b/wt-status.c index fc2438f..9624865 100644 --- a/wt-status.c +++ b/wt-status.c @@ -744,10 +744,20 @@ static void wt_shortstatus_status(int null_termination, struct string_list_item const char *one; if (d->head_path) { one = quote_path(d->head_path, -1, &onebuf, s->prefix); + if (*one != '"' && strchr(one, ' ') != NULL) { + putchar('"'); + strbuf_addch(&onebuf, '"'); + one = onebuf.buf; + } printf("%s -> ", one); strbuf_release(&onebuf); } one = quote_path(it->string, -1, &onebuf, s->prefix); + if (*one != '"' && strchr(one, ' ') != NULL) { + putchar('"'); + strbuf_addch(&onebuf, '"'); + one = onebuf.buf; + } printf("%s\n", one); strbuf_release(&onebuf); }
-- 1.7.3.2.195.ge42d1.dirty