aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-11-09 15:31:57 -0500
committerJoey Hess <joey@kodama.kitenet.net>2008-11-09 15:31:57 -0500
commit7f80e52543891690e3136855bc29917e6b431aba (patch)
tree6c041065f96d607803f9d1f4a17f12cfa61e5312
parentd552b2843020283b019729caf588f2e60b3a5396 (diff)
downloadikiwiki-7f80e52543891690e3136855bc29917e6b431aba.tar
ikiwiki-7f80e52543891690e3136855bc29917e6b431aba.tar.gz
Fix the link() pagespec to match links that are internally recorded as absolute.
This fixes a problem exposed by the recent change to tags (a2839de9362187b67b0e3a564461e272e64fd9b4). That recorded tag links as absolute by including a leading slash in the link. The same could also be done with an absolute wikilink. In either case, link() would not match such links, unless the leading slash was included in the link to match. But that's not right, because pagespecs match absolute by default. So strip the leading slash. Note that to keep any existing `link(/foo)` pagespecs working after this change, the leading slash is removed from there, too.
-rw-r--r--IkiWiki.pm4
-rw-r--r--debian/changelog2
-rwxr-xr-xt/pagespec_match.t5
3 files changed, 10 insertions, 1 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 1aaa4d33c..dc9b66344 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -1901,6 +1901,10 @@ sub match_link ($$;@) { #{{{
else {
return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
if match_glob($p, $link, %params);
+ $p=~s/^\///;
+ $link=~s/^\///;
+ return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
+ if match_glob($p, $link, %params);
}
}
return IkiWiki::FailReason->new("$page does not link to $link");
diff --git a/debian/changelog b/debian/changelog
index 424c99ac4..6c068806c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -7,6 +7,8 @@ ikiwiki (2.69) UNRELEASED; urgency=low
* meta: Plugin is now enabled by default since the basewiki uses it.
* txt: Do not encode quotes when filtering the txt, as that broke
later parsing of any directives on the page.
+ * Fix the link() pagespec to match links that are internally recorded as
+ absolute.
-- Joey Hess <joeyh@debian.org> Thu, 06 Nov 2008 16:01:00 -0500
diff --git a/t/pagespec_match.t b/t/pagespec_match.t
index c61d16122..7c0ac235b 100755
--- a/t/pagespec_match.t
+++ b/t/pagespec_match.t
@@ -1,7 +1,7 @@
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More tests => 56;
+use Test::More tests => 58;
BEGIN { use_ok("IkiWiki"); }
@@ -40,6 +40,7 @@ $links{"bugs/bar"}=[qw{done}];
$links{"done"}=[];
$links{"examples/softwaresite/bugs/fails_to_frobnicate"}=[qw{done}];
$links{"examples/softwaresite/bugs/done"}=[];
+$links{"ook"}=[qw{/blog/tags/foo}];
ok(pagespec_match("foo", "link(bar)"), "link");
ok(pagespec_match("foo", "link(ba?)"), "glob link");
@@ -55,6 +56,8 @@ ok(pagespec_match("bar", "backlink(foo)"), "backlink");
ok(! pagespec_match("quux", "backlink(foo)"), "failed backlink");
ok(! pagespec_match("bar", ""), "empty pagespec should match nothing");
ok(! pagespec_match("bar", " "), "blank pagespec should match nothing");
+ok(pagespec_match("ook", "link(blog/tags/foo)"), "link internal absolute success");
+ok(pagespec_match("ook", "link(/blog/tags/foo)"), "link explicit absolute success");
$IkiWiki::pagectime{foo}=1154532692; # Wed Aug 2 11:26 EDT 2006
$IkiWiki::pagectime{bar}=1154532695; # after