aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/cmd-list.perl
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/cmd-list.perl')
-rwxr-xr-xDocumentation/cmd-list.perl80
1 files changed, 80 insertions, 0 deletions
diff --git a/Documentation/cmd-list.perl b/Documentation/cmd-list.perl
new file mode 100755
index 0000000000..e260a98977
--- /dev/null
+++ b/Documentation/cmd-list.perl
@@ -0,0 +1,80 @@
+#!/usr/bin/perl -w
+
+use File::Compare qw(compare);
+
+sub format_one {
+ my ($source_dir, $out, $nameattr) = @_;
+ my ($name, $attr) = @$nameattr;
+ my ($path) = "$source_dir/Documentation/$name.txt";
+ my ($state, $description);
+ my $mansection;
+ $state = 0;
+ open I, '<', "$path" or die "No such file $path.txt";
+ while (<I>) {
+ if (/^(?:git|scalar)[a-z0-9-]*\(([0-9])\)$/) {
+ $mansection = $1;
+ next;
+ }
+ if (/^NAME$/) {
+ $state = 1;
+ next;
+ }
+ if ($state == 1 && /^----$/) {
+ $state = 2;
+ next;
+ }
+ next if ($state != 2);
+ chomp;
+ $description = $_;
+ last;
+ }
+ close I;
+ if (!defined $description) {
+ die "No description found in $path.txt";
+ }
+ if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) {
+ print $out "linkgit:$name\[$mansection\]::\n\t";
+ if ($attr =~ / deprecated /) {
+ print $out "(deprecated) ";
+ }
+ print $out "$text.\n\n";
+ }
+ else {
+ die "Description does not match $name: $description";
+ }
+}
+
+my ($source_dir, $build_dir, @categories) = @ARGV;
+
+open IN, "<$source_dir/command-list.txt";
+while (<IN>) {
+ last if /^### command list/;
+}
+
+my %cmds = ();
+for (sort <IN>) {
+ next if /^#/;
+
+ chomp;
+ my ($name, $cat, $attr) = /^(\S+)\s+(.*?)(?:\s+(.*))?$/;
+ $attr = '' unless defined $attr;
+ push @{$cmds{$cat}}, [$name, " $attr "];
+}
+close IN;
+
+for my $out (@categories) {
+ my ($cat) = $out =~ /^cmds-(.*)\.txt$/;
+ my ($path) = "$build_dir/$out";
+ open O, '>', "$path+" or die "Cannot open output file $out+";
+ for (@{$cmds{$cat}}) {
+ format_one($source_dir, \*O, $_);
+ }
+ close O;
+
+ if (-f "$path" && compare("$path", "$path+") == 0) {
+ unlink "$path+";
+ }
+ else {
+ rename "$path+", "$path";
+ }
+}