summaryrefslogtreecommitdiff
path: root/doc/bugs/inline_page_not_updated_on_removal.mdwn
blob: 7f5e49871abb0053e717b696e7c00e5dfeb2a3de (plain)

If a page inlines some other page (such as this page by the bugs page), and the page is removed (such as by this page being linked to bugs/done), the inlining page is not updated to remove it.

This only happens if the page is removed from the inlined pagespec due to a tag changing; the problem is that once the tag is changed, ikiwiki does not know that the page used to match before.

Another example would be a pagespec that allowed only matching new pages:

newer(1 day)

Obviously, the pages that matches are going to change, and again once they do, ikiwiki will no longer know that they matched before, so it won't know to remove them from a page that used that to inline them.

To fix, seems I would need to record the actual list of pages that are currently included on an inline page, and do a comparison to see if any have changed.

At first I thought, why not just add them to the dependencies explicitly, but that failed because the dependencies GlobList failed to match when a negated expression like "!tag(bugs/done)" is matched. It is, however, doable with PageSpecs:

(real deps here) or (list of all currently inlined pages here)

However, it's not really clear to me how to remove inlined pages from the deps when they stop being inlined for whatever reason. So a separate list would be better.

So this is blocked by [[todo/plugin_data_storage]] I suppose.