Merge branch 'sg/help-group' into maint

We rewrote one of the build scripts in Perl but this reimplements
in Bourne shell.

* sg/help-group:
  generate-cmdlist: re-implement as shell script
This commit is contained in:
Junio C Hamano 2015-09-03 19:17:51 -07:00
commit 969560bddc
3 changed files with 52 additions and 52 deletions

View File

@ -1696,10 +1696,10 @@ $(BUILT_INS): git$X
ln -s $< $@ 2>/dev/null || \
cp $< $@
common-cmds.h: generate-cmdlist.perl command-list.txt
common-cmds.h: generate-cmdlist.sh command-list.txt
common-cmds.h: $(wildcard Documentation/git-*.txt)
$(QUIET_GEN)$(PERL_PATH) generate-cmdlist.perl command-list.txt > $@+ && mv $@+ $@
$(QUIET_GEN)./generate-cmdlist.sh command-list.txt >$@+ && mv $@+ $@
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\

View File

@ -1,50 +0,0 @@
#!/usr/bin/perl
use strict;
use warnings;
print <<"EOT";
/* Automatically generated by $0 */
struct cmdname_help {
char name[16];
char help[80];
unsigned char group;
};
static char *common_cmd_groups[] = {
EOT
my $n = 0;
my %grp;
while (<>) {
last if /^### command list/;
next if (1../^### common groups/) || /^#/ || /^\s*$/;
chop;
my ($k, $v) = split ' ', $_, 2;
$grp{$k} = $n++;
print "\tN_(\"$v\"),\n";
}
print "};\n\nstatic struct cmdname_help common_cmds[] = {\n";
while (<>) {
next if /^#/ || /^\s*$/;
my @tags = split;
my $cmd = shift @tags;
for my $t (@tags) {
if (exists $grp{$t}) {
my $s;
open my $f, '<', "Documentation/$cmd.txt" or die;
while (<$f>) {
($s) = /^$cmd - (.+)$/;
last if $s;
}
close $f;
$cmd =~ s/^git-//;
print "\t{\"$cmd\", N_(\"$s\"), $grp{$t}},\n";
last;
}
}
}
print "};\n";

50
generate-cmdlist.sh Executable file
View File

@ -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[] = {"
grps=grps$$.tmp
match=match$$.tmp
trap "rm -f '$grps' '$match'" 0 1 2 3 15
sed -n '
1,/^### common groups/b
/^### command list/q
/^#/b
/^[ ]*$/b
h;s/^[^ ][^ ]*[ ][ ]*\(.*\)/ N_("\1"),/p
g;s/^\([^ ][^ ]*\)[ ].*/\1/w '$grps'
' "$1"
printf '};\n\n'
n=0
substnum=
while read grp
do
echo "^git-..*[ ]$grp"
substnum="$substnum${substnum:+;}s/[ ]$grp/$n/"
n=$(($n+1))
done <"$grps" >"$match"
printf 'static struct cmdname_help common_cmds[] = {\n'
grep -f "$match" "$1" |
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 "};"