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); |
Philippe Blain | f442f28a | 2020-08-05 01:19:07 +0000 | [diff] [blame] | 9 | my $mansection; |
Junio C Hamano | d790739 | 2007-04-05 22:17:20 -0700 | [diff] [blame] | 10 | $state = 0; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 11 | open I, '<', "$name.txt" or die "No such file $name.txt"; |
| 12 | while (<I>) { |
Martin Ă…gren | 32c6fff | 2022-09-23 10:07:33 +0200 | [diff] [blame] | 13 | if (/^(?:git|scalar)[a-z0-9-]*\(([0-9])\)$/) { |
Philippe Blain | f442f28a | 2020-08-05 01:19:07 +0000 | [diff] [blame] | 14 | $mansection = $1; |
| 15 | next; |
| 16 | } |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 17 | if (/^NAME$/) { |
| 18 | $state = 1; |
| 19 | next; |
| 20 | } |
| 21 | if ($state == 1 && /^----$/) { |
| 22 | $state = 2; |
| 23 | next; |
| 24 | } |
| 25 | next if ($state != 2); |
| 26 | chomp; |
| 27 | $description = $_; |
| 28 | last; |
| 29 | } |
| 30 | close I; |
| 31 | if (!defined $description) { |
| 32 | die "No description found in $name.txt"; |
| 33 | } |
| 34 | if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) { |
Philippe Blain | f442f28a | 2020-08-05 01:19:07 +0000 | [diff] [blame] | 35 | print $out "linkgit:$name\[$mansection\]::\n\t"; |
Junio C Hamano | 79d3066 | 2007-12-01 23:39:19 -0800 | [diff] [blame] | 36 | if ($attr =~ / deprecated /) { |
| 37 | print $out "(deprecated) "; |
Junio C Hamano | 0bf15e7 | 2007-11-08 17:21:48 -0800 | [diff] [blame] | 38 | } |
| 39 | print $out "$text.\n\n"; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 40 | } |
| 41 | else { |
| 42 | die "Description does not match $name: $description"; |
| 43 | } |
| 44 | } |
| 45 | |
Junio C Hamano | e7a9807 | 2020-08-05 01:19:06 +0000 | [diff] [blame] | 46 | my ($input, @categories) = @ARGV; |
| 47 | |
| 48 | open IN, "<$input"; |
| 49 | while (<IN>) { |
Eric Sunshine | 11c6659 | 2015-05-21 19:39:18 +0200 | [diff] [blame] | 50 | last if /^### command list/; |
| 51 | } |
| 52 | |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 53 | my %cmds = (); |
Junio C Hamano | e7a9807 | 2020-08-05 01:19:06 +0000 | [diff] [blame] | 54 | for (sort <IN>) { |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 55 | next if /^#/; |
| 56 | |
| 57 | chomp; |
Junio C Hamano | 0bf15e7 | 2007-11-08 17:21:48 -0800 | [diff] [blame] | 58 | my ($name, $cat, $attr) = /^(\S+)\s+(.*?)(?:\s+(.*))?$/; |
Junio C Hamano | 79d3066 | 2007-12-01 23:39:19 -0800 | [diff] [blame] | 59 | $attr = '' unless defined $attr; |
| 60 | push @{$cmds{$cat}}, [$name, " $attr "]; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 61 | } |
Junio C Hamano | e7a9807 | 2020-08-05 01:19:06 +0000 | [diff] [blame] | 62 | close IN; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 63 | |
Junio C Hamano | e7a9807 | 2020-08-05 01:19:06 +0000 | [diff] [blame] | 64 | for my $out (@categories) { |
| 65 | my ($cat) = $out =~ /^cmds-(.*)\.txt$/; |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 66 | open O, '>', "$out+" or die "Cannot open output file $out+"; |
| 67 | for (@{$cmds{$cat}}) { |
| 68 | format_one(\*O, $_); |
| 69 | } |
| 70 | close O; |
Junio C Hamano | d790739 | 2007-04-05 22:17:20 -0700 | [diff] [blame] | 71 | |
| 72 | if (-f "$out" && compare("$out", "$out+") == 0) { |
| 73 | unlink "$out+"; |
| 74 | } |
| 75 | else { |
| 76 | print STDERR "$out\n"; |
| 77 | rename "$out+", "$out"; |
| 78 | } |
Junio C Hamano | 72fe6a5 | 2007-01-18 16:02:13 -0800 | [diff] [blame] | 79 | } |