detect pagespecs that require content dependencies
When adding a contentless dependency, the pagespec also needs to be one that does not look at any page content information. As a first approximation of that, only allow glob-based pagespecs in contentless dependencies. While there are probably a few other types of pagespecs that can match contentless, this will work for most of them.master
parent
6eaf9e4015
commit
5fd230f968
17
IkiWiki.pm
17
IkiWiki.pm
|
@ -1774,7 +1774,8 @@ sub add_depends ($$;@) {
|
|||
my $deptype=$DEPEND_CONTENT | $DEPEND_EXISTS;
|
||||
if (@_) {
|
||||
my %params=@_;
|
||||
if (defined $params{content} && $params{content} == 0) {
|
||||
if (defined $params{content} && $params{content} == 0 &&
|
||||
pagespec_contentless($pagespec)) {
|
||||
$deptype=$deptype & ~$DEPEND_CONTENT;
|
||||
}
|
||||
}
|
||||
|
@ -1974,6 +1975,20 @@ sub pagespec_valid ($) {
|
|||
return ! $@;
|
||||
}
|
||||
|
||||
sub pagespec_contentless ($) {
|
||||
my $spec=shift;
|
||||
|
||||
while ($spec=~m{
|
||||
(\w+)\([^\)]*\) # only match pagespec functions
|
||||
}igx) {
|
||||
# only glob and internal can be matched contentless
|
||||
# (first approximation)
|
||||
return 0 if $1 ne "glob" && $1 ne "internal";
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub glob2re ($) {
|
||||
my $re=quotemeta(shift);
|
||||
$re=~s/\\\*/.*/g;
|
||||
|
|
Loading…
Reference in New Issue