From d52774dd458059ba1442fdac1daf648dc4f228de Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 31 Dec 2013 01:27:21 +0000 Subject: [PATCH] Do not UTF8-escape "/" in Git's diffurl: cgit does not support this. --- IkiWiki/Plugin/git.pm | 4 +++- t/git.t | 25 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/IkiWiki/Plugin/git.pm b/IkiWiki/Plugin/git.pm index 77c0678bc..9e67a36ee 100644 --- a/IkiWiki/Plugin/git.pm +++ b/IkiWiki/Plugin/git.pm @@ -660,7 +660,9 @@ sub rcs_recentchanges ($) { my @pages; foreach my $detail (@{ $ci->{'details'} }) { my $file = $detail->{'file'}; - my $efile = uri_escape_utf8($file); + my $efile = join('/', + map { uri_escape_utf8($_) } split('/', $file) + ); my $diffurl = defined $config{'diffurl'} ? $config{'diffurl'} : ""; $diffurl =~ s/\[\[file\]\]/$efile/go; diff --git a/t/git.t b/t/git.t index 6d847dfb0..0396ae065 100755 --- a/t/git.t +++ b/t/git.t @@ -16,13 +16,14 @@ BEGIN { die $@; } } -use Test::More tests => 18; +use Test::More tests => 22; BEGIN { use_ok("IkiWiki"); } %config=IkiWiki::defaultconfig(); $config{rcs} = "git"; $config{srcdir} = "$dir/src"; +$config{diffurl} = '/nonexistent/cgit/plain/[[file]]'; IkiWiki::loadplugins(); IkiWiki::checkconfig(); @@ -94,4 +95,26 @@ is($changes[0]{pages}[0]{"page"}, "newdir/test5"); IkiWiki::rcs_remove("newdir/test5.mdwn"); IkiWiki::rcs_commit_staged(message => "Remove the 5th page"); +# diffurl escaping +ok(mkdir($config{srcdir}."/diffurl_dir")); +my $test3 = readfile("t/test1.mdwn"); +writefile('test3.mdwn', $config{srcdir}."/diffurl_dir", $test3); +IkiWiki::rcs_add("diffurl_dir/test3.mdwn"); +IkiWiki::rcs_commit( + file => "diffurl_dir/test3.mdwn", + message => "Added a page in diffurl_dir", + token => "moo", +); + +@changes = IkiWiki::rcs_recentchanges(5); + +is($#changes, 4); +is($changes[0]{pages}[0]{"page"}, "diffurl_dir/test3"); + +unlike( + $changes[0]{pages}[0]{"diffurl"}, + qr{%2F}m, + q{path separators are preserved when UTF-8scaping filename} +); + system "rm -rf $dir";