X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/9875bc10d14d50f543f4aab3ce4e9dae060b8c23..deba9c7af4af6e2a8abb1af553a13c6776e7a06a:/IkiWiki/Render.pm

diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 4495b9cfd..18324914b 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -85,12 +85,6 @@ sub genpage ($$) { #{{{
 		$actions++;
 	}
 		
-	if ($config{rcs} && exists $config{recentchangespage} &&
-	    $page ne $config{recentchangespage}) {
-		$template->param(recentchangesurl => urlto($config{recentchangespage}, $page));
-		$actions++;
-	}
-
 	if (length $config{historyurl}) {
 		my $u=$config{historyurl};
 		$u=~s/\[\[file\]\]/$pagesources{$page}/g;
@@ -132,6 +126,7 @@ sub genpage ($$) { #{{{
 		backlinks => $backlinks,
 		more_backlinks => $more_backlinks,
 		mtime => displaytime($pagemtime{$page}),
+		ctime => displaytime($pagectime{$page}),
 		baseurl => baseurl($page),
 	);
 
@@ -170,18 +165,23 @@ sub scan ($) { #{{{
 		# Always needs to be done, since filters might add links
 		# to the content.
 		$content=filter($page, $page, $content);
-
-		my @links;
-		while ($content =~ /(?<!\\)$config{wiki_link_regexp}/g) {
-			push @links, linkpage($2);
-		}
+	
 		if ($config{discussion}) {
 			# Discussion links are a special case since they're
 			# not in the text of the page, but on its template.
-			push @links, $page."/".gettext("discussion");
+			$links{$page}=[ $page."/".gettext("discussion") ];
 		}
-		$links{$page}=\@links;
-		
+		else {
+			$links{$page}=[];
+		}
+
+		run_hooks(scan => sub {
+			shift->(
+				page => $page,
+				content => $content,
+			);
+		});
+
 		# Preprocess in scan-only mode.
 		preprocess($page, $page, $content, 1);
 	}
@@ -209,12 +209,21 @@ sub render ($) { #{{{
 		
 		my $output=htmlpage($page);
 		writefile($output, $config{destdir}, genpage($page, $content));
-		utime($pagemtime{$page}, $pagemtime{$page}, $config{destdir}."/".$output);
 	}
 	else {
-		my $srcfd=readfile($srcfile, 1, 1);
 		delete $depends{$file};
 		will_render($file, $file, 1);
+		
+		if ($config{hardlink}) {
+			prep_writefile($file, $config{destdir});
+			unlink($config{destdir}."/".$file);
+			if (link($srcfile, $config{destdir}."/".$file)) {
+				return;
+			}
+			# if hardlink fails, fall back top copying
+		}
+		
+		my $srcfd=readfile($srcfile, 1, 1);
 		writefile($file, $config{destdir}, undef, 1, sub {
 			my $destfd=shift;
 			my $cleanup=shift;
@@ -235,7 +244,6 @@ sub render ($) { #{{{
 				}
 			}
 		});
-		utime($pagemtime{$file}, $pagemtime{$file}, $config{destdir}."/".$file);
 	}
 } #}}}
 
@@ -332,12 +340,18 @@ sub refresh () { #{{{
 			}
 			else {
 				push @add, $file;
+				if ($config{getctime} && -e "$config{srcdir}/$file") {
+					eval {
+						my $time=rcs_getctime("$config{srcdir}/$file");
+						$pagectime{$page}=$time;
+					};
+					if ($@) {
+						print STDERR $@;
+					}
+				}
 			}
 			$pagecase{lc $page}=$page;
-			if ($config{getctime} && -e "$config{srcdir}/$file") {
-				$pagectime{$page}=rcs_getctime("$config{srcdir}/$file");
-			}
-			elsif (! exists $pagectime{$page}) {
+			if (! exists $pagectime{$page}) {
 				$pagectime{$page}=mtime(srcfile($file));
 			}
 		}
@@ -377,6 +391,8 @@ sub refresh () { #{{{
 			$pagemtime{$page}=$mtime;
 			if (isinternal($page)) {
 				push @internal, $file;
+				# Preprocess internal page in scan-only mode.
+				preprocess($page, $page, readfile(srcfile($file)), 1);
 			}
 			else {
 				push @needsbuild, $file;