Age | Commit message (Collapse) | Author |
|
|
|
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%.
|
|
|
|
Taking advantage of every single one of its features, of course.
Even had to add one more..
|
|
|
|
Also, this fixes 2 bugs in dependency info.
|
|
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.
|
|
that hack is not needed, thanks to pagespec influences calculation
|
|
|
|
Also update docs, test suite.
|
|
|
|
When a page is deleted, it is removed from %pagesources, but
not from %links. So use the former.
|
|
Otherwise, removal of a page with no links will not be noticed,
since no links will change.
|
|
|
|
Using just a link dependency is sufficient, since
|
|
This is very common, and the code has to test each type differently, since
the list of candidates to test, as well as the test, will vary per type.
Much happier with this code now.
|
|
This makes the map be regenerated much less frequently, so larger maps are
more practical to use now.
|
|
Such a dependency is unlikely, but can happen.
|
|
Only left one new global
|
|
killed one global
|
|
I'd rather have the global variables than the 300 line function
|
|
This new method for determining when links on pages
have changed should be more efficient, since it avoids
double calculation of the bestlinks.
It also allows collecting data about the old links, before
the scan pass, so the data is accurate when pages move around
and bestlinks change.
Also got some code back to a saner indent level.
|
|
|
|
This makes it more efficient.
It also fixes the same bug that I fixed in orphans recently,
that only changes to the set of displayed pages were considered (or amoung),
which missed changes to links on other pages to those.
Probably this bug was never noticed because pagestats is most often put
on a blog type page, which gets updated anyway when posts change,
and thus the tag cloud was updated.
|
|
This makes it more efficient.
It also fixes a longstanding bug, where if only a small set of pages were
considered by orphans, changes to links on other pages failed to cause an
update.
|
|
|
|
|
|
|
|
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!
|
|
|
|
Simplify, change default content depends number to 1,
change interface to make more sense.
|
|
Conflicts:
IkiWiki/Render.pm
|
|
|
|
|
|
Another one that probably doesn't matter, but for completness.
|
|
needs link info
|
|
This one is unlikely to matter much, but yeah, it's contentless.
|
|
|
|
|
|
This makes simple maps efficient enough that they can be used on sidebars!
|
|
Tried a contentless dep and it does not work; changes to links in pages
are not noticed. Drat.
|
|
Preliminary support, anyway.
If a dependency only includes DEPEND_EXISTS, then only changes that
involved adding or deleting a page can trigger it.
This is complicated by internal pages, since the code did not previously
differentiate between add, delete, and change of internal pages.
Now it tracks change separately from add+delete, so DEPEND_EXISTS pagespecs
that actually match internal pages (which will probably be quite rare in
practice) should work.
|
|
This will avoid lots of unnecessary updates of pages using the pagecount
directive. Yay!
|
|
As soon as a change happens, we know we will need to rescan all
dependencies from the start, so bail out of the current scan partway to
avoid doing redundant work.
Only problem with this is that ikiwiki sometimes ends up printing out
dependencies that, while correct, are not obvious. Before:
building B, which depends on A
building C, which depends on A
building D, which depends on A
After:
building B, which depends on A
building C, which depends on B
building D, which depends on C
|
|
This is a rather expensive solution to the transitive dependency problem.
|
|
|
|
|
|
|
|
|
|
I had assumed that an image shown full size did not need add_depends, since
a change would not need a change to the displaying page.
But this is not true if the image is modified and its size changes. Then
the page needs to update its img tag to reflect the current size.
|