Photos
Blog
Projects
vanrenterghem.biz
projects
/
git.ikiwiki.info.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mention that pagespec_match returns an overloaded value
[git.ikiwiki.info.git]
/
IkiWiki.pm
diff --git
a/IkiWiki.pm
b/IkiWiki.pm
index 5563a03af7d028a88c184d8f2ac227284c475f52..97d84c9deb175b694bd303b10ff75fba6b95bb08 100644
(file)
--- a/
IkiWiki.pm
+++ b/
IkiWiki.pm
@@
-13,8
+13,8
@@
use open qw{:utf8 :std};
use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
%pagestate %wikistate %renderedfiles %oldrenderedfiles
use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
%pagestate %wikistate %renderedfiles %oldrenderedfiles
- %pagesources %destsources %depends %
hooks %forcerebuild
- %loaded_plugins};
+ %pagesources %destsources %depends %
depends_simple %hooks
+ %
forcerebuild %
loaded_plugins};
use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
@@
-33,6
+33,7
@@
use Memoize;
memoize("abs2rel");
memoize("pagespec_translate");
memoize("file_pruned");
memoize("abs2rel");
memoize("pagespec_translate");
memoize("file_pruned");
+memoize("template_file");
sub getsetup () {
wikiname => {
sub getsetup () {
wikiname => {
@@
-149,6
+150,13
@@
sub getsetup () {
safe => 0, # path
rebuild => 1,
},
safe => 0, # path
rebuild => 1,
},
+ templatedirs => {
+ type => "internal",
+ default => [],
+ description => "additional directories containing template files",
+ safe => 0,
+ rebuild => 0,
+ },
underlaydir => {
type => "string",
default => "$installdir/share/ikiwiki/basewiki",
underlaydir => {
type => "string",
default => "$installdir/share/ikiwiki/basewiki",
@@
-336,7
+344,7
@@
sub getsetup () {
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//, qr/(^|\/)_darcs\//,
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
qr/(^|\/)_MTN\//, qr/(^|\/)_darcs\//,
- qr/\.dpkg-tmp$/],
+ qr/
(^|\/)CVS\//, qr/
\.dpkg-tmp$/],
description => "regexps of source files to ignore",
safe => 0,
rebuild => 1,
description => "regexps of source files to ignore",
safe => 0,
rebuild => 1,
@@
-356,7
+364,7
@@
sub getsetup () {
},
web_commit_regexp => {
type => "internal",
},
web_commit_regexp => {
type => "internal",
- default => qr/^web commit (by (.*?(?=: |$))|from (
\d+\.\d+\.\d+\.\d+
)):?(.*)/,
+ default => qr/^web commit (by (.*?(?=: |$))|from (
[0-9a-fA-F:.]+[0-9a-fA-F]
)):?(.*)/,
description => "regexp to parse web commits from logs",
safe => 0,
rebuild => 0,
description => "regexp to parse web commits from logs",
safe => 0,
rebuild => 0,
@@
-536,12
+544,12
@@
sub loadplugins () {
}
if ($config{rcs}) {
}
if ($config{rcs}) {
- if (exists $
IkiWiki::
hooks{rcs}) {
+ if (exists $hooks{rcs}) {
error(gettext("cannot use multiple rcs plugins"));
}
loadplugin($config{rcs});
}
error(gettext("cannot use multiple rcs plugins"));
}
loadplugin($config{rcs});
}
- if (! exists $
IkiWiki::
hooks{rcs}) {
+ if (! exists $hooks{rcs}) {
loadplugin("norcs");
}
loadplugin("norcs");
}
@@
-1475,7
+1483,8
@@
sub loadindex () {
%oldrenderedfiles=%pagectime=();
if (! $config{rebuild}) {
%pagesources=%pagemtime=%oldlinks=%links=%depends=
%oldrenderedfiles=%pagectime=();
if (! $config{rebuild}) {
%pagesources=%pagemtime=%oldlinks=%links=%depends=
- %destsources=%renderedfiles=%pagecase=%pagestate=();
+ %destsources=%renderedfiles=%pagecase=%pagestate=
+ %depends_simple=();
}
my $in;
if (! open ($in, "<", "$config{wikistatedir}/indexdb")) {
}
my $in;
if (! open ($in, "<", "$config{wikistatedir}/indexdb")) {
@@
-1515,6
+1524,11
@@
sub loadindex () {
$links{$page}=$d->{links};
$oldlinks{$page}=[@{$d->{links}}];
}
$links{$page}=$d->{links};
$oldlinks{$page}=[@{$d->{links}}];
}
+ if (exists $d->{depends_simple}) {
+ $depends_simple{$page}={
+ map { $_ => 1 } @{$d->{depends_simple}}
+ };
+ }
if (exists $d->{dependslist}) {
$depends{$page}={
map { $_ => 1 } @{$d->{dependslist}}
if (exists $d->{dependslist}) {
$depends{$page}={
map { $_ => 1 } @{$d->{dependslist}}
@@
-1570,6
+1584,10
@@
sub saveindex () {
$index{page}{$src}{dependslist} = [ keys %{$depends{$page}} ];
}
$index{page}{$src}{dependslist} = [ keys %{$depends{$page}} ];
}
+ if (exists $depends_simple{$page}) {
+ $index{page}{$src}{depends_simple} = [ keys %{$depends_simple{$page}} ];
+ }
+
if (exists $pagestate{$page}) {
foreach my $id (@hookids) {
foreach my $key (keys %{$pagestate{$page}{$id}}) {
if (exists $pagestate{$page}) {
foreach my $id (@hookids) {
foreach my $key (keys %{$pagestate{$page}{$id}}) {
@@
-1599,7
+1617,8
@@
sub saveindex () {
sub template_file ($) {
my $template=shift;
sub template_file ($) {
my $template=shift;
- foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") {
+ foreach my $dir ($config{templatedir}, @{$config{templatedirs}},
+ "$installdir/share/ikiwiki/templates") {
return "$dir/$template" if -e "$dir/$template";
}
return;
return "$dir/$template" if -e "$dir/$template";
}
return;
@@
-1738,6
+1757,13
@@
sub add_depends ($$) {
my $page=shift;
my $pagespec=shift;
my $page=shift;
my $pagespec=shift;
+ if ($pagespec =~ /$config{wiki_file_regexp}/ &&
+ $pagespec !~ /[\s*?()!]/) {
+ # a simple dependency, which can be matched by string eq
+ $depends_simple{$page}{lc $pagespec} = 1;
+ return 1;
+ }
+
return unless pagespec_valid($pagespec);
$depends{$page}{$pagespec} = 1;
return unless pagespec_valid($pagespec);
$depends{$page}{$pagespec} = 1;
@@
-1844,7
+1870,7
@@
sub pagespec_translate ($) {
[^\s()]+ # any other text
)
\s* # ignore whitespace
[^\s()]+ # any other text
)
\s* # ignore whitespace
- }
i
gx) {
+ }gx) {
my $word=$1;
if (lc $word eq 'and') {
$code.=' &&';
my $word=$1;
if (lc $word eq 'and') {
$code.=' &&';
@@
-2026,10
+2052,10
@@
sub match_link ($$;@) {
else {
return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
if match_glob($p, $link, %params);
else {
return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
if match_glob($p, $link, %params);
-
$p=~s/^\//
/;
+
my ($p_rel)=$p=~/^\/?(.*)
/;
$link=~s/^\///;
$link=~s/^\///;
- return IkiWiki::SuccessReason->new("$page links to page $p matching $link")
- if match_glob($p, $link, %params);
+ return IkiWiki::SuccessReason->new("$page links to page $p
_rel
matching $link")
+ if match_glob($p
_rel
, $link, %params);
}
}
return IkiWiki::FailReason->new("$page does not link to $link");
}
}
return IkiWiki::FailReason->new("$page does not link to $link");