Merge branch 'dependency-types' into transitive-dependencies
authorJoey Hess <joey@gnu.kitenet.net>
Sun, 4 Oct 2009 20:33:58 +0000 (16:33 -0400)
committerJoey Hess <joey@gnu.kitenet.net>
Sun, 4 Oct 2009 20:33:58 +0000 (16:33 -0400)
Conflicts:
IkiWiki/Render.pm

1  2 
IkiWiki/Render.pm

index 09b646f75f0c1be520355b6beacc409ad119c086,9e00428c2127376182a304bdb34c4f8383b04880..3fc750925defe4cd67c26a0a053a73cee0eb4827
@@@ -454,44 -454,64 +454,69 @@@ sub refresh () 
                }
        }
  
-       if (%rendered || @del || @internal) {
+       if (%rendered || @del || @internal || @internal_change) {
 -              my @changed=(keys %rendered, @del);
 -              my @exists_changed=(@add, @del);
 -
 -              my %lc_changed = map { lc(pagename($_)) => 1 } @changed;
 -              my %lc_exists_changed = map { lc(pagename($_)) => 1 } @exists_changed;
 - 
 -              # rebuild dependant pages
 -              foreach my $f (@$files) {
 -                      next if $rendered{$f};
 -                      my $p=pagename($f);
 -                      my $reason = undef;
 -
 -                      if (exists $depends_simple{$p}) {
 -                              foreach my $d (keys %{$depends_simple{$p}}) {
 -                                      if ($depends_simple{$p}{$d} == $IkiWiki::DEPEND_EXISTS) {
 -                                              if (exists $lc_exists_changed{$d}) {
 +              my @changed;
 +              my $changes;
 +              do {
 +                      $changes=0;
 +                      @changed=(keys %rendered, @del);
-                       my %lcchanged = map { lc(pagename($_)) => 1 } @changed;
++                      my @exists_changed=(@add, @del);
++      
++                      my %lc_changed = map { lc(pagename($_)) => 1 } @changed;
++                      my %lc_exists_changed = map { lc(pagename($_)) => 1 } @exists_changed;
++       
 +                      # rebuild dependant pages
 +                      foreach my $f (@$files) {
 +                              next if $rendered{$f};
 +                              my $p=pagename($f);
 +                              my $reason = undef;
 +      
 +                              if (exists $depends_simple{$p}) {
 +                                      foreach my $d (keys %{$depends_simple{$p}}) {
-                                               if (exists $lcchanged{$d}) {
++                                              if ($depends_simple{$p}{$d} == $IkiWiki::DEPEND_EXISTS) {
++                                                      if (exists $lc_exists_changed{$d}) {
++                                                              $reason = $d;
++                                                              last;
++                                                      }
++                                              }
++                                              elsif (exists $lc_changed{$d}) {
                                                        $reason = $d;
                                                        last;
                                                }
                                        }
 -                                      elsif (exists $lc_changed{$d}) {
 -                                              $reason = $d;
 -                                              last;
 -                                      }
                                }
 -                      }
 -
 -                      if (exists $depends{$p} && ! defined $reason) {
 -                              D: foreach my $d (keys %{$depends{$p}}) {
 -                                      my $sub=pagespec_translate($d);
 -                                      next if $@ || ! defined $sub;
 -
 -                                      my @candidates;
 -                                      if ($depends{$p}{$d} == $IkiWiki::DEPEND_EXISTS) {
 -                                              @candidates=@exists_changed;
 -                                      }
 -                                      else {
 -                                              @candidates=@changed;
 -                                      }
 -                                      # only consider internal files
 -                                      # if the page explicitly depends
 -                                      # on such files
 -                                      if ($d =~ /internal\(/) {
 +      
 +                              if (exists $depends{$p} && ! defined $reason) {
 +                                      D: foreach my $d (keys %{$depends{$p}}) {
 +                                              my $sub=pagespec_translate($d);
 +                                              next if $@ || ! defined $sub;
 +      
++                                              my @candidates;
+                                               if ($depends{$p}{$d} == $IkiWiki::DEPEND_EXISTS) {
 -                                                      push @candidates, @internal;
++                                                      @candidates=@exists_changed;
+                                               }
+                                               else {
 -                                                      push @candidates, @internal, @internal_change;
++                                                      @candidates=@changed;
+                                               }
 -                                      }
 -
 -                                      foreach my $file (@candidates) {
 -                                              next if $file eq $f;
 -                                              my $page=pagename($file);
 -                                              if ($sub->($page, location => $p)) {
 -                                                      $reason = $page;
 -                                                      last D;
 +                                              # only consider internal files
 +                                              # if the page explicitly depends
 +                                              # on such files
-                                               foreach my $file (@changed, $d =~ /internal\(/ ? @internal : ()) {
++                                              if ($d =~ /internal\(/) {
++                                                      if ($depends{$p}{$d} == $IkiWiki::DEPEND_EXISTS) {
++                                                              push @candidates, @internal;
++                                                      }
++                                                      else {
++                                                              push @candidates, @internal, @internal_change;
++                                                      }
++                                              }
++      
++                                              foreach my $file (@candidates) {
 +                                                      next if $file eq $f;
 +                                                      my $page=pagename($file);
 +                                                      if ($sub->($page, location => $p)) {
 +                                                              $reason = $page;
 +                                                              last D;
 +                                                      }
                                                }
                                        }
                                }