Junio C Hamano | d790739 | 2007-04-05 22:17:20 -0700 | [diff] [blame] | 1 | #!/usr/bin/perl -w |
| 2 | |
| 3 | use File::Compare qw(compare); |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 4 | |
| 5 | sub format_one { |
Junio C Hamano | 0bf15e7 | 2007-11-08 17:21:48 -0800 | [diff] [blame] | 6 | my ($out, $nameattr) = @_; |
| 7 | my ($name, $attr) = @$nameattr; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 8 | my ($state, $description); |
Junio C Hamano | d790739 | 2007-04-05 22:17:20 -0700 | [diff] [blame] | 9 | $state = 0; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 10 | open I, '<', "$name.txt" or die "No such file $name.txt"; |
| 11 | while (<I>) { |
| 12 | if (/^NAME$/) { |
| 13 | $state = 1; |
| 14 | next; |
| 15 | } |
| 16 | if ($state == 1 && /^----$/) { |
| 17 | $state = 2; |
| 18 | next; |
| 19 | } |
| 20 | next if ($state != 2); |
| 21 | chomp; |
| 22 | $description = $_; |
| 23 | last; |
| 24 | } |
| 25 | close I; |
| 26 | if (!defined $description) { |
| 27 | die "No description found in $name.txt"; |
| 28 | } |
| 29 | if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) { |
Dan McGee | 5162e69 | 2007-12-29 00:20:38 -0600 | [diff] [blame] | 30 | print $out "linkgit:$name\[1\]::\n\t"; |
Junio C Hamano | 79d3066 | 2007-12-01 23:39:19 -0800 | [diff] [blame] | 31 | if ($attr =~ / deprecated /) { |
| 32 | print $out "(deprecated) "; |
Junio C Hamano | 0bf15e7 | 2007-11-08 17:21:48 -0800 | [diff] [blame] | 33 | } |
| 34 | print $out "$text.\n\n"; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 35 | } |
| 36 | else { |
| 37 | die "Description does not match $name: $description"; |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | my %cmds = (); |
Junio C Hamano | 79d3066 | 2007-12-01 23:39:19 -0800 | [diff] [blame] | 42 | for (sort <>) { |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 43 | next if /^#/; |
| 44 | |
| 45 | chomp; |
Junio C Hamano | 0bf15e7 | 2007-11-08 17:21:48 -0800 | [diff] [blame] | 46 | my ($name, $cat, $attr) = /^(\S+)\s+(.*?)(?:\s+(.*))?$/; |
Junio C Hamano | 79d3066 | 2007-12-01 23:39:19 -0800 | [diff] [blame] | 47 | $attr = '' unless defined $attr; |
| 48 | push @{$cmds{$cat}}, [$name, " $attr "]; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 49 | } |
| 50 | |
| 51 | for my $cat (qw(ancillaryinterrogators |
| 52 | ancillarymanipulators |
| 53 | mainporcelain |
| 54 | plumbinginterrogators |
| 55 | plumbingmanipulators |
Junio C Hamano | 89bf207 | 2007-01-18 22:32:38 -0800 | [diff] [blame] | 56 | synchingrepositories |
| 57 | foreignscminterface |
| 58 | purehelpers |
| 59 | synchelpers)) { |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 60 | my $out = "cmds-$cat.txt"; |
| 61 | open O, '>', "$out+" or die "Cannot open output file $out+"; |
| 62 | for (@{$cmds{$cat}}) { |
| 63 | format_one(\*O, $_); |
| 64 | } |
| 65 | close O; |
Junio C Hamano | d790739 | 2007-04-05 22:17:20 -0700 | [diff] [blame] | 66 | |
| 67 | if (-f "$out" && compare("$out", "$out+") == 0) { |
| 68 | unlink "$out+"; |
| 69 | } |
| 70 | else { |
| 71 | print STDERR "$out\n"; |
| 72 | rename "$out+", "$out"; |
| 73 | } |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 74 | } |