diff --git a/Makefile.PL b/Makefile.PL index 5ca5e1259..e5d05dea4 100755 --- a/Makefile.PL +++ b/Makefile.PL @@ -25,7 +25,7 @@ extra_install: cp templates/* $(PREFIX)/share/ikiwiki/templates install -d $(PREFIX)/share/ikiwiki/basewiki - cp basewiki/* $(PREFIX)/share/ikiwiki/basewiki + cp -a basewiki/* $(PREFIX)/share/ikiwiki/basewiki } } diff --git a/doc/ikiwiki.setup b/doc/ikiwiki.setup index 7167e6e57..d0a2829a1 100644 --- a/doc/ikiwiki.setup +++ b/doc/ikiwiki.setup @@ -15,7 +15,8 @@ use IkiWiki::Setup::Standard { url => "http://myhost/wiki", cgiurl => "http://myhost/ikiwiki.cgi", - #historyurl => "http://svn.myhost/trunk/[[]]", + #historyurl => "http://svn.myhost/trunk/[[file]]", + #diffurl => "http://svn.someurl/trunk/[[file]]?root=wiki&r1=[[r1]]&r2=[[r2]]", # Whether to integrate with svn. svn => 1, diff --git a/doc/todo.mdwn b/doc/todo.mdwn index 3e2374a4f..39d4604d7 100644 --- a/doc/todo.mdwn +++ b/doc/todo.mdwn @@ -87,11 +87,6 @@ design goals for ikiwiki: keeping as much markup as possible out of the wiki and not adding nonstandard markup. And it's not significantly hard to type "--\[[Joey]]", and as to the date, we do have page history. -## recentchanges links to commit diffs - -Would take a bit more viewcvs integration, let the be a "[diff]" link in -recentchanges that goes to the diff for any listed change. - ## recentchanges more than 100 Possibly add "next 100" link to it, but OTOH, you can just use svn log if diff --git a/doc/usage.mdwn b/doc/usage.mdwn index 75e3aa246..debe04e1f 100644 --- a/doc/usage.mdwn +++ b/doc/usage.mdwn @@ -76,9 +76,18 @@ flags such as --verbose can be negated with --no-verbose. Specifies the url to the ikiwiki [[CGI]] script [[wrapper]]. Required when building the wiki for links to the cgi script to be generated. -* --historyurl http://svn.someurl/trunk/[[]]?root=wiki +* --historyurl http://svn.someurl/trunk/\[[file]]?root=wiki - Specifies the url to link to for page history browsing. In the url, "[[]]" is replaced with the page to browse. It's common to use [[ViewCVS]] for this. + Specifies the url to link to for page history browsing. In the url, + "\[[file]]" is replaced with the file to browse. It's common to use + [[ViewCVS]] for this. + +* --diffurl http://svn.someurl/trunk/\[[file]]?root=wiki&r1=\[[r1]]&r2=\[[r2]] + + Specifies the url to link to for a diff of changes to a page. In the url, + "\[[file]]" is replaced with the file to browse, "\[[r1]]" is the old + revision of the page, and "\[[r2]]" is the new revision. It's common to use + [[ViewCVS]] for this. * --exclude regexp diff --git a/ikiwiki b/ikiwiki index 167b9d43a..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]/; }, @@ -344,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); } @@ -571,8 +573,15 @@ sub rcs_recentchanges ($) { #{{{ $when=concise(ago(time - str2time($3))); } elsif ($state eq 'header' && /^\s+[A-Z]\s+\Q$svn_base\E\/([^ ]+)(?:$|\s)/) { - push @pages, { link => htmllink("", pagename($1), 1) } - if length $1; + 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'; @@ -592,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'; @@ -765,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=''; diff --git a/mdwn2man b/mdwn2man index 13b1b84a8..57c41c865 100755 --- a/mdwn2man +++ b/mdwn2man @@ -4,12 +4,11 @@ print ".TH ikiwiki 1\n"; while (<>) { + s{(\\?)\[\[([^\s\]]+)\]\]}{$1 ? "[[$2]]" : $2}eg; s/^#\s/.SH /; s/^\s+//; s/^Warning:.*//g; s/^$/.PP\n/; - s/\[\[//g; - s/\]\]//g; s/\`//g; s/^\*\s+(.*)/.IP "$1"/; next if $_ eq ".PP\n" && $skippara; diff --git a/templates/recentchanges.tmpl b/templates/recentchanges.tmpl index 3dc9fc1be..b42975e95 100644 --- a/templates/recentchanges.tmpl +++ b/templates/recentchanges.tmpl @@ -13,6 +13,9 @@