chiark / gitweb /
Parameterise rejection reasons
[modbot-mtm.git] / install-substitutions
1 #!/bin/bash
2 set -e
3
4 . ./get-settings
5
6 find -name '*.IN[O1]' ! -path '*/skeleton/*' -exec perl -e '
7         use IO::Handle;
8         use POSIX;
9         my $f= shift;
10         my $d= $f;
11         $d =~ s/\.IN([O1])$//;
12         my $overwrite= ($1 eq 'O');
13         my $g= "$d.new";
14         open F, "< $f" or die "$f $!";
15         open G, "> $g" or die "$g $!";
16         stat F or die "$f $!";
17         my $mode= (stat F)[2];
18         while (<F>) {
19                 s/\%(\w+)\%/ 
20                         exists($ENV{$1}) ? $ENV{$1} : die "$1 undef at $f:$.\n"
21                  /ge;
22                 print G or die $!;
23         }
24         F->error and die $!;
25         close G or die $!;
26         if ($mode & 01) {
27                 chmod 0755, $g or die "$g $!";
28         }
29         close F or die $!;
30         if ($overwrite) {
31                 rename $g, $d or die "$g $d $!";
32         } else {
33                 if (link $g, $d) {
34                         unlink $g or die $!;
35                 } else {
36                         die "$g $d $!" unless $!==&EEXIST;
37                 }
38         }
39 ' '{}' \;