2 ###APPNAME: urlrule_action
4 ###APPDATE: Mon Mar 24 06:25:31 2008
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
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));
18 use MyPlace
::Script
::Message
;
20 use MyPlace
::ReEnterable
;
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
(@_);
32 app_message
("Get $count rules to pass down\n");
38 $phnd->push($cwd,'load_rule',@
{$_});
44 my ($status1,$rule,$result) = urlrule_process_args
(@_);
46 my($status2,$pass_count,@passdown)
47 = urlrule_process_result
($rule,$result);
48 if($status2 and $pass_count>0) {
51 $phnd->push($cwd,'load_rule',@
{$_});
58 $SIG{INT
} = \
&sig_killed
;
62 app_message
("saving remained tasks...\n");
63 if($phnd->{lastStack
}) {
64 $phnd->unshift(@
{$phnd->{lastStack
}});
67 $phnd->saveToFile($RESUME_FILE);
68 app_message
($phnd->length," tasks saved to $RESUME_FILE\n");
72 #exit process_args(undef,@ARGV);
75 $phnd->push($cwd,'load_rule',undef,@ARGV);
78 $phnd->loadFromFile($RESUME_FILE);
80 while(my $tasks = $phnd->length) {
81 app_error
("[$tasks] tasks remained\n");
82 my @this = $phnd->peek();
84 my $wdir = shift @this;
85 my $cmd = shift @this;
86 # app_warning("rule - @this\n");
87 # app_warning("directory - $wdir\n");
91 app_message
"All tasks completed.\n";
92 unlink $RESUME_FILE if(-f
$RESUME_FILE);