updated git and svn scripts
[xrzperl.git] / urlrule_action
blobb60daa9ccb569405c3fd5963638e22bc70d01248
1 #!/usr/bin/perl -w
2 ###APPNAME: urlrule_action
3 ###APPAUTHOR: duel
4 ###APPDATE: Mon Mar 24 06:25:31 2008
5 ###APPVER: 0.1
6 ###APPDESC: apply rule for URL,and perform action
7 ###APPUSAGE: urlrule_action URL [0-5] [action args...]
8 ###APPEXAMPLE: urlrule_action http://www.sina.com.cn 0 cat
9 use strict;
10 use utf8;
11 use Data::Dumper;
13 use lib $ENV{XR_PERL_MODULE_DIR};
14 use MyPlace::Script::Usage qw/help_required help_even_empty/;
15 exit 0 if(help_required($0,@ARGV));
17 use URI;
18 use MyPlace::Script::Message;
19 use MyPlace::URLRule;
20 use MyPlace::ReEnterable;
21 use Cwd qw/getcwd/;
23 urlrule_set_callback('process_passdown',\&process_passdown);
25 my $RESUME_FILE = '.urlrule_resume';
26 my $phnd = MyPlace::ReEnterable->new('main');
28 sub process_passdown {
29 my ($count,@passdown) = urlrule_get_passdown(@_);
30 my $cwd = getcwd();
31 if($count) {
32 app_message("Get $count rules to pass down\n");
34 else {
35 return undef;
37 foreach(@passdown) {
38 $phnd->push($cwd,'load_rule',@{$_});
42 sub load_rule {
43 my $cwd = getcwd();
44 my ($status1,$rule,$result) = urlrule_process_args(@_);
45 if($status1) {
46 my($status2,$pass_count,@passdown)
47 = urlrule_process_result($rule,$result);
48 if($status2 and $pass_count>0) {
49 my $cwd = getcwd();
50 foreach(@passdown) {
51 $phnd->push($cwd,'load_rule',@{$_});
55 chdir $cwd;
58 $SIG{INT} = \&sig_killed;
59 my $cwd = getcwd();
61 sub sig_killed {
62 app_message("saving remained tasks...\n");
63 if($phnd->{lastStack}) {
64 $phnd->unshift(@{$phnd->{lastStack}});
66 chdir($cwd) if($cwd);
67 $phnd->saveToFile($RESUME_FILE);
68 app_message($phnd->length," tasks saved to $RESUME_FILE\n");
69 exit 1;
72 #exit process_args(undef,@ARGV);
74 if(@ARGV) {
75 $phnd->push($cwd,'load_rule',undef,@ARGV);
77 else {
78 $phnd->loadFromFile($RESUME_FILE);
80 while(my $tasks = $phnd->length) {
81 app_error("[$tasks] tasks remained\n");
82 my @this = $phnd->peek();
83 if(@this) {
84 my $wdir = shift @this;
85 my $cmd = shift @this;
86 # app_warning("rule - @this\n");
87 # app_warning("directory - $wdir\n");
89 $phnd->run();
91 app_message "All tasks completed.\n";
92 unlink $RESUME_FILE if(-f $RESUME_FILE);
93 exit 0;
94 #load_rule(@ARGV);