From: Jon Seymour Date: Sat, 10 Apr 2010 14:56:47 GMT Subject: Re: git status --porcelain is a mess that needs fixing Message-ID: In-Reply-To: <9c7e1f33b7ec0dab68a92aa8f067989e@212.159.54.234> On Sat, Apr 10, 2010 at 11:35 PM, Julian Phillips wrote: > On Sat, 10 Apr 2010 00:09:59 -0400, Jeff King wrote: >> Your parser is already broken if you are calling split, as the filenames >> may contain spaces (and will be quoted in that case, and you need to >> unmangle). You should use "-z". >> >> You will probably then realize that the "-z" format looks like: >> >>   XY file1\0file2\0 >> >> which still sucks. It would be more friendly as: >> >>   XY\0file1\0file2\0 >> >> So you could split on "\0". But even with that, you can't just blindly >> split, as the column and record separators are the same, and you might >> have one or two filenames. > > Not true.  If the second form was used, then you _can_ split on \0.  It > will tokenise the data for you, and then you consume ether two or three > tokens depending on the status flags.  So it would make the parsing > simpler.  But to make it even easier, how about adding a -Z that makes the > output format "XY\0file1\0[file2]\0" (i.e. always three tokens per record, > with the third token being empty if there is no second filename)?  Though > if future expandability was wanted you could end each record with \0\0 and > then parsing would be a two stages of split on \0\0 for records and then > split on \0 for entries? Surely that won't work - if file2 can be empty, \0[file2]\0 reduces to \0\0 which would be confused with the \0\0 proposed as a record separator. jon.