page.tmpl: tell mobile browsers we have a responsive layout, unless told not to Mobile browsers typically assume that arbitrary web pages are designed for a "desktop-sized" browser window (around 1000px) and display that layout, zoomed out, in order to avoid breaking naive designs that assume nobody will ever look at a website on a phone or something. People who are actually doing "responsive design" need to opt-in to mobile browsers rendering it at a more normal size.
Fix crash that can occur when only_committed_changes is set and a file is deleted from the underlay. srcfile_stat got called on a file from the underlay that no longer existed. I am not 100% sure of the circumstances of that; I was able to reproduce the bug but neglected to snapshot the tree, and then accidentially got it to stop crashing. I know that a transient tag page got deleted using the web interface to trigger the crash. It seems that process_changed_files must have returned the file, despite it being deleted. And since the file was not checked into git, it seems it must have not been included in @IkiWiki::underlayfiles, which would have caused process_changed_files to not return it. I do not know why a transient tag page would not be in @IkiWiki::underlayfiles. There is a bug here that I don't understand. This is just a workaround -- run srcfile_stat such that it won't crash, and if it is unable to stat a file, find_changed knows it's not changed, so it's ok to skip it. Also made find_new_files run srcfile_stat such that it won't crash, just because I was there.
Assume that every page has been scanned by the time the scan phase ends This doesn't prevent memory from being used to track what we have and haven't scanned, but it does make it temporary. The existing %rendered hash, which is filled afterwards, will be larger than %scanned in practice anyway: %scanned will contain an entry for each page that changed, plus an entry for each template used by templatebody, whereas %rendered will contain an entry for each page that changed plus an entry for each page rendered due to links or dependencies.
Track whether we're in the scan or render phase In the scan phase, it's too early to match pagespecs or sort pages; in the render phase, both of those are OK. It would be possible to add phases later, renumbering them if necessary to maintain numerical order.
IkiWiki::Render: make 'scan' idempotent If it does nothing when a page has already been scanned, we can use it at any time to force a page to be scanned. In particular, the templatebody plugin is going to need this.
minor opt
guard against lastrev being "" just in case
Added only_committed_changes config setting, which speeds up wiki refresh by querying git to find the files that were changed, rather than looking at the work tree. Not enabled by default as it can break some setups where not all files get committed to git.
optimize for common case where list is not changed
Fix crash that could occur when a needsbuild hook returned a file that does not exist. I saw this happen with calendar, when it wanted to update a page, that had a calendar on it, but the page had just been deleted. This caused srcfile_stat to crash.
prune: do not prune beyond an optional base directory, and add a test Previously, prune("wiki/srcdir/sandbox/test.mdwn") could delete srcdir or even wiki, if they happened to be empty. This is rarely what you want: there's usually some base directory (destdir, srcdir, transientdir or another subdirectory of wikistatedir) beyond which you do not want to delete.
uniq list for changed hook There can be dups when eg, adding a new internal page, apparently.
fix hook name
Added a "changes" hook. Renamed the "change" hook to "rendered", but the old hook name is called for now for back-compat.
Add a build_affected hook so trail doesn't have to inject In principle, building any pages affected by links, backlinks etc. could work the same way.
oops
Fix typo in Danish translation of shortcuts page that caused expoentional regexp blowup. Complex regular subexpression recursion limit (32766) exceeded at /home/joey/src/ikiwiki/IkiWiki.pm line 1532. This doesn't fix the blowup potential itself, it just fixes the typo. :) A sample page that causes the blowup is attached below for future reference. The first directive is not terminated. Contributing are the additional quotes around the following directives, which mean that they can each be processed as a parameter to the first directive, or as an individual directive. In resolving this ambiguity, the regexp blows up. Happily, perl contains the explosion , so I don't think there is an exploit here. "[[!shortcut name=wiktionary url=\"https://secure.wikimedia.org/wiktionary/en/" "[[!shortcut name=debss url=\"http://snapshot.debian.net/package/%s\"]]" "[[!shortcut name=debwiki url=\"http://wiki.debian.org/%s\"]]" "[[!shortcut name=fdobug url=\"https://bugs.freedesktop.org/show_bug.cgi?id=%s\" desc=\"freedesktop.org bug #%s\"]]" "[[!shortcut name=fdolist url=\"http://lists.freedesktop.org/mailman/listinfo/%s\" desc=\"%s@lists.freedesktop.org\"]]" "[[!shortcut name=cpanrt url=\"https://rt.cpan.org/Ticket/Display.html?id=%s\" desc=\"CPAN RT#%s\"]]" "[[!shortcut name=novellbug url=\"https://bugzilla.novell.com/show_bug.cgi?id=%s\" desc=\"bug %s\"]]" "[[!shortcut name=fdolist url=\"http://lists.freedesktop.org/mailman/listinfo/%s\" desc=\"%s@lists.freedesktop.org\"]]" "[[!shortcut name=gnomebug url=\"http://bugzilla.gnome.org/show_bug.cgi?id=%s\" desc=\"GNOME bug #%s\"]]" "[[!shortcut name=linuxbug url=\"http://bugzilla.kernel.org/show_bug.cgi?id=%s\" desc=\"Linux bug #%s\"]]" "[[!shortcut name=gmane url=\"http://dir.gmane.org/gmane.%s\" desc=\"gmane.%s\"]]" "[[!shortcut name=gmanemsg url=\"http://mid.gmane.org/%s\"]]" "[[!shortcut name=cpan url=\"http://search.cpan.org/search?mode=dist&query=%s\"]]" "[[!shortcut name=ctan url=\"http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=%s\"]]" "[[!shortcut name=hoogle url=\"http://haskell.org/hoogle/?q=%s\"]]" "[[!shortcut name=iki url=\"http://ikiwiki.info/%S/\"]]" "[[!shortcut name=ljuser url=\"http://%s.livejournal.com/\"]]" "[[!shortcut name=rfc url=\"http://www.ietf.org/rfc/rfc%s.txt\" desc=\"RFC %s\"]]" "[[!shortcut name=c2 url=\"http://c2.com/cgi/wiki?%s\"]]" "[[!shortcut name=meatballwiki url=\"http://www.usemod.com/cgi-bin/mb.pl?%s\"]]" "[[!shortcut name=emacswiki url=\"http://www.emacswiki.org/cgi-bin/wiki/%s\"]]" "[[!shortcut name=haskellwiki url=\"http://haskell.org/haskellwiki/%s\"]]" "[[!shortcut name=dict url=\"http://www.dict.org/bin/Dict?Form=Dict1&Strategy=*&Database=*&Query=%s\"]]" "[[!shortcut name=imdb url=\"http://imdb.com/find?q=%s\"]]" "[[!shortcut name=gpg url=\"http://pgpkeys.mit.edu:11371/pks/lookup?op=vindex&exact=on&search=0x%s\"]]" "[[!shortcut name=perldoc url=\"http://perldoc.perl.org/search.html?q=%s\"]]" "[[!shortcut name=whois url=\"http://reports.internic.net/cgi/whois?whois_nic=%s&type=domain\"]]" "[[!shortcut name=cve url=\"http://cve.mitre.org/cgi-bin/cvename.cgi?name=%s\"]]" "[[!shortcut name=cia url=\"http://cia.vc/stats/project/%s\"]]" "[[!shortcut name=ciauser url=\"http://cia.vc/stats/user/%s\"]]" "[[!shortcut name=flickr url=\"http://www.flickr.com/photos/%s\"]]" "[[!shortcut name=man url=\"http://linux.die.net/man/%s\"]]" "[[!shortcut name=ohloh url=\"http://www.ohloh.net/projects/%s\"]]" "[[!shortcut name=cpanrt url=\"https://rt.cpan.org/Ticket/Display.html?id=%s\" desc=\"CPAN RT#%s\"]]" "[[!shortcut name=novellbug url=\"https://bugzilla.novell.com/show_bug.cgi?id=%s\" desc=\"bug %s\"]]"
IkiWiki::Render: run scan hooks for internal pages, as well as preprocessing
Avoid escaping / characters in filenames when building the cgiurl, as this confuses eg, cvsweb.
Fix escaping of filenames in historyurl. (Thanks, aj)