]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki.pm
web commit by tuomov: More patch
[git.ikiwiki.info.git] / IkiWiki.pm
index b56c628014944f6b06783621d668c7e394964bda..331300db067e41fde2f5a1547587bad8dea92a12 100644 (file)
@@ -6,11 +6,12 @@ use strict;
 use Encode;
 use HTML::Entities;
 use URI::Escape q{uri_escape_utf8};
 use Encode;
 use HTML::Entities;
 use URI::Escape q{uri_escape_utf8};
+use POSIX;
 use open qw{:utf8 :std};
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
 use open qw{:utf8 :std};
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
-            %renderedfiles %oldrenderedfiles %pagesources %depends %hooks
-           %forcerebuild $gettext_obj};
+            %renderedfiles %oldrenderedfiles %pagesources %destsources
+           %depends %hooks %forcerebuild $gettext_obj};
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
@@ -83,8 +84,6 @@ sub checkconfig () { #{{{
                delete $ENV{LC_ALL};
        }
        if (defined $config{locale}) {
                delete $ENV{LC_ALL};
        }
        if (defined $config{locale}) {
-               eval q{use POSIX};
-               error($@) if $@;
                if (POSIX::setlocale(&POSIX::LC_ALL, $config{locale})) {
                        $ENV{LANG}=$config{locale};
                        $gettext_obj=undef;
                if (POSIX::setlocale(&POSIX::LC_ALL, $config{locale})) {
                        $ENV{LANG}=$config{locale};
                        $gettext_obj=undef;
@@ -328,9 +327,13 @@ sub will_render ($$;$) { #{{{
                $renderedfiles{$page}=[$dest, grep { $_ ne $dest } @{$renderedfiles{$page}}];
        }
        else {
                $renderedfiles{$page}=[$dest, grep { $_ ne $dest } @{$renderedfiles{$page}}];
        }
        else {
+               foreach my $old (@{$renderedfiles{$page}}) {
+                       delete $destsources{$old};
+               }
                $renderedfiles{$page}=[$dest];
                $cleared{$page}=1;
        }
                $renderedfiles{$page}=[$dest];
                $cleared{$page}=1;
        }
+       $destsources{$dest}=$page;
 } #}}}
 
 sub bestlink ($$) { #{{{
 } #}}}
 
 sub bestlink ($$) { #{{{
@@ -430,8 +433,6 @@ sub abs2rel ($$) { #{{{
 sub displaytime ($) { #{{{
        my $time=shift;
 
 sub displaytime ($) { #{{{
        my $time=shift;
 
-       eval q{use POSIX};
-       error($@) if $@;
        # strftime doesn't know about encodings, so make sure
        # its output is properly treated as utf8
        return decode_utf8(POSIX::strftime(
        # strftime doesn't know about encodings, so make sure
        # its output is properly treated as utf8
        return decode_utf8(POSIX::strftime(
@@ -455,7 +456,7 @@ sub urlto ($$) { #{{{
                return beautify_url(baseurl($from));
        }
 
                return beautify_url(baseurl($from));
        }
 
-       if (! grep { $_ eq $to } map { @{$_} } values %renderedfiles) {
+       if (! $destsources{$to}) {
                $to=htmlpage($to);
        }
 
                $to=htmlpage($to);
        }
 
@@ -489,18 +490,19 @@ sub htmllink ($$$;@) { #{{{
        return "<span class=\"selflink\">$linktext</span>"
                if length $bestlink && $page eq $bestlink;
        
        return "<span class=\"selflink\">$linktext</span>"
                if length $bestlink && $page eq $bestlink;
        
-       if (! grep { $_ eq $bestlink } map { @{$_} } values %renderedfiles) {
+       if (! $destsources{$bestlink}) {
                $bestlink=htmlpage($bestlink);
                $bestlink=htmlpage($bestlink);
-       }
-       if (! grep { $_ eq $bestlink } map { @{$_} } values %renderedfiles) {
-               return $linktext unless length $config{cgiurl};
-               return "<span><a href=\"".
-                       cgiurl(
-                               do => "create",
-                               page => pagetitle(lc($link), 1),
-                               from => $lpage
-                       ).
-                       "\">?</a>$linktext</span>"
+
+               if (! $destsources{$bestlink}) {
+                       return $linktext unless length $config{cgiurl};
+                       return "<span><a href=\"".
+                               cgiurl(
+                                       do => "create",
+                                       page => pagetitle(lc($link), 1),
+                                       from => $lpage
+                               ).
+                               "\">?</a>$linktext</span>"
+               }
        }
        
        $bestlink=abs2rel($bestlink, dirname(htmlpage($page)));
        }
        
        $bestlink=abs2rel($bestlink, dirname(htmlpage($page)));
@@ -723,6 +725,7 @@ sub loadindex () { #{{{
                        $oldlinks{$page}=[@{$items{link}}];
                        $links{$page}=[@{$items{link}}];
                        $depends{$page}=$items{depends}[0] if exists $items{depends};
                        $oldlinks{$page}=[@{$items{link}}];
                        $links{$page}=[@{$items{link}}];
                        $depends{$page}=$items{depends}[0] if exists $items{depends};
+                       $destsources{$_}=$page foreach @{$items{dest}};
                        $renderedfiles{$page}=[@{$items{dest}}];
                        $oldrenderedfiles{$page}=[@{$items{dest}}];
                        $pagecase{lc $page}=$page;
                        $renderedfiles{$page}=[@{$items{dest}}];
                        $oldrenderedfiles{$page}=[@{$items{dest}}];
                        $pagecase{lc $page}=$page;