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

Re: [PATCH] generate-cmdlist: re-implement as shell script

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 19, 2015, 22:38 UTC
Message-ID
<xmqqegiy9a4d.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1440015528-7791-1-git-send-email-sunshine@sunshineco.com>
Eric Sunshine <sunshine@sunshineco.com> writes:
> In addition to reviving 527ec39^:generate-cmdlist.sh and extending it, I
> also re-indented it with tabs instead of spaces, so it's helpful to
> ignore whitespace changes when comparing the old and new versions of the
> shell script.

Hmph. Perhaps we can view it as part of reverting 527ec39 and then redoing it in shell. The way the shell script accumulates matchgrp variable (i.e. the literal LF in ${var:+string}) makes me feel some possible portability scare, which might be solved in a more stupid (i.e. not giving various reimplementations of Bourne shells a chance to screw it up) way by using another temporary file, but other than that the resurrected script looks OK to me.

Thanks.
Show 56 quoted lines
> diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh
> new file mode 100755
> index 0000000..1ac329d
> --- /dev/null
> +++ b/generate-cmdlist.sh
> @@ -0,0 +1,50 @@
> +#!/bin/sh
> +
> +echo "/* Automatically generated by $0 */
> +struct cmdname_help {
> +	char name[16];
> +	char help[80];
> +	unsigned char group;
> +};
> +
> +static const char *common_cmd_groups[] = {"
> +
> +tmp=cmdgrps$$.tmp
> +trap "rm -fr $tmp" 0 1 2 3 15
> +
> +sed -n '
> +	1,/^### common groups/b
> +	/^### command list/q
> +	/^#/d; /^[ 	]*$/b
> +	h;s/^[^ 	][^ 	]*[ 	][ 	]*\(.*\)/	N_("\1"),/p
> +	g;s/^\([^ 	][^ 	]*\)[ 	].*/\1/w '$tmp'
> +	'
> +printf '};\n\n'
> +
> +n=0
> +matchgrp=
> +substnum=
> +while read grp
> +do
> +	matchgrp="$matchgrp${matchgrp:+
> +}^git-..*[ 	]$grp"
> +	substnum="$substnum${substnum:+;}s/[ 	]$grp/$n/"
> +	n=$(($n+1))
> +done <$tmp
> +
> +printf 'static struct cmdname_help common_cmds[] = {\n'
> +grep "$matchgrp" |
> +sed 's/^git-//' |
> +sort |
> +while read cmd tags
> +do
> +	tag=$(echo $tags | sed "$substnum; s/[^0-9]//g")
> +	sed -n '
> +		/^NAME/,/git-'"$cmd"'/H
> +		${
> +			x
> +			s/.*git-'"$cmd"' - \(.*\)/	{"'"$cmd"'", N_("\1"), '$tag'},/
> +			p
> +		}' "Documentation/git-$cmd.txt"
> +done
> +echo "};"
Previous: Eric SunshineNext: Eric Sunshine
Message 2 of 5 in “generate-cmdlist: re-implement as shell script”
  1. generate-cmdlist: re-implement as shell scriptEric Sunshine, Aug 19, 2015
  2. Junio C HamanoAug 19, 2015
  3. Eric SunshineAug 20, 2015
  4. Junio C HamanoAug 20, 2015
  5. Eric SunshineAug 20, 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.