]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge branch 'master' into dependency-types
authorJoey Hess <joey@gnu.kitenet.net>
Mon, 5 Oct 2009 00:37:09 +0000 (20:37 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Mon, 5 Oct 2009 00:37:09 +0000 (20:37 -0400)
1  2 
IkiWiki.pm

diff --combined IkiWiki.pm
index c1d07531ee3488ba15f317ca84045adcd1c46d5d,97d84c9deb175b694bd303b10ff75fba6b95bb08..9591a8160f5d24017f50fa5d968dabe2af1f3092
@@@ -28,10 -28,6 +28,10 @@@ our $VERSION = 3.00; # plugin interfac
  our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
  our $installdir='/usr'; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
  
 +# Page dependency types.
 +our $DEPEND_CONTENT=1;
 +our $DEPEND_PRESENCE=2;
 +
  # Optimisation.
  use Memoize;
  memoize("abs2rel");
@@@ -1528,28 -1524,18 +1528,28 @@@ sub loadindex () 
                                $links{$page}=$d->{links};
                                $oldlinks{$page}=[@{$d->{links}}];
                        }
 -                      if (exists $d->{depends_simple}) {
 +                      if (ref $d->{depends_simple} eq 'ARRAY') {
 +                              # old format
                                $depends_simple{$page}={
                                        map { $_ => 1 } @{$d->{depends_simple}}
                                };
                        }
 +                      elsif (exists $d->{depends_simple}) {
 +                              $depends{$page}=$d->{depends_simple};
 +                      }
                        if (exists $d->{dependslist}) {
 +                              # old format
                                $depends{$page}={
 -                                      map { $_ => 1 } @{$d->{dependslist}}
 +                                      map { $_ => $DEPEND_CONTENT }
 +                                              @{$d->{dependslist}}
                                };
                        }
 +                      elsif (exists $d->{depends} && ! ref $d->{depends}) {
 +                              # old format
 +                              $depends{$page}={$d->{depends} => $DEPEND_CONTENT };
 +                      }
                        elsif (exists $d->{depends}) {
 -                              $depends{$page}={$d->{depends} => 1};
 +                              $depends{$page}=$d->{depends};
                        }
                        if (exists $d->{state}) {
                                $pagestate{$page}=$d->{state};
@@@ -1595,11 -1581,11 +1595,11 @@@ sub saveindex () 
                };
  
                if (exists $depends{$page}) {
 -                      $index{page}{$src}{dependslist} = [ keys %{$depends{$page}} ];
 +                      $index{page}{$src}{depends} = $depends{$page};
                }
  
                if (exists $depends_simple{$page}) {
 -                      $index{page}{$src}{depends_simple} = [ keys %{$depends_simple{$page}} ];
 +                      $index{page}{$src}{depends_simple} = $depends_simple{$page};
                }
  
                if (exists $pagestate{$page}) {
@@@ -1767,37 -1753,20 +1767,37 @@@ sub rcs_receive () 
        $hooks{rcs}{rcs_receive}{call}->();
  }
  
 -sub add_depends ($$) {
 +sub add_depends ($$;@) {
        my $page=shift;
        my $pagespec=shift;
  
 -      if ($pagespec =~ /$config{wiki_file_regexp}/ &&
 -              $pagespec !~ /[\s*?()!]/) {
 -              # a simple dependency, which can be matched by string eq
 -              $depends_simple{$page}{lc $pagespec} = 1;
 +      # Is the pagespec a simple page name?
 +      my $simple=$pagespec =~ /$config{wiki_file_regexp}/ &&
 +              $pagespec !~ /[\s*?()!]/;
 +
 +      my $deptype=$DEPEND_CONTENT;
 +      if (@_) {
 +              my %params=@_;
 +              
 +              # Is the pagespec limited to terms that will continue
 +              # to match pages as long as those pages exist?
 +              my $limited=1;
 +              while ($limited && $pagespec=~m/(\w+)\([^\)]*\)/g) {
 +                      $limited = $1 =~ /^(glob|internal|creation_month|creation_day|creation_year|created_before|created_after)$/;
 +              }
 +
 +              $deptype=$deptype & ~$DEPEND_CONTENT & $DEPEND_PRESENCE
 +                      if $params{presence} && $limited;
 +      }
 +
 +      if ($simple) {
 +              $depends_simple{$page}{lc $pagespec} |= $deptype;
                return 1;
        }
  
        return unless pagespec_valid($pagespec);
  
 -      $depends{$page}{$pagespec} = 1;
 +      $depends{$page}{$pagespec} |= $deptype;
        return 1;
  }
  
@@@ -1901,7 -1870,7 +1901,7 @@@ sub pagespec_translate ($) 
                        [^\s()]+        # any other text
                )
                \s*             # ignore whitespace
-       }igx) {
+       }gx) {
                my $word=$1;
                if (lc $word eq 'and') {
                        $code.=' &&';