Changelog of @hackage/gitit 0.6.1

Version 0.6.1 released 25 Aug 2009

Instructions for upgrading from 0.5.3:

  • If you were using a Haskell configuration file, you will need to create a new configuration file. 'gitit --print-default-config' will print a self-documenting default configuration file in the new format, which you can modify.

  • If your wiki contains discuss pages of the form 'foo:discuss.page', rename them to '@foo.page'.

  • Delete template.html and the static directory so that these will be replaced by the newest versions when you run gitit. If you have customized these, you should back them up first, then merge your changes into the new versions after they are created. (Note that template.html will be replaced by a templates/ directory.)

Summary of main changes:

  • Added support for plugins -- dynamically loaded Haskell programs that transform pages. See the haddock documentation for Gitit.Interface for plugin documentation. The plugins directory contains several sample plugins.

  • Gitit's configuration file is now a text file with key-value pairs, rather than a Haskell file. The default configuration file (which can be printed using gitit --print-default-config contains comments that document all of the options.

  • Pages may now be written in (limited dialects of) LaTeX or HTML, as well as markdown and reStructuredText. The default format is determined by a configuration option, but can be overridden on a per-page basis using metadata (see below). The default Front Page and Help page are created in the default format specified by the configuration file. In addition, syntax help is now displayed to the left of the editing box when a page is being edited.

  • Pages may be written in literate Haskell, using either bird style with markdown or reStructuredText, or LaTeX style with LaTeX. Literate Haskell can be made the default or specified on a per-page basis.

  • Gitit now exports a library, Network.Gitit, that makes it easy for any happstack application to embed a gitit wiki.

  • Added optional atom feeds, for whole site (at /_feed) and for individual pages (at /_feed/path/to/page). Feeds are cached with a configurable expiration time.

  • Completely new caching system. Caching is turned off by default and can be enabled by a configuration option. Complete pages are cached on disk and expired when pages are revised through the web interface. When pages are modified directly through a VCS, the cache must be refreshed manually, either by pressing Ctrl-R while viewing a page, or by sending an HTTP request to /_expire/path/to/page, or by using the included program expireGititPath. The new system is much faster than the old in-memory cache, because it avoids the considerable overhead of filestore calls to get the current revision id.

  • To make whole-page caching possible, the user login/out box has been made into an ajax request to /_user. jQuery is now loaded on every page.

  • Math is converted to MathML by default (using the texmath library), and a javascript is linked in that renders it correctly in IE+mathplayer, Firefox, and Opera. The 'math' configuration setting can alternatively be set to 'jsMath' (to use jsMath javascript, which is more portable but ugly and slower) or 'raw' (plain LaTeX code).

  • Routing changes for better handling of web spiders. Instead of "/foo?history" we now have "/_history/foo"; instead of "/foo?edit" we haev "/edit/foo"; etc. This makes it possible to exclude web spiders from non-cached pages by excluding URLs that start with '/'. A default robots.txt file is now provided. Users need not do anything special for this to be enabled.

  • The authentication system has been revised and made much more flexible. In the configuration file, you can specify either 'form', 'http', or 'generic' as authentication-method. Form authentication is the old form-based gitit authentication system. HTTP authentication presupposes that the wiki pages are locked down under HTTP authentication; the gitit user will be set to the username used for HTTP authentication. Generic authentication takes the username from the REMOTE_USER request header. When gitit is being used as a library, one can specify a custom withUser filter (which determines the logged in user and sets REMOTE_USER accordingly) and a custom authHandler (including handlers for /_login, /_logout, and whatever else is needed).

  • Security fix: Gitit did not verify that a change password request is genuine when it receives the final POST. It has been changed to re-verify the reset code, otherwise an attacker could simply steal anyone's account by spoofing a POST request. (Thanks to Robin Green.)

  • template.html has now been replaced by a directory, templates/, with separate templates for each component of a page.

  • Added /_reloadTemplates action that recompiles the templates. (By default the templates are compiled only on startup.)

  • Gitit's form-based authentication now includes a "password reset" email. Slightly modified from a patch from Henry Laxen.

  • The naming scheme for discussion pages has changed: the discussion page for foo is now @foo, not foo:discuss. Reason: Windows, and thus darcs, does not like colons in filenames.

  • Improved logging, with configurable verbosity.

  • Major code reorganization and cleanup. Gitit has been moved under the Network namespace. The old WebT handlers are replaced by new ones in ServerPartT. 'handle' has been removed; instead, we use happstack's routing combinators. Configuration and filestores are now passed around in a reader monad, in WikiState. (This also allows different wikis to have different configurations.) Most handlers have been simplified so that they no longer require Page and Params arguments. A new function, 'withInput', is used to avoid the need to pass Params between handlers.

  • The static handler now "falls back" to the cabal data directory if the requested file is not in "static" (or staticDir). So the user need no longer have a copy of the standard gitit CSS, javascript, and image files in "static" (unless these are to be overridden). This should make updates easier. By default only 'custom.css' and 'logo.png' are put in the user's static directory.

  • Similarly, the templates in "templates" "fall back" to defaults in the cabal data directory. By default only 'footer.st' is put in the user's static directory.

  • Gitit State now includes a renderPage function. This is more flexible than storing a page template, since the user may want to use a custom page rendering function, even one not based on string templates.

  • Added Network.Gitit.ContentTransformer module (thanks to Anton van Straaten). The ContentTransformer module replaces Gitit.Convert. It defines a number of single-purpose combinators that can be combined to yield various kinds of content conversions. These are used to define showPage, preview, showHighlightedSource, and other handlers that used to be defined in Gitit.hs.

  • Verify in delete POST requests that filetodelete parameter matches page.

  • Fixed revert when called from diff pages. Revert now reverts to the older of the two revisions being compared.

  • Revamped auto-merging: user must now verify an edited page after a merge, even if there were no conflicts.

  • Fixed Content-Disposition header on export so that filenames have proper extensions.

  • Updated for happstack-server-0.3.3. Since this version of happstack supports UTF-8, gitit's old manual decoding and encoding were removed.

  • Use fileServeStrict instead of fileServe. Resolves Issue #57.

  • 'limit' is no longer used in search. The way it worked before was confusing, since it limited total matches (usually to just a few files) rather than limiting the number of matches in each file.

  • rdgreen's cautious-file library is now used to write the gitit-users file. This makes it less likely that the file will be corrupted on a power outage or hardware failure.

  • Redirects set properly after account creation. If users go from the Login form to the Register form, they are no longer redirected back to the Login form after creating an account.

  • indexPage now uses filestore's new 'directory' function. It shows one directory at a time. Subdirectories link to further index pages. This improves on the old javascript folding interface, which did not preserve state. (Thanks to Thomas Hartman for suggestions.)

  • URLs of the form /a/b/ are now equivalent to /_index/a/b.

  • Improvements and bug fixes to deleting. Deleting a non-page now works. You get a nice informative message if you try to delete a nonexistent page or file.

  • Page names containing "..", "?", or "*", and '_' at beginning are disallowed. Page names may now contain periods.

  • The "Permanent link" link has been removed. It relied on the sha1 parameter always being set, but we've changed that for performance reasons.

  • Gitit can now be proxied to a subdirectory path. Thanks to Henry Laxen for the idea and patches. See README for instructions.

  • Performance improvements (mostly due to Gwern Branwen): Pages can be compressed (configurable); unneeded filestore calls removed; cache-control: max-age used.

  • Moved sidebar to end of HTML to make things easier for screen readers.

  • Moved search box and go box to templates.

  • Yahoo YUI CSS framework is now used for better consistency across browsers. CSS cleaned up. Icons for page types removed.

  • Fixed handling of 'forUser' parameter in 'recent activity'.

  • Made default maxUploadSize 10 Mb.

  • Renamed AppState -> GititState.

Version 0.5.3 released 1 Feb 2009

  • Fixed bug which caused jsMath not to load.

Version 0.5.2 released 1 Feb 2009

  • Fixed cookie problem caused by empty value fields.

Version 0.5.1 released 1 Feb 2009

  • Major code reorganization, making gitit more modular.

  • Gitit can now optionally be built using Happstack instead of HAppS (just use -fhappstack when cabal installing).

  • Fixed bug with directories that had the same names as pages.

  • Added code from HAppS-Extra to fix cookie parsing problems.

  • New command-line options for --port, --debug.

  • New debug feature prints the date, the raw request, and the processed request data to standard output on each request.

  • Files with ".page" extension can no longer be uploaded.

  • Apostrophes and quotation marks now allowed in page names.