aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG15
-rw-r--r--IkiWiki/Plugin/po.pm50
-rw-r--r--doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn3
-rwxr-xr-xt/po.t38
4 files changed, 19 insertions, 87 deletions
diff --git a/CHANGELOG b/CHANGELOG
index ad37e72e8..5237ee7b8 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,18 @@
+ikiwiki (3.20190208) UNRELEASED; urgency=medium
+
+ * po: Always filter .po files.
+ The po plugin in previous ikiwiki releases made the second and
+ subsequent filter call per (page, destpage) pair into a no-op,
+ apparently in an attempt to prevent *recursive* filtering (which as
+ far as we can tell can't happen anyway), with the undesired effect
+ of interpreting the raw .po file as page content (e.g. Markdown)
+ if it was inlined into the same page twice, which is apparently
+ something that tails.org does. Simplify this by deleting the code
+ that prevented repeated filtering. Thanks, intrigeri
+ (Closes: #911356)
+
+ -- Simon McVittie <smcv@debian.org> Sun, 24 Feb 2019 17:11:39 +0000
+
ikiwiki (3.20190207) upstream; urgency=medium
[ Amitai Schleier ]
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 418e8e58a..13b98b739 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -51,7 +51,6 @@ sub import {
hook(type => "checkcontent", id => "po", call => \&checkcontent);
hook(type => "canremove", id => "po", call => \&canremove);
hook(type => "canrename", id => "po", call => \&canrename);
- hook(type => "editcontent", id => "po", call => \&editcontent);
hook(type => "formbuilder_setup", id => "po", call => \&formbuilder_setup, last => 1);
hook(type => "formbuilder", id => "po", call => \&formbuilder);
@@ -303,9 +302,8 @@ sub filter (@) {
my $page = $params{page};
my $destpage = $params{destpage};
my $content = $params{content};
- if (istranslation($page) && ! alreadyfiltered($page, $destpage)) {
+ if (istranslation($page)) {
$content = po_to_markup($page, $content);
- setalreadyfiltered($page, $destpage);
}
return $content;
}
@@ -520,15 +518,6 @@ sub canrename (@) {
return undef;
}
-# As we're previewing or saving a page, the content may have
-# changed, so tell the next filter() invocation it must not be lazy.
-sub editcontent () {
- my %params=@_;
-
- unsetalreadyfiltered($params{page}, $params{page});
- return $params{content};
-}
-
sub formbuilder_setup (@) {
my %params=@_;
my $form=$params{form};
@@ -737,42 +726,6 @@ sub myisselflink ($$) {
}
# ,----
-# | Blackboxes for private data
-# `----
-
-{
- my %filtered;
-
- sub alreadyfiltered($$) {
- my $page=shift;
- my $destpage=shift;
-
- return exists $filtered{$page}{$destpage}
- && $filtered{$page}{$destpage} eq 1;
- }
-
- sub setalreadyfiltered($$) {
- my $page=shift;
- my $destpage=shift;
-
- $filtered{$page}{$destpage}=1;
- }
-
- sub unsetalreadyfiltered($$) {
- my $page=shift;
- my $destpage=shift;
-
- if (exists $filtered{$page}{$destpage}) {
- delete $filtered{$page}{$destpage};
- }
- }
-
- sub resetalreadyfiltered() {
- undef %filtered;
- }
-}
-
-# ,----
# | Helper functions
# `----
@@ -1146,7 +1099,6 @@ sub commit_and_refresh ($) {
IkiWiki::rcs_update();
}
# Reinitialize module's private variables.
- resetalreadyfiltered();
resettranslationscache();
flushmemoizecache();
# Trigger a wiki refresh.
diff --git a/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn b/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn
index a926135b0..26d3717b9 100644
--- a/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn
+++ b/doc/bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content.mdwn
@@ -177,3 +177,6 @@ be resolved by renaming.
If it's valid to remove the `alreadyfiltered` mechanism, my
`wip/po-filter-every-time` branch does that. Please test?
+
+> intrigeri says [this change works as intended on tails.org](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=911356#41),
+> so I've applied it. [[done]] --[[smcv]]
diff --git a/t/po.t b/t/po.t
index 82f9e2078..ccb508bef 100755
--- a/t/po.t
+++ b/t/po.t
@@ -447,25 +447,10 @@ like($output{'debian911356.fr'}, qr{
\s*
<p>Entre\sles\sinlines</p>
\s*
- .* # TODO: This paragraph gets mangled (Debian #911356)
- \s*
- <p>Après\sles\sinlines</p>
-}sx);
-
-TODO: {
-local $TODO = "Debian bug #911356";
-like($output{'debian911356.fr'}, qr{
- <p>Avant\sla\spremière\sinline</p>
- \s*
- <p>Contenu\sfrançais</p>
- \s*
- <p>Entre\sles\sinlines</p>
- \s*
<p>Contenu\sfrançais</p>
\s*
<p>Après\sles\sinlines</p>
}sx);
-};
# Variation of Debian #911356 without using raw inlines.
like($output{debian911356ish}, qr{
@@ -511,28 +496,6 @@ like($output{'debian911356ish.fr'}, qr{
\s*
<p>Entre\sles\sinlines</p>
\s*
- .* # TODO: This paragraph gets mangled (Debian #911356)
- \s*
- <p>Après\sles\sinlines</p>
-}sx);
-
-TODO: {
-local $TODO = "Debian bug #911356";
-like($output{'debian911356ish.fr'}, qr{
- <p>Avant\sla\spremière\sinline</p>
- \s*
- <!--feedlinks-->
- \s*
- <div\sclass="inlinecontent">
- \s*
- <h6>debian911356-inlined\.fr</h6>
- \s*
- <p>Contenu\sfrançais</p>
- \s*
- </div><!--inlinecontent-->
- \s*
- <p>Entre\sles\sinlines</p>
- \s*
<!--feedlinks-->
\s*
<div\sclass="inlinecontent">
@@ -545,6 +508,5 @@ like($output{'debian911356ish.fr'}, qr{
\s*
<p>Après\sles\sinlines</p>
}sx);
-};
done_testing;