
v0.6.0:

    * Added Esky.get_root() method, which can escalate to root privileges by
      spawning a separate helper process.
        * use Esky.has_root() to check if it already has root privileges.
        * escalation can use a variety of "sudo" frontends on Unix, and
          the "runas" functionality on win32 when UAC is enabled.
        * Esky.auto_update() will escalate automatically if it encounters
          a permission error.

v0.5.3:

    * DefaultVersionFinder: make search for update links case-insensitive.
    * py2exe chainloader: execute scripts in the context of the __main__ module.
    * reduce number of stat() calls during bootstrap process.
    * better cleanup of "*.old.*" files from the bootstrap env.
    * use fcntl.flock() for version locking; it's slightly less portable but
      has much better semantics for what we want.

v0.5.2:

    * more robust error-handling in esky.bootstrap.exists()


v0.5.1:

    * only delete files from the top-level app dir if they explicitly belong
      to a version that is being removed.


v0.5.0:

    * implemented preliminary support for freezing with py2app.
    * added module esky.patch for diffing and patching frozen apps:
       * provides a generic file format for diffing/patching directories.
           * can recurse into compressed zipfiles, giving patches an order
             of magnitude smaller than produced by naively applying bsdiff.
       * individual files are diffed via bsdiff if cx-bsdiff is installed.
       * bsdiff-based patches can be applied with no external dependencies.
    * added support for differential updates in DefaultVersionFinder.
    * added "bdist_esky_patch" distutils command for producing differential
      updates in the format expected by DefaultVersionFinder.
    * added filesystem-level locking to protect in-use versions from removal.
    * added attribute Esky.active_version, which is non-None when the esky
      refers to the currently-running application.


v0.4.0:

    * some backwards-incompatible API changes:
       * replace Esky.install_update(v) with Esky.auto_update().
       * new utility methods Esky.install_version(v)/Esky.uninstall_version(v).
       * rename Esky.fetch_update(v) to Esky.fetch_version(v)
       * merge VersionFinder.prepare_version into VersionFinder.fetch_version
    * made all VersionFinder methods take the target esky as first argument
      (in preparation for differential update support in a later version).
    * added support for freezing with cx_Freeze.
    * improved support for freezing with py2exe:
       * added a few well-known hacks to get it to play nice with common
         third-party packages (win32com, wxPython).
       * implemented a custom chainload() function to avoid using execv().
    * added ability to set the icon on each executable, for freezer
      modules that support it (currently py2exe and cx_Freeze on win32).
    * added more version-handling utility functions: get_all_versions,
      is_version_dir, is_installed_version_dir.
    * made Esky.cleanup() catch and ignore common errors.
    * added support for Python 3 (via distribute's "use_2to3" flag)
    * added a brief tutorial and example application


v0.3.0:

    * added ability to bundle MSVCRT as a private assembly (this is off
      by default, since you must have a valid license to redistribute it).
    * refactored to support multiple freezing backends.
        * added support for freezing with py2exe.

