blob: 755a110bc48d7e2b596651ca13664c01192d966c [file] [log] [blame]
Junio C Hamanod7907392007-04-05 22:17:20 -07001#!/usr/bin/perl -w
2
3use File::Compare qw(compare);
Junio C Hamano72fe6a52007-01-18 16:02:13 -08004
5sub format_one {
Junio C Hamano0bf15e72007-11-08 17:21:48 -08006 my ($out, $nameattr) = @_;
7 my ($name, $attr) = @$nameattr;
Junio C Hamano72fe6a52007-01-18 16:02:13 -08008 my ($state, $description);
Philippe Blainf442f28a2020-08-05 01:19:07 +00009 my $mansection;
Junio C Hamanod7907392007-04-05 22:17:20 -070010 $state = 0;
Junio C Hamano72fe6a52007-01-18 16:02:13 -080011 open I, '<', "$name.txt" or die "No such file $name.txt";
12 while (<I>) {
Martin Ă…gren32c6fff2022-09-23 10:07:33 +020013 if (/^(?:git|scalar)[a-z0-9-]*\(([0-9])\)$/) {
Philippe Blainf442f28a2020-08-05 01:19:07 +000014 $mansection = $1;
15 next;
16 }
Junio C Hamano72fe6a52007-01-18 16:02:13 -080017 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 Blainf442f28a2020-08-05 01:19:07 +000035 print $out "linkgit:$name\[$mansection\]::\n\t";
Junio C Hamano79d30662007-12-01 23:39:19 -080036 if ($attr =~ / deprecated /) {
37 print $out "(deprecated) ";
Junio C Hamano0bf15e72007-11-08 17:21:48 -080038 }
39 print $out "$text.\n\n";
Junio C Hamano72fe6a52007-01-18 16:02:13 -080040 }
41 else {
42 die "Description does not match $name: $description";
43 }
44}
45
Junio C Hamanoe7a98072020-08-05 01:19:06 +000046my ($input, @categories) = @ARGV;
47
48open IN, "<$input";
49while (<IN>) {
Eric Sunshine11c66592015-05-21 19:39:18 +020050 last if /^### command list/;
51}
52
Junio C Hamano72fe6a52007-01-18 16:02:13 -080053my %cmds = ();
Junio C Hamanoe7a98072020-08-05 01:19:06 +000054for (sort <IN>) {
Junio C Hamano72fe6a52007-01-18 16:02:13 -080055 next if /^#/;
56
57 chomp;
Junio C Hamano0bf15e72007-11-08 17:21:48 -080058 my ($name, $cat, $attr) = /^(\S+)\s+(.*?)(?:\s+(.*))?$/;
Junio C Hamano79d30662007-12-01 23:39:19 -080059 $attr = '' unless defined $attr;
60 push @{$cmds{$cat}}, [$name, " $attr "];
Junio C Hamano72fe6a52007-01-18 16:02:13 -080061}
Junio C Hamanoe7a98072020-08-05 01:19:06 +000062close IN;
Junio C Hamano72fe6a52007-01-18 16:02:13 -080063
Junio C Hamanoe7a98072020-08-05 01:19:06 +000064for my $out (@categories) {
65 my ($cat) = $out =~ /^cmds-(.*)\.txt$/;
Junio C Hamano72fe6a52007-01-18 16:02:13 -080066 open O, '>', "$out+" or die "Cannot open output file $out+";
67 for (@{$cmds{$cat}}) {
68 format_one(\*O, $_);
69 }
70 close O;
Junio C Hamanod7907392007-04-05 22:17:20 -070071
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 Hamano72fe6a52007-01-18 16:02:13 -080079}