git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [GUILT 1/5] Fix generation of Documentation/usage-%.txt.

From
Per Cederqvist <cederp@opera.com>
Date
Jan 23, 2015, 14:33 UTC
Message-ID
<CAP=KgsSMT7Wniek1FgRGkrxa9+45hxcDtE-C1B4sQMvUviKJ1g@mail.gmail.com>
In-Reply-To
<20150123142103.GA101465@meili.jeffnet.31bits.net>
On Fri, Jan 23, 2015 at 3:21 PM, Jeff Sipek <jeffpc@josefsipek.net> wrote:
Show 36 quoted lines
> On Fri, Jan 23, 2015 at 02:24:55PM +0100, Per Cederqvist wrote:
>> The old rule worked, most of the time, but had several issues:
>>
>>  - It depended on the corresponding guilt-*.txt file, but the usage.sh
>>    script actually reads ../guilt-foo.
>>
>>  - Actually, each usage-%.txt depended on all guilt-*.txt files, so
>>    make had to do more work than necessary if a single file was
>>    altered.
>>
>>  - The construct broke parallel make, which would spawn several
>>    usage.sh at once.  This leads to unnecessary work, and could
>>    potentially result in broken usage files if the "echo some_string >
>>    some_file" construct used by usage.sh isn't atomic.
>>
>> Fixed by letting the usage.sh script update a single file, and writing
>> a proper implicit make rule.  This makes parallel make work a lot
>> better.
>
> Nice!
>
>> There is a small downside, though, as usage.sh will now be run once
>> for each command (if everything is regenerated).  I think it is worth
>> to pay that price to get the correctness.  This command is still very
>> fast compared to the docbook processing.
>
> Given how much simple usage.sh got, I'm thinking it might be worth it to
> just remove it, and just shove the rule into the makefile itself.
>
> Ok, I tried to write it.  I came up with the following.  (Note: I have *not*
> tested it.)  It's not *that* ugly.
>
> usage-guilt-%.txt: ../guilt-% usage.sh
>         echo "'$(basename $<)' `sed -n -e '/^USAGE=/{s/USAGE="//; s/"$//; p; q}' $<`" > $@
>
> What do you think?  Too opaque?  Your change looks good.

Too opaque, and not tested enough. It doesn't work, since make will handle all $. You need to write $$ instead of $ in at least one of the places. I would stick with usage.sh, as getting the quoting right when you have make, shell, subshells, and sed all at the same time is just too painful.

But it is of course up to you. You are the maintainer. :-)
    /ceder
Show 47 quoted lines
> Jeff.
>
>> Signed-off-by: Per Cederqvist <cederp@opera.com>
>> ---
>>  Documentation/Makefile | 4 ++--
>>  Documentation/usage.sh | 8 +++-----
>>  2 files changed, 5 insertions(+), 7 deletions(-)
>>
>> diff --git a/Documentation/Makefile b/Documentation/Makefile
>> index b6c3285..ec3c9e8 100644
>> --- a/Documentation/Makefile
>> +++ b/Documentation/Makefile
>> @@ -66,8 +66,8 @@ clean:
>>       rm -f usage-*.txt
>>       rm -f version.txt
>>
>> -usage-%.txt: $(MAN1_TXT) usage.sh
>> -     sh ./usage.sh
>> +usage-guilt-%.txt: ../guilt-% usage.sh
>> +     sh ./usage.sh $<
>>
>>  %.html : %.txt footer.txt version.txt
>>       $(ASCIIDOC) -b xhtml11 -d manpage -f asciidoc.conf $(ASCIIDOC_EXTRA) $<
>> diff --git a/Documentation/usage.sh b/Documentation/usage.sh
>> index 20fdca4..629f546 100644
>> --- a/Documentation/usage.sh
>> +++ b/Documentation/usage.sh
>> @@ -1,7 +1,5 @@
>>  #!/bin/sh
>>
>> -for i in `ls ../guilt-*`; do
>> -     name=$(basename $i)
>> -     u=$(grep USAGE $i |  sed 's/USAGE="//' | sed 's/"$//')
>> -     echo "'$name' $u"  > usage-$name.txt
>> -done
>> +name=$(basename $1)
>> +u=$(grep USAGE $1 |  sed 's/USAGE="//' | sed 's/"$//')
>> +echo "'$name' $u"  > usage-$name.txt
>> --
>> 2.1.0
>>
>
> --
> The reasonable man adapts himself to the world; the unreasonable one
> persists in trying to adapt the world to himself. Therefore all progress
> depends on the unreasonable man.
>                 - George Bernard Shaw
Previous: Jeff SipekNext: Jeff Sipek
Message 4 of 13 in “[GUILT 0/5] doc: less guilt-foo invocations, minor Makefile fixes”
  1. Per CederqvistJan 23, 2015
  2. 1/5 Fix generation of Documentation/usage-%.txt.Per Cederqvist, Jan 23, 2015
  3. Jeff SipekJan 23, 2015
  4. Per CederqvistJan 23, 2015
  5. Jeff SipekJan 23, 2015
  6. 2/5 doc: guilt.xml depends on cmds.txt.Per Cederqvist, Jan 23, 2015
  7. Jeff SipekJan 23, 2015
  8. 3/5 doc: don't use guilt-foo invocations in examples.Per Cederqvist, Jan 23, 2015
  9. Jeff SipekJan 23, 2015
  10. 4/5 doc: don't use guilt-foo invocations in usage messages.Per Cederqvist, Jan 23, 2015
  11. Jeff SipekJan 23, 2015
  12. 5/5 doc: git doesn't use git-foo invocations.Per Cederqvist, Jan 23, 2015
  13. Jeff SipekJan 23, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.