summaryrefslogtreecommitdiff
path: root/IkiWiki.pm
AgeCommit message (Collapse)Author
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).
2009-10-06add_depends should default to content dependencies if unknown type specifiedJoey Hess
2009-10-06oops!!Joey Hess
2009-10-06support backlink() in pagespecs for links dependenciesJoey Hess
2009-10-05implement links dependenciesJoey Hess
Involved some code refactoring so that same code that detects link changes for backlinks updating can be used for link dependency checking. The nice thing is that link dep checking is thus comopletly free!
2009-10-04add test suite for add_dependsJoey Hess
and found a bug in my bitmath..
2009-10-04Merge branch 'master' into dependency-typesJoey Hess
2009-10-04remove /i from regexpJoey Hess
Nothing case-oriented going on in here.
2009-10-04rework dependency types codeJoey Hess
Simplify, change default content depends number to 1, change interface to make more sense.
2009-10-04expand the set of things that can be matched contentlessJoey Hess
2009-10-04optimise add_depends for simple pagespecsJoey Hess
We don't need to check if the pagespec is contentless; all simple ones are.
2009-10-04detect pagespecs that require content dependenciesJoey Hess
When adding a contentless dependency, the pagespec also needs to be one that does not look at any page content information. As a first approximation of that, only allow glob-based pagespecs in contentless dependencies. While there are probably a few other types of pagespecs that can match contentless, this will work for most of them.
2009-10-03add dependency type parameters to add_dependsJoey Hess
Dependency types are represented by bits in the values of the %depends and %depends_simple hashes. Change the dependslist array saved to the index to a depends hash. depends_simple is also converted from an array to a hash. Note that the depends field used to be a string, and we still have compat code to handle upgrades from that, as well as from the arrays. I didn't use ikiwiki-transition because I don't want ikiwiki to break if users forget to run it; also we're going to recommend a full rebuild on upgrade to this version to get the improved dependency handling. So this compat code can be removed or moved to ikiwiki-transition later.
2009-10-03Fix a bug that could lead to duplicate links being recorded for tags.Joey Hess
Here I was bitten by perl's aliasing of foreach variables to the loop array contents, and match_link accidentially changed the contents of %links. In Jon's testcase, a tag added an absolute link, which was made relative by the above bug, and then the link was added again in preprocess, and turned into a duplicate.
2009-10-03do not need to qualify %linksJoey Hess
2009-09-10Merge branch 'master' into cvsJoey Hess
2009-09-10Fix parsing web commits from ipv6 addresses.Joey Hess
I weakended the regexp, so this matches ipv6 addresses too. It does not ensure that the address is valid, but that should not matter here. Note that addresses ending in "::" are not matched, so eg, the unspecified address will not match -- but should never appear here anyway.
2009-09-08underlay: Also allow configuring additional directories to search for ↵Joey Hess
template files in.
2009-09-08memoize template_fileJoey Hess
This avoids a lot of unncessary stats, and trims about 1 second off a docwiki rebuild here.
2009-08-30Merge branch 'master' of git://github.com/joeyh/ikiwikiAmitai Schlair
2009-08-28<pedant>rename depends_exact to depends_simpleJoey Hess
It's not "exact" since case munging has to be done, and I think "simple" captures the optimisation better.</pedant> With apologies to smcv, who probably has to rebuild his wiki now.
2009-08-28Force %depends_exact to lower case, fixing incorrect case-sensitivitySimon McVittie
2009-08-28Auto-detect "simple dependencies" instead of requiring callers to use ↵Simon McVittie
add_depends_exact()
2009-08-28Add depends_exact: simplified dependency tracking for dependencies on a ↵Simon McVittie
single page Let E be the number of dependencies per page of the form "A depends on B and nothing else", let D be the number of other dependencies per page, let P be the total number of pages, and let C be the number of changed pages in a refresh. This patch should speed up a refresh from O(E*C*P + D*C*P) to O(C + E*P + D*C*P), assuming that hash lookups are O(1). In practice, plugins like inline and map produce a lot of these very simple dependencies, and my album plugin's combination of inline with a large number of pages causes it to suffer particularly badly. In testing on a wiki with about 7000 objects (3500 full pages, 3500 images), a full rebuild continued to take about 5:30, and a refresh after touching about 350 pages and 350 images reduced from 5:30 to 1:30. As with my previous optimizations, this change will result in downgrades not working correctly until the wiki is rebuilt.
2009-08-25Merge commit 'remotes/smcv/ready/remove-pagespec-merge'Joey Hess
2009-08-25Revert "Allow add_depends to take an arrayref"Joey Hess
This reverts commit e4cd168ebedd95585290c97ff42234344bfed46c. There was no benefit to this change.
2009-08-25Remove now-unused function pagespec_mergeSimon McVittie
Now that dependencies are a list of pagespecs with an implicit "or" operation, there's no need to try to merge pagespecs under normal use. ikiwiki-transition contains the only use of the function, so move it there rather than deleting it entirely (it's used to concatenate all admins' lists of locked pages).
2009-08-25IkiWiki::pagename: memoize resultsSimon McVittie
This relies for its correctness on %config, %hooks and pagetype() not changing.
2009-08-25Allow add_depends to take an arrayrefSimon McVittie
2009-08-25Use a hash to de-duplicate dependenciesSimon McVittie
2009-08-24Don't bother to save {depends} to the indexSimon McVittie
As per Joey's review.
2009-08-24Optimize the dependencies listSimon McVittie
On a large wiki you can spend a lot of time reading through large lists of dependencies to see whether files need to be rebuilt (album, with its one-page-per-photo arrangement, suffers particularly badly from this). The dependency list is currently a single pagespec, but it's not used like a normal pagespec - in practice, it's a list of pagespecs joined with the "or" operator. Accordingly, change it to be stored as a list of pagespecs. On a wiki with many tagged photo albums, this reduces the time to refresh after `touch tags/*.mdwn` from about 31 to 25 seconds. Getting the benefit of this change on an existing wiki requires a rebuild.
2009-08-16created_before/after: throw error if specified page does not existJoey Hess
This assumes that no ctime means the page doesn't exist, which seems reasonable.
2009-08-16fix error message displayJoey Hess
The gettext call can clear $@ in at least some cases.
2009-08-13Add discussionpage configuration settingJoey Hess
By adding this setting, we get both more configurability, and a minor optimisation too, since gettext does not need to be called continually to get the Discussion value.
2009-08-13Add my CVS plugin and related patches.Amitai Schlair
2009-07-19Merge branch 'master' into poJoey Hess
Conflicts: debian/changelog
2009-07-10Move OpenID pretty-printing from openid plugin to coreSimon McVittie
On various sites I have two IkiWiki instances running from the same repository: one accessible via http and only accepting openid logins, and one accessible via authenticated https and only accepting httpauth. The https version should still pretty-print OpenIDs seen in git history, even though it does not itself accept OpenID logins.
2009-06-08Optimise use of gettext, and avoid ugly warnings if Locale::gettext is not ↵Joey Hess
available. The test suite was emitting a lot of ugly gettext warnings; setting LC_ALL didn't solve the problem for all locale setups (since ikiwiki remaps it to LANG, and ikiwiki didn't know about the C locale). People also seem generally annoyed by the messages when Locale::Gettext is not installed, and I suspect will be generally happier if it just silently doesn't localize. The optimisation came about when I noticed that the gettext sub was doing rather a lot of work each call just to see if localisation is needed. We can avoid that work by caching, and the best thing to cache is a version of the gettext sub that does exactly the right thing. This was slightly complicated by the locale setting, which might need to override the original locale (or lack thereof) after gettext has been called. So it needs to invalidate the cache in that case. It used to do it via a global variable, which I am happy to have also gotten rid of.
2009-06-06Merge commit 'upstream/master' into pub/pointrigeri
Conflicts: debian/changelog debian/control Signed-off-by: intrigeri <intrigeri@boum.org>
2009-06-05Tighten up matching of bare words inside directivesJoey Hess
Do not allow an unterminated """ string to be treated as a series of bare words. Fixes runaway regexp recursion/backtracking in strange situations. (See 1d57a21c987a5e970df01efe10acdf69982c2d61 for test case.)
2009-05-19Merge branch 'master' into poJoey Hess
Conflicts: debian/changelog
2009-05-18Allow curly braces to be used in pagespecsJoey Hess
And avoid a whole class of potential security problems (though none that I know of actually existing..), by avoiding performing any string interpolation on user-supplied data when translating pagespecs.
2009-05-07Allow underlaydir to be overridden without messing up inclusion of other ↵Joey Hess
underlays via add_underlay.
2009-05-06Avoid %links accumulating duplicates. (For TOVA)Joey Hess
This is sorta an optimisation, and sorta a bug fix. In one test case I have available, it can speed a page build up from 3 minutes to 3 seconds. The root of the problem is that $links{$page} contains arrays of links, rather than hashes of links. And when a link is found, it is just pushed onto the array, without checking for dups. Now, the array is emptied before scanning a page, so there should not be a lot of opportunity for lots of duplicate links to pile up in it. But, in some cases, they can, and if there are hundreds of duplicate links in the array, then scanning it for matching links, as match_link and some other code does, becomes much more expensive than it needs to be. Perhaps the real right fix would be to change the data structure to a hash. But, the list of links is never accessed like that, you always want to iterate through it. I also looked at deduping the list in saveindex, but that does a lot of unnecessary work, and doesn't completly solve the problem. So, finally, I decided to add an add_link function that handles deduping, and make ikiwiki-transition remove the old dup links.
2009-04-23Revert "pagespec_match_list * optimisation"Joey Hess
This reverts commit 2f96c49bd1826ecb213ae025ad456a714aa04863. I forgot about internal pages. We don't want * matching them! I left the optimisation in pagecount, where it used to live. Internal pages probably don't matter when they're just being counted.