summaryrefslogtreecommitdiff
path: root/IkiWiki.pm
AgeCommit message (Collapse)Author
2010-03-28don't check $@ after pagespec_translateJoey Hess
pagespec_translate may set $@ if it fails to parse a pagespec, but due to memoization, this is not reliable. If a memoized call is repeated, and $@ is already set for some other reason previously, it will remain set through the call to pagespec_translate. Instead, just check if pagespec_translate returns undef.
2010-03-26Fix incorrect influence info returned by a failing link() pagespec, that ↵Joey Hess
could lead to bad dependency handling in certian situations.
2010-03-25Reimplement extensible sorting mechanisms, in the same way as pagespecsSimon McVittie
2010-03-24Allow sorting to be combined and/or reversedSimon McVittie
2010-03-24Allow hooks to add sorting functions to pagespec_match_listSimon McVittie
2010-03-19shorten setuptypeJoey Hess
2010-03-19allow multiple setup file types, and support safe parsingJoey Hess
Finally removed the last hardcoding of IkiWiki::Setup::Standard. Take the first "IkiWiki::Setup::*" in the setup file to define the setuptype, and remember that type to use in dumping later. (But it can be overridden using --set, etc.) Also, support setup file types that are not evaled.
2010-03-19audited use POSIXJoey Hess
The POSIX perl module exports a huge number of functions by default, so make sure all imports are qualified. (And remove one that was not necessary.)
2010-03-17add Makefile to exclude exampleJoey Hess
2010-03-17set exclude example to match *.private and improve its descriptionJoey Hess
2010-03-14slight optimisation to file_prunedJoey Hess
Precompile the regexp, rather than rebuilding on every call.
2010-03-14Add a include setting, which can be used to make ikiwiki process wiki source ↵Joey Hess
files, such as .htaccess, that would normally be skipped for security or other reasons. Closes: #447267 (Thanks to Aaron Wilson for the original patch.)
2010-03-13Improve openid url munging; do not display anchors and cgi parameters, as ↵Joey Hess
used by yahoo and google urls.
2010-02-28Add new --clean option; this makes ikiwiki remove all built files in the ↵Joey Hess
destdir, as well as wrappers and the .ikiwiki directory.
2010-02-26Loosen regexp, to allow empty quoted parameters in directives.Joey Hess
2010-02-14add ngettext support & optimize gettext handlingJoey Hess
As I was adding ngettext support, I realized I could optimize the gettext functions by memoizing the creation of the gettext object. Note that the object creation is still deferred until a gettext function is called, to avoid unnecessary startup penalties on code paths that do not need gettext. A side benefit is that separate stub functions are no longer needed to handle the C language case.
2010-02-11Allow globs to be used in user() pagespecs.Joey Hess
2010-02-11httpauth: Add httpauth_pagespec setting that can be used to limit pages to ↵Joey Hess
only being edited via users authed with httpauth.
2010-02-06update comment re openid library versionJoey Hess
2010-02-04factor out a userpage functionJoey Hess
Not yet exported, as only 4 quite core plugins use it.
2010-02-04remove userlink()Joey Hess
That was dead code; changes to lockedit and recentchanges removed the last callers.
2010-02-03Revert "Make srcfile() return undef, if the file isn't there."David Riebenbauer
This reverts commit 1bde208ec9b915db0187030c33450b5accb4892c.
2010-02-02Export add_autofile() for use in Plugins.David Riebenbauer
2010-02-02Revert the effects of find_del_files() for (re)autoadded files.David Riebenbauer
This also means that if autoadded files are deleted they will just be recreated.
2010-02-02Add a function add_autofiles().David Riebenbauer
The objective is to provide a sensible way to let plugins add files during the "scan stage" of the build. Currently does a little verification and adds the file to the global array @add_autofiles.
2010-02-02Make srcfile() return undef, if the file isn't there.David Riebenbauer
This has the advantage that it's now possible to check for the existence of a sourcefile with that function.
2009-12-14fix typoJoey Hess
This was probably not noticed because it only results in a warning, and in the checkcontent diff having some unchanged lines in it.
2009-11-30fix bestlink to not return just-deleted pagesJoey Hess
bestlink was looking at whether %links existed for a page in order to tell if the page exists, but just-deleted pages still have entries in there (for reasons it may be best not to explore). So bestlink would return just-deleted pages. Instead, make bestlink use %pagesources. Also, when finding a deleted page, %pagecase was not cleared of that page. This, again, made bestlink return just-deleted pages. Now that is cleared. Fixing bestlink exposed another issue though. The backlink calculation code uses bestlink. So when a page was deleted, no backlinks to it are found, and pages that really did backlink to it were not updated, and had broken links. To fix that, the code that actually removes deleted pages had to be split out from find_del_files, so it can run a bit later. It is run just after backlinks are calculated. This way, backlink calculation still sees the deleted pages, but everything afterwards does not. However, it does not address the original bug report that started this whole thing, [[bugs/bestlink_returns_deleted_pages]]. Because there bestlink is run in the needsbuild hook. And that happens before backlink calculation, and so bestlink still returns deleted pages then. Also in the scan hook. If bestlink needs to work consistently during those hooks, a more involved fix will be needed.
2009-11-26calendar: Add title attributes for all links in the calendars.Joey Hess
2009-11-26htmllink: allow a title attribute to be specifiedJoey Hess
2009-10-13remove debugging and cruftJoey Hess
2009-10-13influence blocker implementationJoey Hess
This avoids unnecessary influences being recorded from pagespecs such as "link(done) and bugs/*", when a page cannot ever possibly match. A pagespec term that returns a value without influence is an influence blocker. If such a blocker has a false value (possibly due to being negated) and is ANDed with another term, it blocks that term's influence from propigating out. If the term is ORed, or has a true value, it does not block influence. (Consider "link(done) or bugs/*" and "link(done) and !nosuchpage") In the implementation in merge_influence, I had to be careful to never negate $this or $other when testing if they are an influence blocker, since negation mutates the object. Thus the slightly weird if statement.
2009-10-13match_link: dynamic influence needed for page that currently has no linksJoey Hess
2009-10-09add_depends: optimise influence calculationJoey Hess
I made match_* functions whose influences can vary depending on the page matched set a special "" influence to indicate this. Then add_depends can try just one page, and if static influences are found, stop there.
2009-10-09rework influence calculationJoey Hess
Thought of a cleaner way to accumulate all influences in pagespec_match_list, using the pagespec_match result object as an accumulator. (This also accumulates all influences from failed matches, rather than just one failed match. I'm not sure if the old method was correct.)
2009-10-09fix pagespec_match_list handling of list parameterJoey Hess
2009-10-09pagespec_match_list: change limit to filterJoey Hess
2009-10-09pagespec_match_list allow additional pagespec limit parameters againJoey Hess
2009-10-09conditional: use yesnoJoey Hess
2009-10-08rename use_pagespec to pagespec_match_listJoey Hess
To avoid breaking plugins, also support the old pagespec_match_list calling convention, with a deprecation warning.
2009-10-08Merge branch 'master' into dependency-typesJoey Hess
Conflicts: IkiWiki.pm IkiWiki/Render.pm debian/changelog
2009-10-08Optimize away most expensive file prune calls, when refreshingJoey Hess
Benchmarking refresh of a a wiki with 25 thousand pages showed file_pruned() using most of the time. But, when refreshing, ikiwiki already knows about nearly all the files. So we can skip calling file_pruned() for those it knows about. While tricky to do, this sped up a refresh (that otherwise does no work) by 10-50%.
2009-10-08use_pagespec: do not fail with error when unable to match, unless it failsJoey Hess
with an ErrorReason
2009-10-08add use_pagespec and deptype functionsJoey Hess
2009-10-08fix handling of influences of pagespecs that fail to matchJoey Hess
If a pagespec fails to match, I had been throwing the influences away, but that is not right. Consider `backlink(foo)`, where foo does not exist. It still needs to be added as an influence, because if it is created, it will influence the pagespec to match. But with that fix, `link(bar)` had as influences all pages, whether they link to bar or not. Which is not necessary, because modifiying a page to add a link to bar will directly cause the pagespec to match. So, in match_link (and all the match_* functions for page metadata), only return an influence if the match succeeds. match_backlink had been implemented as the inverse of match_link, but that is no longer completly true. While match_link does not return an influence on failure, match_backlink does. match_created_before/after also return the influence on failure, this way if created_after(foo) currently fails because foo does not exist, it will still update the page with the pagespec if foo is created.
2009-10-07bugfixJoey Hess
2009-10-07add type info to influence informationJoey Hess
2009-10-07convert add_depends to use influencesJoey Hess
No more horrible special-case pagespec parsing. OTOH, matching over all pages to determine influences is a lot of work.
2009-10-07add influence info to match_*Joey Hess
Also update docs, test suite.
2009-10-07make success and failreason objects carry an influences hashJoey Hess
The hash will be used used to record a set of pages that influenced the result of a pagespec match. The influences are merged together when boolean and/or are encountered in a pagespec. That means using a non-short-circuiting OR operator. And so I use & and | when translating pagespecs, since those bitwise operators can be overloaded. ("and" and "or" cannot, apparently).