]> git.donarmstrong.com Git - debbugs.git/blob - scripts/html-install.in
[project @ 1999-09-02 19:25:01 by gecko]
[debbugs.git] / scripts / html-install.in
1 #!/usr/bin/perl
2 # Takes 1 argument - directory tree to install into
3 # Tree _must_ be synch'd with one used by db2html to generate file
4
5 use POSIX;
6 require( '/etc/debbugs/config' );
7
8 $dirtree= shift(@ARGV);
9 defined($dirtree) or die 'usage';
10 chdir $dirtree or die $!;
11
12 $filenamere= '[0-9a-z]{2}/[0-9a-z][-+_:,.0-9a-zA-Z]*';
13
14 opendir(D,".") or die " opendir: $!";
15 while ($dir=readdir(D)) {
16     next if $dir =~ m/^\.\.?$/;
17     if (-f $dir) {
18         $remove{$dir}= 1;
19     } else {
20         opendir(E,"$dir") or die " opendir $dir: $!";
21         while ($_=readdir(E)) {
22             next if $_ =~ m/^\.\.?$/;
23             $remove{"$dir/$_"}= 1;
24         }
25         closedir(E) or die " closedir $dir: $!";
26         $rmdir{$dir}= 1;
27     }
28 }
29 closedir(D) or die " closedir: $!";
30
31 while(<>) {
32     chomp;
33     if (m/^end$/) {
34         print "end, removing\n";
35         for $k (keys %remove) { unlink($k) || $!==&ENOENT or die "$k: $!"; }
36         for $k (keys %rmdir) { rmdir($k) || $!==&ENOTEMPTY || $!==EEXIST or die "$k: $!"; }
37         exit 0;
38     } elsif (s/^progress //) {
39         y/-+:._!#=,0-9a-zA-Z //cd;
40         print " progress $_\n";
41     } elsif (m/^preserve ($filenamere)$/o) {
42         delete $remove{$1};
43         delete $remove{"$1.ref"};
44         print " preserve $1\n";
45     } elsif (m/^(file|diff) (\d+) (ref|def|non) ($filenamere)$/o) {
46         $filediff= $1; $linestodo= $2; $ii= $3; $file= $4;
47         print " $filediff $ii $file\n";
48         delete $remove{$file};
49         delete $remove{"$file.ref"} if $ii eq 'ref';
50         $file =~ m,^(..)/, or die $file;
51         mkdir($1,0777) || $!==EEXIST or die $!;
52         $tranfile= $file;
53         $tranfile.= '.ref' if $ii eq 'ref';
54         open(DT,"> recv.tmp") or die $!;
55         if ($filediff eq 'diff') { print DT "r $tranfile\n" or die $!; }
56         $indata= 0;
57         while ($linestodo--) {
58             $z=<STDIN>;
59             if ($filediff eq 'diff') {
60                 if ($indata) { $indata=0 if $incmd && m/^\.$/; }
61                 elsif ($z =~ m/^[0-9,]+[ac]/) { $indata= 1; }
62                 elsif ($z !~ m/^[0-9,]+[ds]/) { die "SECURITY $file >$z<"; }
63             }
64             print DT $z or die $!;
65         }
66         if ($filediff eq 'diff') { print DT "w new.tmp\nq\n" or die $!; }
67         close(DT) or die $!;
68         ($z=<STDIN>) eq "that$filediff $file\n" or die die "not confirmed >$z<";
69         if ($filediff eq 'diff') {
70             $q= `ed -s <recv.tmp 2>&1`;
71             length($q) || $? and die "ed $q $?";
72             rename("new.tmp","$tranfile") or die "$tranfile $!";
73             unlink("recv.tmp") or die $!;
74         } else {
75             rename("recv.tmp","$tranfile") or die "$tranfile $!";
76         }
77         if ($ii eq 'ref') {
78             open(I,"$tranfile") or die $!;
79             open(O,"> ref.tmp") or die $!;
80             while (<I>) {
81                 if (m/^\<\!\-\-ii (\d+)\-\-\>$/) {
82                     defined($iival{$1}) or die "$tranfile $1";
83                     print O $iival{$1} or die $!;
84                 } else {
85                     print O or die $!;
86                 }
87             }
88             close(I) or die $!;
89             close(O) or die $!;
90             rename("ref.tmp","$file") or die $!;
91         } elsif ($ii eq 'def') {
92             open(I,"$file") or die $!;
93             undef $cdef; $ctext= '';
94             while (<I>) {
95                 if (s/^\<\!\-\-iid (\d+)\-\-\>//) {
96                     defined($cdef) and die $file;
97                     $cdef= $1;
98                     $ctext= $_;
99                 } elsif (s/\<\!\-\-\/iid\-\-\>\n$//) {
100                     defined($cdef) or die $file;
101                     $iival{$cdef}= $ctext.$_."\n";
102                     $ctext=''; undef $cdef;
103                 } else {
104                     $ctext.= $_ if defined($cdef);
105                 }
106             }
107         }
108     } elsif (m/^noremoves$/) {
109         print "noremoves\n";
110         exit 0;
111     } else {
112         die " huh ? $_";
113     }
114 }
115
116 die "eof $!";