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
Joey Hess 2009-10-04 15:34:42 -04:00
parent 6eaf9e4015
commit 5fd230f968
1 changed files with 16 additions and 1 deletions

View File

@ -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;