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;
|
my $deptype=$DEPEND_CONTENT | $DEPEND_EXISTS;
|
||||||
if (@_) {
|
if (@_) {
|
||||||
my %params=@_;
|
my %params=@_;
|
||||||
if (defined $params{content} && $params{content} == 0) {
|
if (defined $params{content} && $params{content} == 0 &&
|
||||||
|
pagespec_contentless($pagespec)) {
|
||||||
$deptype=$deptype & ~$DEPEND_CONTENT;
|
$deptype=$deptype & ~$DEPEND_CONTENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1974,6 +1975,20 @@ sub pagespec_valid ($) {
|
||||||
return ! $@;
|
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 ($) {
|
sub glob2re ($) {
|
||||||
my $re=quotemeta(shift);
|
my $re=quotemeta(shift);
|
||||||
$re=~s/\\\*/.*/g;
|
$re=~s/\\\*/.*/g;
|
||||||
|
|
Loading…
Reference in New Issue