chiark / gitweb /
crontab.part.INO: rotate xlog event log weekly, not twice a week
[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 find -name '*.IN[O1]' ! -path '*/skeleton/*' -exec perl -e '
17         use IO::Handle;
18         use POSIX;
19         my $f= shift;
20         my $d= $f;
21         $d =~ s/\.IN([O1])$//;
22         my $overwrite= ($1 eq 'O');
23         my $g= "$d.new";
24         open F, "< $f" or die "$f $!";
25         open G, "> $g" or die "$g $!";
26         stat F or die "$f $!";
27         my $mode= (stat F)[2];
28         while (<F>) {
29                 s/\%(\w+)\%/ 
30                         exists($ENV{$1}) ? $ENV{$1} : die "$1 undef at $f:$.\n"
31                  /ge;
32                 print G or die $!;
33         }
34         F->error and die $!;
35         close G or die $!;
36         if ($mode & 01) {
37                 chmod 0755, $g or die "$g $!";
38         }
39         close F or die $!;
40         if ('$diffonly') {
41                 if (!-f $d) {
42                         print "Would create $d\n";
43                 } elsif ('$diffsparse' && !$overwrite) {
44                         print "Not reporting on $d as would not overwrite.\n";
45                 } else {
46                         system "diff -u $d $g";
47                 }
48         } elsif ($overwrite) {
49                 rename $g, $d or die "$g $d $!";
50         } else {
51                 if (link $g, $d) {
52                         unlink $g or die $!;
53                 } else {
54                         die "$g $d $!" unless $!==&EEXIST;
55                 }
56         }
57 ' '{}' \;