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

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

From
JSJeff Sipek <jeffpc@josefsipek.net>
Date
Jan 23, 2015, 14:21 UTC
Message-ID
<20150123142103.GA101465@meili.jeffnet.31bits.net>
In-Reply-To
<1422019499-2012-2-git-send-email-cederp@opera.com>
On Fri, Jan 23, 2015 at 02:24:55PM +0100, Per Cederqvist wrote:
Show 17 quoted lines
> 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.
Jeff.
Show 39 quoted lines
> 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: Per CederqvistNext: Per Cederqvist
Message 3 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.