/[kvake]/kvake.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /kvake.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.5 - (hide annotations)
Wed May 3 07:21:50 2000 UTC (22 years, 7 months ago) by dpavlin
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +35 -0 lines
File MIME type: text/plain
dodan locking

1 dpavlin 1.1 #!/usr/local/bin/perl -w
2     #
3     # program pretvara ch, zh, sh, cc, dh u odgovrajuce
4     # ISO 8859-2 znakove
5     # ozujak 1998.
6     # Hana Breyer Priselac
7     #
8     # poziva se s ./kvake.sh PUT
9     # gdje je PUT puni UNIX path do html dokumenata koje
10     # konvertirate
11     #
12     # 2000-02-16 Dobrica Pavlinusic <dpavlin@pliva.hr> prva perl verzija
13     # 2000-03-01 DbP poravljen ignore_dirs grep bug
14 dpavlin 1.2 #
15     # 2000-03-31 Hana sada ignorira sve sto ^eng$, ^eng_ , ^adresar$ u imenu direktorija
16 dpavlin 1.5 # 2000-05-03 DbP lock support
17 dpavlin 1.1
18 dpavlin 1.2 $mod_time = 10*60; # 10 minuta
19     #$mod_time = 24*60*60; # 1 day
20 dpavlin 1.1
21 dpavlin 1.4 $verbose = 0;
22 dpavlin 1.1
23 dpavlin 1.5 use Fcntl ':flock'; # import LOCK_*
24     $lock="/tmp/kvake.lock";
25    
26 dpavlin 1.2 #@ignore_dirs=( "/data/web/public/adresar/", "/data/web/public/eng" );
27 dpavlin 1.1
28 dpavlin 1.3 while (defined($ARGV[0]) && $ARGV[0] eq "-v") {
29     $verbose++;
30     shift @ARGV;
31     }
32     print STDERR "verbosity: $verbose\n" if ($verbose);
33    
34 dpavlin 1.4 if (! defined(@ARGV) || ($#ARGV < 0)) {
35 dpavlin 1.1 @dirs=( "/data/web/public",
36     "/usr/users/it/dpeterc" );
37     } else {
38     @dirs=@ARGV;
39     }
40    
41 dpavlin 1.4 print STDERR "Scanning dirs: @dirs\n" if ($verbose);
42 dpavlin 1.3
43 dpavlin 1.5 print STDERR "locking\n" if ($verbose);
44     while (-e "$lock") {
45     sub read_lock_pid {
46     my $pid;
47     open(LOCK,"$lock") || die "can't open lock $lock: $!";
48     $pid=<LOCK>;
49     close(LOCK);
50     return $pid;
51     }
52     $run_pid=read_lock_pid;
53     print STDERR "lock on pid $run_pid found\n";
54     # if not over in 15 min. kill (next re-run will do actual work)
55     sleep 15*60;
56     $new_pid=read_lock_pid;
57     if ($run_pid == $new_pid) {
58     print STDERR "killing process $run_pid and clearing lock\n";
59     kill 9,$run_pid;
60     unlink $lock;
61     die;
62     }
63     }
64    
65     open(LOCK,">$lock") || die "can't open lock $lock: $!";
66     print LOCK "$$";
67     flock(LOCK,LOCK_EX);
68    
69 dpavlin 1.1 foreach $dir (@dirs) {
70     opendir(DIR,"$dir") || warn "can't open $dir: $!";
71     foreach $f (grep { !/^\./ } readdir(DIR)) {
72 dpavlin 1.2 if (-d "$dir/$f" && $f !~ /^eng$/ && $f !~ /^adresar$/ && $f !~ /^eng_/) {
73     $push_it = 1;
74     push @dirs,"$dir/$f" if ($push_it);
75     }
76     elsif (-f "$dir/$f" && ! -l "$dir/$f") {
77 dpavlin 1.1 @stat = stat(_);
78     if ($f =~ /\.html/ && (time() - $stat[9]) < $mod_time) {
79 dpavlin 1.2 print "filek za mjenjanje `$dir/$f\n" if ($verbose);
80 dpavlin 1.1 push @files,"$dir/$f";
81     }
82 dpavlin 1.2 else {
83 dpavlin 1.3 print "ovo je staro: $dir/$f\n" if ($verbose > 1);
84 dpavlin 1.1 }
85 dpavlin 1.2 }
86     elsif ($f =~ /^eng$/ || $f =~ /adresar/ || $f =~ /^eng_/) {
87     print "preskacem jer je eng ili adresar $dir/$f\n" if ($verbose);
88     }
89     else {
90     print "ovo je link $dir/$f\n" if ($verbose);
91 dpavlin 1.1 }
92     }
93     closedir DIR;
94     }
95    
96     foreach $file (@files) {
97     if (open(IN,"$file")) {
98     print "$file\n" if ($verbose);
99     if (open(OUT,"> $file.$$")) {
100     while(<IN>) {
101     replace();
102     print OUT "$_";
103     }
104     } else {
105     warn "can't open $file.$$: $!";
106     }
107     close(OUT);
108     } else {
109     warn "can't open $file for reading: $!";
110     }
111     close(IN);
112     @stat = stat($file);
113     rename "$file.$$","$file";
114     chmod 0664,"$file";
115     # chmod $stat[2],"$file";
116     chown $stat[4],$stat[5],"$file";
117     }
118 dpavlin 1.5
119     print STDERR "unlocking\n" if ($verbose);
120     flock(LOCK,LOCK_UN);
121     close(LOCK);
122     unlink $lock;
123 dpavlin 1.1
124     1;
125    
126     sub replace {
127 dpavlin 1.3 do '/root/kvake/zamjene.pl';
128 dpavlin 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.26