Merge remote branch 'smcv/ready/glob-cache'
commit
cfbfbdc597
15
IkiWiki.pm
15
IkiWiki.pm
|
@ -2388,7 +2388,7 @@ sub glob2re ($) {
|
|||
my $re=quotemeta(shift);
|
||||
$re=~s/\\\*/.*/g;
|
||||
$re=~s/\\\?/./g;
|
||||
return $re;
|
||||
return qr/^$re$/i;
|
||||
}
|
||||
|
||||
package IkiWiki::FailReason;
|
||||
|
@ -2482,6 +2482,8 @@ sub derel ($$) {
|
|||
return $path;
|
||||
}
|
||||
|
||||
my %glob_cache;
|
||||
|
||||
sub match_glob ($$;@) {
|
||||
my $page=shift;
|
||||
my $glob=shift;
|
||||
|
@ -2489,8 +2491,13 @@ sub match_glob ($$;@) {
|
|||
|
||||
$glob=derel($glob, $params{location});
|
||||
|
||||
my $regexp=IkiWiki::glob2re($glob);
|
||||
if ($page=~/^$regexp$/i) {
|
||||
# Instead of converting the glob to a regex every time,
|
||||
# cache the compiled regex to save time.
|
||||
if (!defined $glob_cache{$glob}) {
|
||||
my $re = IkiWiki::glob2re($glob);
|
||||
$glob_cache{$glob} = $re;
|
||||
}
|
||||
if ($page=~ $glob_cache{$glob}) {
|
||||
if (! IkiWiki::isinternal($page) || $params{internal}) {
|
||||
return IkiWiki::SuccessReason->new("$glob matches $page");
|
||||
}
|
||||
|
@ -2660,7 +2667,7 @@ sub match_user ($$;@) {
|
|||
return IkiWiki::ErrorReason->new("no user specified");
|
||||
}
|
||||
|
||||
if (defined $params{user} && $params{user}=~/^$regexp$/i) {
|
||||
if (defined $params{user} && $params{user}=~$regexp) {
|
||||
return IkiWiki::SuccessReason->new("user is $user");
|
||||
}
|
||||
elsif (! defined $params{user}) {
|
||||
|
|
|
@ -161,7 +161,7 @@ sub match_mimetype ($$;@) {
|
|||
}
|
||||
|
||||
my $regexp=IkiWiki::glob2re($wanted);
|
||||
if ($mimetype!~/^$regexp$/i) {
|
||||
if ($mimetype!~$regexp) {
|
||||
return IkiWiki::FailReason->new("file MIME type is $mimetype, not $wanted");
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -355,7 +355,7 @@ sub match {
|
|||
}
|
||||
|
||||
if (defined $val) {
|
||||
if ($val=~/^$re$/i) {
|
||||
if ($val=~$re) {
|
||||
return IkiWiki::SuccessReason->new("$re matches $field of $page", $page => $IkiWiki::DEPEND_CONTENT, "" => 1);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1297,7 +1297,7 @@ sub match_lang ($$;@) {
|
|||
|
||||
my $regexp=IkiWiki::glob2re($wanted);
|
||||
my $lang=IkiWiki::Plugin::po::lang($page);
|
||||
if ($lang !~ /^$regexp$/i) {
|
||||
if ($lang !~ $regexp) {
|
||||
return IkiWiki::FailReason->new("file language is $lang, not $wanted");
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in New Issue