URI escape filename when generating the diffurl.
authorJoey Hess <joey@kitenet.net>
Tue, 13 Mar 2012 15:49:29 +0000 (11:49 -0400)
committerJoey Hess <joey@kitenet.net>
Tue, 13 Mar 2012 15:50:39 +0000 (11:50 -0400)
ikiwiki source files can contain at least one character that
needs to be escaped in an url: +

IkiWiki/Plugin/bzr.pm
IkiWiki/Plugin/cvs.pm
IkiWiki/Plugin/darcs.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/mercurial.pm
IkiWiki/Plugin/monotone.pm
IkiWiki/Plugin/svn.pm
IkiWiki/Plugin/tla.pm
debian/changelog

index 3bc4ea8dd69b1d67329ec1db81bdd2e4ac9d19cf..72552abccaa96212c5f71d48cefcbb1b21e4498b 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 use strict;
 use IkiWiki;
 use Encode;
+use URI::Escape q{uri_escape_utf8};
 use open qw{:utf8 :std};
 
 sub import {
@@ -242,8 +243,10 @@ sub rcs_recentchanges ($) {
                        # Skip source name in renames
                        $filename =~ s/^.* => //;
 
+                       my $efilename = uri_escape_utf8($filename);
+
                        my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : "";
-                       $diffurl =~ s/\[\[file\]\]/$filename/go;
+                       $diffurl =~ s/\[\[file\]\]/$efilename/go;
                        $diffurl =~ s/\[\[file-id\]\]/$fileid/go;
                        $diffurl =~ s/\[\[r2\]\]/$info->{revno}/go;
 
index 0a6cbfaf6358f7a53014260f71c69ae5820641dc..788f5116786f291d1543944c55522b6a758439e7 100644 (file)
@@ -33,6 +33,7 @@ use warnings;
 use strict;
 use IkiWiki;
 
+use URI::Escape q{uri_escape_utf8};
 use File::chdir;
 
 
@@ -315,7 +316,8 @@ sub rcs_recentchanges ($) {
                        $oldrev =~ s/INITIAL/0/;
                        $newrev =~ s/\(DEAD\)//;
                        my $diffurl = defined $config{diffurl} ? $config{diffurl} : "";
-                       $diffurl=~s/\[\[file\]\]/$page/g;
+                       my $epage = uri_escape_utf8($page);
+                       $diffurl=~s/\[\[file\]\]/$epage/g;
                        $diffurl=~s/\[\[r1\]\]/$oldrev/g;
                        $diffurl=~s/\[\[r2\]\]/$newrev/g;
                        unshift @pages, {
index 1313041e78fe9c61588c04a53bae58e4e22d33d5..646f65df10688087decd275e0be6109203573aae 100644 (file)
@@ -3,6 +3,7 @@ package IkiWiki::Plugin::darcs;
 
 use warnings;
 use strict;
+use URI::Escape q{uri_escape_utf8};
 use IkiWiki;
 
 sub import {
@@ -336,7 +337,8 @@ sub rcs_recentchanges ($) {
 
                foreach my $f (@files) {
                        my $d = defined $config{'diffurl'} ? $config{'diffurl'} : "";
-                       $d =~ s/\[\[file\]\]/$f/go;
+                       my $ef = uri_escape_utf8($f);
+                       $d =~ s/\[\[file\]\]/$ef/go;
                        $d =~ s/\[\[hash\]\]/$hash/go;
 
                        push @pg, {
index 3dd910cd5a5c29df8705238cc03a224e2ad2e7d4..535cd5fe0f64d23d46a233a388264f88912e1c6d 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 use strict;
 use IkiWiki;
 use Encode;
+use URI::Escape q{uri_escape_utf8};
 use open qw{:utf8 :std};
 
 my $sha1_pattern     = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums
@@ -617,9 +618,10 @@ sub rcs_recentchanges ($) {
                my @pages;
                foreach my $detail (@{ $ci->{'details'} }) {
                        my $file = $detail->{'file'};
+                       my $efile = uri_escape_utf8($file);
 
                        my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : "";
-                       $diffurl =~ s/\[\[file\]\]/$file/go;
+                       $diffurl =~ s/\[\[file\]\]/$efile/go;
                        $diffurl =~ s/\[\[sha1_parent\]\]/$ci->{'parent'}/go;
                        $diffurl =~ s/\[\[sha1_from\]\]/$detail->{'sha1_from'}/go;
                        $diffurl =~ s/\[\[sha1_to\]\]/$detail->{'sha1_to'}/go;
index b7fe01485aff129c3f672b8995bfedede2e959fb..8da4ceb07ada8f026e908be1004d060e9e21adeb 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 use strict;
 use IkiWiki;
 use Encode;
+use URI::Escape q{uri_escape_utf8};
 use open qw{:utf8 :std};
 
 sub import {
@@ -265,7 +266,8 @@ sub rcs_recentchanges ($) {
 
                foreach my $file (split / /,$info->{files}) {
                        my $diffurl = defined $config{diffurl} ? $config{'diffurl'} : "";
-                       $diffurl =~ s/\[\[file\]\]/$file/go;
+                       my $efile = uri_escape_utf8($file);
+                       $diffurl =~ s/\[\[file\]\]/$efile/go;
                        $diffurl =~ s/\[\[r2\]\]/$info->{changeset}/go;
 
                        push @pages, {
index 1d89e3f6b1cd6d9fc887ae539a97b17301ac5e62..105627814b793fa5ff868ceff7c07e00c3dd9078 100644 (file)
@@ -7,6 +7,7 @@ use IkiWiki;
 use Monotone;
 use Date::Parse qw(str2time);
 use Date::Format qw(time2str);
+use URI::Escape q{uri_escape_utf8};
 
 my $sha1_pattern = qr/[0-9a-fA-F]{40}/; # pattern to validate sha1sums
 my $mtn_version = undef;
@@ -593,7 +594,8 @@ sub rcs_recentchanges ($) {
                                my $diffurl=$config{diffurl};
                                $diffurl=~s/\[\[r1\]\]/$parent/g;
                                $diffurl=~s/\[\[r2\]\]/$rev/g;
-                               $diffurl=~s/\[\[file\]\]/$file/g;
+                               my $efile = uri_escape_utf8($file);
+                               $diffurl=~s/\[\[file\]\]/$efile/g;
                                push @pages, {
                                        page => pagename($file),
                                        diffurl => $diffurl,
index 8824a6ce0a60311cac8ec304258b545e661eea83..fd11f2c637597d98915f6a5bc29fc03ff6d0c572 100644 (file)
@@ -5,6 +5,7 @@ use warnings;
 use strict;
 use IkiWiki;
 use POSIX qw(setlocale LC_CTYPE);
+use URI::Escape q{uri_escape_utf8};
 
 sub import {
        hook(type => "checkconfig", id => "svn", call => \&checkconfig);
@@ -292,7 +293,8 @@ sub rcs_recentchanges ($) {
                        }
 
                        my $diffurl=defined $config{diffurl} ? $config{diffurl} : "";
-                       $diffurl=~s/\[\[file\]\]/$file/g;
+                       my $efile = uri_escape_utf8($file);
+                       $diffurl=~s/\[\[file\]\]/$efile/g;
                        $diffurl=~s/\[\[r1\]\]/$rev - 1/eg;
                        $diffurl=~s/\[\[r2\]\]/$rev/g;
 
index da4385446412635d3b4843e4b439e07cd399195b..11be248e8da9d90fe050da1ad57f643a7ae0cdf1 100644 (file)
@@ -4,6 +4,7 @@ package IkiWiki::Plugin::tla;
 use warnings;
 use strict;
 use IkiWiki;
+use URI::Escape q{uri_escape_utf8};
 
 sub import {
        hook(type => "checkconfig", id => "tla", call => \&checkconfig);
@@ -224,7 +225,8 @@ sub rcs_recentchanges ($) {
 
                foreach my $file (@paths) {
                        my $diffurl=defined $config{diffurl} ? $config{diffurl} : "";
-                       $diffurl=~s/\[\[file\]\]/$file/g;
+                       my $efile = uri_escape_utf8($file);
+                       $diffurl=~s/\[\[file\]\]/$efile/g;
                        $diffurl=~s/\[\[rev\]\]/$change/g;
                        push @pages, {
                                page => pagename($file),
index ceefb64e3d27af9482fa2cbeaff2d9d3010ec6b4..d6b71eaa3f39cb95d826f6684b6601d6938006a0 100644 (file)
@@ -12,6 +12,7 @@ ikiwiki (3.20120203) UNRELEASED; urgency=low
     Thanks to Blars Blarson and Antoine Beaupré, as well as the worldwide
     OpenStreetMap community for this utter awesomeness.
   * Add a few missing jquery UI icons to attachment upload widget underlay.
+  * URI escape filename when generating the diffurl.
 
  -- Joey Hess <joeyh@debian.org>  Wed, 08 Feb 2012 16:07:00 -0400