X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/5604901eac5b26f0417276371efbea06d3613799..773731743df52d2ef2d8ce93c095be981bb9bfc8:/ikiwiki diff --git a/ikiwiki b/ikiwiki index 38dae8f24..54589ec2e 100755 --- a/ikiwiki +++ b/ikiwiki @@ -13,7 +13,7 @@ my (%links, %oldlinks, %oldpagemtime, %renderedfiles, %pagesources); # Holds global config settings, also used by some modules. our %config=( #{{{ wiki_file_prune_regexp => qr{((^|/).svn/|\.\.|^\.|\/\.|\.html?$)}, - wiki_link_regexp => qr/\[\[([^\s]+)\]\]/, + wiki_link_regexp => qr/\[\[([^\s\]]+)\]\]/, wiki_file_regexp => qr/(^[-A-Za-z0-9_.:\/+]+$)/, verbose => 0, wikiname => "wiki", @@ -23,6 +23,7 @@ our %config=( #{{{ url => '', cgiurl => '', historyurl => '', + diffurl => '', anonok => 0, rebuild => 0, wrapper => undef, @@ -46,6 +47,7 @@ GetOptions( #{{{ "url=s" => \$config{url}, "cgiurl=s" => \$config{cgiurl}, "historyurl=s" => \$config{historyurl}, + "diffurl=s" => \$config{diffurl}, "exclude=s@" => sub { $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/; }, @@ -324,9 +326,10 @@ sub indexlink () { #{{{ return "$config{wikiname}"; } #}}} -sub finalize ($$) { #{{{ +sub finalize ($$$) { #{{{ my $content=shift; my $page=shift; + my $mtime=shift; my $title=basename($page); $title=~s/_/ /g; @@ -343,7 +346,7 @@ sub finalize ($$) { #{{{ if (length $config{historyurl}) { my $u=$config{historyurl}; - $u=~s/\[\[\]\]/$pagesources{$page}/g; + $u=~s/\[\[file\]\]/$pagesources{$page}/g; $template->param(historyurl => $u); } @@ -354,6 +357,7 @@ sub finalize ($$) { #{{{ content => $content, backlinks => [backlinks($page)], discussionlink => htmllink($page, "Discussion", 1, 1), + mtime => scalar(gmtime($mtime)), ); return $template->output; @@ -385,7 +389,8 @@ sub render ($) { #{{{ $content=linkify($content, $page); $content=htmlize($type, $content); - $content=finalize($content, $page); + $content=finalize($content, $page, + mtime("$config{srcdir}/$file")); check_overwrite("$config{destdir}/".htmlpage($page), $page); writefile("$config{destdir}/".htmlpage($page), $content); @@ -489,7 +494,7 @@ sub rcs_commit ($$$) { #{{{ # else since rcs_prepedit was called. my ($oldrev)=$rcstoken=~/^([0-9]+)$/; # untaint my $rev=svn_info("Revision", "$config{srcdir}/$file"); - if ($rev != $oldrev) { + if (defined $rev && defined $oldrev && $rev != $oldrev) { # Merge their changes into the file that we've # changed. chdir($config{srcdir}); # svn merge wants to be here @@ -501,7 +506,7 @@ sub rcs_commit ($$$) { #{{{ if (system("svn", "commit", "--quiet", "-m", possibly_foolish_untaint($message), - "$config{srcdir}/$file") != 0) { + "$config{srcdir}") != 0) { my $conflict=readfile("$config{srcdir}/$file"); if (system("svn", "revert", "--quiet", "$config{srcdir}/$file") != 0) { warn("svn revert failed\n"); @@ -567,9 +572,16 @@ sub rcs_recentchanges ($) { #{{{ $user=$2; $when=concise(ago(time - str2time($3))); } - elsif ($state eq 'header' && /^\s+[A-Z]\s+\Q$svn_base\E\/(.+)$/) { - push @pages, { link => htmllink("", pagename($1), 1) } - if length $1; + elsif ($state eq 'header' && /^\s+[A-Z]\s+\Q$svn_base\E\/([^ ]+)(?:$|\s)/) { + my $file=$1; + my $diffurl=$config{diffurl}; + $diffurl=~s/\[\[file\]\]/$file/g; + $diffurl=~s/\[\[r1\]\]/$rev - 1/eg; + $diffurl=~s/\[\[r2\]\]/$rev/g; + push @pages, { + link => htmllink("", pagename($file), 1), + diffurl => $diffurl, + } if length $file; } elsif ($state eq 'header' && /^$/) { $state='body'; @@ -589,7 +601,8 @@ sub rcs_recentchanges ($) { #{{{ user => htmllink("", $user, 1), committype => $committype, when => $when, message => [@message], - pages => [@pages] } if @pages; + pages => [@pages], + } if @pages; return @ret if @ret >= $num; $state='header'; @@ -762,6 +775,7 @@ sub gen_wrapper (@) { #{{{ push @params, "--url=$config{url}" if length $config{url}; push @params, "--cgiurl=$config{cgiurl}" if length $config{cgiurl}; push @params, "--historyurl=$config{historyurl}" if length $config{historyurl}; + push @params, "--diffurl=$config{diffurl}" if length $config{diffurl}; push @params, "--anonok" if $config{anonok}; my $params=join(" ", @params); my $call=''; @@ -1131,8 +1145,15 @@ sub cgi_editpage ($$) { #{{{ else { my $dir=$from."/"; $dir=~s![^/]+/$!!; + + if ($page eq 'discussion') { + $best_loc="$from/$page"; + } + else { + $best_loc=$dir.$page; + } + push @page_locs, $dir.$page; - $best_loc=$dir.$page; push @page_locs, "$from/$page"; while (length $dir) { $dir=~s![^/]+/$!!;