OSDN Git Service

nginx 1.21.4: Update sources.
[linuxjm/jm.git] / admin / git2upd
1 #! /usr/bin/perl
2 #
3 # パッケージ原文が更新されたときに、
4 # translation_list を更新するために upd_tl.perl に与える
5 # 設定ファイルを作成するスクリプト
6 #
7 # original/ ディレクトリ以下にファイルを揃え、
8 # 変更/追加/削除されたファイルを git add で stage した上で
9 # git commit を実行する前に、original/ の一つ上のディレクトリで
10 # git status した結果を標準入力から与えてください。
11 # 結果は標準出力に出力するので、適当にリダイレクトして下さい。
12 #
13 # 結果にはささいな変更も含まれますので、実際にはそれらに
14 # 手動で対応した後、結果の該当部分を手動で削除してから
15 # upd_tl.perl を使うことになると思います。
16 #
17 # BUG:
18 # ゴミを出力することがあります。手動で削除してください。
19 #
20
21 sub cvfn()
22 {
23         my($fn) = @_;
24         if($fn =~ m@man./([-.\w]+)\.(\d)$@){
25                 return (1, "$1:$2");
26         } else {
27                 return (0, "$fn");
28         }
29 }
30
31 sub getdate()
32 {
33         my($fn) = @_;
34         my($input,$date);
35         open F, "<$fn";
36         while ($input = <F>) {
37                 if ($input =~ /^\.TH [^ ]+ +[1-8] +\"?([0-9]+)\-([0-9]+)\-([0-9]+)\"? /) {
38                         $date = $1 . "/" . $2 . "/" . $3;
39                 }
40         }
41         close F;
42         if ($date) {
43                 return $date;
44         } else {
45                 return "0000/00/00";
46         }
47 }
48
49 sub read_file_head() {
50         my ($fn) = @_;
51         my $top;
52         open F, "<$fn";
53         $top = <F>;
54         close F;
55         return $top;
56 }
57
58 sub get_prefix() {
59         my ($valid) = @_;
60         if (not $valid) {
61                 return '# ';
62         } else {
63                 return '';
64         }
65 }
66
67 sub print_entry() {
68         # NOTE: $mode should be either of 'A' or 'U'.
69         my ($mode, $fn, $top) = @_;
70         my ($valid, $cvfn) = &cvfn($fn);
71         my $prefix = &get_prefix($valid);
72         if($top =~ /^.so ([-\w]+)/i){
73                 print $prefix . 'L' . ' ' . &cvfn($fn) . ' ' . &cvfn($top) . "\n";
74         } else {
75                 print $prefix . $mode . ' ' . &cvfn($fn) . " " . &getdate($fn) . "\n";
76         }
77 }
78
79 sub print_removed_entry() {
80         my ($fn) = @_;
81         my ($valid, $cvfn) = &cvfn($fn);
82         my $prefix = &get_prefix($valid);
83         print $prefix . 'R ' . $cvfn . "\n";
84 }
85
86 $state = "start";
87
88 while(<>){
89         s/[\r\n]*$//;
90         $state = "staged" if /^(# )?Changes to be committed/;
91         if(/^#?$/){
92                 $state = ($state eq "staged") ? "target" : "done";
93         }
94         next if $state ne "target";
95
96         s/^#?[ \t]*//;
97         my($mode, $fn) = split(/: +/);
98         if($mode eq 'new file'){
99                 $top = &read_file_head($fn);
100                 &print_entry('A', $fn, $top);
101         }
102         if($mode eq 'modified'){
103                 $top = &read_file_head($fn);
104                 &print_entry('U', $fn, $top);
105         }
106         if($mode eq 'deleted'){
107                 &print_removed_entry($fn);
108         }
109         if($mode eq 'renamed'){
110                 my ($fn_old, $fn_new) = split(' -> ', $fn);
111                 $top = &read_file_head($fn_new);
112                 &print_entry('A', $fn_new, $top);
113                 &print_removed_entry($fn_old);
114         }
115 }