From 5fd230f9688bf7400f5ef962073bac8bc031e738 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sun, 4 Oct 2009 15:34:42 -0400 Subject: [PATCH] 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. --- IkiWiki.pm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index 67149bc8b..56e2d4e71 100644 --- a/IkiWiki.pm +++ b/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; -- 2.32.0.93.g670b81a890