and undef if a rebuild could be needed in some circumstances, but is not
strictly required.
+### targetpage
+
+ hook(type => "targetpage", id => "foo", call => \&targetpage);
+
+This hook can be used to override the name of the file a page should
+be compiled into.
+
+It should return the target filename.
+
+### tweakurlpath
+
+ hook(type => "tweakurlpath", id => "foo", call => \&tweakurlpath);
+
+This hook can be used to modify the internal urls generated by
+ikiwiki; it is run just after ikiwiki has removed the trailing
+`index.html`, in case `usedirs` is enabled.
+
+It should return the modified url.
+
+### tweakbestlink
+
+ hook(type => "tweakbestlink", id => "foo", call => \&tweakbestlink);
+
+This hook can be used to modify the page returned by `bestlink`. It is
+passed named parameters `page` and `link`. These are, respectively,
+the page where the link will appear and the link ikiwiki would choose
+as the best one, if no `tweakbestlink` hook was in effect.
+
+It should return the modified link.
+
## Plugin interface
To import the ikiwiki plugin interface:
#### `rcs_receive()`
This is called when ikiwiki is running as a pre-receive hook (or
-equivilant), and is testing if changes pushed into the RCS from an
+equivalent), and is testing if changes pushed into the RCS from an
untrusted user should be accepted. This is optional, and doesn't make
sense to implement for all RCSs.
It should examine the incoming changes, and do any sanity
checks that are appropriate for the RCS to limit changes to safe file adds,
-removes, and renames. If something bad is found, it should exit
+removes, and changes. If something bad is found, it should exit
nonzero, to abort the push. Otherwise, it should return a list of
files that were changed, in the form:
{
file => # name of file that was changed
action => # either "add", "change", or "remove"
+ path => # temp file containing the new file content, only
+ # needed for "add"/"change", and only if the file
+ # is an attachment, not a page
}
The list will then be checked to make sure that each change is one that