]> sipb.mit.edu Git - ikiwiki.git/blobdiff - ikiwiki
fix
[ikiwiki.git] / ikiwiki
diff --git a/ikiwiki b/ikiwiki
index cb90ef04f10b7cee9a81d2223df028feb98e8438..e218979d1068ecfebfe0b6134a8b921fe788c688 100755 (executable)
--- a/ikiwiki
+++ b/ikiwiki
@@ -247,10 +247,10 @@ sub htmllink { #{{{
 
 sub linkify ($$) { #{{{
        my $content=shift;
-       my $file=shift;
+       my $page=shift;
 
        $content =~ s{(\\?)$config{wiki_link_regexp}}{
-               $1 ? "[[$2]]" : htmllink(pagename($file), $2)
+               $1 ? "[[$2]]" : htmllink($page, $2)
        }eg;
        
        return $content;
@@ -372,7 +372,7 @@ sub check_overwrite ($$) { #{{{
                        ", before, so not rendering from $src");
        }
 } #}}}
-               
+
 sub render ($) { #{{{
        my $file=shift;
        
@@ -383,7 +383,7 @@ sub render ($) { #{{{
                
                $links{$page}=[findlinks($content, $page)];
                
-               $content=linkify($content, $file);
+               $content=linkify($content, $page);
                $content=htmlize($type, $content);
                $content=finalize($content, $page);
                
@@ -420,6 +420,10 @@ sub lockwiki () { #{{{
        }
 } #}}}
 
+sub unlockwiki () { #{{{
+       close WIKILOCK;
+} #}}}
+
 sub loadindex () { #{{{
        open (IN, "$config{srcdir}/.ikiwiki/index") || return;
        while (<IN>) {
@@ -489,6 +493,7 @@ sub rcs_recentchanges ($) { #{{{
        my $num=shift;
        my @ret;
        
+       eval q{use CGI 'escapeHTML'};
        eval q{use Date::Parse};
        eval q{use Time::Duration};
        
@@ -504,7 +509,7 @@ sub rcs_recentchanges ($) { #{{{
                my $infoline=qr/^r(\d+)\s+\|\s+([^\s]+)\s+\|\s+(\d+-\d+-\d+\s+\d+:\d+:\d+\s+[-+]?\d+).*/;
                my $state='start';
                my ($rev, $user, $when, @pages, @message);
-               foreach (`LANG=C svn log -v '$svn_url'`) {
+               foreach (`LANG=C svn log --limit $num -v '$svn_url'`) {
                        chomp;
                        if ($state eq 'start' && /$div/) {
                                $state='header';
@@ -563,10 +568,9 @@ sub prune ($) { #{{{
 } #}}}
 
 sub refresh () { #{{{
-       # Find existing pages.
+       # find existing pages
        my %exists;
        my @files;
-       
        eval q{use File::Find};
        find({
                no_chdir => 1,
@@ -607,7 +611,7 @@ sub refresh () { #{{{
        foreach my $page (keys %oldpagemtime) {
                if (! $exists{$page}) {
                        debug("removing old page $page");
-                       push @del, $renderedfiles{$page};
+                       push @del, $pagesources{$page};
                        prune($config{destdir}."/".$renderedfiles{$page});
                        delete $renderedfiles{$page};
                        $oldpagemtime{$page}=0;
@@ -1031,7 +1035,17 @@ sub cgi_editpage ($$) { #{{{
                print $q->redirect("$config{url}/".htmlpage($page));
                return;
        }
-       if (! $form->submitted || ! $form->validate) {
+       elsif ($form->submitted eq "Preview") {
+               $form->tmpl_param("page_preview",
+                       htmlize($config{default_pageext},
+                               linkify($form->field('content'), $page)));
+       }
+       else {
+               $form->tmpl_param("page_preview", "");
+       }
+       
+       if (! $form->submitted || $form->submitted eq "Preview" || 
+           ! $form->validate) {
                if ($form->field("do") eq "create") {
                        if (exists $pagesources{lc($page)}) {
                                # hmm, someone else made the page in the
@@ -1069,21 +1083,23 @@ sub cgi_editpage ($$) { #{{{
                        $form->title("creating $page");
                }
                elsif ($form->field("do") eq "edit") {
-                       my $content="";
-                       if (exists $pagesources{lc($page)}) {
-                               $content=readfile("$config{srcdir}/$pagesources{lc($page)}");
-                               $content=~s/\n/\r\n/g;
+                       if (! length $form->field('content')) {
+                               my $content="";
+                               if (exists $pagesources{lc($page)}) {
+                                               $content=readfile("$config{srcdir}/$pagesources{lc($page)}");
+                                       $content=~s/\n/\r\n/g;
+                               }
+                               $form->field(name => "content", value => $content,
+                                       force => 1);
                        }
                        $form->tmpl_param("page_select", 0);
-                       $form->field(name => "content", value => $content,
-                               force => 1);
                        $form->field(name => "page", type => 'hidden');
                        $form->title("editing $page");
                }
                
                $form->tmpl_param("can_commit", $config{svn});
                $form->tmpl_param("indexlink", indexlink());
-               print $form->render(submit => ["Save Page", "Cancel"]);
+               print $form->render(submit => ["Save Page", "Preview", "Cancel"]);
        }
        else {
                # save page
@@ -1118,6 +1134,8 @@ sub cgi_editpage ($$) { #{{{
                        # presumably the commit will trigger an update
                        # of the wiki
                        rcs_commit($message);
+                       # prevent deadlock with post-commit hook
+                       unlockwiki();
                }
                else {
                        loadindex();