chiark / gitweb /
probes: started feature
[modbot-mtm.git] / install-substitutions
1 #!/bin/bash
2 set -e
3
4 if [ "x$1" = "x-n" ]; then
5         diffonly=1; diffsparse=0; shift
6 elif [ "x$1" = "x-nq" ]; then
7         diffonly=1; diffsparse=1; shift
8 else
9         diffonly=0; diffsparse=-1
10 fi
11
12 if [ $# != 0 ]; then echo >&2 "usage: ./${0##*/} [-n]"; exit 1; fi
13
14 . ./get-settings
15
16 if [ x"`whoami`" != x"$OURUSER" ]; then
17         echo >&2 "$0 must be run as $OURUSER, skipping"
18         exit 0
19 fi
20
21 # procmail insists on g-w
22 umask 022
23
24 find -name '*.IN[O1]' ! -path '*/skeleton/*' -exec perl -e '
25         use IO::Handle;
26         use POSIX;
27         my $f= shift;
28         my $d= $f;
29         $d =~ s/\.IN([O1])$//;
30         my $overwrite= ($1 eq 'O');
31         my $g= "$d.new";
32         open F, "< $f" or die "$f $!";
33         open G, "> $g" or die "$g $!";
34         stat F or die "$f $!";
35         my $mode= (stat F)[2];
36         while (<F>) {
37                 s/\%(\w+)\%/ 
38                         exists($ENV{$1}) ? $ENV{$1} : die "$1 undef at $f:$.\n"
39                  /ge;
40                 print G or die $!;
41         }
42         F->error and die $!;
43         close G or die $!;
44         if ($mode & 01) {
45                 chmod 0755, $g or die "$g $!";
46         }
47         close F or die $!;
48         if ('$diffonly') {
49                 if (!-f $d) {
50                         print "Would create $d\n";
51                 } elsif ('$diffsparse' && !$overwrite) {
52                         print "Not reporting on $d as would not overwrite.\n";
53                 } else {
54                         system "diff -u $d $g";
55                 }
56         } elsif ($overwrite) {
57                 rename $g, $d or die "$g $d $!";
58         } else {
59                 if (link $g, $d) {
60                         unlink $g or die $!;
61                 } else {
62                         die "$g $d $!" unless $!==&EEXIST;
63                 }
64         }
65 ' '{}' \;