Re: [PATCH v3] pretty.c: add %x00 format specifier.
- From
- Govind Salinas <govind@sophiasuchtig.com>
- Date
- Mar 23, 2008, 01:22 UTC
- Message-ID
- <5d46db230803221822x29cdfc4t8a0b7ff0e36ff435@mail.gmail.com>
- In-Reply-To
- <5d46db230803211045w3bc2f407n76f188b1d77680d7@mail.gmail.com>
On Fri, Mar 21, 2008 at 12:45 PM, Govind Salinas <govind@sophiasuchtig.com> wrote:
Show 49 quoted lines
> > On Fri, Mar 21, 2008 at 10:47 AM, Johannes Schindelin > <Johannes.Schindelin@gmx.de> wrote: > > Hi, > > > > > > On Fri, 21 Mar 2008, Govind Salinas wrote: > > > > > This adds a %x00 format which parses the 00 as hex encoding for a byte > > > and prints the resulting byte. This can be used to add null bytes or > > > other bytes that can make machine parsing easier. It is also necessary > > > to use fwrite to print out the data since printf will terminate if you > > > feed it a null. > > > > > > Junio supplied the hex decoding. > > > > This is all nice and well, but if I understood you correctly, your > > original aim was to have a pretty-formatted list of the revisions, but > > NUL-delimited for easy parsing. > > > > Which you can do with "git log --pretty=format:%s -z" right now. > > > > Ciao, > > Dscho > > > > > > Unfortunately that almost work for me. I am in the following situation > If I stick to just using the --pretty=format options then I would be fine > but I am also adding --stat and -p to git-log, so now I have 3 multiline > hunks of data and I need to tell where each one ends deterministically. > I *could* just look for "---" and "diff --git" at every line but I would prefer > to use a delimiter. > > Alternatively, if -z would add a null before the diffstat was printed, that > would probably work for me as well. Even so, using the same delimiter > is nicer than parsing part with newlines and part with nulls, which I would > have to do if I just used -z. Think > "%H%x00%ae%x00%an%x00%s%x00%b%x00 -z -p --stat". there > everything splits nicely with nulls. The alternative (with -z adding a null > before the diffstat is "%H%n%ae%n%an%n%s%n%b -z -p --stat" which > would work, but I would have to parse the last 3 fields differently. > > Perhaps there is a better way to get all this information. But I do want > all the information to come from the same call. > > Thanks, > Govind. >
Ok, how about this instead? Perhaps it is more palatable.
diff --git a/log-tree.c b/log-tree.c index 608f697..5f55683 100644 --- a/log-tree.c +++ b/log-tree.c @@ -338,7 +338,7 @@ int log_tree_diff_flush(struct rev_info *opt) int pch = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH; if ((pch & opt->diffopt.output_format) == pch) printf("---"); - putchar('\n'); + putchar(opt->diffopt.line_termination); } } diff_flush(&opt->diffopt);