Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hping: fix build on SmartOS #80

Closed
wants to merge 1 commit into from
Closed

Conversation

wiedi
Copy link

@wiedi wiedi commented Oct 19, 2013

fix build on SmartOS

@mamash
Copy link

mamash commented Oct 21, 2013

Thanks, committed to upstream CVS.

@mamash mamash closed this Oct 21, 2013
jperkin pushed a commit that referenced this pull request Nov 1, 2013
News
====

Release 3.0.8 - 2013/09/29
--------------------------

Improvements
^^^^^^^^^^^^

* [admin] Improved error handling of select functionality. This change shows error message
  and hides loading dialog. [Patch by orangain]
* [admin] Improved to submit search form with the enter key. [Patch by orangain]
* [admin] Improved to show placeholder in search form.
  This change shows usage examples. [Patch by orangain]
* [httpd] Supported :ref:`groonga-query-log-path` directive
* [doc] Updated :doc:`/reference/commands/select` documentation about the number of
  hits in select response.
* Improved to ignore an empty token which is generated by continuous spaces from tokenizer.
  [groonga-dev,01729] [Suggested by Naoya Murakami]
* [token delimit] Improved to treat continuous spaces as a space.
  The tokenizer regards 2 or more spaces are valid input.
* [doc] Added note about indexes for each column vs indexes for multiple column.
* [doc] Added language annotation to source label. [groonga-dev,01751] [Suggested by Kazuhiro Isobe]
* Supported :ref:`cascade-delete` to referenced records. In previous version,
  You got an error for the operation.
* [doc] Updated documentation location in README. [groonga-dev,01800] [Reported by Kazuhiro Isobe]
* [experimental] Added :doc:`/reference/commands/ruby_eval` command.
* [doc] Added note about GQTP and HTTP for server use. [groonga-dev,01810] [Reported by Kazuhiro Isobe]

Fixes
^^^^^

* [admin] Fixed a bug that add value button of COLUMN_VECTOR does not work.

Thanks
^^^^^^

* orangain
* Naoya Murakami
* Kazuhiro Isobe

Release 3.0.7 - 2013/08/29
--------------------------

Improvements
^^^^^^^^^^^^

* [doc] Added API documentation. [groonga-dev,01593]
  [GitHub#79,#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#95,#96,#97,#98,#99,#100]
  [Patch by whombx]
* [table_remove] Improved not to remove patricia trie table or hash table
  which is still referenced. This change avoids that referenced table is removed accidentally.
* Improved to just ignore too long token (4096 bytes or more).
  This change affects when it is registered. In the previous version, it is treated as an
  error instead of a warning. [groonga-dev,01571] [Suggested by Naoya Murakami]
* Improved to show actual discarded posting term in log message.
  [groonga-dev,01621] [Reported by Naoya Murakami]
* [httpd] Supported loading data using POST method. [GitHub#101]
  [Patch by Motoi Washida]
* [httpd] Supported groonga log as ``groonga_log_path`` directive.
* [httpd] Supported groonga log level as ``groonga_log_level`` directive.
* [httpd] Supported customizing cache limit as ``groonga_cache_limit`` directive.

Fixes
^^^^^

* Fixed a bug that error in expression may cause stack overflow.
  This change avoids that groonga crashes suddenly as a result of error accumlation.
* Fixed a crash bug that offline index construction for vector column which has
  orphan reference causes.
* Fixed a bug that groonga doesn't exit on error while daemon mode starts.
  For example, ``groonga -d /tmp/non-existence.db`` reproduce this bug.
* [dump] Fixed a bug that wrong table type is dumped.
  This bug occurs when table type is TABLE_PAT_KEY and key is reference type.
* Fixed a bug that the default ``--cache-limit`` value is 0.
  The default value is changed to '100'.
* Fixed a memory leak when :doc:`/reference/functions/sub_filter` is used.
* [doc] Fixed description of defrag command. [Reported by @naoina]
* [doc] Fixed description about the way to contribute. [GitHub#77]
  [Patch by Masafumi Yokoyama]
* [plugin] Fixed a crash bug on multiple DB open case.
  This bug affects the case that multiple plugin is used and the same database is opened from
  multiple process. [groonga-dev,01596] [Reported by Naoya Murakami]
* Fixed a bug that nested match operation after ``AND`` operator doesn't work.
  The ``select ... --filter '... && nested.column @ "keyword"'`` query reproduces this bug.
  [groonga-dev,01599] [Reported by Motoi Washida]
* [doc] Fixed a typo about documentation of special characters.
  [Reported by Genki Takiuchi]
* Fixed a typo in error message when invalid character is given.
  [Reported by YOSHIDA Mitsuo]

Thanks
^^^^^^

* whombx
* @naoina
* Masafumi Yokoyama
* Motoi Washida
* Genki Takiuchi
* YOSHIDA Mitsuo
jperkin pushed a commit that referenced this pull request Dec 9, 2013
REPLACE_PYTHON in two files. From ChangeLog.txt:

## 2012-06-26 0.37

* Fixed datestr issue on Windows -- #155
* Fixed Python 2.4 compatability issues (tx fredludlow)
* Fixed error in utils.safewrite (tx shuge) -- #95
* Allow use of web.data() with app.request() -- #105
* Fixed an issue with session initializaton (tx beardedprojamz) -- #109
* Allow custom message on 400 Bad Request (tx patryk) -- #121
* Made djangoerror work on GAE. -- #80
* Handle malformatted data in the urls. -- #117
* Made it easier to stop the dev server -- #100, #122
* Added support fot customizing cookie_path in session (tx larsga) -- #89
* Added exception for "415 Unsupported Media" (tx JirkaChadima) -- #145
* Added GroupedDropdown to support `<optgroup>` tag (tx jzellman) -- #152
* Fixed failure in embedded interpreter - #87
* Optimized web.cookies (tx benhoyt) - #148
jperkin pushed a commit that referenced this pull request Dec 9, 2013
News
====

Release 3.0.8 - 2013/09/29
--------------------------

Improvements
^^^^^^^^^^^^

* [admin] Improved error handling of select functionality. This change shows error message
  and hides loading dialog. [Patch by orangain]
* [admin] Improved to submit search form with the enter key. [Patch by orangain]
* [admin] Improved to show placeholder in search form.
  This change shows usage examples. [Patch by orangain]
* [httpd] Supported :ref:`groonga-query-log-path` directive
* [doc] Updated :doc:`/reference/commands/select` documentation about the number of
  hits in select response.
* Improved to ignore an empty token which is generated by continuous spaces from tokenizer.
  [groonga-dev,01729] [Suggested by Naoya Murakami]
* [token delimit] Improved to treat continuous spaces as a space.
  The tokenizer regards 2 or more spaces are valid input.
* [doc] Added note about indexes for each column vs indexes for multiple column.
* [doc] Added language annotation to source label. [groonga-dev,01751] [Suggested by Kazuhiro Isobe]
* Supported :ref:`cascade-delete` to referenced records. In previous version,
  You got an error for the operation.
* [doc] Updated documentation location in README. [groonga-dev,01800] [Reported by Kazuhiro Isobe]
* [experimental] Added :doc:`/reference/commands/ruby_eval` command.
* [doc] Added note about GQTP and HTTP for server use. [groonga-dev,01810] [Reported by Kazuhiro Isobe]

Fixes
^^^^^

* [admin] Fixed a bug that add value button of COLUMN_VECTOR does not work.

Thanks
^^^^^^

* orangain
* Naoya Murakami
* Kazuhiro Isobe

Release 3.0.7 - 2013/08/29
--------------------------

Improvements
^^^^^^^^^^^^

* [doc] Added API documentation. [groonga-dev,01593]
  [GitHub#79,#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#95,#96,#97,#98,#99,#100]
  [Patch by whombx]
* [table_remove] Improved not to remove patricia trie table or hash table
  which is still referenced. This change avoids that referenced table is removed accidentally.
* Improved to just ignore too long token (4096 bytes or more).
  This change affects when it is registered. In the previous version, it is treated as an
  error instead of a warning. [groonga-dev,01571] [Suggested by Naoya Murakami]
* Improved to show actual discarded posting term in log message.
  [groonga-dev,01621] [Reported by Naoya Murakami]
* [httpd] Supported loading data using POST method. [GitHub#101]
  [Patch by Motoi Washida]
* [httpd] Supported groonga log as ``groonga_log_path`` directive.
* [httpd] Supported groonga log level as ``groonga_log_level`` directive.
* [httpd] Supported customizing cache limit as ``groonga_cache_limit`` directive.

Fixes
^^^^^

* Fixed a bug that error in expression may cause stack overflow.
  This change avoids that groonga crashes suddenly as a result of error accumlation.
* Fixed a crash bug that offline index construction for vector column which has
  orphan reference causes.
* Fixed a bug that groonga doesn't exit on error while daemon mode starts.
  For example, ``groonga -d /tmp/non-existence.db`` reproduce this bug.
* [dump] Fixed a bug that wrong table type is dumped.
  This bug occurs when table type is TABLE_PAT_KEY and key is reference type.
* Fixed a bug that the default ``--cache-limit`` value is 0.
  The default value is changed to '100'.
* Fixed a memory leak when :doc:`/reference/functions/sub_filter` is used.
* [doc] Fixed description of defrag command. [Reported by @naoina]
* [doc] Fixed description about the way to contribute. [GitHub#77]
  [Patch by Masafumi Yokoyama]
* [plugin] Fixed a crash bug on multiple DB open case.
  This bug affects the case that multiple plugin is used and the same database is opened from
  multiple process. [groonga-dev,01596] [Reported by Naoya Murakami]
* Fixed a bug that nested match operation after ``AND`` operator doesn't work.
  The ``select ... --filter '... && nested.column @ "keyword"'`` query reproduces this bug.
  [groonga-dev,01599] [Reported by Motoi Washida]
* [doc] Fixed a typo about documentation of special characters.
  [Reported by Genki Takiuchi]
* Fixed a typo in error message when invalid character is given.
  [Reported by YOSHIDA Mitsuo]

Thanks
^^^^^^

* whombx
* @naoina
* Masafumi Yokoyama
* Motoi Washida
* Genki Takiuchi
* YOSHIDA Mitsuo
jperkin pushed a commit that referenced this pull request Jan 21, 2014
REPLACE_PYTHON in two files. From ChangeLog.txt:

## 2012-06-26 0.37

* Fixed datestr issue on Windows -- #155
* Fixed Python 2.4 compatability issues (tx fredludlow)
* Fixed error in utils.safewrite (tx shuge) -- #95
* Allow use of web.data() with app.request() -- #105
* Fixed an issue with session initializaton (tx beardedprojamz) -- #109
* Allow custom message on 400 Bad Request (tx patryk) -- #121
* Made djangoerror work on GAE. -- #80
* Handle malformatted data in the urls. -- #117
* Made it easier to stop the dev server -- #100, #122
* Added support fot customizing cookie_path in session (tx larsga) -- #89
* Added exception for "415 Unsupported Media" (tx JirkaChadima) -- #145
* Added GroupedDropdown to support `<optgroup>` tag (tx jzellman) -- #152
* Fixed failure in embedded interpreter - #87
* Optimized web.cookies (tx benhoyt) - #148
jperkin pushed a commit that referenced this pull request Jan 21, 2014
News
====

Release 3.0.8 - 2013/09/29
--------------------------

Improvements
^^^^^^^^^^^^

* [admin] Improved error handling of select functionality. This change shows error message
  and hides loading dialog. [Patch by orangain]
* [admin] Improved to submit search form with the enter key. [Patch by orangain]
* [admin] Improved to show placeholder in search form.
  This change shows usage examples. [Patch by orangain]
* [httpd] Supported :ref:`groonga-query-log-path` directive
* [doc] Updated :doc:`/reference/commands/select` documentation about the number of
  hits in select response.
* Improved to ignore an empty token which is generated by continuous spaces from tokenizer.
  [groonga-dev,01729] [Suggested by Naoya Murakami]
* [token delimit] Improved to treat continuous spaces as a space.
  The tokenizer regards 2 or more spaces are valid input.
* [doc] Added note about indexes for each column vs indexes for multiple column.
* [doc] Added language annotation to source label. [groonga-dev,01751] [Suggested by Kazuhiro Isobe]
* Supported :ref:`cascade-delete` to referenced records. In previous version,
  You got an error for the operation.
* [doc] Updated documentation location in README. [groonga-dev,01800] [Reported by Kazuhiro Isobe]
* [experimental] Added :doc:`/reference/commands/ruby_eval` command.
* [doc] Added note about GQTP and HTTP for server use. [groonga-dev,01810] [Reported by Kazuhiro Isobe]

Fixes
^^^^^

* [admin] Fixed a bug that add value button of COLUMN_VECTOR does not work.

Thanks
^^^^^^

* orangain
* Naoya Murakami
* Kazuhiro Isobe

Release 3.0.7 - 2013/08/29
--------------------------

Improvements
^^^^^^^^^^^^

* [doc] Added API documentation. [groonga-dev,01593]
  [GitHub#79,#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#95,#96,#97,#98,#99,#100]
  [Patch by whombx]
* [table_remove] Improved not to remove patricia trie table or hash table
  which is still referenced. This change avoids that referenced table is removed accidentally.
* Improved to just ignore too long token (4096 bytes or more).
  This change affects when it is registered. In the previous version, it is treated as an
  error instead of a warning. [groonga-dev,01571] [Suggested by Naoya Murakami]
* Improved to show actual discarded posting term in log message.
  [groonga-dev,01621] [Reported by Naoya Murakami]
* [httpd] Supported loading data using POST method. [GitHub#101]
  [Patch by Motoi Washida]
* [httpd] Supported groonga log as ``groonga_log_path`` directive.
* [httpd] Supported groonga log level as ``groonga_log_level`` directive.
* [httpd] Supported customizing cache limit as ``groonga_cache_limit`` directive.

Fixes
^^^^^

* Fixed a bug that error in expression may cause stack overflow.
  This change avoids that groonga crashes suddenly as a result of error accumlation.
* Fixed a crash bug that offline index construction for vector column which has
  orphan reference causes.
* Fixed a bug that groonga doesn't exit on error while daemon mode starts.
  For example, ``groonga -d /tmp/non-existence.db`` reproduce this bug.
* [dump] Fixed a bug that wrong table type is dumped.
  This bug occurs when table type is TABLE_PAT_KEY and key is reference type.
* Fixed a bug that the default ``--cache-limit`` value is 0.
  The default value is changed to '100'.
* Fixed a memory leak when :doc:`/reference/functions/sub_filter` is used.
* [doc] Fixed description of defrag command. [Reported by @naoina]
* [doc] Fixed description about the way to contribute. [GitHub#77]
  [Patch by Masafumi Yokoyama]
* [plugin] Fixed a crash bug on multiple DB open case.
  This bug affects the case that multiple plugin is used and the same database is opened from
  multiple process. [groonga-dev,01596] [Reported by Naoya Murakami]
* Fixed a bug that nested match operation after ``AND`` operator doesn't work.
  The ``select ... --filter '... && nested.column @ "keyword"'`` query reproduces this bug.
  [groonga-dev,01599] [Reported by Motoi Washida]
* [doc] Fixed a typo about documentation of special characters.
  [Reported by Genki Takiuchi]
* Fixed a typo in error message when invalid character is given.
  [Reported by YOSHIDA Mitsuo]

Thanks
^^^^^^

* whombx
* @naoina
* Masafumi Yokoyama
* Motoi Washida
* Genki Takiuchi
* YOSHIDA Mitsuo
jperkin pushed a commit that referenced this pull request Jan 21, 2014
FITS (Flexible Image Transport System) is a data format most used in astronomy.
PyFITS is a Python module for reading, writing, and manipulating FITS files.
The module uses Python's object-oriented features to provide quick, easy, and
efficient access to FITS files. The use of Python's array syntax enables
immediate access to any FITS extension, header cards, or data items.

Changes to 2.4.0 (in py-pyfits):

Changelog
===========

3.2 (2013-11-26)
----------------

Highlights
^^^^^^^^^^

- Rewrote CFITSIO-based backend for handling tile compression of FITS files.
  It now uses a standard CFITSIO instead of heavily modified pieces of CFITSIO
  as before.  PyFITS ships with its own copy of CFITSIO v3.35 which supports
  the latest version of the Tiled Image Convention (v2.3), but system
  packagers may choose instead to strip this out in favor of a
  system-installed version of CFITSIO.  Earlier versions may work, but nothing
  earlier than 3.28 has been tested yet. (#169)

- Added support for reading and writing tables using the Q format for columns.
  The Q format is identical to the P format (variable-length arrays) except
  that it uses 64-bit integers for the data descriptors, allowing more than
  4 GB of variable-length array data in a single table. (#160)

- Added initial support for table columns containing pseudo-unsigned integers.
  This is currently enabled by using the ``uint=True`` option when opening
  files; any table columns with the correct BZERO value will be interpreted
  and returned as arrays of unsigned integers.

- Some refactoring of the table and ``FITS_rec`` modules in order to better
  separate the details of the FITS binary and ASCII table data structures from
  the HDU data structures that encapsulate them.  Most of these changes should
  not be apparent to users (but see API Changes below).


API Changes
^^^^^^^^^^^

- Assigning to values in ``ColDefs.names``, ``ColDefs.formats``,
  ``ColDefs.nulls`` and other attributes of ``ColDefs`` instances that return
  lists of column properties is no longer supported.  Assigning to those lists
  will no longer update the corresponding columns.  Instead, please just
  modify the ``Column`` instances directly (``Column.name``, ``Column.null``,
  etc.)

- The ``pyfits.new_table`` function is marked "pending deprecation".  This
  does not mean it will be removed outright or that its functionality has
  changed.  It will likely be replaced in the future for a function with
  similar, if not subtly different functionality.  A better, if not slightly
  more verbose approach is to use ``pyfits.FITS_rec.from_columns`` to create
  a new ``FITS_rec`` table--this has the same interface as
  ``pyfits.new_table``.  The difference is that it returns a plan ``FITS_rec``
  array, and not an HDU instance.  This ``FITS_rec`` object can then be used
  as the data argument in the constructors for ``BinTableHDU`` (for binary
  tables) or ``TableHDU`` (for ASCII tables).  This is analogous to creating
  an ``ImageHDU`` by passing in an image array.
  ``pyfits.FITS_rec.from_columns`` is just a simpler way of creating a
  FITS-compatible recarray from a FITS column specification.

- The ``updateHeader``, ``updateHeaderData``, and ``updateCompressedData``
  methods of the ``CompDataHDU`` class are pending deprecation and moved to
  internal methods.  The operation of these methods depended too much on
  internal state to be used safely by users; instead they are invoked
  automatically in the appropriate places when reading/writing compressed image
  HDUs.

- The ``CompDataHDU.compData`` attribute is pending deprecation in favor of
  the clearer and more PEP-8 compatible ``CompDataHDU.compressed_data``.

- The constructor for ``CompDataHDU`` has been changed to accept new keyword
  arguments.  The new keyword arguments are essentially the same, but are in
  underscore_separated format rather than camelCase format.  The old arguments
  are still pending deprecation.

- The internal attributes of HDU classes ``_hdrLoc``, ``_datLoc``, and
  ``_datSpan`` have been replaced with ``_header_offset``, ``_data_offset``,
  and ``_data_size`` respectively.  The old attribute names are still pending
  deprecation.  This should only be of interest to advanced users who have
  created their own HDU subclasses.

- The following previously deprecated functions and methods have been removed
  entirely: ``createCard``, ``createCardFromString``, ``upperKey``,
  ``ColDefs.data``, ``setExtensionNameCaseSensitive``, ``_File.getfile``,
  ``_TableBaseHDU.get_coldefs``, ``Header.has_key``, ``Header.ascardlist``.

  If you run your code with a previous version of PyFITS (>= 3.0, < 3.2) with
  the ``python -Wd`` argument, warnings for all deprecated interfaces still in
  use will be displayed.

- Interfaces that were pending deprecation are now fully deprecated.  These
  include: ``create_card``, ``create_card_from_string``, ``upper_key``,
  ``Header.get_history``, and ``Header.get_comment``.

- The ``.name`` attribute on HDUs is now directly tied to the HDU's header, so
  that if ``.header['EXTNAME']`` changes so does ``.name`` and vice-versa.

- The ``pyfits.file.PYTHON_MODES`` constant dict was renamed to
  ``pyfits.file.PYFITS_MODES`` which better reflects its purpose.  This is
  rarely used by client code, however.  Support for the old name will be
  removed by PyFITS 3.4.


Other Changes and Additions
^^^^^^^^^^^^^^^^^^^^^^^^^^^

- The new compression code also adds support for the ZQUANTIZ and ZDITHER0
  keywords added in more recent versions of this FITS Tile Compression spec.
  This includes support for lossless compression with GZIP. (#198) By default
  no dithering is used, but the ``SUBTRACTIVE_DITHER_1`` and
  ``SUBTRACTIVE_DITHER_2`` methods can be enabled by passing the correct
  constants to the ``quantize_method`` argument to the ``CompImageHDU``
  constuctor.  A seed can be manually specified, or automatically generated
  using either the system clock or checksum-based methods via the
  ``dither_seed`` argument.  See the documentation for ``CompImageHDU`` for
  more details. (#198) (spacetelescope/PYFITS#32)

- Images compressed with the Tile Compression standard can now be larger than
  4 GB through support of the Q format. (#159)

- All HDUs now have a ``.ver`` ``.level`` attribute that returns the value of
  the EXTVAL and EXTLEVEL keywords from that HDU's header, if the exist.  This
  was added for consistency with the ``.name`` attribute which returns the
  EXTNAME value from the header.

- Then ``Column`` and ``ColDefs`` classes have new ``.dtype`` attributes
  which give the Numpy dtype for the column data in the first case, and the
  full Numpy compound dtype for each table row in the latter case.

- There was an issue where new tables created defaulted the values in all
  string columns to '0.0'.  Now string columns are filled with empty strings
  by default--this seems a less surprising default, but it may cause
  differences with tables created with older versions of PyFITS.

- Improved round-tripping and preservation of manually assigned column
  attributes (``TNULLn``, ``TSCALn``, etc.) in table HDU headers.
  (astropy/astropy#996)


Bug Fixes
^^^^^^^^^

- Binary tables containing compressed images may, optionally, contain other
  columns unrelated to the tile compression convention. Although this is an
  uncommon use case, it is permitted by the standard. (#159)

- Reworked some of the file I/O routines to allow simpler, more consistent
  mapping between OS-level file modes ('rb', 'wb', 'ab', etc.) and the more
  "PyFITS-specific" modes used by PyFITS like "readonly" and "update".
  That is, if reading a FITS file from an open file object, it doesn't matter
  as much what "mode" it was opened in so long as it has the right
  capabilities (read/write/etc.)  Also works around bugs in the Python io
  module in 2.6+ with regard to file modes. (spacetelescope/PyFITS#33)

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). (astropy/astropy#968)


3.1.3 (2013-11-26)
------------------

- Disallowed assigning NaN and Inf floating point values as header values,
  since the FITS standard does not define a way to represent them in. Because
  this is undefined, the previous behavior did not make sense and produced
  invalid FITS files. (spacetelescope/PyFITS#11)

- Added a workaround for a bug in 64-bit OSX that could cause truncation when
  writing files greater than 2^32 bytes in size. (spacetelescope/PyFITS#28)

- Fixed a long-standing issue where writing binary tables did not correctly
  write the TFORMn keywords for variable-length array columns (they ommitted
  the max array length parameter of the format).  This was thought fixed in
  v3.1.2, but it was only fixed there for compressed image HDUs and not for
  binary tables in general.

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). (Backported from 3.2)


3.0.12 (2013-11-26)
-------------------

- Disallowed assigning NaN and Inf floating point values as header values,
  since the FITS standard does not define a way to represent them in. Because
  this is undefined, the previous behavior did not make sense and produced
  invalid FITS files. (Backported from 3.1.3)

- Added a workaround for a bug in 64-bit OSX that could cause truncation when
  writing files greater than 2^32 bytes in size. (Backported from 3.1.3)

- Fixed a long-standing issue where writing binary tables did not correctly
  write the TFORMn keywords for variable-length array columns (they ommitted
  the max array length parameter of the format).  This was thought fixed in
  v3.1.2, but it was only fixed there for compressed image HDUs and not for
  binary tables in general. (Backported from 3.1.3)

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). (Backported from 3.2)


3.1.2 (2013-04-22)
------------------

- When an error occurs opening a file in fitsdiff the exception message will
  now at least mention which file had the error. (#168)

- Fixed support for opening gzipped FITS files by filename in a writeable mode
  (PyFITS has supported writing to gzip files for some time now, but only
  enabled it when GzipFile objects were passed to ``pyfits.open()`` due to
  some legacy code preventing full gzip support. (#195)

- Added a more helpful error message in the case of malformatted FITS files
  that contain non-float NULL values in an ASCII table but are missing the
  required TNULLn keywords in the header. (#197)

- Fixed an (apparently long-standing) issue where writing compressed images
  did not correctly write the TFORMn keywords for variable-length array
  columns (they ommitted the max array length parameter of the format). (#199)

- Slightly refactored how tables containing variable-length array columns are
  handled to add two improvements: Fixes an issue where accessing the data
  after a call to the `pyfits.getdata` convenience function caused an
  exception, and allows the VLA data to be read from an existing mmap of the
  FITS file. (#200)

- Fixed a bug that could occur when opening a table containing
  multi-dimensional columns (i.e. via the TDIMn keyword) and then writing it
  out to a new file. (#201)

- Added use of the console_scripts entry point to install the fitsdiff and
  fitscheck scripts, which if nothing else provides better Windows support.
  The generated scripts now override the ones explicitly defined in the
  scripts/ directory (which were just trivial stubs to begin with). (#202)

- Fixed a bug on Python 3 where attempting to open a non-existent file on
  Python 3 caused a seemingly unrelated traceback. (#203)

- Fixed a bug in fitsdiff that reported two header keywords containing NaN
  as value as different. (#204)

- Fixed an issue in the tests that caused some tests to fail if pyfits is
  installed with read-only permissions. (#208)

- Fixed a bug where instantiating a ``BinTableHDU`` from a numpy array
  containing boolean fields converted all the values to ``False``. (#215)

- Fixed an issue where passing an array of integers into the constructor of
  ``Column()`` when the column type is floats of the same byte width caused the
  column array to become garbled. (#218)

- Fixed inconsistent behavior in creating CONTINUE cards from byte strings
  versus unicode strings in Python 2--CONTINUE cards can now be created
  properly from unicode strings (so long as they are convertable to ASCII).
  (spacetelescope/PyFITS#1)

- Fixed a couple cases where creating a new table using TDIMn in some of the
  columns could caused a crash. (spacetelescope/PyFITS#3)

- Fixed a bug in parsing HIERARCH keywords that do not have a space after
  the first equals sign (before the value). (spacetelescope/PyFITS#5)

- Prevented extra leading whitespace on HIERARCH keywords from being treated
  as part of the keyword. (spacetelescope/PyFITS#6)

- Fixed a bug where HIERARCH keywords containing lower-case letters was
  mistakenly marked as invalid during header validation.
  (spacetelescope/PyFITS#7)

- Fixed an issue that was ancillary to (spacetelescope/PyFITS#7) where the
  ``Header.index()`` method did not work correctly with HIERARCH keywords
  containing lower-case letters.


3.0.11 (2013-04-17)
-------------------

- Fixed support for opening gzipped FITS files by filename in a writeable mode
  (PyFITS has supported writing to gzip files for some time now, but only
  enabled it when GzipFile objects were passed to ``pyfits.open()`` due to
  some legacy code preventing full gzip support. Backported from 3.1.2. (#195)

- Added a more helpful error message in the case of malformatted FITS files
  that contain non-float NULL values in an ASCII table but are missing the
  required TNULLn keywords in the header. Backported from 3.1.2. (#197)

- Fixed an (apparently long-standing) issue where writing compressed images did
  not correctly write the TFORMn keywords for variable-length array columns
  (they ommitted the max array length parameter of the format). Backported from
  3.1.2. (#199)

- Slightly refactored how tables containing variable-length array columns are
  handled to add two improvements: Fixes an issue where accessing the data
  after a call to the `pyfits.getdata` convenience function caused an
  exception, and allows the VLA data to be read from an existing mmap of the
  FITS file. Backported from 3.1.2. (#200)

- Fixed a bug that could occur when opening a table containing
  multi-dimensional columns (i.e. via the TDIMn keyword) and then writing it
  out to a new file. Backported from 3.1.2. (#201)

- Fixed a bug on Python 3 where attempting to open a non-existent file on
  Python 3 caused a seemingly unrelated traceback. Backported from 3.1.2.
  (#203)

- Fixed a bug in fitsdiff that reported two header keywords containing NaN
  as value as different. Backported from 3.1.2. (#204)

- Fixed an issue in the tests that caused some tests to fail if pyfits is
  installed with read-only permissions. Backported from 3.1.2. (#208)

- Fixed a bug where instantiating a ``BinTableHDU`` from a numpy array
  containing boolean fields converted all the values to ``False``. Backported
  from 3.1.2. (#215)

- Fixed an issue where passing an array of integers into the constructor of
  ``Column()`` when the column type is floats of the same byte width caused the
  column array to become garbled. Backported from 3.1.2. (#218)

- Fixed a couple cases where creating a new table using TDIMn in some of the
  columns could caused a crash. Backported from 3.1.2.
  (spacetelescope/PyFITS#3)


3.1.1 (2013-01-02)
------------------

This is a bug fix release for the 3.1.x series.

Bug Fixes
^^^^^^^^^

- Improved handling of scaled images and pseudo-unsigned integer images in
  compressed image HDUs.  They now work more transparently like normal image
  HDUs with support for the ``do_not_scale_image_data`` and ``uint`` options,
  as well as ``scale_back`` and ``save_backup``.  The ``.scale()`` method
  works better too. (#88)

- Permits non-string values for the EXTNAME keyword when reading in a file,
  rather than throwing an exception due to the malformatting.  Added
  verification for the format of the EXTNAME keyword when writing. (#96)

- Added support for EXTNAME and EXTVER in PRIMARY HDUs.  That is, if EXTNAME
  is specified in the header, it will also be reflected in the ``.name``
  attribute and in ``pyfits.info()``.  These keywords used to be verboten in
  PRIMARY HDUs, but the latest version of the FITS standard allows them.
  (#151)

- HCOMPRESS can again be used to compress data cubes (and higher-dimensional
  arrays) so long as the tile size is effectively 2-dimensional. In fact,
  PyFITS will automatically use compatible tile sizes even if they're not
  explicitly specified. (#171)

- Added support for the optional ``endcard`` parameter in the
  ``Header.fromtextfile()`` and ``Header.totextfile()`` methods.  Although
  ``endcard=False`` was a reasonable default assumption, there are still text
  dumps of FITS headers that include the END card, so this should have been
  more flexible. (#176)

- Fixed a crash when running fitsdiff on two empty (that is, zero row) tables.
  (#178)

- Fixed an issue where opening files containing random groups HDUs in update
  mode could cause an unnecessary rewrite of the file even if none of the
  data is modified. (#179)

- Fixed a bug that could caused a deadlock in the filesystem on OSX if PyFITS
  is used with Numpy 1.7 in some cases. (#180)

- Fixed a crash when generating diff reports from diffs using the
  ``ignore_comments`` options. (#181)

- Fixed some bugs with WCS Paper IV record-valued keyword cards:

  - Cards that looked kind of like RVKCs but were not intended to be were
    over-permissively treated as such--commentary keywords like COMMENT and
    HISTORY were particularly affected. (#183)

  - Looking up a card in a header by its standard FITS keyword only should
    always return the raw value of that card.  That way cards containing
    values that happen to valid RVKCs but were not intended to be will still
    be treated like normal cards. (#184)

  - Looking up a RVKC in a header with only part of the field-specifier (for
    example "DP1.AXIS" instead of "DP1.AXIS.1") was implicitly treated as a
    wildcard lookup. (#184)

- Fixed a crash when diffing two FITS files where at least one contains a
  compressed image HDU which was not recognized as an image instead of a
  table. (#187)

- Fixed bugs in the backwards compatibility layer for the ``CardList.index``
  and ``CardList.count`` methods. (#190)

- Improved ``__repr__`` and text file representation of cards with long values
  that are split into CONTINUE cards. (#193)

- Fixed a crash when trying to assign a long (> 72 character) value to blank
  ('') keywords. This also changed how blank keywords are represented--there
  are still exactly 8 spaces before any commentary content can begin; this
  *may* affect the exact display of header cards that assumed there could be
  fewer spaces in a blank keyword card before the content begins. However, the
  current approach is more in line with the requirements of the FITS standard.
  (#194)


3.0.10 (2013-01-02)
-------------------

- Improved handling of scaled images and pseudo-unsigned integer images in
  compressed image HDUs.  They now work more transparently like normal image
  HDUs with support for the ``do_not_scale_image_data`` and ``uint`` options,
  as well as ``scale_back`` and ``save_backup``.  The ``.scale()`` method
  works better too.  Backported from 3.1.1. (#88)

- Permits non-string values for the EXTNAME keyword when reading in a file,
  rather than throwing an exception due to the malformatting.  Added
  verification for the format of the EXTNAME keyword when writing.  Backported
  from 3.1.1. (#96)

- Added support for EXTNAME and EXTVER in PRIMARY HDUs.  That is, if EXTNAME
  is specified in the header, it will also be reflected in the ``.name``
  attribute and in ``pyfits.info()``.  These keywords used to be verbotten in
  PRIMARY HDUs, but the latest version of the FITS standard allows them.
  Backported from 3.1.1. (#151)

- HCOMPRESS can again be used to compress data cubes (and higher-dimensional
  arrays) so long as the tile size is effectively 2-dimensional. In fact,
  PyFITS will not automatically use compatible tile sizes even if they're not
  explicitly specified.  Backported from 3.1.1. (#171)

- Fixed a bug when writing out files containing zero-width table columns,
  where the TFIELDS keyword would be updated incorrectly, leaving the table
  largely unreadable.  Backported from 3.1.0. (#174)

- Fixed an issue where opening files containing random groups HDUs in update
  mode could cause an unnecessary rewrite of the file even if none of the
  data is modified.  Backported from 3.1.1. (#179)

- Fixed a bug that could caused a deadlock in the filesystem on OSX if PyFITS
  is used with Numpy 1.7 in some cases. Backported from 3.1.1. (#180)


3.1 (2012-08-08)
----------------

Highlights
^^^^^^^^^^

- The ``Header`` object has been significantly reworked, and ``CardList``
  objects are now deprecated (their functionality folded into the ``Header``
  class).  See API Changes below for more details.

- Memory maps are now used by default to access HDU data.  See API Changes
  below for more details.

- Now includes a new version of the ``fitsdiff`` program for comparing two
  FITS files, and a new FITS comparison API used by ``fitsdiff``.  See New
  Features below.

API Changes
^^^^^^^^^^^

- The ``Header`` class has been rewritten, and the ``CardList`` class is
  deprecated.  Most of the basic details of working with FITS headers are
  unchanged, and will not be noticed by most users.  But there are differences
  in some areas that will be of interest to advanced users, and to application
  developers.  For full details of the changes, see the "Header Interface
  Transition Guide" section in the PyFITS documentation.  See ticket #64 on
  the PyFITS Trac for futher details and background. Some highlights are
  listed below:

  * The Header class now fully implements the Python dict interface, and can
    be used interchangably with a dict, where the keys are header keywords.

  * New keywords can be added to the header using normal keyword assignment
    (previously it was necessary to use ``Header.update`` to add new
    keywords).  For example::

        >>> header['NAXIS'] = 2

    will update the existing 'FOO' keyword if it already exists, or add a new
    one if it doesn't exist, just like a dict.

  * It is possible to assign both a value and a comment at the same time using
    a tuple::

        >>> header['NAXIS'] = (2, 'Number of axes')

  * To add/update a new card and ensure it's added in a specific location, use
    ``Header.set()``::

        >>> header.set('NAXIS', 2, 'Number of axes', after='BITPIX')

    This works the same as the old ``Header.update()``.  ``Header.update()``
    still works in the old way too, but is deprecated.

  * Although ``Card`` objects still exist, it generally is not necessary to
    work with them directly.  ``Header.ascardlist()``/``Header.ascard`` are
    deprecated and should not be used.  To directly access the ``Card``
    objects in a header, use ``Header.cards``.

  * To access card comments, it is still possible to either go through the
    card itself, or through ``Header.comments``.  For example::

       >>> header.cards['NAXIS'].comment
       Number of axes
       >>> header.comments['NAXIS']
       Number of axes

  * ``Card`` objects can now be used interchangeably with
    ``(keyword, value, comment)`` 3-tuples.  They still have ``.value`` and
    ``.comment`` attributes as well.  The ``.key`` attribute has been renamed
    to ``.keyword`` for consistency, though ``.key`` is still supported (but
    deprecated).

- Memory mapping is now used by default to access HDU data.  That is,
  ``pyfits.open()`` uses ``memmap=True`` as the default.  This provides better
  performance in the majority of use cases--there are only some I/O intensive
  applications where it might not be desirable.  Enabling mmap by default also
  enabled finding and fixing a large number of bugs in PyFITS' handling of
  memory-mapped data (most of these bug fixes were backported to PyFITS
  3.0.5). (#85)

  * A new ``pyfits.USE_MEMMAP`` global variable was added.  Set
    ``pyfits.USE_MEMMAP = False`` to change the default memmap setting for
    opening files.  This is especially useful for controlling the behavior in
    applications where pyfits is deeply embedded.

  * Likewise, a new ``PYFITS_USE_MEMMAP`` environment variable is supported.
    Set ``PYFITS_USE_MEMMAP = 0`` in your environment to change the default
    behavior.

- The ``size()`` method on HDU objects is now a ``.size`` property--this
  returns the size in bytes of the data portion of the HDU, and in most cases
  is equivalent to ``hdu.data.nbytes`` (#83)

- ``BinTableHDU.tdump`` and ``BinTableHDU.tcreate`` are deprecated--use
  ``BinTableHDU.dump`` and ``BinTableHDU.load`` instead.  The new methods
  output the table data in a slightly different format from previous versions,
  which places quotes around each value.  This format is compatible with data
  dumps from previous versions of PyFITS, but not vice-versa due to a parsing
  bug in older versions.

- Likewise the ``pyfits.tdump`` and ``pyfits.tcreate`` convenience function
  versions of these methods have been renamed ``pyfits.tabledump`` and
  ``pyfits.tableload``.  The old deprecated, but currently retained for
  backwards compatibility. (r1125)

- A new global variable ``pyfits.EXTENSION_NAME_CASE_SENSITIVE`` was added.
  This serves as a replacement for ``pyfits.setExtensionNameCaseSensitive``
  which is not deprecated and may be removed in a future version.  To enable
  case-sensitivity of extension names (i.e. treat 'sci' as distict from 'SCI')
  set ``pyfits.EXTENSION_NAME_CASE_SENSITIVE = True``.  The default is
  ``False``. (r1139)

- A new global configuration variable ``pyfits.STRIP_HEADER_WHITESPACE`` was
  added.  By default, if a string value in a header contains trailing
  whitespace, that whitespace is automatically removed when the value is read.
  Now if you set ``pyfits.STRIP_HEADER_WHITESPACE = False`` all whitespace is
  preserved. (#146)

- The old ``classExtensions`` extension mechanism (which was deprecated in
  PyFITS 3.0) is removed outright.  To our knowledge it was no longer used
  anywhere. (r1309)

- Warning messages from PyFITS issued through the Python warnings API are now
  output to stderr instead of stdout, as is the default.  PyFITS no longer
  modifies the default behavior of the warnings module with respect to which
  stream it outputs to. (r1319)

- The ``checksum`` argument to ``pyfits.open()`` now accepts a value of
  'remove', which causes any existing CHECKSUM/DATASUM keywords to be ignored,
  and removed when the file is saved.

New Features
^^^^^^^^^^^^

- Added support for the proposed "FITS" extension HDU type.  See
  http://listmgr.cv.nrao.edu/pipermail/fitsbits/2002-April/001094.html.  FITS
  HDUs contain an entire FITS file embedded in their data section.  `FitsHDU`
  objects work like other HDU types in PyFITS.  Their ``.data`` attribute
  returns the raw data array.  However, they have a special ``.hdulist``
  attribute which processes the data as a FITS file and returns it as an
  in-memory HDUList object.  FitsHDU objects also support a
  ``FitsHDU.fromhdulist()`` classmethod which returns a new `FitsHDU` object
  that embeds the supplied HDUList. (#80)

- Added a new ``.is_image`` attribute on HDU objects, which is True if the HDU
  data is an 'image' as opposed to a table or something else.  Here the
  meaning of 'image' is fairly loose, and mostly just means a Primary or Image
  extension HDU, or possibly a compressed image HDU (#71)

- Added an ``HDUList.fromstring`` classmethod which can parse a FITS file
  already in memory and instantiate and ``HDUList`` object from it.  This
  could be useful for integrating PyFITS with other libraries that work on
  FITS file, such as CFITSIO.  It may also be useful in streaming
  applications.  The name is a slight misnomer, in that it actually accepts
  any Python object that implements the buffer interface, which includes
  ``bytes``, ``bytearray``, ``memoryview``, ``numpy.ndarray``, etc. (#90)

- Added a new ``pyfits.diff`` module which contains facilities for comparing
  FITS files.  One can use the ``pyfits.diff.FITSDiff`` class to compare two
  FITS files in their entirety.  There is also a ``pyfits.diff.HeaderDiff``
  class for just comparing two FITS headers, and other similar interfaces.
  See the PyFITS Documentation for more details on this interface.  The
  ``pyfits.diff`` module powers the new ``fitsdiff`` program installed with
  PyFITS.  After installing PyFITS, run ``fitsdiff --help`` for usage details.

- ``pyfits.open()`` now accepts a ``scale_back`` argument.  If set to
  ``True``, this automatically scales the data using the original BZERO and
  BSCALE parameters the file had when it was first opened, if any, as well as
  the original BITPIX.  For example, if the original BITPIX were 16, this
  would be equivalent to calling ``hdu.scale('int16', 'old')`` just before
  calling ``flush()`` or ``close()`` on the file.  This option applies to all
  HDUs in the file. (#120)

- ``pyfits.open()`` now accepts a ``save_backup`` argument.  If set to
  ``True``, this automatically saves a backup of the original file before
  flushing any changes to it (this of course only applies to update and append
  mode).  This may be especially useful when working with scaled image data.
  (#121)

Changes in Behavior
^^^^^^^^^^^^^^^^^^^

- Warnings from PyFITS are not output to stderr by default, instead of stdout
  as it has been for some time.  This is contrary to most users' expectations
  and makes it more difficult for them to separate output from PyFITS from the
  desired output for their scripts. (r1319)

Bug Fixes
^^^^^^^^^

- Fixed ``pyfits.tcreate()`` (now ``pyfits.tableload()``) to be more robust
  when encountering blank lines in a column definition file (#14)

- Fixed a fairly rare crash that could occur in the handling of CONTINUE cards
  when using Numpy 1.4 or lower (though 1.4 is the oldest version supported by
  PyFITS). (r1330)

- Fixed ``_BaseHDU.fromstring`` to actually correctly instantiate an HDU
  object from a string/buffer containing the header and data of that HDU.
  This allowed for the implementation of ``HDUList.fromstring`` described
  above. (#90)

- Fixed a rare corner case where, in some use cases, (mildly, recoverably)
  malformatted float values in headers were not properly returned as floats.
  (#137)

- Fixed a corollary to the previous bug where float values with a leading zero
  before the decimal point had the leading zero unnecessarily removed when
  saving changes to the file (eg. "0.001" would be written back as ".001" even
  if no changes were otherwise made to the file). (#137)

- When opening a file containing CHECKSUM and/or DATASUM keywords in update
  mode, the CHECKSUM/DATASUM are updated and preserved even if the file was
  opened with checksum=False.  This change in behavior prevents checksums from
  being unintentionally removed. (#148)

- Fixed a bug where ``ImageHDU.scale(option='old')`` wasn't working at all--it
  was not restoring the image to its original BSCALE and BZERO values. (#162)

- Fixed a bug when writing out files containing zero-width table columns,
  where the TFIELDS keyword would be updated incorrectly, leaving the table
  largely unreadable.  This fix will be backported to the 3.0.x series in
  version 3.0.10.  (#174)


3.0.9 (2012-08-06)
------------------

This is a bug fix release for the 3.0.x series.

Bug Fixes
^^^^^^^^^

- Fixed ``Header.values()``/``Header.itervalues()`` and ``Header.items()``/
  ``Header.iteritems()`` to correctly return the different values for
  duplicate keywords (particularly commentary keywords like HISTORY and
  COMMENT).  This makes the old Header implementation slightly more compatible
  with the new implementation in PyFITS 3.1. (#127)

  .. note::
      This fix did not change the existing behavior from earlier PyFITS
      versions where ``Header.keys()`` returns all keywords in the header with
      duplicates removed.  PyFITS 3.1 changes that behavior, so that
      ``Header.keys()`` includes duplicates.

- Fixed a bug where ``ImageHDU.scale(option='old')`` wasn't working at all--it
  was not restoring the image to its original BSCALE and BZERO values. (#162)

- Fixed a bug where opening a file containing compressed image HDUs in
  'update' mode and then immediately closing it without making any changes
  caused the file to be rewritten unncessarily. (#167)

- Fixed two memory leaks that could occur when writing compressed image data,
  or in some cases when opening files containing compressed image HDUs in
  'update' mode. (#168)


3.0.8 (2012-06-04)
------------------

Changes in Behavior
^^^^^^^^^^^^^^^^^^^

- Prior to this release, image data sections did not work with scaled
  data--that is, images with non-trivial BSCALE and/or BZERO values.
  Previously, in order to read such images in sections, it was necessary to
  manually apply the BSCALE+BZERO to each section.  It's worth noting that
  sections *did* support pseudo-unsigned ints (flakily).  This change just
  extends that support for general BSCALE+BZERO values.

Bug Fixes
^^^^^^^^^

- Fixed a bug that prevented updates to values in boolean table columns from
  being saved.  This turned out to be a symptom of a deeper problem that could
  prevent other table updates from being saved as well. (#139)

- Fixed a corner case in which a keyword comment ending with the string "END"
  could, in some circumstances, cause headers (and the rest of the file after
  that point) to be misread. (#142)

- Fixed support for scaled image data and psuedo-unsigned ints in image data
  sections (``hdu.section``).  Previously this was not supported at all.  At
  some point support was supposedly added, but it was buggy and incomplete.
  Now the feature seems to work much better. (#143)

- Fixed the documentation to point out that image data sections *do* support
  non-contiguous slices (and have for a long time).  The documentation was
  never updated to reflect this, and misinformed users that only contiguous
  slices were supported, leading to some confusion. (#144)

- Fixed a bug where creating an ``HDUList`` object containing multiple PRIMARY
  HDUs caused an infinite recursion when validating the object prior to
  writing to a file. (#145)

- Fixed a rare but serious case where saving an update to a file that
  previously had a CHECKSUM and/or DATASUM keyword, but removed the checksum
  in saving, could cause the file to be slightly corrupted and unreadable.
  (#147)

- Fixed problems with reading "non-standard" FITS files with primary headers
  containing SIMPLE = F.  PyFITS has never made many guarantees as to how such
  files are handled.  But it should at least be possible to read their
  headers, and the data if possible.  Saving changes to such a file should not
  try to prepend an unwanted valid PRIMARY HDU. (#157)

- Fixed a bug where opening an image with ``disable_image_compression = True``
  caused compression to be disabled for all subsequent ``pyfits.open()`` calls.
  (r1651)


3.0.7 (2012-04-10)
------------------

Changes in Behavior
^^^^^^^^^^^^^^^^^^^

- Slices of GroupData objects now return new GroupData objects instead of
  extended multi-row _Group objects. This is analogous to how PyFITS 3.0 fixed
  FITS_rec slicing, and should have been fixed for GroupData at the same time.
  The old behavior caused bugs where functions internal to Numpy expected that
  slicing an ndarray would return a new ndarray.  As this is a rare usecase
  with a rare feature most users are unlikely to be affected by this change.

- The previously internal _Group object for representing individual group
  records in a GroupData object are renamed Group and are now a public
  interface.  However, there's almost no good reason to create Group objects
  directly, so it shouldn't be considered a "new feature".

- An annoyance from PyFITS 3.0.6 was fixed, where the value of the EXTEND
  keyword was always being set to F if there are not actually any extension
  HDUs.  It was unnecessary to modify this value.

Bug Fixes
^^^^^^^^^

- Fixed GroupData objects to return new GroupData objects when sliced instead
  of _Group record objects.  See "Changes in behavior" above for more details.

- Fixed slicing of Group objects--previously it was not possible to slice
  slice them at all.

- Made it possible to assign `np.bool_` objects as header values. (#123)

- Fixed overly strict handling of the EXTEND keyword; see "Changes in
  behavior" above. (#124)

- Fixed many cases where an HDU's header would be marked as "modified" by
  PyFITS and rewritten, even when no changes to the header are necessary.
  (#125)

- Fixed a bug where the values of the PTYPEn keywords in a random groups HDU
  were forced to be all lower-case when saving the file. (#130)

- Removed an unnecessary inline import in `ExtensionHDU.__setattr__` that was
  causing some slowdown when opening files containing a large number of
  extensions, plus a few other small (but not insignficant) performance
  improvements thanks to Julian Taylor. (#133)

- Fixed a regression where header blocks containing invalid end-of-header
  padding (i.e. null bytes instead of spaces) couldn't be parsed by PyFITS.
  Such headers can be parsed again, but a warning is raised, as such headers
  are not valid FITS. (#136)

- Fixed a memory leak where table data in random groups HDUs weren't being
  garbage collected. (#138)


3.0.6 (2012-02-29)
------------------

Highlights
^^^^^^^^^^

The main reason for this release is to fix an issue that was introduced in
PyFITS 3.0.5 where merely opening a file containing scaled data (that is, with
non-trivial BSCALE and BZERO keywords) in 'update' mode would cause the data
to be automatically rescaled--possibly converting the data from ints to
floats--as soon as the file is closed, even if the application did not touch
the data.  Now PyFITS will only rescale the data in an extension when the data
is actually accessed by the application.  So opening a file in 'update' mode
in order to modify the header or append new extensions will not cause any
change to the data in existing extensions.

This release also fixes a few Windows-specific bugs found through more
extensive Windows testing, and other miscellaneous bugs.

Bug Fixes
^^^^^^^^^

- More accurate error messages when opening files containing invalid header
  cards. (#109)

- Fixed a possible reference cycle/memory leak that was caught through more
  extensive testing on Windows. (#112)

- Fixed 'ostream' mode to open the underlying file in 'wb' mode instead of 'w'
  mode. (#112)

- Fixed a Windows-only issue where trying to save updates to a resized FITS
  file could result in a crash due to there being open mmaps on that file.
  (#112)

- Fixed a crash when trying to create a FITS table (i.e. with new_table())
  from a Numpy array containing bool fields. (#113)

- Fixed a bug where manually initializing an ``HDUList`` with a list of of
  HDUs wouldn't set the correct EXTEND keyword value on the primary HDU.
  (#114)

- Fixed a crash that could occur when trying to deepcopy a Header in Python <
  2.7. (#115)

- Fixed an issue where merely opening a scaled image in 'update' mode would
  cause the data to be converted to floats when the file is closed. (#119)


3.0.5 (2012-01-30)
------------------

- Fixed a crash that could occur when accessing image sections of files
  opened with memmap=True. (r1211)

- Fixed the inconsistency in the behavior of files opened in 'readonly' mode
  when memmap=True vs. when memmap=False.  In the latter case, although
  changes to array data were not saved to disk, it was possible to update the
  array data in memory.  On the other hand with memmap=True, 'readonly' mode
  prevented even in-memory modification to the data.  This is what
  'copyonwrite' mode was for, but difference in behavior was confusing.  Now
  'readonly' is equivalent to 'copyonwrite' when using memmap.  If the old
  behavior of denying changes to the array data is necessary, a new
  'denywrite' mode may be used, though it is only applicable to files opened
  with memmap. (r1275)

- Fixed an issue where files opened with memmap=True would return image data
  as a raw numpy.memmap object, which can cause some unexpected
  behaviors--instead memmap object is viewed as a numpy.ndarray. (r1285)

- Fixed an issue in Python 3 where a workaround for a bug in Numpy on Python 3
  interacted badly with some other software, namely to vo.table package (and
  possibly others). (r1320, r1337, and #110)

- Fixed buggy behavior in the handling of SIGINTs (i.e. Ctrl-C keyboard
  interrupts) while flushing changes to a FITS file.  PyFITS already prevented
  SIGINTs from causing an incomplete flush, but did not clean up the signal
  handlers properly afterwards, or reraise the keyboard interrupt once the
  flush was complete. (r1321)

- Fixed a crash that could occur in Python 3 when opening files with checksum
  checking enabled. (r1336)

- Fixed a small bug that could cause a crash in the `StreamingHDU` interface
  when using Numpy below version 1.5.

- Fixed a crash that could occur when creating a new `CompImageHDU` from an
  array of big-endian data. (#104)

- Fixed a crash when opening a file with extra zero padding at the end.
  Though FITS files should not have such padding, it's not explictly forbidden
  by the format either, and PyFITS shouldn't stumble over it. (#106)

- Fixed a major slowdown in opening tables containing large columns of string
  values.  (#111)


3.0.4 (2011-11-22)
------------------

- Fixed a crash when writing HCOMPRESS compressed images that could happen on
  Python 2.5 and 2.6. (r1217)

- Fixed a crash when slicing an table in a file opened in 'readonly' mode with
  memmap=True. (r1230)

- Writing changes to a file or writing to a new file verifies the output in
  'fix' mode by default instead of 'exception'--that is, PyFITS will
  automatically fix common FITS format errors rather than raising an
  exception. (r1243)

- Fixed a bug where convenience functions such as getval() and getheader()
  crashed when specifying just 'PRIMARY' as the extension to use (r1263).

- Fixed a bug that prevented passing keyword arguments (beyond the standard
  data and header arguments) as positional arguments to the constructors of
  extension HDU classes.

- Fixed some tests that were failing on Windows--in this case the tests
  themselves failed to close some temp files and Windows refused to delete them
  while there were still open handles on them. (r1295)

- Fixed an issue with floating point formatting in header values on Python 2.5
  for Windows (and possibly other platforms).  The exponent was zero-padded to
  3 digits; although the FITS standard makes no specification on this, the
  formatting is now normalized to always pad the exponent to two digits.
  (r1295)

- Fixed a bug where long commentary cards (such as HISTORY and COMMENT) were
  broken into multiple CONTINUE cards.  However, commentary cards are not
  expected to be found in CONTINUE cards.  Instead these long cards are broken
  into multiple commentary cards. (#97)

- GZIP/ZIP-compressed FITS files can be detected and opened regardless of
  their filename extension. (#99)

- Fixed a serious bug where opening scaled images in 'update' mode and then
  closing the file without touching the data would cause the file to be
  corrupted. (#101)


3.0.3 (2011-10-05)
------------------

- Fixed several small bugs involving corner cases in record-valued keyword
  cards (#70)

- In some cases HDU creation failed if the first keyword value in the header
  was not a string value (#89)

- Fixed a crash when trying to compute the HDU checksum when the data array
  contains an odd number of bytes (#91)

- Disabled an unnecessary warning that was displayed on opening compressed
  HDUs with disable_image_compression = True (#92)

- Fixed a typo in code for handling HCOMPRESS compressed images.


3.0.2 (2011-09-23)
------------------

- The ``BinTableHDU.tcreate`` method and by extension the ``pyfits.tcreate``
  function don't get tripped up by blank lines anymore (#14)

- The presence, value, and position of the EXTEND keyword in Primary HDUs is
  verified when reading/writing a FITS file (#32)

- Improved documentation (in warning messages as well as in the handbook) that
  PyFITS uses zero-based indexing (as one would expect for C/Python code, but
  contrary to the PyFITS standard which was written with FORTRAN in mind)
  (#68)

- Fixed a bug where updating a header card comment could cause the value to be
  lost if it had not already been read from the card image string.

- Fixed a related bug where changes made directly to Card object in a header
  (i.e. assigning directly to card.value or card.comment) would not propagate
  when flushing changes to the file (#69) [Note: This and the bug above it
  were originally reported as being fixed in version 3.0.1, but the fix was
  never included in the release.]

- Improved file handling, particularly in Python 3 which had a few small file
  I/O-related bugs (#76)

- Fixed a bug where updating a FITS file would sometimes cause it to lose its
  original file permissions (#79)

- Fixed the handling of TDIMn keywords; 3.0 added support for them, but got
  the axis order backards (they were treated as though they were row-major)
  (#82)

- Fixed a crash when a FITS file containing scaled data is opened and
  immediately written to a new file without explicitly viewing the data first
  (#84)

- Fixed a bug where creating a table with columns named either 'names' or
  'formats' resulted in an infinite recursion (#86)


3.0.1 (2011-09-12)
------------------

- Fixed a bug where updating a header card comment could cause the value to be
  lost if it had not already been read from the card image string.

- Changed ``_TableBaseHDU.data`` so that if the data contain an empty table a
  ``FITS_rec`` object with zero rows is returned rather than ``None``.

- The ``.key`` attribute of ``RecordValuedKeywordCards`` now returns the full
  keyword+field-specifier value, instead of just the plain keyword (#46)

- Fixed a related bug where changes made directly to Card object in a header
  (i.e. assigning directly to card.value or card.comment) would not propagate
  when flushing changes to the file (#69)

- Fixed a bug where writing a table with zero rows could fail in some cases
  (#72)

- Miscellanous small bug fixes that were causing some tests to fail,
  particularly on Python 3 (#74, #75)

- Fixed a bug where creating a table column from an array in non-native byte
  order would not preserve the byte order, thus interpreting the column array
  using the wrong byte order (#77)


3.0.0 (2011-08-23)
--------------------

- Contains major changes, bumping the version to 3.0

- Large amounts of refactoring and reorganization of the code; tried to
  preserve public API backwards-compatibility with older versions (private API
  has many changes and is not guaranteed to be backwards-compatible).  There
  are a few small public API changes to be aware of:

  * The pyfits.rec module has been removed completely.  If your version of
    numpy does not have the numpy.core.records module it is too old to be used
    with PyFITS.

  * The ``Header.ascardlist()`` method is deprecated--use the ``.ascard``
    attribute instead.

  * ``Card`` instances have a new ``.cardimage`` attribute that should be used
    rather than ``.ascardimage()``, which may become deprecated.

  * The ``Card.fromstring()`` method is now a classmethod.  It returns a new
    ``Card`` instance rather than modifying an existing instance.

  * The ``req_cards()`` method on HDU instances has changed:  The ``pos``
    argument is not longer a string.  It is either an integer value (meaning
    the card's position must match that value) or it can be a function that
    takes the card's position as it's argument, and returns True if the
    position is valid.  Likewise, the ``test`` argument no longer takes a
    string, but instead a function that validates the card's value and returns
    True or False.

  * The ``get_coldefs()`` method of table HDUs is deprecated.  Use the
    ``.columns`` attribute instead.

  * The ``ColDefs.data`` attribute is deprecated--use ``ColDefs.columns``
    instead (though in general you shouldn't mess with it directly--it might
    become internal at some point).

  * ``FITS_record`` objects take ``start`` and ``end`` as arguments instead of
    ``startColumn`` and ``endColumn`` (these are rarely created manually, so
    it's unlikely that this change will affect anyone).

  * ``BinTableHDU.tcreate()`` is now a classmethod, and returns a new
    ``BinTableHDU`` instance.

  * Use ``ExtensionHDU`` and ``NonstandardExtHDU`` for making new extension HDU
    classes.  They are now public interfaces, wheres previously they were
    private and prefixed with underscores.

  * Possibly others--please report if you find any changes that cause
    difficulties.

- Calls to deprecated functions will display a Deprecation warning.  However,
  in Python 2.7 and up Deprecation warnings are ignored by default, so run
  Python with the `-Wd` option to see if you're using any deprecated
  functions.  If we get close to actually removing any functions, we might
  make the Deprecation warnings display by default.

- Added basic Python 3 support

- Added support for multi-dimensional columns in tables as specified by the
  TDIMn keywords (#47)

- Fixed a major memory leak that occurred when creating new tables with the
  ``new_table()`` function (#49)
  be padded with zero-bytes) vs ASCII tables (where strings are padded with
  spaces) (#15)

- Fixed a bug in which the case of Random Access Group parameters names was not
  preserved when writing (#41)

- Added support for binary table fields with zero width (#42)

- Added support for wider integer types in ASCII tables; although this is non-
  standard, some GEIS images require it (#45)

- Fixed a bug that caused the index_of() method of HDULists to crash when the
  HDUList object is created from scratch (#48)

- Fixed the behavior of string padding in binary tables (where strings should
  be padded with nulls instead of spaces)

- Fixed a rare issue that caused excessive memory usage when computing
  checksums using a non-standard block size (see r818)

- Add support for forced uint data in image sections (#53)

- Fixed an issue where variable-length array columns were not extended when
  creating a new table with more rows than the original (#54)

- Fixed tuple and list-based indexing of FITS_rec objects (#55)

- Fixed an issue where BZERO and BSCALE keywords were appended to headers in
  the wrong location (#56)

- ``FITS_record`` objects (table rows) have full slicing support, including
  stepping, etc. (#59)

- Fixed a bug where updating multiple files simultaneously (such as when
  running parallel processes) could lead to a race condition with mktemp()
  (#61)

- Fixed a bug where compressed image headers were not in the order expected by
  the funpack utility (#62)
jperkin pushed a commit that referenced this pull request Feb 6, 2014
=============

Some extracts from the git log:

* Add new DNSKEY algorithms registered by IANA
* Add AUTH checking over both UDP and TCP. [Fixes #80]
* New queue dispatch
* Clean out dead code, add tests to new code and add log entries.
  [Closes #89]
* Log when an AS prefix is discarded
* Add simple command-line tool to add domains to the dispatcher queue
* Add callback functionality to logger
* Perl 5.18 fix (hash key order randomization)
* The authoritative servers for ARPA are the root servers, which caused
  problems for our parent-finding algorithm. Worked around by special
  -casing so that single-label names always return root as the parent.
  [Closes #92]
* Make allowed maximum NSEC3 iterations a policy parameter
* Detect DNSCurve-supporting nameservers
* Significant improvements to glue checking
* Fix for referral check under undelegated
* More tests for new glue-checking code
* Detect names in domains reserved by IANA (RFC 6761). [Closes #96]
* Log messages for reserved ASs. [Closes #97]
jperkin pushed a commit that referenced this pull request Feb 27, 2014
0.991  2014-01-16T23:24:33Z
     - Greatly simplified determining the Firebird ISQL client. It no longer
       tries so hard to find a full path, but does seach through the path list
       for a likely candidate between fbsql, isql-fb, and isql (or equivalents
       ending in .exe on Windows).
     - Removed a bunch of inappropriately pasted stuff from the Firebird
       tutorial, and updated it a bit.
     - `HEAD` and `ROOT` are now recognized as aliases for `@HEAD` and
       `@ROOT`, when querying the database, too. That means that `revert --to
       HEAD` now works the same as `revert --to @HEAD`, as had been expected
       in v0.990.
     - Eliminated "use of uninitialized value" warnings when database
       connections fail.
     - Reduced the minimum required DBD::Firebird to v1.11.
     - Fixed the `--verbose` option to the `target` command.
     - Eliminated more user-configuration issues in tests, thanks to
       chromatic.
     - Fixed test failures when the `$PGPASSWORD` environment variable is set,
       thanks to Ioan Rogers's test smoker.

0.990  2014-01-04T01:14:24Z
     [New Features]
     - Added new command and feature: `target`. Use it to manage multiple
       database targets, each with an associated URI and, optionally, a
       registry name and command-line client. Inspired by Git remotes.
     - Added Firebird engine. Three cheers to Ștefan Suciu for this
       contribution!
     - Added support for the generation of arbitrary scripts from templates to
       the `add` command. Just add template files to subdirectories of the
       `templates` directory, and scripts will be created in a directory of
       the same name based on those templates.
     - Added `--open-editor` option (and aliases) to the `add` and `rework`
       commands. This option will open the newly-added change scripts in the
       preferred editor. Thanks to Thomas Sibley for the patch!

     [Improvements]
     - Improved database driver loading to ensure the proper version of the
       driver is required.
     - Non-fatal but possibly unexpected messages -- which correspond to exit
       value 1 -- now send their messages to STDOUT instead of STDERR, and
       respect the `--quiet` option. Thanks to @giorgio-v for the report!
     - Added or replaced the `--target` option to commands that connect to a
       database to specify the name of target managed by the new `target`
       command or a database URI.
     - `HEAD` and `ROOT` are now recognized as aliases for `@HEAD` and
       `@ROOT`, respectively, since they are disallowed as change names,
       anyway, and folks often use them out of habit from Git.

     [Internals]
     - Replaced the engine-specific connection attributes with three
       attributes use by every engine:
       * `target`: The name of a target managed by the new `target` command.
         Defaults to a value stored for the `core.$engine.target`
         configuration variable. If that variable does not exist, the target
         falls back on the stringification of `uri`.
       * `uri`: a database URI with the format `db:{engine}:{dbname}` or
         `db:{engine}://{user}:{password}@{host}:{port}/{dbname}`. If its
         value is not passed to the constructor, a `uri` value is looked up
         for the associated `target`. If `target` is not passed or configured,
         or if it has no URI associated with it, the `config.$engine.uri`
         configuration variable is used. If that value does not exist, the URI
         defaults to `db:$engine:`. In any of these cases, if any of the
         `--db-*` options are passed, they will be merged into the URI.
       * `registry`: the name to use for the Sqitch registry schema or
         database, where Sqitch's own data will be stored, as appropriate to
         each engine. If its value is not passed to the constructor, a
         `registry` value is looked up for the associated `target`. If
         `target` is not passed or configured, or if it has no registry
         associated with it, the `config.$engine.registry` configuration
         variable is used. If no value is found there, it defaults to an
         engine-specific value, usually "sqitch".

     [Bug Fixes]
     - Fixed a bug when installing under local::lib. Thanks to Thomas Sibley
       for the pull request!
     - Eliminated "Wide character in print" warnings when piping the `log`
       command.
     - Documented that reworked changes do not have their verify tests run by
       the `verify` command. They do run when using the `--verify` deploy
       option.
     - Removed the documentation for the `add.with_deploy`, `add.with_revert`,
       and `add.with_verify` configuration variables, which were never
       implemented.

     [Deprecations]
     - Deprecated engine-specific connection attributes and configuration
       variables. See the "Internals" section for their replacements. The
       deprecated options are:
       * `core.$engine.username`
       * `core.$engine.password`
       * `core.$engine.db_name`
       * `core.$engine.host`
       * `core.$engine.port`
       * `core.$engine.sqitch_schema`
       * `core.$engine.sqitch_db`
     - Deprecated all command-specific options with the string "target" in
       them, such as `--to-target`, `--upto-target`, etc. They have been
       replaced with options containing the string "change", instead, such as
       `--to-change` and `--upto-change`. Few people used these options,
       preferring their shorter aliases (`--to`, `--upto`, etc.).
     - Deprecated the `--deploy-template`, `--revert-template`, and
       `--verify-template` options to the `add` command. They are replaced
       with a single option, `--use` which takes a key/value pair for the
       script name and template path. This makes it useful for arbitrary
       script generation, as well.
     - Deprecated the `--deploy`, `--revert`, and `--verify` options to the
       `add` command, as well as their `--no-*` variants. They are replaced
       with two new options, `--with` and `--without`, to which a script name
       is passed. These are useful for arbitrary script generation, as well.
     - Deprecated the `add.deploy_template`, `add.revert_template`, and
       `add.verify_template` configuration settings. They have been replaced
       with a section, `add.templates`, which is more general, and supports
       arbitrary script generation, as well.

     [Incompatibilities]
     - Removed the undocumented `--test` option to the `add` command.
     - Changed the meaning of `--target` from specifying a change to
       specifying a deployment target. Use the new `--change` option to
       specify a change.

0.983  2013-11-21T21:50:12Z
     - Fixed "Use of uninitialized value" in the MySQL engine. Thanks to
       Jean-Michel REY for the report.
     - All tests now protect against failures due to the presence of the
       `$SQITCH_CONFIG` environment variable (issue #114).
     - The installer now respects the `distdir` option to `Build.PL` when
       searching for existing templates. Important for packaging.
     - Fixed the error "Table 'sqitch.changes' doesn't exist" when deploying
       to a MySQL database that exists but has not been initialized. Thanks to
       Jean-Michel REY for the report!
     - Refactored the handling of the C<--log-only> option so it sets an
       engine attribute, rather than passing the flag to a whole stack of
       method calls.
     - Fixed "Argument "en_us" isn't numeric" error on Windows.
     - Now using `LC_ALL` instead of `LC_MESSAGES` when setting the locale, as
       the latter is not present on Windows.
     - The sqitch-pg RPM now requires DBD::Pg 2.0.0 or higher.
     - Improved handling of invalid command names so that the error message is
       less ambiguous when triggered by a Perl parse error.
     - Added `-m` as an alias for `--note`, for you Git folks out there.
     - Added exception handling to the Postgres and Oracle engines to avoid
       unexpected errors when deploying to a database that has not been
       deployed to before.
     - Updated detection of an uninitialized database to double-check with the
       engine that it really thinks it's uninitialized, not just that the
       "changes" table is missing. This should catch the case where the
       database has its own "changes" table unrelated to Sqitch.

0.982  2013-09-11T18:26:07Z
     - Errors thrown by Template toolkit are no longer silently ignored.
     - Variables passed to change templates are now cloned before the
       execution of each template. This prevents one template from deleting
       variable values another template might also need.
     - Fixed "The getpwnam function is unimplemented" errors on Win32.
     - No longer runs revert scripts when deploying with `--log-only` and a
       verify script fails, as that could lead to data loss (yikes!). Thanks
       to BryLo for the report (issue #112).

0.981  2013-09-06T00:22:26Z
     - Now use Encode::Locale to try to decode the user's full name from the
       system encoding when fetched from the system on all OSes. Note that
       this is not necessary if the `user.name` config is explicitly set, as
       recommended. Issue #107.
     - Removed the special-case handling of the user's full name fetched from
       the system on OS X.
     - Added call to `sleep` to test in an attempt to fix SQLite failures.
     - The SQLite engine now requires that the SQLite client be 3.3.9 or
       later, for support of the `-bail` option.
     - Bug fix: The MySQL engine now properly uses the host, port, and
       password options when connecting to the database. Thanks to vreb87 for
       the report!

0.980  2013-08-28T21:40:00Z
     - Changed the default SQLite Sqitch database name from
       `$dbname-sqitch.$suffix` to `sqitch.$suffix`. The `$suffix` still
       comes from the destination database name. This breaks compatibility
       with previous releases. If you need the old name, set it with
       `sqitch config core.sqlite.sqitch_db $dbname`.
     - Fixed encoding of the user's full name when fetched from the system on
       OS X. Thanks to Tomohiro Hosaka for the pull request!
     - Fixed test failures when DBD::SQLite is installed but compiled with
       SQLite 3.7.10 or lower.
     - Fixed a bug where declaring a dependency on a reworked change would
       incorrectly result in the error "Key "foo" matches multiple changes".
       Thanks to BryLo for the report (issue #103).
     - Modified tests to allow them to run in parallel without stomping on
       each other.
     - Bundling of options, such as `-vvv`, now works properly (issue #108).
     - Added alias `--get-regexp` for `--get-regex` to the `config` command.
       This brings it in line with the documentation for the `config` command
       (Issue #110).
     - Fixed all of the `config` command actions that contain a dash so that
       they actually work. Thanks to Ștefan Suciu for the report (issue #110).
     - All leading and trailing white space is now trimmed from plan notes,
       rather than just vertical white space. Thanks to Ronan Dunklau for the
       report (issue #106).
     - The `status` command now notices if the specified database is
       uninitialized and says as much, rather than dying with an SQL error
       (issue #109).
     - When reading the user's username from the system Sqitch now uses
       Encode::Locale to try to decode the value from the system encoding.
       Issue #107.
     - Compatibility change: Changed the location and name of script template
       files. Previously they were called `deploy.tmpl`, `revert.tmpl`, and
       `verify.tmpl`, and they lived in the `templates` subdirectory of the
       system-wide and user-specific configuration directories. They now live
       in subdirectories of the `templates` directory named for each action
       (deploy, revert, and verify), and with file names matching engine names
       (`pg.tmpl`, `sqlite.tmpl`, `oracle.tmpl`, and `mysql.tmpl`). The
       installer will move old files from the system-wide config directory
       (`sqitch --etc-path`) to their new homes, named `pg.tmpl` and
       `sqlite.tmpl`. It assumes no customizations exist for Oracle. If that's
       not true in your case, simply copy the `pg.tmpl` files to
       `oracle.tmpl`.
     - Added the `--template-name` option to the `add` command. By default, it
       looks for templates named for the current engine. The option allows for
       the user of task-specific templates. For example, if you create
       templates named `createtable.tmpl` in the `deploy`, `revert`, and
       `verify` subdirectories of `~/.sqitch/templates`, You can specify
       `--template-name createtable` to use those templates when adding a
       change.
     - Added the `--exists` option to the `show` command.
     - Fixed the `--set` option to the `add` command so that duplicate keys
       have their values passed to the template as an array, as documented.
     - If Template::Toolkit is installed, the `add` command will use it for
       processing templates instead of Template::Tiny. This makes it easy to
       upgrade the templating environment just by installing a module.

0.973  2013-07-03T13:47:22Z
     - Now Require DBD::SQLite compiled with SQLite 3.7.11 or higher. It
       always has, but now it throws a meaningful exception if an older
       version is compiled into DBD::SQLite. Thanks to Damon Buckwalter for
       the report.
     - When a deploy fails because of missing dependencies, the list of
       missing dependencies no longer contains duplicates. Thanks to Damon
       Buckwalter for the report.

0.972  2013-05-31T23:26:52Z
     - Fixed test failures on Windows.
     - Fixed locale configuration on Windows so that `sqitch` will actually
       run, rather than exiting with an error about `LC_MESSAGES` not being
       set.
     - Fixed a test hang on Windows when DBD::Oracle is installed but the
       Oracle libraries (`OCI.dll`) are not or cannot be found. This was
       triggering a UI dialog that did not dismiss itself. Using Win32::API
       to work around this issue. Thanks to Jan Dubois for the fix.

0.971  2013-05-18T21:08:51Z
     - Removed most uses of the smartmatch operator, since as of Perl 5.17.11
       it is marked as experimental, and silenced the warning where it is
       still used.
     - Added 0.1s sleep between logging changes back-to-back in the engine
       tests, mostly to try to get SQLite to generate different timestamps.
       Pretty sure the recent test failures have been due to the passage of
       less than a millisecond between the two inserts.
     - Added the `shell` and `quote_shell` methods to Sqitch.pm for shelling
       out a command.
     - Sqitch now shells out to an editor when opening a file for the user to
       edit. For example, if the `$EDITOR` environment variable is set to
       `"emacs -nw"`, it will now work. Thanks to Florian Ragwitz for the
       report (issue #80).
     - Removed the pod-checking tests from the distribution.

0.970 2013-05-09T00:21:06Z
     - Fixed the default ordering of changes displayed by the `plan` command.
       They are now ascending by default.
     - Switched to PerlIO::utf8_strict for fast character encoding and
       decoding.
     - The help emitted when an unknown option is passed to `sqitch` now
       consists of a usage statement and brief table of options, rather than
       the entire man page.
     - Added the project name in a header to the output of the `plan` command.
     - Added the Oracle engine.
     - Added `sqitchtutorial-oracle.pod`, a Oracle-specific variant of
       `sqitchtutorial.pod`.
     - Added missing version declaration to the App::Sqitch::Plan::* modules.
     - Devel::StackTrace 1.30 is now properly required (it was previously
       recommended).
     - The `--show-tags` and `--show-changes` options to the `status` command
       now show the changes when the project plan cannot be found (issue #90).

0.965  2013-04-23T16:25:59Z
     - Fixed failing test due to line-ending character variations on Windows.
       Many thanks to Jan Dubois for the testing help.
     - Replaced all uses of `$/` in output to `"\n"`. Thanks to Jan Dubois for
       pointing out the incorrect use of `$/`.
     - Fixed build error that prevented installation on Perl 5.10 when the
       parent module was not installed.

0.964  2013-04-15T18:47:30Z
     - Fixed test failures on Perl versions lower than 5.14 when DBD::SQLite
       or DBD::Pg is not installed.
     - Removed DBD::SQLite from the list of build dependencies.
     - Fixed test failures due to encoded (wide-character) warnings on
       triggered on systems with non-english locales. Thanks to Alexandr
       Ciornii for the smoke testing that revealed this issue.
     - Removed overriding of Throwable's `previous_exception` in
       App::Sqitch::X on Throwable 0.200007 and higher, where it is no longer
       needed.
     - Changed test comparing file contents that fails on Windows to do a
       looser comparison and hopefully fix the test failure.

0.963  2013-04-12T19:11:29Z
     - Fixed a test failure when Git is in the execution path and the test is
       not run from a Git checkout.
     - Added `plan` to `sqitchchanges`, the contents of which are shown when
       Sqitch is run with no command.
     - Removed the unique constraint on tag names in the database, as it
       prevented two projects from having the same tag name. Replaced it with
       a unique constraint on the project and tag names. Folks with production
       PostgreSQL installs should run these queries:
           ALTER TABLE sqitch.tags DROP CONSTRAINT tags_tag_key, ADD UNIQUE(project, tag);
           COMMENT ON COLUMN sqitch.tags.tag IS 'Project-unique tag name.';
     - Fixed failing tests when DBD::SQLite is not installed.
     - Removed dependency on Git::Wrapper. The `checkout` command does things
       very simply, and we already have tools for running command-line
       applications. So we just take advantage of that. The code is no more
       complicated than it was before.
     - Added the `core.vcs.client` configuration setting. Defaults to `git`
       (or `git.exe` on Windows).

0.962  2013-04-10T17:10:05Z
     - Fixed failing test on Perl 5.12 and lower.
     - Fixed the French translation by re-encoding it in UTF-8 (Ronan
       Dunklau).
     - Fixed the loading of the editor with placeholder text to properly
       encode that text as UTF-8 (Ronan Dunklau).
jperkin pushed a commit that referenced this pull request Mar 14, 2014
REPLACE_PYTHON in two files. From ChangeLog.txt:

## 2012-06-26 0.37

* Fixed datestr issue on Windows -- #155
* Fixed Python 2.4 compatability issues (tx fredludlow)
* Fixed error in utils.safewrite (tx shuge) -- #95
* Allow use of web.data() with app.request() -- #105
* Fixed an issue with session initializaton (tx beardedprojamz) -- #109
* Allow custom message on 400 Bad Request (tx patryk) -- #121
* Made djangoerror work on GAE. -- #80
* Handle malformatted data in the urls. -- #117
* Made it easier to stop the dev server -- #100, #122
* Added support fot customizing cookie_path in session (tx larsga) -- #89
* Added exception for "415 Unsupported Media" (tx JirkaChadima) -- #145
* Added GroupedDropdown to support `<optgroup>` tag (tx jzellman) -- #152
* Fixed failure in embedded interpreter - #87
* Optimized web.cookies (tx benhoyt) - #148
jperkin pushed a commit that referenced this pull request Mar 14, 2014
News
====

Release 3.0.8 - 2013/09/29
--------------------------

Improvements
^^^^^^^^^^^^

* [admin] Improved error handling of select functionality. This change shows error message
  and hides loading dialog. [Patch by orangain]
* [admin] Improved to submit search form with the enter key. [Patch by orangain]
* [admin] Improved to show placeholder in search form.
  This change shows usage examples. [Patch by orangain]
* [httpd] Supported :ref:`groonga-query-log-path` directive
* [doc] Updated :doc:`/reference/commands/select` documentation about the number of
  hits in select response.
* Improved to ignore an empty token which is generated by continuous spaces from tokenizer.
  [groonga-dev,01729] [Suggested by Naoya Murakami]
* [token delimit] Improved to treat continuous spaces as a space.
  The tokenizer regards 2 or more spaces are valid input.
* [doc] Added note about indexes for each column vs indexes for multiple column.
* [doc] Added language annotation to source label. [groonga-dev,01751] [Suggested by Kazuhiro Isobe]
* Supported :ref:`cascade-delete` to referenced records. In previous version,
  You got an error for the operation.
* [doc] Updated documentation location in README. [groonga-dev,01800] [Reported by Kazuhiro Isobe]
* [experimental] Added :doc:`/reference/commands/ruby_eval` command.
* [doc] Added note about GQTP and HTTP for server use. [groonga-dev,01810] [Reported by Kazuhiro Isobe]

Fixes
^^^^^

* [admin] Fixed a bug that add value button of COLUMN_VECTOR does not work.

Thanks
^^^^^^

* orangain
* Naoya Murakami
* Kazuhiro Isobe

Release 3.0.7 - 2013/08/29
--------------------------

Improvements
^^^^^^^^^^^^

* [doc] Added API documentation. [groonga-dev,01593]
  [GitHub#79,#80,#81,#82,#83,#84,#85,#86,#87,#88,#89,#90,#91,#92,#93,#95,#96,#97,#98,#99,#100]
  [Patch by whombx]
* [table_remove] Improved not to remove patricia trie table or hash table
  which is still referenced. This change avoids that referenced table is removed accidentally.
* Improved to just ignore too long token (4096 bytes or more).
  This change affects when it is registered. In the previous version, it is treated as an
  error instead of a warning. [groonga-dev,01571] [Suggested by Naoya Murakami]
* Improved to show actual discarded posting term in log message.
  [groonga-dev,01621] [Reported by Naoya Murakami]
* [httpd] Supported loading data using POST method. [GitHub#101]
  [Patch by Motoi Washida]
* [httpd] Supported groonga log as ``groonga_log_path`` directive.
* [httpd] Supported groonga log level as ``groonga_log_level`` directive.
* [httpd] Supported customizing cache limit as ``groonga_cache_limit`` directive.

Fixes
^^^^^

* Fixed a bug that error in expression may cause stack overflow.
  This change avoids that groonga crashes suddenly as a result of error accumlation.
* Fixed a crash bug that offline index construction for vector column which has
  orphan reference causes.
* Fixed a bug that groonga doesn't exit on error while daemon mode starts.
  For example, ``groonga -d /tmp/non-existence.db`` reproduce this bug.
* [dump] Fixed a bug that wrong table type is dumped.
  This bug occurs when table type is TABLE_PAT_KEY and key is reference type.
* Fixed a bug that the default ``--cache-limit`` value is 0.
  The default value is changed to '100'.
* Fixed a memory leak when :doc:`/reference/functions/sub_filter` is used.
* [doc] Fixed description of defrag command. [Reported by @naoina]
* [doc] Fixed description about the way to contribute. [GitHub#77]
  [Patch by Masafumi Yokoyama]
* [plugin] Fixed a crash bug on multiple DB open case.
  This bug affects the case that multiple plugin is used and the same database is opened from
  multiple process. [groonga-dev,01596] [Reported by Naoya Murakami]
* Fixed a bug that nested match operation after ``AND`` operator doesn't work.
  The ``select ... --filter '... && nested.column @ "keyword"'`` query reproduces this bug.
  [groonga-dev,01599] [Reported by Motoi Washida]
* [doc] Fixed a typo about documentation of special characters.
  [Reported by Genki Takiuchi]
* Fixed a typo in error message when invalid character is given.
  [Reported by YOSHIDA Mitsuo]

Thanks
^^^^^^

* whombx
* @naoina
* Masafumi Yokoyama
* Motoi Washida
* Genki Takiuchi
* YOSHIDA Mitsuo
jperkin pushed a commit that referenced this pull request Mar 14, 2014
FITS (Flexible Image Transport System) is a data format most used in astronomy.
PyFITS is a Python module for reading, writing, and manipulating FITS files.
The module uses Python's object-oriented features to provide quick, easy, and
efficient access to FITS files. The use of Python's array syntax enables
immediate access to any FITS extension, header cards, or data items.

Changes to 2.4.0 (in py-pyfits):

Changelog
===========

3.2 (2013-11-26)
----------------

Highlights
^^^^^^^^^^

- Rewrote CFITSIO-based backend for handling tile compression of FITS files.
  It now uses a standard CFITSIO instead of heavily modified pieces of CFITSIO
  as before.  PyFITS ships with its own copy of CFITSIO v3.35 which supports
  the latest version of the Tiled Image Convention (v2.3), but system
  packagers may choose instead to strip this out in favor of a
  system-installed version of CFITSIO.  Earlier versions may work, but nothing
  earlier than 3.28 has been tested yet. (#169)

- Added support for reading and writing tables using the Q format for columns.
  The Q format is identical to the P format (variable-length arrays) except
  that it uses 64-bit integers for the data descriptors, allowing more than
  4 GB of variable-length array data in a single table. (#160)

- Added initial support for table columns containing pseudo-unsigned integers.
  This is currently enabled by using the ``uint=True`` option when opening
  files; any table columns with the correct BZERO value will be interpreted
  and returned as arrays of unsigned integers.

- Some refactoring of the table and ``FITS_rec`` modules in order to better
  separate the details of the FITS binary and ASCII table data structures from
  the HDU data structures that encapsulate them.  Most of these changes should
  not be apparent to users (but see API Changes below).


API Changes
^^^^^^^^^^^

- Assigning to values in ``ColDefs.names``, ``ColDefs.formats``,
  ``ColDefs.nulls`` and other attributes of ``ColDefs`` instances that return
  lists of column properties is no longer supported.  Assigning to those lists
  will no longer update the corresponding columns.  Instead, please just
  modify the ``Column`` instances directly (``Column.name``, ``Column.null``,
  etc.)

- The ``pyfits.new_table`` function is marked "pending deprecation".  This
  does not mean it will be removed outright or that its functionality has
  changed.  It will likely be replaced in the future for a function with
  similar, if not subtly different functionality.  A better, if not slightly
  more verbose approach is to use ``pyfits.FITS_rec.from_columns`` to create
  a new ``FITS_rec`` table--this has the same interface as
  ``pyfits.new_table``.  The difference is that it returns a plan ``FITS_rec``
  array, and not an HDU instance.  This ``FITS_rec`` object can then be used
  as the data argument in the constructors for ``BinTableHDU`` (for binary
  tables) or ``TableHDU`` (for ASCII tables).  This is analogous to creating
  an ``ImageHDU`` by passing in an image array.
  ``pyfits.FITS_rec.from_columns`` is just a simpler way of creating a
  FITS-compatible recarray from a FITS column specification.

- The ``updateHeader``, ``updateHeaderData``, and ``updateCompressedData``
  methods of the ``CompDataHDU`` class are pending deprecation and moved to
  internal methods.  The operation of these methods depended too much on
  internal state to be used safely by users; instead they are invoked
  automatically in the appropriate places when reading/writing compressed image
  HDUs.

- The ``CompDataHDU.compData`` attribute is pending deprecation in favor of
  the clearer and more PEP-8 compatible ``CompDataHDU.compressed_data``.

- The constructor for ``CompDataHDU`` has been changed to accept new keyword
  arguments.  The new keyword arguments are essentially the same, but are in
  underscore_separated format rather than camelCase format.  The old arguments
  are still pending deprecation.

- The internal attributes of HDU classes ``_hdrLoc``, ``_datLoc``, and
  ``_datSpan`` have been replaced with ``_header_offset``, ``_data_offset``,
  and ``_data_size`` respectively.  The old attribute names are still pending
  deprecation.  This should only be of interest to advanced users who have
  created their own HDU subclasses.

- The following previously deprecated functions and methods have been removed
  entirely: ``createCard``, ``createCardFromString``, ``upperKey``,
  ``ColDefs.data``, ``setExtensionNameCaseSensitive``, ``_File.getfile``,
  ``_TableBaseHDU.get_coldefs``, ``Header.has_key``, ``Header.ascardlist``.

  If you run your code with a previous version of PyFITS (>= 3.0, < 3.2) with
  the ``python -Wd`` argument, warnings for all deprecated interfaces still in
  use will be displayed.

- Interfaces that were pending deprecation are now fully deprecated.  These
  include: ``create_card``, ``create_card_from_string``, ``upper_key``,
  ``Header.get_history``, and ``Header.get_comment``.

- The ``.name`` attribute on HDUs is now directly tied to the HDU's header, so
  that if ``.header['EXTNAME']`` changes so does ``.name`` and vice-versa.

- The ``pyfits.file.PYTHON_MODES`` constant dict was renamed to
  ``pyfits.file.PYFITS_MODES`` which better reflects its purpose.  This is
  rarely used by client code, however.  Support for the old name will be
  removed by PyFITS 3.4.


Other Changes and Additions
^^^^^^^^^^^^^^^^^^^^^^^^^^^

- The new compression code also adds support for the ZQUANTIZ and ZDITHER0
  keywords added in more recent versions of this FITS Tile Compression spec.
  This includes support for lossless compression with GZIP. (#198) By default
  no dithering is used, but the ``SUBTRACTIVE_DITHER_1`` and
  ``SUBTRACTIVE_DITHER_2`` methods can be enabled by passing the correct
  constants to the ``quantize_method`` argument to the ``CompImageHDU``
  constuctor.  A seed can be manually specified, or automatically generated
  using either the system clock or checksum-based methods via the
  ``dither_seed`` argument.  See the documentation for ``CompImageHDU`` for
  more details. (#198) (spacetelescope/PYFITS#32)

- Images compressed with the Tile Compression standard can now be larger than
  4 GB through support of the Q format. (#159)

- All HDUs now have a ``.ver`` ``.level`` attribute that returns the value of
  the EXTVAL and EXTLEVEL keywords from that HDU's header, if the exist.  This
  was added for consistency with the ``.name`` attribute which returns the
  EXTNAME value from the header.

- Then ``Column`` and ``ColDefs`` classes have new ``.dtype`` attributes
  which give the Numpy dtype for the column data in the first case, and the
  full Numpy compound dtype for each table row in the latter case.

- There was an issue where new tables created defaulted the values in all
  string columns to '0.0'.  Now string columns are filled with empty strings
  by default--this seems a less surprising default, but it may cause
  differences with tables created with older versions of PyFITS.

- Improved round-tripping and preservation of manually assigned column
  attributes (``TNULLn``, ``TSCALn``, etc.) in table HDU headers.
  (astropy/astropy#996)


Bug Fixes
^^^^^^^^^

- Binary tables containing compressed images may, optionally, contain other
  columns unrelated to the tile compression convention. Although this is an
  uncommon use case, it is permitted by the standard. (#159)

- Reworked some of the file I/O routines to allow simpler, more consistent
  mapping between OS-level file modes ('rb', 'wb', 'ab', etc.) and the more
  "PyFITS-specific" modes used by PyFITS like "readonly" and "update".
  That is, if reading a FITS file from an open file object, it doesn't matter
  as much what "mode" it was opened in so long as it has the right
  capabilities (read/write/etc.)  Also works around bugs in the Python io
  module in 2.6+ with regard to file modes. (spacetelescope/PyFITS#33)

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). (astropy/astropy#968)


3.1.3 (2013-11-26)
------------------

- Disallowed assigning NaN and Inf floating point values as header values,
  since the FITS standard does not define a way to represent them in. Because
  this is undefined, the previous behavior did not make sense and produced
  invalid FITS files. (spacetelescope/PyFITS#11)

- Added a workaround for a bug in 64-bit OSX that could cause truncation when
  writing files greater than 2^32 bytes in size. (spacetelescope/PyFITS#28)

- Fixed a long-standing issue where writing binary tables did not correctly
  write the TFORMn keywords for variable-length array columns (they ommitted
  the max array length parameter of the format).  This was thought fixed in
  v3.1.2, but it was only fixed there for compressed image HDUs and not for
  binary tables in general.

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). (Backported from 3.2)


3.0.12 (2013-11-26)
-------------------

- Disallowed assigning NaN and Inf floating point values as header values,
  since the FITS standard does not define a way to represent them in. Because
  this is undefined, the previous behavior did not make sense and produced
  invalid FITS files. (Backported from 3.1.3)

- Added a workaround for a bug in 64-bit OSX that could cause truncation when
  writing files greater than 2^32 bytes in size. (Backported from 3.1.3)

- Fixed a long-standing issue where writing binary tables did not correctly
  write the TFORMn keywords for variable-length array columns (they ommitted
  the max array length parameter of the format).  This was thought fixed in
  v3.1.2, but it was only fixed there for compressed image HDUs and not for
  binary tables in general. (Backported from 3.1.3)

- Fixed an obscure issue that can occur on systems that don't have flush to
  memory-mapped files implemented (namely GNU Hurd). (Backported from 3.2)


3.1.2 (2013-04-22)
------------------

- When an error occurs opening a file in fitsdiff the exception message will
  now at least mention which file had the error. (#168)

- Fixed support for opening gzipped FITS files by filename in a writeable mode
  (PyFITS has supported writing to gzip files for some time now, but only
  enabled it when GzipFile objects were passed to ``pyfits.open()`` due to
  some legacy code preventing full gzip support. (#195)

- Added a more helpful error message in the case of malformatted FITS files
  that contain non-float NULL values in an ASCII table but are missing the
  required TNULLn keywords in the header. (#197)

- Fixed an (apparently long-standing) issue where writing compressed images
  did not correctly write the TFORMn keywords for variable-length array
  columns (they ommitted the max array length parameter of the format). (#199)

- Slightly refactored how tables containing variable-length array columns are
  handled to add two improvements: Fixes an issue where accessing the data
  after a call to the `pyfits.getdata` convenience function caused an
  exception, and allows the VLA data to be read from an existing mmap of the
  FITS file. (#200)

- Fixed a bug that could occur when opening a table containing
  multi-dimensional columns (i.e. via the TDIMn keyword) and then writing it
  out to a new file. (#201)

- Added use of the console_scripts entry point to install the fitsdiff and
  fitscheck scripts, which if nothing else provides better Windows support.
  The generated scripts now override the ones explicitly defined in the
  scripts/ directory (which were just trivial stubs to begin with). (#202)

- Fixed a bug on Python 3 where attempting to open a non-existent file on
  Python 3 caused a seemingly unrelated traceback. (#203)

- Fixed a bug in fitsdiff that reported two header keywords containing NaN
  as value as different. (#204)

- Fixed an issue in the tests that caused some tests to fail if pyfits is
  installed with read-only permissions. (#208)

- Fixed a bug where instantiating a ``BinTableHDU`` from a numpy array
  containing boolean fields converted all the values to ``False``. (#215)

- Fixed an issue where passing an array of integers into the constructor of
  ``Column()`` when the column type is floats of the same byte width caused the
  column array to become garbled. (#218)

- Fixed inconsistent behavior in creating CONTINUE cards from byte strings
  versus unicode strings in Python 2--CONTINUE cards can now be created
  properly from unicode strings (so long as they are convertable to ASCII).
  (spacetelescope/PyFITS#1)

- Fixed a couple cases where creating a new table using TDIMn in some of the
  columns could caused a crash. (spacetelescope/PyFITS#3)

- Fixed a bug in parsing HIERARCH keywords that do not have a space after
  the first equals sign (before the value). (spacetelescope/PyFITS#5)

- Prevented extra leading whitespace on HIERARCH keywords from being treated
  as part of the keyword. (spacetelescope/PyFITS#6)

- Fixed a bug where HIERARCH keywords containing lower-case letters was
  mistakenly marked as invalid during header validation.
  (spacetelescope/PyFITS#7)

- Fixed an issue that was ancillary to (spacetelescope/PyFITS#7) where the
  ``Header.index()`` method did not work correctly with HIERARCH keywords
  containing lower-case letters.


3.0.11 (2013-04-17)
-------------------

- Fixed support for opening gzipped FITS files by filename in a writeable mode
  (PyFITS has supported writing to gzip files for some time now, but only
  enabled it when GzipFile objects were passed to ``pyfits.open()`` due to
  some legacy code preventing full gzip support. Backported from 3.1.2. (#195)

- Added a more helpful error message in the case of malformatted FITS files
  that contain non-float NULL values in an ASCII table but are missing the
  required TNULLn keywords in the header. Backported from 3.1.2. (#197)

- Fixed an (apparently long-standing) issue where writing compressed images did
  not correctly write the TFORMn keywords for variable-length array columns
  (they ommitted the max array length parameter of the format). Backported from
  3.1.2. (#199)

- Slightly refactored how tables containing variable-length array columns are
  handled to add two improvements: Fixes an issue where accessing the data
  after a call to the `pyfits.getdata` convenience function caused an
  exception, and allows the VLA data to be read from an existing mmap of the
  FITS file. Backported from 3.1.2. (#200)

- Fixed a bug that could occur when opening a table containing
  multi-dimensional columns (i.e. via the TDIMn keyword) and then writing it
  out to a new file. Backported from 3.1.2. (#201)

- Fixed a bug on Python 3 where attempting to open a non-existent file on
  Python 3 caused a seemingly unrelated traceback. Backported from 3.1.2.
  (#203)

- Fixed a bug in fitsdiff that reported two header keywords containing NaN
  as value as different. Backported from 3.1.2. (#204)

- Fixed an issue in the tests that caused some tests to fail if pyfits is
  installed with read-only permissions. Backported from 3.1.2. (#208)

- Fixed a bug where instantiating a ``BinTableHDU`` from a numpy array
  containing boolean fields converted all the values to ``False``. Backported
  from 3.1.2. (#215)

- Fixed an issue where passing an array of integers into the constructor of
  ``Column()`` when the column type is floats of the same byte width caused the
  column array to become garbled. Backported from 3.1.2. (#218)

- Fixed a couple cases where creating a new table using TDIMn in some of the
  columns could caused a crash. Backported from 3.1.2.
  (spacetelescope/PyFITS#3)


3.1.1 (2013-01-02)
------------------

This is a bug fix release for the 3.1.x series.

Bug Fixes
^^^^^^^^^

- Improved handling of scaled images and pseudo-unsigned integer images in
  compressed image HDUs.  They now work more transparently like normal image
  HDUs with support for the ``do_not_scale_image_data`` and ``uint`` options,
  as well as ``scale_back`` and ``save_backup``.  The ``.scale()`` method
  works better too. (#88)

- Permits non-string values for the EXTNAME keyword when reading in a file,
  rather than throwing an exception due to the malformatting.  Added
  verification for the format of the EXTNAME keyword when writing. (#96)

- Added support for EXTNAME and EXTVER in PRIMARY HDUs.  That is, if EXTNAME
  is specified in the header, it will also be reflected in the ``.name``
  attribute and in ``pyfits.info()``.  These keywords used to be verboten in
  PRIMARY HDUs, but the latest version of the FITS standard allows them.
  (#151)

- HCOMPRESS can again be used to compress data cubes (and higher-dimensional
  arrays) so long as the tile size is effectively 2-dimensional. In fact,
  PyFITS will automatically use compatible tile sizes even if they're not
  explicitly specified. (#171)

- Added support for the optional ``endcard`` parameter in the
  ``Header.fromtextfile()`` and ``Header.totextfile()`` methods.  Although
  ``endcard=False`` was a reasonable default assumption, there are still text
  dumps of FITS headers that include the END card, so this should have been
  more flexible. (#176)

- Fixed a crash when running fitsdiff on two empty (that is, zero row) tables.
  (#178)

- Fixed an issue where opening files containing random groups HDUs in update
  mode could cause an unnecessary rewrite of the file even if none of the
  data is modified. (#179)

- Fixed a bug that could caused a deadlock in the filesystem on OSX if PyFITS
  is used with Numpy 1.7 in some cases. (#180)

- Fixed a crash when generating diff reports from diffs using the
  ``ignore_comments`` options. (#181)

- Fixed some bugs with WCS Paper IV record-valued keyword cards:

  - Cards that looked kind of like RVKCs but were not intended to be were
    over-permissively treated as such--commentary keywords like COMMENT and
    HISTORY were particularly affected. (#183)

  - Looking up a card in a header by its standard FITS keyword only should
    always return the raw value of that card.  That way cards containing
    values that happen to valid RVKCs but were not intended to be will still
    be treated like normal cards. (#184)

  - Looking up a RVKC in a header with only part of the field-specifier (for
    example "DP1.AXIS" instead of "DP1.AXIS.1") was implicitly treated as a
    wildcard lookup. (#184)

- Fixed a crash when diffing two FITS files where at least one contains a
  compressed image HDU which was not recognized as an image instead of a
  table. (#187)

- Fixed bugs in the backwards compatibility layer for the ``CardList.index``
  and ``CardList.count`` methods. (#190)

- Improved ``__repr__`` and text file representation of cards with long values
  that are split into CONTINUE cards. (#193)

- Fixed a crash when trying to assign a long (> 72 character) value to blank
  ('') keywords. This also changed how blank keywords are represented--there
  are still exactly 8 spaces before any commentary content can begin; this
  *may* affect the exact display of header cards that assumed there could be
  fewer spaces in a blank keyword card before the content begins. However, the
  current approach is more in line with the requirements of the FITS standard.
  (#194)


3.0.10 (2013-01-02)
-------------------

- Improved handling of scaled images and pseudo-unsigned integer images in
  compressed image HDUs.  They now work more transparently like normal image
  HDUs with support for the ``do_not_scale_image_data`` and ``uint`` options,
  as well as ``scale_back`` and ``save_backup``.  The ``.scale()`` method
  works better too.  Backported from 3.1.1. (#88)

- Permits non-string values for the EXTNAME keyword when reading in a file,
  rather than throwing an exception due to the malformatting.  Added
  verification for the format of the EXTNAME keyword when writing.  Backported
  from 3.1.1. (#96)

- Added support for EXTNAME and EXTVER in PRIMARY HDUs.  That is, if EXTNAME
  is specified in the header, it will also be reflected in the ``.name``
  attribute and in ``pyfits.info()``.  These keywords used to be verbotten in
  PRIMARY HDUs, but the latest version of the FITS standard allows them.
  Backported from 3.1.1. (#151)

- HCOMPRESS can again be used to compress data cubes (and higher-dimensional
  arrays) so long as the tile size is effectively 2-dimensional. In fact,
  PyFITS will not automatically use compatible tile sizes even if they're not
  explicitly specified.  Backported from 3.1.1. (#171)

- Fixed a bug when writing out files containing zero-width table columns,
  where the TFIELDS keyword would be updated incorrectly, leaving the table
  largely unreadable.  Backported from 3.1.0. (#174)

- Fixed an issue where opening files containing random groups HDUs in update
  mode could cause an unnecessary rewrite of the file even if none of the
  data is modified.  Backported from 3.1.1. (#179)

- Fixed a bug that could caused a deadlock in the filesystem on OSX if PyFITS
  is used with Numpy 1.7 in some cases. Backported from 3.1.1. (#180)


3.1 (2012-08-08)
----------------

Highlights
^^^^^^^^^^

- The ``Header`` object has been significantly reworked, and ``CardList``
  objects are now deprecated (their functionality folded into the ``Header``
  class).  See API Changes below for more details.

- Memory maps are now used by default to access HDU data.  See API Changes
  below for more details.

- Now includes a new version of the ``fitsdiff`` program for comparing two
  FITS files, and a new FITS comparison API used by ``fitsdiff``.  See New
  Features below.

API Changes
^^^^^^^^^^^

- The ``Header`` class has been rewritten, and the ``CardList`` class is
  deprecated.  Most of the basic details of working with FITS headers are
  unchanged, and will not be noticed by most users.  But there are differences
  in some areas that will be of interest to advanced users, and to application
  developers.  For full details of the changes, see the "Header Interface
  Transition Guide" section in the PyFITS documentation.  See ticket #64 on
  the PyFITS Trac for futher details and background. Some highlights are
  listed below:

  * The Header class now fully implements the Python dict interface, and can
    be used interchangably with a dict, where the keys are header keywords.

  * New keywords can be added to the header using normal keyword assignment
    (previously it was necessary to use ``Header.update`` to add new
    keywords).  For example::

        >>> header['NAXIS'] = 2

    will update the existing 'FOO' keyword if it already exists, or add a new
    one if it doesn't exist, just like a dict.

  * It is possible to assign both a value and a comment at the same time using
    a tuple::

        >>> header['NAXIS'] = (2, 'Number of axes')

  * To add/update a new card and ensure it's added in a specific location, use
    ``Header.set()``::

        >>> header.set('NAXIS', 2, 'Number of axes', after='BITPIX')

    This works the same as the old ``Header.update()``.  ``Header.update()``
    still works in the old way too, but is deprecated.

  * Although ``Card`` objects still exist, it generally is not necessary to
    work with them directly.  ``Header.ascardlist()``/``Header.ascard`` are
    deprecated and should not be used.  To directly access the ``Card``
    objects in a header, use ``Header.cards``.

  * To access card comments, it is still possible to either go through the
    card itself, or through ``Header.comments``.  For example::

       >>> header.cards['NAXIS'].comment
       Number of axes
       >>> header.comments['NAXIS']
       Number of axes

  * ``Card`` objects can now be used interchangeably with
    ``(keyword, value, comment)`` 3-tuples.  They still have ``.value`` and
    ``.comment`` attributes as well.  The ``.key`` attribute has been renamed
    to ``.keyword`` for consistency, though ``.key`` is still supported (but
    deprecated).

- Memory mapping is now used by default to access HDU data.  That is,
  ``pyfits.open()`` uses ``memmap=True`` as the default.  This provides better
  performance in the majority of use cases--there are only some I/O intensive
  applications where it might not be desirable.  Enabling mmap by default also
  enabled finding and fixing a large number of bugs in PyFITS' handling of
  memory-mapped data (most of these bug fixes were backported to PyFITS
  3.0.5). (#85)

  * A new ``pyfits.USE_MEMMAP`` global variable was added.  Set
    ``pyfits.USE_MEMMAP = False`` to change the default memmap setting for
    opening files.  This is especially useful for controlling the behavior in
    applications where pyfits is deeply embedded.

  * Likewise, a new ``PYFITS_USE_MEMMAP`` environment variable is supported.
    Set ``PYFITS_USE_MEMMAP = 0`` in your environment to change the default
    behavior.

- The ``size()`` method on HDU objects is now a ``.size`` property--this
  returns the size in bytes of the data portion of the HDU, and in most cases
  is equivalent to ``hdu.data.nbytes`` (#83)

- ``BinTableHDU.tdump`` and ``BinTableHDU.tcreate`` are deprecated--use
  ``BinTableHDU.dump`` and ``BinTableHDU.load`` instead.  The new methods
  output the table data in a slightly different format from previous versions,
  which places quotes around each value.  This format is compatible with data
  dumps from previous versions of PyFITS, but not vice-versa due to a parsing
  bug in older versions.

- Likewise the ``pyfits.tdump`` and ``pyfits.tcreate`` convenience function
  versions of these methods have been renamed ``pyfits.tabledump`` and
  ``pyfits.tableload``.  The old deprecated, but currently retained for
  backwards compatibility. (r1125)

- A new global variable ``pyfits.EXTENSION_NAME_CASE_SENSITIVE`` was added.
  This serves as a replacement for ``pyfits.setExtensionNameCaseSensitive``
  which is not deprecated and may be removed in a future version.  To enable
  case-sensitivity of extension names (i.e. treat 'sci' as distict from 'SCI')
  set ``pyfits.EXTENSION_NAME_CASE_SENSITIVE = True``.  The default is
  ``False``. (r1139)

- A new global configuration variable ``pyfits.STRIP_HEADER_WHITESPACE`` was
  added.  By default, if a string value in a header contains trailing
  whitespace, that whitespace is automatically removed when the value is read.
  Now if you set ``pyfits.STRIP_HEADER_WHITESPACE = False`` all whitespace is
  preserved. (#146)

- The old ``classExtensions`` extension mechanism (which was deprecated in
  PyFITS 3.0) is removed outright.  To our knowledge it was no longer used
  anywhere. (r1309)

- Warning messages from PyFITS issued through the Python warnings API are now
  output to stderr instead of stdout, as is the default.  PyFITS no longer
  modifies the default behavior of the warnings module with respect to which
  stream it outputs to. (r1319)

- The ``checksum`` argument to ``pyfits.open()`` now accepts a value of
  'remove', which causes any existing CHECKSUM/DATASUM keywords to be ignored,
  and removed when the file is saved.

New Features
^^^^^^^^^^^^

- Added support for the proposed "FITS" extension HDU type.  See
  http://listmgr.cv.nrao.edu/pipermail/fitsbits/2002-April/001094.html.  FITS
  HDUs contain an entire FITS file embedded in their data section.  `FitsHDU`
  objects work like other HDU types in PyFITS.  Their ``.data`` attribute
  returns the raw data array.  However, they have a special ``.hdulist``
  attribute which processes the data as a FITS file and returns it as an
  in-memory HDUList object.  FitsHDU objects also support a
  ``FitsHDU.fromhdulist()`` classmethod which returns a new `FitsHDU` object
  that embeds the supplied HDUList. (#80)

- Added a new ``.is_image`` attribute on HDU objects, which is True if the HDU
  data is an 'image' as opposed to a table or something else.  Here the
  meaning of 'image' is fairly loose, and mostly just means a Primary or Image
  extension HDU, or possibly a compressed image HDU (#71)

- Added an ``HDUList.fromstring`` classmethod which can parse a FITS file
  already in memory and instantiate and ``HDUList`` object from it.  This
  could be useful for integrating PyFITS with other libraries that work on
  FITS file, such as CFITSIO.  It may also be useful in streaming
  applications.  The name is a slight misnomer, in that it actually accepts
  any Python object that implements the buffer interface, which includes
  ``bytes``, ``bytearray``, ``memoryview``, ``numpy.ndarray``, etc. (#90)

- Added a new ``pyfits.diff`` module which contains facilities for comparing
  FITS files.  One can use the ``pyfits.diff.FITSDiff`` class to compare two
  FITS files in their entirety.  There is also a ``pyfits.diff.HeaderDiff``
  class for just comparing two FITS headers, and other similar interfaces.
  See the PyFITS Documentation for more details on this interface.  The
  ``pyfits.diff`` module powers the new ``fitsdiff`` program installed with
  PyFITS.  After installing PyFITS, run ``fitsdiff --help`` for usage details.

- ``pyfits.open()`` now accepts a ``scale_back`` argument.  If set to
  ``True``, this automatically scales the data using the original BZERO and
  BSCALE parameters the file had when it was first opened, if any, as well as
  the original BITPIX.  For example, if the original BITPIX were 16, this
  would be equivalent to calling ``hdu.scale('int16', 'old')`` just before
  calling ``flush()`` or ``close()`` on the file.  This option applies to all
  HDUs in the file. (#120)

- ``pyfits.open()`` now accepts a ``save_backup`` argument.  If set to
  ``True``, this automatically saves a backup of the original file before
  flushing any changes to it (this of course only applies to update and append
  mode).  This may be especially useful when working with scaled image data.
  (#121)

Changes in Behavior
^^^^^^^^^^^^^^^^^^^

- Warnings from PyFITS are not output to stderr by default, instead of stdout
  as it has been for some time.  This is contrary to most users' expectations
  and makes it more difficult for them to separate output from PyFITS from the
  desired output for their scripts. (r1319)

Bug Fixes
^^^^^^^^^

- Fixed ``pyfits.tcreate()`` (now ``pyfits.tableload()``) to be more robust
  when encountering blank lines in a column definition file (#14)

- Fixed a fairly rare crash that could occur in the handling of CONTINUE cards
  when using Numpy 1.4 or lower (though 1.4 is the oldest version supported by
  PyFITS). (r1330)

- Fixed ``_BaseHDU.fromstring`` to actually correctly instantiate an HDU
  object from a string/buffer containing the header and data of that HDU.
  This allowed for the implementation of ``HDUList.fromstring`` described
  above. (#90)

- Fixed a rare corner case where, in some use cases, (mildly, recoverably)
  malformatted float values in headers were not properly returned as floats.
  (#137)

- Fixed a corollary to the previous bug where float values with a leading zero
  before the decimal point had the leading zero unnecessarily removed when
  saving changes to the file (eg. "0.001" would be written back as ".001" even
  if no changes were otherwise made to the file). (#137)

- When opening a file containing CHECKSUM and/or DATASUM keywords in update
  mode, the CHECKSUM/DATASUM are updated and preserved even if the file was
  opened with checksum=False.  This change in behavior prevents checksums from
  being unintentionally removed. (#148)

- Fixed a bug where ``ImageHDU.scale(option='old')`` wasn't working at all--it
  was not restoring the image to its original BSCALE and BZERO values. (#162)

- Fixed a bug when writing out files containing zero-width table columns,
  where the TFIELDS keyword would be updated incorrectly, leaving the table
  largely unreadable.  This fix will be backported to the 3.0.x series in
  version 3.0.10.  (#174)


3.0.9 (2012-08-06)
------------------

This is a bug fix release for the 3.0.x series.

Bug Fixes
^^^^^^^^^

- Fixed ``Header.values()``/``Header.itervalues()`` and ``Header.items()``/
  ``Header.iteritems()`` to correctly return the different values for
  duplicate keywords (particularly commentary keywords like HISTORY and
  COMMENT).  This makes the old Header implementation slightly more compatible
  with the new implementation in PyFITS 3.1. (#127)

  .. note::
      This fix did not change the existing behavior from earlier PyFITS
      versions where ``Header.keys()`` returns all keywords in the header with
      duplicates removed.  PyFITS 3.1 changes that behavior, so that
      ``Header.keys()`` includes duplicates.

- Fixed a bug where ``ImageHDU.scale(option='old')`` wasn't working at all--it
  was not restoring the image to its original BSCALE and BZERO values. (#162)

- Fixed a bug where opening a file containing compressed image HDUs in
  'update' mode and then immediately closing it without making any changes
  caused the file to be rewritten unncessarily. (#167)

- Fixed two memory leaks that could occur when writing compressed image data,
  or in some cases when opening files containing compressed image HDUs in
  'update' mode. (#168)


3.0.8 (2012-06-04)
------------------

Changes in Behavior
^^^^^^^^^^^^^^^^^^^

- Prior to this release, image data sections did not work with scaled
  data--that is, images with non-trivial BSCALE and/or BZERO values.
  Previously, in order to read such images in sections, it was necessary to
  manually apply the BSCALE+BZERO to each section.  It's worth noting that
  sections *did* support pseudo-unsigned ints (flakily).  This change just
  extends that support for general BSCALE+BZERO values.

Bug Fixes
^^^^^^^^^

- Fixed a bug that prevented updates to values in boolean table columns from
  being saved.  This turned out to be a symptom of a deeper problem that could
  prevent other table updates from being saved as well. (#139)

- Fixed a corner case in which a keyword comment ending with the string "END"
  could, in some circumstances, cause headers (and the rest of the file after
  that point) to be misread. (#142)

- Fixed support for scaled image data and psuedo-unsigned ints in image data
  sections (``hdu.section``).  Previously this was not supported at all.  At
  some point support was supposedly added, but it was buggy and incomplete.
  Now the feature seems to work much better. (#143)

- Fixed the documentation to point out that image data sections *do* support
  non-contiguous slices (and have for a long time).  The documentation was
  never updated to reflect this, and misinformed users that only contiguous
  slices were supported, leading to some confusion. (#144)

- Fixed a bug where creating an ``HDUList`` object containing multiple PRIMARY
  HDUs caused an infinite recursion when validating the object prior to
  writing to a file. (#145)

- Fixed a rare but serious case where saving an update to a file that
  previously had a CHECKSUM and/or DATASUM keyword, but removed the checksum
  in saving, could cause the file to be slightly corrupted and unreadable.
  (#147)

- Fixed problems with reading "non-standard" FITS files with primary headers
  containing SIMPLE = F.  PyFITS has never made many guarantees as to how such
  files are handled.  But it should at least be possible to read their
  headers, and the data if possible.  Saving changes to such a file should not
  try to prepend an unwanted valid PRIMARY HDU. (#157)

- Fixed a bug where opening an image with ``disable_image_compression = True``
  caused compression to be disabled for all subsequent ``pyfits.open()`` calls.
  (r1651)


3.0.7 (2012-04-10)
------------------

Changes in Behavior
^^^^^^^^^^^^^^^^^^^

- Slices of GroupData objects now return new GroupData objects instead of
  extended multi-row _Group objects. This is analogous to how PyFITS 3.0 fixed
  FITS_rec slicing, and should have been fixed for GroupData at the same time.
  The old behavior caused bugs where functions internal to Numpy expected that
  slicing an ndarray would return a new ndarray.  As this is a rare usecase
  with a rare feature most users are unlikely to be affected by this change.

- The previously internal _Group object for representing individual group
  records in a GroupData object are renamed Group and are now a public
  interface.  However, there's almost no good reason to create Group objects
  directly, so it shouldn't be considered a "new feature".

- An annoyance from PyFITS 3.0.6 was fixed, where the value of the EXTEND
  keyword was always being set to F if there are not actually any extension
  HDUs.  It was unnecessary to modify this value.

Bug Fixes
^^^^^^^^^

- Fixed GroupData objects to return new GroupData objects when sliced instead
  of _Group record objects.  See "Changes in behavior" above for more details.

- Fixed slicing of Group objects--previously it was not possible to slice
  slice them at all.

- Made it possible to assign `np.bool_` objects as header values. (#123)

- Fixed overly strict handling of the EXTEND keyword; see "Changes in
  behavior" above. (#124)

- Fixed many cases where an HDU's header would be marked as "modified" by
  PyFITS and rewritten, even when no changes to the header are necessary.
  (#125)

- Fixed a bug where the values of the PTYPEn keywords in a random groups HDU
  were forced to be all lower-case when saving the file. (#130)

- Removed an unnecessary inline import in `ExtensionHDU.__setattr__` that was
  causing some slowdown when opening files containing a large number of
  extensions, plus a few other small (but not insignficant) performance
  improvements thanks to Julian Taylor. (#133)

- Fixed a regression where header blocks containing invalid end-of-header
  padding (i.e. null bytes instead of spaces) couldn't be parsed by PyFITS.
  Such headers can be parsed again, but a warning is raised, as such headers
  are not valid FITS. (#136)

- Fixed a memory leak where table data in random groups HDUs weren't being
  garbage collected. (#138)


3.0.6 (2012-02-29)
------------------

Highlights
^^^^^^^^^^

The main reason for this release is to fix an issue that was introduced in
PyFITS 3.0.5 where merely opening a file containing scaled data (that is, with
non-trivial BSCALE and BZERO keywords) in 'update' mode would cause the data
to be automatically rescaled--possibly converting the data from ints to
floats--as soon as the file is closed, even if the application did not touch
the data.  Now PyFITS will only rescale the data in an extension when the data
is actually accessed by the application.  So opening a file in 'update' mode
in order to modify the header or append new extensions will not cause any
change to the data in existing extensions.

This release also fixes a few Windows-specific bugs found through more
extensive Windows testing, and other miscellaneous bugs.

Bug Fixes
^^^^^^^^^

- More accurate error messages when opening files containing invalid header
  cards. (#109)

- Fixed a possible reference cycle/memory leak that was caught through more
  extensive testing on Windows. (#112)

- Fixed 'ostream' mode to open the underlying file in 'wb' mode instead of 'w'
  mode. (#112)

- Fixed a Windows-only issue where trying to save updates to a resized FITS
  file could result in a crash due to there being open mmaps on that file.
  (#112)

- Fixed a crash when trying to create a FITS table (i.e. with new_table())
  from a Numpy array containing bool fields. (#113)

- Fixed a bug where manually initializing an ``HDUList`` with a list of of
  HDUs wouldn't set the correct EXTEND keyword value on the primary HDU.
  (#114)

- Fixed a crash that could occur when trying to deepcopy a Header in Python <
  2.7. (#115)

- Fixed an issue where merely opening a scaled image in 'update' mode would
  cause the data to be converted to floats when the file is closed. (#119)


3.0.5 (2012-01-30)
------------------

- Fixed a crash that could occur when accessing image sections of files
  opened with memmap=True. (r1211)

- Fixed the inconsistency in the behavior of files opened in 'readonly' mode
  when memmap=True vs. when memmap=False.  In the latter case, although
  changes to array data were not saved to disk, it was possible to update the
  array data in memory.  On the other hand with memmap=True, 'readonly' mode
  prevented even in-memory modification to the data.  This is what
  'copyonwrite' mode was for, but difference in behavior was confusing.  Now
  'readonly' is equivalent to 'copyonwrite' when using memmap.  If the old
  behavior of denying changes to the array data is necessary, a new
  'denywrite' mode may be used, though it is only applicable to files opened
  with memmap. (r1275)

- Fixed an issue where files opened with memmap=True would return image data
  as a raw numpy.memmap object, which can cause some unexpected
  behaviors--instead memmap object is viewed as a numpy.ndarray. (r1285)

- Fixed an issue in Python 3 where a workaround for a bug in Numpy on Python 3
  interacted badly with some other software, namely to vo.table package (and
  possibly others). (r1320, r1337, and #110)

- Fixed buggy behavior in the handling of SIGINTs (i.e. Ctrl-C keyboard
  interrupts) while flushing changes to a FITS file.  PyFITS already prevented
  SIGINTs from causing an incomplete flush, but did not clean up the signal
  handlers properly afterwards, or reraise the keyboard interrupt once the
  flush was complete. (r1321)

- Fixed a crash that could occur in Python 3 when opening files with checksum
  checking enabled. (r1336)

- Fixed a small bug that could cause a crash in the `StreamingHDU` interface
  when using Numpy below version 1.5.

- Fixed a crash that could occur when creating a new `CompImageHDU` from an
  array of big-endian data. (#104)

- Fixed a crash when opening a file with extra zero padding at the end.
  Though FITS files should not have such padding, it's not explictly forbidden
  by the format either, and PyFITS shouldn't stumble over it. (#106)

- Fixed a major slowdown in opening tables containing large columns of string
  values.  (#111)


3.0.4 (2011-11-22)
------------------

- Fixed a crash when writing HCOMPRESS compressed images that could happen on
  Python 2.5 and 2.6. (r1217)

- Fixed a crash when slicing an table in a file opened in 'readonly' mode with
  memmap=True. (r1230)

- Writing changes to a file or writing to a new file verifies the output in
  'fix' mode by default instead of 'exception'--that is, PyFITS will
  automatically fix common FITS format errors rather than raising an
  exception. (r1243)

- Fixed a bug where convenience functions such as getval() and getheader()
  crashed when specifying just 'PRIMARY' as the extension to use (r1263).

- Fixed a bug that prevented passing keyword arguments (beyond the standard
  data and header arguments) as positional arguments to the constructors of
  extension HDU classes.

- Fixed some tests that were failing on Windows--in this case the tests
  themselves failed to close some temp files and Windows refused to delete them
  while there were still open handles on them. (r1295)

- Fixed an issue with floating point formatting in header values on Python 2.5
  for Windows (and possibly other platforms).  The exponent was zero-padded to
  3 digits; although the FITS standard makes no specification on this, the
  formatting is now normalized to always pad the exponent to two digits.
  (r1295)

- Fixed a bug where long commentary cards (such as HISTORY and COMMENT) were
  broken into multiple CONTINUE cards.  However, commentary cards are not
  expected to be found in CONTINUE cards.  Instead these long cards are broken
  into multiple commentary cards. (#97)

- GZIP/ZIP-compressed FITS files can be detected and opened regardless of
  their filename extension. (#99)

- Fixed a serious bug where opening scaled images in 'update' mode and then
  closing the file without touching the data would cause the file to be
  corrupted. (#101)


3.0.3 (2011-10-05)
------------------

- Fixed several small bugs involving corner cases in record-valued keyword
  cards (#70)

- In some cases HDU creation failed if the first keyword value in the header
  was not a string value (#89)

- Fixed a crash when trying to compute the HDU checksum when the data array
  contains an odd number of bytes (#91)

- Disabled an unnecessary warning that was displayed on opening compressed
  HDUs with disable_image_compression = True (#92)

- Fixed a typo in code for handling HCOMPRESS compressed images.


3.0.2 (2011-09-23)
------------------

- The ``BinTableHDU.tcreate`` method and by extension the ``pyfits.tcreate``
  function don't get tripped up by blank lines anymore (#14)

- The presence, value, and position of the EXTEND keyword in Primary HDUs is
  verified when reading/writing a FITS file (#32)

- Improved documentation (in warning messages as well as in the handbook) that
  PyFITS uses zero-based indexing (as one would expect for C/Python code, but
  contrary to the PyFITS standard which was written with FORTRAN in mind)
  (#68)

- Fixed a bug where updating a header card comment could cause the value to be
  lost if it had not already been read from the card image string.

- Fixed a related bug where changes made directly to Card object in a header
  (i.e. assigning directly to card.value or card.comment) would not propagate
  when flushing changes to the file (#69) [Note: This and the bug above it
  were originally reported as being fixed in version 3.0.1, but the fix was
  never included in the release.]

- Improved file handling, particularly in Python 3 which had a few small file
  I/O-related bugs (#76)

- Fixed a bug where updating a FITS file would sometimes cause it to lose its
  original file permissions (#79)

- Fixed the handling of TDIMn keywords; 3.0 added support for them, but got
  the axis order backards (they were treated as though they were row-major)
  (#82)

- Fixed a crash when a FITS file containing scaled data is opened and
  immediately written to a new file without explicitly viewing the data first
  (#84)

- Fixed a bug where creating a table with columns named either 'names' or
  'formats' resulted in an infinite recursion (#86)


3.0.1 (2011-09-12)
------------------

- Fixed a bug where updating a header card comment could cause the value to be
  lost if it had not already been read from the card image string.

- Changed ``_TableBaseHDU.data`` so that if the data contain an empty table a
  ``FITS_rec`` object with zero rows is returned rather than ``None``.

- The ``.key`` attribute of ``RecordValuedKeywordCards`` now returns the full
  keyword+field-specifier value, instead of just the plain keyword (#46)

- Fixed a related bug where changes made directly to Card object in a header
  (i.e. assigning directly to card.value or card.comment) would not propagate
  when flushing changes to the file (#69)

- Fixed a bug where writing a table with zero rows could fail in some cases
  (#72)

- Miscellanous small bug fixes that were causing some tests to fail,
  particularly on Python 3 (#74, #75)

- Fixed a bug where creating a table column from an array in non-native byte
  order would not preserve the byte order, thus interpreting the column array
  using the wrong byte order (#77)


3.0.0 (2011-08-23)
--------------------

- Contains major changes, bumping the version to 3.0

- Large amounts of refactoring and reorganization of the code; tried to
  preserve public API backwards-compatibility with older versions (private API
  has many changes and is not guaranteed to be backwards-compatible).  There
  are a few small public API changes to be aware of:

  * The pyfits.rec module has been removed completely.  If your version of
    numpy does not have the numpy.core.records module it is too old to be used
    with PyFITS.

  * The ``Header.ascardlist()`` method is deprecated--use the ``.ascard``
    attribute instead.

  * ``Card`` instances have a new ``.cardimage`` attribute that should be used
    rather than ``.ascardimage()``, which may become deprecated.

  * The ``Card.fromstring()`` method is now a classmethod.  It returns a new
    ``Card`` instance rather than modifying an existing instance.

  * The ``req_cards()`` method on HDU instances has changed:  The ``pos``
    argument is not longer a string.  It is either an integer value (meaning
    the card's position must match that value) or it can be a function that
    takes the card's position as it's argument, and returns True if the
    position is valid.  Likewise, the ``test`` argument no longer takes a
    string, but instead a function that validates the card's value and returns
    True or False.

  * The ``get_coldefs()`` method of table HDUs is deprecated.  Use the
    ``.columns`` attribute instead.

  * The ``ColDefs.data`` attribute is deprecated--use ``ColDefs.columns``
    instead (though in general you shouldn't mess with it directly--it might
    become internal at some point).

  * ``FITS_record`` objects take ``start`` and ``end`` as arguments instead of
    ``startColumn`` and ``endColumn`` (these are rarely created manually, so
    it's unlikely that this change will affect anyone).

  * ``BinTableHDU.tcreate()`` is now a classmethod, and returns a new
    ``BinTableHDU`` instance.

  * Use ``ExtensionHDU`` and ``NonstandardExtHDU`` for making new extension HDU
    classes.  They are now public interfaces, wheres previously they were
    private and prefixed with underscores.

  * Possibly others--please report if you find any changes that cause
    difficulties.

- Calls to deprecated functions will display a Deprecation warning.  However,
  in Python 2.7 and up Deprecation warnings are ignored by default, so run
  Python with the `-Wd` option to see if you're using any deprecated
  functions.  If we get close to actually removing any functions, we might
  make the Deprecation warnings display by default.

- Added basic Python 3 support

- Added support for multi-dimensional columns in tables as specified by the
  TDIMn keywords (#47)

- Fixed a major memory leak that occurred when creating new tables with the
  ``new_table()`` function (#49)
  be padded with zero-bytes) vs ASCII tables (where strings are padded with
  spaces) (#15)

- Fixed a bug in which the case of Random Access Group parameters names was not
  preserved when writing (#41)

- Added support for binary table fields with zero width (#42)

- Added support for wider integer types in ASCII tables; although this is non-
  standard, some GEIS images require it (#45)

- Fixed a bug that caused the index_of() method of HDULists to crash when the
  HDUList object is created from scratch (#48)

- Fixed the behavior of string padding in binary tables (where strings should
  be padded with nulls instead of spaces)

- Fixed a rare issue that caused excessive memory usage when computing
  checksums using a non-standard block size (see r818)

- Add support for forced uint data in image sections (#53)

- Fixed an issue where variable-length array columns were not extended when
  creating a new table with more rows than the original (#54)

- Fixed tuple and list-based indexing of FITS_rec objects (#55)

- Fixed an issue where BZERO and BSCALE keywords were appended to headers in
  the wrong location (#56)

- ``FITS_record`` objects (table rows) have full slicing support, including
  stepping, etc. (#59)

- Fixed a bug where updating multiple files simultaneously (such as when
  running parallel processes) could lead to a race condition with mktemp()
  (#61)

- Fixed a bug where compressed image headers were not in the order expected by
  the funpack utility (#62)
jperkin pushed a commit that referenced this pull request Mar 14, 2014
=============

Some extracts from the git log:

* Add new DNSKEY algorithms registered by IANA
* Add AUTH checking over both UDP and TCP. [Fixes #80]
* New queue dispatch
* Clean out dead code, add tests to new code and add log entries.
  [Closes #89]
* Log when an AS prefix is discarded
* Add simple command-line tool to add domains to the dispatcher queue
* Add callback functionality to logger
* Perl 5.18 fix (hash key order randomization)
* The authoritative servers for ARPA are the root servers, which caused
  problems for our parent-finding algorithm. Worked around by special
  -casing so that single-label names always return root as the parent.
  [Closes #92]
* Make allowed maximum NSEC3 iterations a policy parameter
* Detect DNSCurve-supporting nameservers
* Significant improvements to glue checking
* Fix for referral check under undelegated
* More tests for new glue-checking code
* Detect names in domains reserved by IANA (RFC 6761). [Closes #96]
* Log messages for reserved ASs. [Closes #97]
jperkin pushed a commit that referenced this pull request Mar 14, 2014
0.991  2014-01-16T23:24:33Z
     - Greatly simplified determining the Firebird ISQL client. It no longer
       tries so hard to find a full path, but does seach through the path list
       for a likely candidate between fbsql, isql-fb, and isql (or equivalents
       ending in .exe on Windows).
     - Removed a bunch of inappropriately pasted stuff from the Firebird
       tutorial, and updated it a bit.
     - `HEAD` and `ROOT` are now recognized as aliases for `@HEAD` and
       `@ROOT`, when querying the database, too. That means that `revert --to
       HEAD` now works the same as `revert --to @HEAD`, as had been expected
       in v0.990.
     - Eliminated "use of uninitialized value" warnings when database
       connections fail.
     - Reduced the minimum required DBD::Firebird to v1.11.
     - Fixed the `--verbose` option to the `target` command.
     - Eliminated more user-configuration issues in tests, thanks to
       chromatic.
     - Fixed test failures when the `$PGPASSWORD` environment variable is set,
       thanks to Ioan Rogers's test smoker.

0.990  2014-01-04T01:14:24Z
     [New Features]
     - Added new command and feature: `target`. Use it to manage multiple
       database targets, each with an associated URI and, optionally, a
       registry name and command-line client. Inspired by Git remotes.
     - Added Firebird engine. Three cheers to Ștefan Suciu for this
       contribution!
     - Added support for the generation of arbitrary scripts from templates to
       the `add` command. Just add template files to subdirectories of the
       `templates` directory, and scripts will be created in a directory of
       the same name based on those templates.
     - Added `--open-editor` option (and aliases) to the `add` and `rework`
       commands. This option will open the newly-added change scripts in the
       preferred editor. Thanks to Thomas Sibley for the patch!

     [Improvements]
     - Improved database driver loading to ensure the proper version of the
       driver is required.
     - Non-fatal but possibly unexpected messages -- which correspond to exit
       value 1 -- now send their messages to STDOUT instead of STDERR, and
       respect the `--quiet` option. Thanks to @giorgio-v for the report!
     - Added or replaced the `--target` option to commands that connect to a
       database to specify the name of target managed by the new `target`
       command or a database URI.
     - `HEAD` and `ROOT` are now recognized as aliases for `@HEAD` and
       `@ROOT`, respectively, since they are disallowed as change names,
       anyway, and folks often use them out of habit from Git.

     [Internals]
     - Replaced the engine-specific connection attributes with three
       attributes use by every engine:
       * `target`: The name of a target managed by the new `target` command.
         Defaults to a value stored for the `core.$engine.target`
         configuration variable. If that variable does not exist, the target
         falls back on the stringification of `uri`.
       * `uri`: a database URI with the format `db:{engine}:{dbname}` or
         `db:{engine}://{user}:{password}@{host}:{port}/{dbname}`. If its
         value is not passed to the constructor, a `uri` value is looked up
         for the associated `target`. If `target` is not passed or configured,
         or if it has no URI associated with it, the `config.$engine.uri`
         configuration variable is used. If that value does not exist, the URI
         defaults to `db:$engine:`. In any of these cases, if any of the
         `--db-*` options are passed, they will be merged into the URI.
       * `registry`: the name to use for the Sqitch registry schema or
         database, where Sqitch's own data will be stored, as appropriate to
         each engine. If its value is not passed to the constructor, a
         `registry` value is looked up for the associated `target`. If
         `target` is not passed or configured, or if it has no registry
         associated with it, the `config.$engine.registry` configuration
         variable is used. If no value is found there, it defaults to an
         engine-specific value, usually "sqitch".

     [Bug Fixes]
     - Fixed a bug when installing under local::lib. Thanks to Thomas Sibley
       for the pull request!
     - Eliminated "Wide character in print" warnings when piping the `log`
       command.
     - Documented that reworked changes do not have their verify tests run by
       the `verify` command. They do run when using the `--verify` deploy
       option.
     - Removed the documentation for the `add.with_deploy`, `add.with_revert`,
       and `add.with_verify` configuration variables, which were never
       implemented.

     [Deprecations]
     - Deprecated engine-specific connection attributes and configuration
       variables. See the "Internals" section for their replacements. The
       deprecated options are:
       * `core.$engine.username`
       * `core.$engine.password`
       * `core.$engine.db_name`
       * `core.$engine.host`
       * `core.$engine.port`
       * `core.$engine.sqitch_schema`
       * `core.$engine.sqitch_db`
     - Deprecated all command-specific options with the string "target" in
       them, such as `--to-target`, `--upto-target`, etc. They have been
       replaced with options containing the string "change", instead, such as
       `--to-change` and `--upto-change`. Few people used these options,
       preferring their shorter aliases (`--to`, `--upto`, etc.).
     - Deprecated the `--deploy-template`, `--revert-template`, and
       `--verify-template` options to the `add` command. They are replaced
       with a single option, `--use` which takes a key/value pair for the
       script name and template path. This makes it useful for arbitrary
       script generation, as well.
     - Deprecated the `--deploy`, `--revert`, and `--verify` options to the
       `add` command, as well as their `--no-*` variants. They are replaced
       with two new options, `--with` and `--without`, to which a script name
       is passed. These are useful for arbitrary script generation, as well.
     - Deprecated the `add.deploy_template`, `add.revert_template`, and
       `add.verify_template` configuration settings. They have been replaced
       with a section, `add.templates`, which is more general, and supports
       arbitrary script generation, as well.

     [Incompatibilities]
     - Removed the undocumented `--test` option to the `add` command.
     - Changed the meaning of `--target` from specifying a change to
       specifying a deployment target. Use the new `--change` option to
       specify a change.

0.983  2013-11-21T21:50:12Z
     - Fixed "Use of uninitialized value" in the MySQL engine. Thanks to
       Jean-Michel REY for the report.
     - All tests now protect against failures due to the presence of the
       `$SQITCH_CONFIG` environment variable (issue #114).
     - The installer now respects the `distdir` option to `Build.PL` when
       searching for existing templates. Important for packaging.
     - Fixed the error "Table 'sqitch.changes' doesn't exist" when deploying
       to a MySQL database that exists but has not been initialized. Thanks to
       Jean-Michel REY for the report!
     - Refactored the handling of the C<--log-only> option so it sets an
       engine attribute, rather than passing the flag to a whole stack of
       method calls.
     - Fixed "Argument "en_us" isn't numeric" error on Windows.
     - Now using `LC_ALL` instead of `LC_MESSAGES` when setting the locale, as
       the latter is not present on Windows.
     - The sqitch-pg RPM now requires DBD::Pg 2.0.0 or higher.
     - Improved handling of invalid command names so that the error message is
       less ambiguous when triggered by a Perl parse error.
     - Added `-m` as an alias for `--note`, for you Git folks out there.
     - Added exception handling to the Postgres and Oracle engines to avoid
       unexpected errors when deploying to a database that has not been
       deployed to before.
     - Updated detection of an uninitialized database to double-check with the
       engine that it really thinks it's uninitialized, not just that the
       "changes" table is missing. This should catch the case where the
       database has its own "changes" table unrelated to Sqitch.

0.982  2013-09-11T18:26:07Z
     - Errors thrown by Template toolkit are no longer silently ignored.
     - Variables passed to change templates are now cloned before the
       execution of each template. This prevents one template from deleting
       variable values another template might also need.
     - Fixed "The getpwnam function is unimplemented" errors on Win32.
     - No longer runs revert scripts when deploying with `--log-only` and a
       verify script fails, as that could lead to data loss (yikes!). Thanks
       to BryLo for the report (issue #112).

0.981  2013-09-06T00:22:26Z
     - Now use Encode::Locale to try to decode the user's full name from the
       system encoding when fetched from the system on all OSes. Note that
       this is not necessary if the `user.name` config is explicitly set, as
       recommended. Issue #107.
     - Removed the special-case handling of the user's full name fetched from
       the system on OS X.
     - Added call to `sleep` to test in an attempt to fix SQLite failures.
     - The SQLite engine now requires that the SQLite client be 3.3.9 or
       later, for support of the `-bail` option.
     - Bug fix: The MySQL engine now properly uses the host, port, and
       password options when connecting to the database. Thanks to vreb87 for
       the report!

0.980  2013-08-28T21:40:00Z
     - Changed the default SQLite Sqitch database name from
       `$dbname-sqitch.$suffix` to `sqitch.$suffix`. The `$suffix` still
       comes from the destination database name. This breaks compatibility
       with previous releases. If you need the old name, set it with
       `sqitch config core.sqlite.sqitch_db $dbname`.
     - Fixed encoding of the user's full name when fetched from the system on
       OS X. Thanks to Tomohiro Hosaka for the pull request!
     - Fixed test failures when DBD::SQLite is installed but compiled with
       SQLite 3.7.10 or lower.
     - Fixed a bug where declaring a dependency on a reworked change would
       incorrectly result in the error "Key "foo" matches multiple changes".
       Thanks to BryLo for the report (issue #103).
     - Modified tests to allow them to run in parallel without stomping on
       each other.
     - Bundling of options, such as `-vvv`, now works properly (issue #108).
     - Added alias `--get-regexp` for `--get-regex` to the `config` command.
       This brings it in line with the documentation for the `config` command
       (Issue #110).
     - Fixed all of the `config` command actions that contain a dash so that
       they actually work. Thanks to Ștefan Suciu for the report (issue #110).
     - All leading and trailing white space is now trimmed from plan notes,
       rather than just vertical white space. Thanks to Ronan Dunklau for the
       report (issue #106).
     - The `status` command now notices if the specified database is
       uninitialized and says as much, rather than dying with an SQL error
       (issue #109).
     - When reading the user's username from the system Sqitch now uses
       Encode::Locale to try to decode the value from the system encoding.
       Issue #107.
     - Compatibility change: Changed the location and name of script template
       files. Previously they were called `deploy.tmpl`, `revert.tmpl`, and
       `verify.tmpl`, and they lived in the `templates` subdirectory of the
       system-wide and user-specific configuration directories. They now live
       in subdirectories of the `templates` directory named for each action
       (deploy, revert, and verify), and with file names matching engine names
       (`pg.tmpl`, `sqlite.tmpl`, `oracle.tmpl`, and `mysql.tmpl`). The
       installer will move old files from the system-wide config directory
       (`sqitch --etc-path`) to their new homes, named `pg.tmpl` and
       `sqlite.tmpl`. It assumes no customizations exist for Oracle. If that's
       not true in your case, simply copy the `pg.tmpl` files to
       `oracle.tmpl`.
     - Added the `--template-name` option to the `add` command. By default, it
       looks for templates named for the current engine. The option allows for
       the user of task-specific templates. For example, if you create
       templates named `createtable.tmpl` in the `deploy`, `revert`, and
       `verify` subdirectories of `~/.sqitch/templates`, You can specify
       `--template-name createtable` to use those templates when adding a
       change.
     - Added the `--exists` option to the `show` command.
     - Fixed the `--set` option to the `add` command so that duplicate keys
       have their values passed to the template as an array, as documented.
     - If Template::Toolkit is installed, the `add` command will use it for
       processing templates instead of Template::Tiny. This makes it easy to
       upgrade the templating environment just by installing a module.

0.973  2013-07-03T13:47:22Z
     - Now Require DBD::SQLite compiled with SQLite 3.7.11 or higher. It
       always has, but now it throws a meaningful exception if an older
       version is compiled into DBD::SQLite. Thanks to Damon Buckwalter for
       the report.
     - When a deploy fails because of missing dependencies, the list of
       missing dependencies no longer contains duplicates. Thanks to Damon
       Buckwalter for the report.

0.972  2013-05-31T23:26:52Z
     - Fixed test failures on Windows.
     - Fixed locale configuration on Windows so that `sqitch` will actually
       run, rather than exiting with an error about `LC_MESSAGES` not being
       set.
     - Fixed a test hang on Windows when DBD::Oracle is installed but the
       Oracle libraries (`OCI.dll`) are not or cannot be found. This was
       triggering a UI dialog that did not dismiss itself. Using Win32::API
       to work around this issue. Thanks to Jan Dubois for the fix.

0.971  2013-05-18T21:08:51Z
     - Removed most uses of the smartmatch operator, since as of Perl 5.17.11
       it is marked as experimental, and silenced the warning where it is
       still used.
     - Added 0.1s sleep between logging changes back-to-back in the engine
       tests, mostly to try to get SQLite to generate different timestamps.
       Pretty sure the recent test failures have been due to the passage of
       less than a millisecond between the two inserts.
     - Added the `shell` and `quote_shell` methods to Sqitch.pm for shelling
       out a command.
     - Sqitch now shells out to an editor when opening a file for the user to
       edit. For example, if the `$EDITOR` environment variable is set to
       `"emacs -nw"`, it will now work. Thanks to Florian Ragwitz for the
       report (issue #80).
     - Removed the pod-checking tests from the distribution.

0.970 2013-05-09T00:21:06Z
     - Fixed the default ordering of changes displayed by the `plan` command.
       They are now ascending by default.
     - Switched to PerlIO::utf8_strict for fast character encoding and
       decoding.
     - The help emitted when an unknown option is passed to `sqitch` now
       consists of a usage statement and brief table of options, rather than
       the entire man page.
     - Added the project name in a header to the output of the `plan` command.
     - Added the Oracle engine.
     - Added `sqitchtutorial-oracle.pod`, a Oracle-specific variant of
       `sqitchtutorial.pod`.
     - Added missing version declaration to the App::Sqitch::Plan::* modules.
     - Devel::StackTrace 1.30 is now properly required (it was previously
       recommended).
     - The `--show-tags` and `--show-changes` options to the `status` command
       now show the changes when the project plan cannot be found (issue #90).

0.965  2013-04-23T16:25:59Z
     - Fixed failing test due to line-ending character variations on Windows.
       Many thanks to Jan Dubois for the testing help.
     - Replaced all uses of `$/` in output to `"\n"`. Thanks to Jan Dubois for
       pointing out the incorrect use of `$/`.
     - Fixed build error that prevented installation on Perl 5.10 when the
       parent module was not installed.

0.964  2013-04-15T18:47:30Z
     - Fixed test failures on Perl versions lower than 5.14 when DBD::SQLite
       or DBD::Pg is not installed.
     - Removed DBD::SQLite from the list of build dependencies.
     - Fixed test failures due to encoded (wide-character) warnings on
       triggered on systems with non-english locales. Thanks to Alexandr
       Ciornii for the smoke testing that revealed this issue.
     - Removed overriding of Throwable's `previous_exception` in
       App::Sqitch::X on Throwable 0.200007 and higher, where it is no longer
       needed.
     - Changed test comparing file contents that fails on Windows to do a
       looser comparison and hopefully fix the test failure.

0.963  2013-04-12T19:11:29Z
     - Fixed a test failure when Git is in the execution path and the test is
       not run from a Git checkout.
     - Added `plan` to `sqitchchanges`, the contents of which are shown when
       Sqitch is run with no command.
     - Removed the unique constraint on tag names in the database, as it
       prevented two projects from having the same tag name. Replaced it with
       a unique constraint on the project and tag names. Folks with production
       PostgreSQL installs should run these queries:
           ALTER TABLE sqitch.tags DROP CONSTRAINT tags_tag_key, ADD UNIQUE(project, tag);
           COMMENT ON COLUMN sqitch.tags.tag IS 'Project-unique tag name.';
     - Fixed failing tests when DBD::SQLite is not installed.
     - Removed dependency on Git::Wrapper. The `checkout` command does things
       very simply, and we already have tools for running command-line
       applications. So we just take advantage of that. The code is no more
       complicated than it was before.
     - Added the `core.vcs.client` configuration setting. Defaults to `git`
       (or `git.exe` on Windows).

0.962  2013-04-10T17:10:05Z
     - Fixed failing test on Perl 5.12 and lower.
     - Fixed the French translation by re-encoding it in UTF-8 (Ronan
       Dunklau).
     - Fixed the loading of the editor with placeholder text to properly
       encode that text as UTF-8 (Ronan Dunklau).
jperkin pushed a commit that referenced this pull request Mar 14, 2014
pkgsrc change: add GEM_EXTSDIR support.

=== 1.3.9 / 2014-02-25

* Bugfixes:
  * Reset exception message. Closes #80
  * Reduce warnings due unused pointers. Closes #89
  * Add BSD-3 license reference to gemspec. Refs #99 and #106
jperkin pushed a commit that referenced this pull request Apr 1, 2014
---
3.7
---

* Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment
  variable.
* Issue #140: Restore compatibility for older versions of PyWin32.

---
3.6
---

* `Pull Request #1 (github) <https://github.com/jaraco/keyring/pull/1>`_:
  Add support for packages that wish to bundle keyring by using relative
  imports throughout.

---
3.5
---

* Issue #49: Give the backend priorities a 1.5 multiplier bump when an
  XDG_CURRENT_DESKTOP environment variable matches the keyring's target
  environment.
* Issue #99: Clarified documentation on location of config and data files.
  Prepared the code base to treat the two differently on Unix-based systems.
  For now, the behavior is unchanged.

---
3.4
---

* Extracted FileBacked and Encrypted base classes.
* Add a pyinstaller hook to expose backend modules. Ref #124
* Pull request #41: Use errno module instead of hardcoding error codes.
* SecretService backend: correctly handle cases when user dismissed
  the collection creation or unlock prompt.

---
3.3
---

* Pull request #40: KWallet backend will now honor the ``KDE_FULL_SESSION``
  environment variable as found on openSUSE.

-----
3.2.1
-----

* SecretService backend: use a different function to check that the
  backend is functional. The default collection may not exist, but
  the collection will remain usable in that case.

  Also, make the error message more verbose.

  Resolves https://bugs.launchpad.net/bugs/1242412.

---
3.2
---

* Issue #120: Invoke KeyringBackend.priority during load_keyring to ensure
  that any keyring loaded is actually viable (or raises an informative
  exception).

* File keyring:

   - Issue #123: fix removing items.
   - Correctly escape item name when removing.
   - Use with statement when working with files.

* Add a test for removing one item in group.

* Issue #81: Added experimental support for third-party backends. See
  `keyring.core._load_library_extensions` for information on supplying
  a third-party backend.

---
3.1
---

* All code now runs natively on both Python 2 and Python 3, no 2to3 conversion
  is required.
* Testsuite: clean up, and make more use of unittest2 methods.

-----
3.0.5
-----

* Issue #114: Fix logic in pyfs detection.

-----
3.0.4
-----

* Issue #114: Fix detection of pyfs under Mercurial Demand Import.

-----
3.0.3
-----

* Simplified the implementation of ``keyring.core.load_keyring``. It now uses
  ``__import__`` instead of loading modules explicitly. The ``keyring_path``
  parameter to ``load_keyring`` is now deprecated. Callers should instead
  ensure their module is available on ``sys.path`` before calling
  ``load_keyring``. Keyring still honors ``keyring-path``. This change fixes
  Issue #113 in which the explicit module loading of keyring modules was
  breaking package-relative imports.

-----
3.0.2
-----

* Renamed ``keyring.util.platform`` to ``keyring.util.platform_``. As reported
  in Issue #112 and `mercurial_keyring #31
  <https://bitbucket.org/Mekk/mercurial_keyring/issue/31>`_ and in `Mercurial
  itself <http://bz.selenic.com/show_bug.cgi?id=4029>`_, Mercurial's Demand
  Import does not honor ``absolute_import`` directives, so it's not possible
  to have a module with the same name as another top-level module. A patch is
  in place to fix this issue upstream, but to support older Mercurial
  versions, this patch will remain for some time.

-----
3.0.1
-----

* Ensure that modules are actually imported even in Mercurial's Demand Import
  environment.

---
3.0
---

* Removed support for Python 2.5.
* Removed names in ``keyring.backend`` moved in 1.1 and previously retained
  for compatibilty.

-----
2.1.1
-----

* Restored Python 2.5 compatibility (lost in 2.0).

---
2.1
---

*  Issue #10: Added a 'store' attribute to the OS X Keyring, enabling custom
   instances of the KeyringBackend to use another store, such as the
   'internet' store. For example::

       keys = keyring.backends.OS_X.Keyring()
       keys.store = 'internet'
       keys.set_password(system, user, password)
       keys.get_password(system, user)

   The default for all instances can be set in the class::

       keyring.backends.OS_X.Keyring.store = 'internet'

*  GnomeKeyring: fix availability checks, and make sure the warning
   message from pygobject is not printed.

*  Fixes to GnomeKeyring and SecretService tests.

-----
2.0.3
-----

*  Issue #112: Backend viability/priority checks now are more aggressive about
   module presence checking, requesting ``__name__`` from imported modules to
   force the demand importer to actually attempt the import.

-----
2.0.2
-----

*  Issue #111: Windows backend isn't viable on non-Windows platforms.

-----
2.0.1
-----

*  Issue #110: Fix issues with ``Windows.RegistryKeyring``.

---
2.0
---

*  Issue #80: Prioritized backend support. The primary interface for Keyring
   backend classes has been refactored to now emit a 'priority' based on the
   current environment (operating system, libraries available, etc). These
   priorities provide an indication of the applicability of that backend for
   the current environment. Users are still welcome to specify a particular
   backend in configuration, but the default behavior should now be to select
   the most appropriate backend by default.

-----
1.6.1
-----

* Only include pytest-runner in 'setup requirements' when ptr invocation is
  indicated in the command-line (Issue #105).

---
1.6
---

*  GNOME Keyring backend:

   - Use the same attributes (``username`` / ``service``) as the SecretService
     backend uses, allow searching for old ones for compatibility.
   - Also set ``application`` attribute.
   - Correctly handle all types of errors, not only ``CANCELLED`` and ``NO_MATCH``.
   - Avoid printing warnings to stderr when GnomeKeyring is not available.

* Secret Service backend:

   - Use a better label for passwords, the same as GNOME Keyring backend uses.

---
1.5
---

*  SecretService: allow deleting items created using previous python-keyring
   versions.

   Before the switch to secretstorage, python-keyring didn't set "application"
   attribute. Now in addition to supporting searching for items without that
   attribute, python-keyring also supports deleting them.

*  Use ``secretstorage.get_default_collection`` if it's available.

   On secretstorage 1.0 or later, python-keyring now tries to create the
   default collection if it doesn't exist, instead of just raising the error.

*  Improvements for tests, including fix for Issue #102.

---
1.4
---

* Switch GnomeKeyring backend to use native libgnome-keyring via
  GObject Introspection, not the obsolete python-gnomekeyring module.

---
1.3
---

* Use the `SecretStorage library <https://pypi.python.org/pypi/SecretStorage>`_
  to implement the Secret Service backend (instead of using dbus directly).
  Now the keyring supports prompting for and deleting passwords. Fixes #69,
  #77, and #93.
* Catch `gnomekeyring.IOError` per the issue `reported in Nova client
  <https://bugs.launchpad.net/python-novaclient/+bug/1116302>`_.
* Issue #92 Added support for delete_password on Mac OS X Keychain.

-----
1.2.3
-----

* Fix for Encrypted File backend on Python 3.
* Issue #97 Improved support for PyPy.

-----
1.2.2
-----

* Fixed handling situations when user cancels kwallet dialog or denies access
  for the app.

-----
1.2.1
-----

* Fix for kwallet delete.
* Fix for OS X backend on Python 3.
* Issue #84: Fix for Google backend on Python 3 (use of raw_input not caught
  by 2to3).

---
1.2
---

* Implemented delete_password on most keyrings. Keyring 2.0 will require
  delete_password to implement a Keyring. Fixes #79.

-----
1.1.2
-----

* Issue #78: pyfilesystem backend now works on Windows.

-----
1.1.1
-----

* Fixed MANIFEST.in so .rst files are included.

---
1.1
---

This is the last build that will support installation in a pure-distutils
mode. Subsequent releases will require setuptools/distribute to install.
Python 3 installs have always had this requirement (for 2to3 install support),
but starting with the next minor release (1.2+), setuptools will be required.

Additionally, this release has made some substantial refactoring in an
attempt to modularize the backends. An attempt has been made to maintain 100%
backward-compatibility, although if your library does anything fancy with
module structure or clasess, some tweaking may be necessary. The
backward-compatible references will be removed in 2.0, so the 1.1+ releases
represent a transitional implementation which should work with both legacy
and updated module structure.

* Added a console-script 'keyring' invoking the command-line interface.
* Deprecated _ExtensionKeyring.
* Moved PasswordSetError and InitError to an `errors` module (references kept
  for backward-compatibility).
* Moved concrete backend implementations into their own modules (references
  kept for backward compatibility):

  - OSXKeychain -> backends.OS_X.Keyring
  - GnomeKeyring -> backends.Gnome.Keyring
  - SecretServiceKeyring -> backends.SecretService.Keyring
  - KDEKWallet -> backends.kwallet.Keyring
  - BasicFileKeyring -> backends.file.BaseKeyring
  - CryptedFileKeyring -> backends.file.EncryptedKeyring
  - UncryptedFileKeyring -> backends.file.PlaintextKeyring
  - Win32CryptoKeyring -> backends.Windows.EncryptedKeyring
  - WinVaultKeyring -> backends.Windows.WinVaultKeyring
  - Win32CryptoRegistry -> backends.Windows.RegistryKeyring
  - select_windows_backend -> backends.Windows.select_windows_backend
  - GoogleDocsKeyring -> backends.Google.DocsKeyring
  - Credential -> keyring.credentials.Credential
  - BaseCredential -> keyring.credentials.SimpleCredential
  - EnvironCredential -> keyring.credentials.EnvironCredential
  - GoogleEnvironCredential -> backends.Google.EnvironCredential
  - BaseKeyczarCrypter -> backends.keyczar.BaseCrypter
  - KeyczarCrypter -> backends.keyczar.Crypter
  - EnvironKeyczarCrypter -> backends.keyczar.EnvironCrypter
  - EnvironGoogleDocsKeyring -> backends.Google.KeyczarDocsKeyring
  - BasicPyfilesystemKeyring -> backends.pyfs.BasicKeyring
  - UnencryptedPyfilesystemKeyring -> backends.pyfs.PlaintextKeyring
  - EncryptedPyfilesystemKeyring -> backends.pyfs.EncryptedKeyring
  - EnvironEncryptedPyfilesystemKeyring -> backends.pyfs.KeyczarKeyring
  - MultipartKeyringWrapper -> backends.multi.MultipartKeyringWrapper

* Officially require Python 2.5 or greater (although unofficially, this
  requirement has been in place since 0.10).

---
1.0
---

This backward-incompatible release attempts to remove some cruft from the
codebase that's accumulated over the versions.

* Removed legacy file relocation support. `keyring` no longer supports loading
  configuration or file-based backends from ~. If upgrading from 0.8 or later,
  the files should already have been migrated to their new proper locations.
  If upgrading from 0.7.x or earlier, the files will have to be migrated
  manually.
* Removed CryptedFileKeyring migration support. To maintain an existing
  CryptedFileKeyring, one must first upgrade to 0.9.2 or later and access the
  keyring before upgrading to 1.0 to retain the existing keyring.
* File System backends now create files without group and world permissions.
  Fixes #67.

------
0.10.1
------

* Merged 0.9.3 to include fix for #75.

----
0.10
----

* Add support for using `Keyczar <http://www.keyczar.org/>`_ to encrypt
  keyrings. Keyczar is "an open source cryptographic toolkit designed to make
  it easier and safer for developers to use cryptography in their
  applications."
* Added support for storing keyrings on Google Docs or any other filesystem
  supported by pyfilesystem.
* Fixed issue in Gnome Keyring when unicode is passed as the service name,
  username, or password.
* Tweaked SecretService code to pass unicode to DBus, as unicode is the
  preferred format.
* Issue #71 - Fixed logic in CryptedFileKeyring.
* Unencrypted keyring file will be saved with user read/write (and not group
  or world read/write).

-----
0.9.3
-----

* Ensure migration is run when get_password is called. Fixes #75. Thanks to
  Marc Deslauriers for reporting the bug and supplying the patch.

-----
0.9.2
-----

* Keyring 0.9.1 introduced a whole different storage format for the
  CryptedFileKeyring, but this introduced some potential compatibility issues.
  This release incorporates the security updates but reverts to the INI file
  format for storage, only encrypting the passwords and leaving the service
  and usernames in plaintext. Subsequent releases may incorporate a new
  keyring to implement a whole-file encrypted version. Fixes #64.
* The CryptedFileKeyring now requires simplejson for Python 2.5 clients.

-----
0.9.1
-----

* Fix for issue where SecretServiceBackend.set_password would raise a
  UnicodeError on Python 3 or when a unicode password was provided on Python
  2.
* CryptedFileKeyring now uses PBKDF2 to derive the key from the user's
  password and a random hash. The IV is chosen randomly as well. All the
  stored passwords are encrypted at once. Any keyrings using the old format
  will be automatically converted to the new format (but will no longer be
  compatible with 0.9 and earlier). The user's password is no longer limited
  to 32 characters. PyCrypto 2.5 or greater is now required for this keyring.

---
0.9
---

* Add support for GTK 3 and secret service D-Bus. Fixes #52.
* Issue #60 - Use correct method for decoding.

-----
0.8.1
-----

* Fix regression in keyring lib on Windows XP where the LOCALAPPDATA
  environment variable is not present.

---
0.8
---

* Mac OS X keyring backend now uses subprocess calls to the `security`
  command instead of calling the API, which with the latest updates, no
  longer allows Python to invoke from a virtualenv. Fixes issue #13.
* When using file-based storage, the keyring files are no longer stored
  in the user's home directory, but are instead stored in platform-friendly
  locations (`%localappdata%\Python Keyring` on Windows and according to
  the freedesktop.org Base Dir Specification
  (`$XDG_DATA_HOME/python_keyring` or `$HOME/.local/share/python_keyring`)
  on other operating systems). This fixes #21.

*Backward Compatibility Notice*

Due to the new storage location for file-based keyrings, keyring 0.8
supports backward compatibility by automatically moving the password
files to the updated location. In general, users can upgrade to 0.8 and
continue to operate normally. Any applications that customize the storage
location or make assumptions about the storage location will need to take
this change into consideration. Additionally, after upgrading to 0.8,
it is not possible to downgrade to 0.7 without manually moving
configuration files. In 1.0, the backward compatibilty
will be removed.

-----
0.7.1
-----

* Removed non-ASCII characters from README and CHANGES docs (required by
  distutils if we're to include them in the long_description). Fixes #55.

---
0.7
---

* Python 3 is now supported. All tests now pass under Python 3.2 on
  Windows and Linux (although Linux backend support is limited). Fixes #28.
* Extension modules on Mac and Windows replaced by pure-Python ctypes
  implementations. Thanks to Jerome Laheurte.
* WinVaultKeyring now supports multiple passwords for the same service. Fixes
  #47.
* Most of the tests don't require user interaction anymore.
* Entries stored in Gnome Keyring appears now with a meaningful name if you try
  to browser your keyring (for ex. with Seahorse)
* Tests from Gnome Keyring no longer pollute the user own keyring.
* `keyring.util.escape` now accepts only unicode strings. Don't try to encode
  strings passed to it.

-----
0.6.2
-----

* fix compiling on OSX with XCode 4.0

-----
0.6.1
-----

* Gnome keyring should not be used if there is no DISPLAY or if the dbus is
  not around (https://bugs.launchpad.net/launchpadlib/+bug/752282).

---
0.6
---

* Added `keyring.http` for facilitating HTTP Auth using keyring.

* Add a utility to access the keyring from the command line.
jperkin pushed a commit that referenced this pull request Apr 15, 2014
---
3.7
---

* Gnome keyring no longer relies on the GNOME_KEYRING_CONTROL environment
  variable.
* Issue #140: Restore compatibility for older versions of PyWin32.

---
3.6
---

* `Pull Request #1 (github) <https://github.com/jaraco/keyring/pull/1>`_:
  Add support for packages that wish to bundle keyring by using relative
  imports throughout.

---
3.5
---

* Issue #49: Give the backend priorities a 1.5 multiplier bump when an
  XDG_CURRENT_DESKTOP environment variable matches the keyring's target
  environment.
* Issue #99: Clarified documentation on location of config and data files.
  Prepared the code base to treat the two differently on Unix-based systems.
  For now, the behavior is unchanged.

---
3.4
---

* Extracted FileBacked and Encrypted base classes.
* Add a pyinstaller hook to expose backend modules. Ref #124
* Pull request #41: Use errno module instead of hardcoding error codes.
* SecretService backend: correctly handle cases when user dismissed
  the collection creation or unlock prompt.

---
3.3
---

* Pull request #40: KWallet backend will now honor the ``KDE_FULL_SESSION``
  environment variable as found on openSUSE.

-----
3.2.1
-----

* SecretService backend: use a different function to check that the
  backend is functional. The default collection may not exist, but
  the collection will remain usable in that case.

  Also, make the error message more verbose.

  Resolves https://bugs.launchpad.net/bugs/1242412.

---
3.2
---

* Issue #120: Invoke KeyringBackend.priority during load_keyring to ensure
  that any keyring loaded is actually viable (or raises an informative
  exception).

* File keyring:

   - Issue #123: fix removing items.
   - Correctly escape item name when removing.
   - Use with statement when working with files.

* Add a test for removing one item in group.

* Issue #81: Added experimental support for third-party backends. See
  `keyring.core._load_library_extensions` for information on supplying
  a third-party backend.

---
3.1
---

* All code now runs natively on both Python 2 and Python 3, no 2to3 conversion
  is required.
* Testsuite: clean up, and make more use of unittest2 methods.

-----
3.0.5
-----

* Issue #114: Fix logic in pyfs detection.

-----
3.0.4
-----

* Issue #114: Fix detection of pyfs under Mercurial Demand Import.

-----
3.0.3
-----

* Simplified the implementation of ``keyring.core.load_keyring``. It now uses
  ``__import__`` instead of loading modules explicitly. The ``keyring_path``
  parameter to ``load_keyring`` is now deprecated. Callers should instead
  ensure their module is available on ``sys.path`` before calling
  ``load_keyring``. Keyring still honors ``keyring-path``. This change fixes
  Issue #113 in which the explicit module loading of keyring modules was
  breaking package-relative imports.

-----
3.0.2
-----

* Renamed ``keyring.util.platform`` to ``keyring.util.platform_``. As reported
  in Issue #112 and `mercurial_keyring #31
  <https://bitbucket.org/Mekk/mercurial_keyring/issue/31>`_ and in `Mercurial
  itself <http://bz.selenic.com/show_bug.cgi?id=4029>`_, Mercurial's Demand
  Import does not honor ``absolute_import`` directives, so it's not possible
  to have a module with the same name as another top-level module. A patch is
  in place to fix this issue upstream, but to support older Mercurial
  versions, this patch will remain for some time.

-----
3.0.1
-----

* Ensure that modules are actually imported even in Mercurial's Demand Import
  environment.

---
3.0
---

* Removed support for Python 2.5.
* Removed names in ``keyring.backend`` moved in 1.1 and previously retained
  for compatibilty.

-----
2.1.1
-----

* Restored Python 2.5 compatibility (lost in 2.0).

---
2.1
---

*  Issue #10: Added a 'store' attribute to the OS X Keyring, enabling custom
   instances of the KeyringBackend to use another store, such as the
   'internet' store. For example::

       keys = keyring.backends.OS_X.Keyring()
       keys.store = 'internet'
       keys.set_password(system, user, password)
       keys.get_password(system, user)

   The default for all instances can be set in the class::

       keyring.backends.OS_X.Keyring.store = 'internet'

*  GnomeKeyring: fix availability checks, and make sure the warning
   message from pygobject is not printed.

*  Fixes to GnomeKeyring and SecretService tests.

-----
2.0.3
-----

*  Issue #112: Backend viability/priority checks now are more aggressive about
   module presence checking, requesting ``__name__`` from imported modules to
   force the demand importer to actually attempt the import.

-----
2.0.2
-----

*  Issue #111: Windows backend isn't viable on non-Windows platforms.

-----
2.0.1
-----

*  Issue #110: Fix issues with ``Windows.RegistryKeyring``.

---
2.0
---

*  Issue #80: Prioritized backend support. The primary interface for Keyring
   backend classes has been refactored to now emit a 'priority' based on the
   current environment (operating system, libraries available, etc). These
   priorities provide an indication of the applicability of that backend for
   the current environment. Users are still welcome to specify a particular
   backend in configuration, but the default behavior should now be to select
   the most appropriate backend by default.

-----
1.6.1
-----

* Only include pytest-runner in 'setup requirements' when ptr invocation is
  indicated in the command-line (Issue #105).

---
1.6
---

*  GNOME Keyring backend:

   - Use the same attributes (``username`` / ``service``) as the SecretService
     backend uses, allow searching for old ones for compatibility.
   - Also set ``application`` attribute.
   - Correctly handle all types of errors, not only ``CANCELLED`` and ``NO_MATCH``.
   - Avoid printing warnings to stderr when GnomeKeyring is not available.

* Secret Service backend:

   - Use a better label for passwords, the same as GNOME Keyring backend uses.

---
1.5
---

*  SecretService: allow deleting items created using previous python-keyring
   versions.

   Before the switch to secretstorage, python-keyring didn't set "application"
   attribute. Now in addition to supporting searching for items without that
   attribute, python-keyring also supports deleting them.

*  Use ``secretstorage.get_default_collection`` if it's available.

   On secretstorage 1.0 or later, python-keyring now tries to create the
   default collection if it doesn't exist, instead of just raising the error.

*  Improvements for tests, including fix for Issue #102.

---
1.4
---

* Switch GnomeKeyring backend to use native libgnome-keyring via
  GObject Introspection, not the obsolete python-gnomekeyring module.

---
1.3
---

* Use the `SecretStorage library <https://pypi.python.org/pypi/SecretStorage>`_
  to implement the Secret Service backend (instead of using dbus directly).
  Now the keyring supports prompting for and deleting passwords. Fixes #69,
  #77, and #93.
* Catch `gnomekeyring.IOError` per the issue `reported in Nova client
  <https://bugs.launchpad.net/python-novaclient/+bug/1116302>`_.
* Issue #92 Added support for delete_password on Mac OS X Keychain.

-----
1.2.3
-----

* Fix for Encrypted File backend on Python 3.
* Issue #97 Improved support for PyPy.

-----
1.2.2
-----

* Fixed handling situations when user cancels kwallet dialog or denies access
  for the app.

-----
1.2.1
-----

* Fix for kwallet delete.
* Fix for OS X backend on Python 3.
* Issue #84: Fix for Google backend on Python 3 (use of raw_input not caught
  by 2to3).

---
1.2
---

* Implemented delete_password on most keyrings. Keyring 2.0 will require
  delete_password to implement a Keyring. Fixes #79.

-----
1.1.2
-----

* Issue #78: pyfilesystem backend now works on Windows.

-----
1.1.1
-----

* Fixed MANIFEST.in so .rst files are included.

---
1.1
---

This is the last build that will support installation in a pure-distutils
mode. Subsequent releases will require setuptools/distribute to install.
Python 3 installs have always had this requirement (for 2to3 install support),
but starting with the next minor release (1.2+), setuptools will be required.

Additionally, this release has made some substantial refactoring in an
attempt to modularize the backends. An attempt has been made to maintain 100%
backward-compatibility, although if your library does anything fancy with
module structure or clasess, some tweaking may be necessary. The
backward-compatible references will be removed in 2.0, so the 1.1+ releases
represent a transitional implementation which should work with both legacy
and updated module structure.

* Added a console-script 'keyring' invoking the command-line interface.
* Deprecated _ExtensionKeyring.
* Moved PasswordSetError and InitError to an `errors` module (references kept
  for backward-compatibility).
* Moved concrete backend implementations into their own modules (references
  kept for backward compatibility):

  - OSXKeychain -> backends.OS_X.Keyring
  - GnomeKeyring -> backends.Gnome.Keyring
  - SecretServiceKeyring -> backends.SecretService.Keyring
  - KDEKWallet -> backends.kwallet.Keyring
  - BasicFileKeyring -> backends.file.BaseKeyring
  - CryptedFileKeyring -> backends.file.EncryptedKeyring
  - UncryptedFileKeyring -> backends.file.PlaintextKeyring
  - Win32CryptoKeyring -> backends.Windows.EncryptedKeyring
  - WinVaultKeyring -> backends.Windows.WinVaultKeyring
  - Win32CryptoRegistry -> backends.Windows.RegistryKeyring
  - select_windows_backend -> backends.Windows.select_windows_backend
  - GoogleDocsKeyring -> backends.Google.DocsKeyring
  - Credential -> keyring.credentials.Credential
  - BaseCredential -> keyring.credentials.SimpleCredential
  - EnvironCredential -> keyring.credentials.EnvironCredential
  - GoogleEnvironCredential -> backends.Google.EnvironCredential
  - BaseKeyczarCrypter -> backends.keyczar.BaseCrypter
  - KeyczarCrypter -> backends.keyczar.Crypter
  - EnvironKeyczarCrypter -> backends.keyczar.EnvironCrypter
  - EnvironGoogleDocsKeyring -> backends.Google.KeyczarDocsKeyring
  - BasicPyfilesystemKeyring -> backends.pyfs.BasicKeyring
  - UnencryptedPyfilesystemKeyring -> backends.pyfs.PlaintextKeyring
  - EncryptedPyfilesystemKeyring -> backends.pyfs.EncryptedKeyring
  - EnvironEncryptedPyfilesystemKeyring -> backends.pyfs.KeyczarKeyring
  - MultipartKeyringWrapper -> backends.multi.MultipartKeyringWrapper

* Officially require Python 2.5 or greater (although unofficially, this
  requirement has been in place since 0.10).

---
1.0
---

This backward-incompatible release attempts to remove some cruft from the
codebase that's accumulated over the versions.

* Removed legacy file relocation support. `keyring` no longer supports loading
  configuration or file-based backends from ~. If upgrading from 0.8 or later,
  the files should already have been migrated to their new proper locations.
  If upgrading from 0.7.x or earlier, the files will have to be migrated
  manually.
* Removed CryptedFileKeyring migration support. To maintain an existing
  CryptedFileKeyring, one must first upgrade to 0.9.2 or later and access the
  keyring before upgrading to 1.0 to retain the existing keyring.
* File System backends now create files without group and world permissions.
  Fixes #67.

------
0.10.1
------

* Merged 0.9.3 to include fix for #75.

----
0.10
----

* Add support for using `Keyczar <http://www.keyczar.org/>`_ to encrypt
  keyrings. Keyczar is "an open source cryptographic toolkit designed to make
  it easier and safer for developers to use cryptography in their
  applications."
* Added support for storing keyrings on Google Docs or any other filesystem
  supported by pyfilesystem.
* Fixed issue in Gnome Keyring when unicode is passed as the service name,
  username, or password.
* Tweaked SecretService code to pass unicode to DBus, as unicode is the
  preferred format.
* Issue #71 - Fixed logic in CryptedFileKeyring.
* Unencrypted keyring file will be saved with user read/write (and not group
  or world read/write).

-----
0.9.3
-----

* Ensure migration is run when get_password is called. Fixes #75. Thanks to
  Marc Deslauriers for reporting the bug and supplying the patch.

-----
0.9.2
-----

* Keyring 0.9.1 introduced a whole different storage format for the
  CryptedFileKeyring, but this introduced some potential compatibility issues.
  This release incorporates the security updates but reverts to the INI file
  format for storage, only encrypting the passwords and leaving the service
  and usernames in plaintext. Subsequent releases may incorporate a new
  keyring to implement a whole-file encrypted version. Fixes #64.
* The CryptedFileKeyring now requires simplejson for Python 2.5 clients.

-----
0.9.1
-----

* Fix for issue where SecretServiceBackend.set_password would raise a
  UnicodeError on Python 3 or when a unicode password was provided on Python
  2.
* CryptedFileKeyring now uses PBKDF2 to derive the key from the user's
  password and a random hash. The IV is chosen randomly as well. All the
  stored passwords are encrypted at once. Any keyrings using the old format
  will be automatically converted to the new format (but will no longer be
  compatible with 0.9 and earlier). The user's password is no longer limited
  to 32 characters. PyCrypto 2.5 or greater is now required for this keyring.

---
0.9
---

* Add support for GTK 3 and secret service D-Bus. Fixes #52.
* Issue #60 - Use correct method for decoding.

-----
0.8.1
-----

* Fix regression in keyring lib on Windows XP where the LOCALAPPDATA
  environment variable is not present.

---
0.8
---

* Mac OS X keyring backend now uses subprocess calls to the `security`
  command instead of calling the API, which with the latest updates, no
  longer allows Python to invoke from a virtualenv. Fixes issue #13.
* When using file-based storage, the keyring files are no longer stored
  in the user's home directory, but are instead stored in platform-friendly
  locations (`%localappdata%\Python Keyring` on Windows and according to
  the freedesktop.org Base Dir Specification
  (`$XDG_DATA_HOME/python_keyring` or `$HOME/.local/share/python_keyring`)
  on other operating systems). This fixes #21.

*Backward Compatibility Notice*

Due to the new storage location for file-based keyrings, keyring 0.8
supports backward compatibility by automatically moving the password
files to the updated location. In general, users can upgrade to 0.8 and
continue to operate normally. Any applications that customize the storage
location or make assumptions about the storage location will need to take
this change into consideration. Additionally, after upgrading to 0.8,
it is not possible to downgrade to 0.7 without manually moving
configuration files. In 1.0, the backward compatibilty
will be removed.

-----
0.7.1
-----

* Removed non-ASCII characters from README and CHANGES docs (required by
  distutils if we're to include them in the long_description). Fixes #55.

---
0.7
---

* Python 3 is now supported. All tests now pass under Python 3.2 on
  Windows and Linux (although Linux backend support is limited). Fixes #28.
* Extension modules on Mac and Windows replaced by pure-Python ctypes
  implementations. Thanks to Jerome Laheurte.
* WinVaultKeyring now supports multiple passwords for the same service. Fixes
  #47.
* Most of the tests don't require user interaction anymore.
* Entries stored in Gnome Keyring appears now with a meaningful name if you try
  to browser your keyring (for ex. with Seahorse)
* Tests from Gnome Keyring no longer pollute the user own keyring.
* `keyring.util.escape` now accepts only unicode strings. Don't try to encode
  strings passed to it.

-----
0.6.2
-----

* fix compiling on OSX with XCode 4.0

-----
0.6.1
-----

* Gnome keyring should not be used if there is no DISPLAY or if the dbus is
  not around (https://bugs.launchpad.net/launchpadlib/+bug/752282).

---
0.6
---

* Added `keyring.http` for facilitating HTTP Auth using keyring.

* Add a utility to access the keyring from the command line.
jperkin pushed a commit that referenced this pull request Aug 12, 2014
2014-07-02 version 0.5.9:

  * Support std::tr1 unordered containers by default (#51, #63, #68, #69)
  * Remove some warnings (#56)
  * Fix segmentation fault after malloc failures (#58, #59)
  * Fix alloc/dealloc mismatch (#52, #61)
  * Fix sample codes (#60, #64)
  * Support implicit conversion from integer to float/double (#54)
  * Improve documents (#45, #75, #82, #83)
  * Support CMake (#20, #87)
  * Remove Ruby dependencies in bootstrap (#86, #87)
  * Add FILE* buffer (#40)
  * Other bug fixes and refactoring: #39, #73, #77, #79, #80, #81, #84, #90
jperkin pushed a commit that referenced this pull request Sep 19, 2014
1.8.0
-----

- Issue #90: Add six.moves.shlex_quote.

- Issue #59: Add six.moves.intern.

- Add six.urllib.parse.uses_(fragment|netloc|params|query|relative).

- Issue #88: Fix add_metaclass when the class has __slots__ containing
  "__weakref__" or "__dict__".

- Issue #89: Make six use absolute imports.

- Issue #85: Always accept *updated* and *assigned* arguments for wraps().

- Issue #86: In reraise(), instantiate the exception if the second argument is
  None.

- Pull request #45: Add six.moves.email_mime_nonmultipart.

- Issue #81: Add six.urllib.request.splittag mapping.

- Issue #80: Add six.urllib.request.splituser mapping.
jperkin pushed a commit that referenced this pull request Oct 3, 2014
        Integrated SPF checking is now available through the new
                SPFSelfValidate and SPFIgnoreResults settings.
        Feature request #79: Optionally ignore clients that authenticated
                using SMTP AUTH.
        Fix bug #60, part II: Default AuthservID to the name provided by the
                MTA, not the local host name, which is consistent with what
                OpenDKIM does.
        Fix bug #72: Don't crash when From fields are absent.
        Fix bug #74: Change "Forensic" to "Failure" just about everywhere
                to match the language now being used in the base DMARC
                draft.  Note that this also changes some names in the
                configuration file.
        Fix bug #75: Correct typo in MIME of forensic reports.
        Fix bug #76: Repair damage with respect to Authentication-Results
                header field selection.
        Fix bug #77: Request quarantine from the MTA during option
                negotiation.
        Fix bug #78: Add missing newline in forensic report header.
        Fix bug #90: Make "--with-sql-backend" without any value do the
                right thing.
        Fix bug #93: Honor size limits in URIs.
        Make "smime" and "rrvs" legal Authentication-Results methods.
        Provide better logging when pclose() for a forensic report returns
                non-zero.
        Add configuration support for internal SPF checks.  Includes hooks in
                the milter to check that SPF is configured to do so.
                This can use a private SPF implementation or libspf2.
        Fix strlcat() and strlcpy() support for Debian.
        REPORTS: Feature request #80: Generate aggregate reports on UTC
                day boundaries.
        REPORTS: Feature request #84: Optionally expire old data from
                lower-growth tables.
        REPORTS: Fix bug #70: Fix date range generation in reports.
        REPORTS: Fix bug #82: Fix recording of report timestamp to avoid lost
                records.
        REPORTS: Fix bug #83: When expiring data, truncate the signatures table
                if all messages were expired..
        REPORTS: Fix bug #85: Report subdomain policy.
        LIBOPENDMARC: Fix bug #71: Fix "rua" extraction from DMARC records.
        LIBOPENDMARC: Added support for milter to perform own spf checks.
                Three new files: opendmarc_spf.c, opendmard_spf_dns.c and
                test/test_spf.cl, allow integrated SPF support.  Support for
                use of libspf2 is also provided.
jperkin pushed a commit that referenced this pull request Dec 1, 2014
7.0
---

* Issue #80, Issue #209: Eggs that are downloaded for ``setup_requires``,
  ``test_requires``, etc. are now placed in a ``./.eggs`` directory instead of
  directly in the current directory. This choice of location means the files
  can be readily managed (removed, ignored). Additionally,
  later phases or invocations of setuptools will not detect the package as
  already installed and ignore it for permanent install (See #209).

  This change is indicated as backward-incompatible as installations that
  depend on the installation in the current directory will need to account for
  the new location. Systems that ignore ``*.egg`` will probably need to be
  adapted to ignore ``.eggs``. The files will need to be manually moved or
  will be retrieved again. Most use cases will require no attention.
jperkin pushed a commit that referenced this pull request Mar 16, 2015
== 0.6.3 / 2015-01-09

* Minor enhancements

  * Expose an env helper for persistently configuring the env as needed
    (Darío Javier Cravero #80)
  * Expose the tempfile of UploadedFile (Sytse Sijbrandij #67)

* Bug fixes

  * Improve support for arrays of hashes in multipart forms (Murray Steele #69)
  * Improve test for query strings (Paul Grayson #66)
jperkin pushed a commit that referenced this pull request Mar 16, 2015
-----------------------------------------------------
2015-03-13  k  <[email protected]>
	* release 2.10
	* same code as 2.10-TRIAL

2015-02-22  k  <[email protected]>
	* release 2.10-TRIAL
	* Fix Makefile/Build file test in prereq_pm (Craig A. Berry; RT 98265)
	* Don't use list assignment to %ENV in Distribution::make (Craig A.
	Berry; RT 98265)

	* Bump $VERSION in changed modules (for integration into blead, post
	5.21.9) (Steve Hay)

	* bump requirement for Socket.pm on Windows (Alexandr Ciornii)

2015-02-02  k  <[email protected]>
	* release 2.09-TRIAL
	* tune verbosity of failing tests in 30shell.t (Andreas Koenig)
	* find or fetch MIRRORED.BY -- github #84 (brian d foy)
	* bump $VERSION in modules changed since CPAN-2.00 -- github #83 (Steve
	Hay)

2015-01-05  k  <[email protected]>
	* release 2.08-TRIAL
	* fixes binary test files github #81 (brian d foy)

2015-01-04  k  <[email protected]>
	* release 2.07-TRIAL
	* add support for Cwd::getdcwd and introduce workaround for a
	misbehaviour seen on Strawberry perl 5.20.1 (Andreas Koenig)

	* fixes bug that possibly CPAN::Meta::Requirements was not loaded in
	time (Andreas Koenig)

	* silences unini warnings from missing environment variables (tlhackque)
	* fixes chdir after building dependencies bug github #79 and #80 (David
	Schweikert)

	* some new and some improved distroprefes files, and some have gone too
	(Andreas Koenig, Slaven Rezic)

	* introduces experimental support for plugins/hooks (#apw2014 in
	Salzburg; Andreas Koenig, Branislav Zahradnik)

	* catches more user errors on the 'o conf' commandline (Andreas Koenig)
	* integrates the App::Cpan sources taken over from brian with lots of
	cleanup from him, so that they have less chance to digress (brian d foy)

	* fixes clear_credentials that were completely broken (Len Jaffe)
	* fixes typos (David Horner)

2014-08-06  k  <[email protected]>
	* release 2.06-TRIAL
	* lazy load CPAN::Meta::Requirements (David Golden)
	* fix $rtt handling in App::Cpan (Peter Martini)
	* bump CPAN::Meta::Requirements requirement (Karen Etheridge)
	* fix unini warning in App::Cpan (mudler)
	* tiny distroprefs fixes (Andreas Koenig)
	* remove beta warning from distroprefs documentation (Andreas Koenig)
	* do not check recursion on optional dependencies (Andreas Koenig)
	* address rt.cpan.org #95271: sanity check META.yml to contain a hash
	(Alexandr Ciornii, Andreas Koenig)
jperkin pushed a commit that referenced this pull request Jun 17, 2015
== 2.6.1 / 2015-05-25

* Bugs:
  * Make columnar store handle all supported extensions, not just the first.
  * Avoid circular require when using the columnar store.

== 2.6 / 2015-05-25

* New Feature:
  * Columnar data storage for the MIME::Types registry, contributed by Jeremy
    Evans (@jeremyevans). Reduces default memory use substantially (the mail
    gem drops from 19 Mib to about 3 Mib). Resolves
    {#96}[mime-types/ruby-mime-types#96],
    {#94}[mime-types/ruby-mime-types#94],
    {#83}[mime-types/ruby-mime-types#83]. Partially
    addresses {#64}[mime-types/ruby-mime-types#64]
    and {#62}[mime-types/ruby-mime-types#62].
* Development:
  * Removed caching of deprecation messages in preparation for mime-types 3.0.
    Now, deprecated methods will always warn their deprecation instead of only
    warning once.
  * Added a logger for deprecation messages.
  * Renamed <tt>lib/mime.rb</tt> to <tt>lib/mime/deprecations.rb</tt> to not
    conflict with the {mime}[https://rubygems.org/gems/mime] gem on behalf of
    the maintainers of the {Praxis Framework}[http://praxis-framework.io/].
    Provided by Josep M. Blanquer (@blanquer),
    {#100}[mime-types/ruby-mime-types#100].
  * Added the columnar data conversion tool, also provided by Jeremy Evans.
* Documentation:
  * Improved documentation and ensured that all deprecated methods are marked
    as such in the documentation.
* Development:
  * Added more Ruby variants to Travis CI.
  * Silenced deprecation messages for internal tools. Noisy deprecations are
    noisy, but that's the point.

== 2.5 / 2015-04-25

* Bugs:
  * David Genord (@albus522) fixed a bug in loading MIME::types cache where a
    container loaded from cache did not have the expected +default_proc+,
    {#86}[mime-types/ruby-mime-types#86].
  * Richard Schneeman (@schneems) provided a patch that substantially reduces
    unnecessary allocations.
* Documentation:
  * Tibor Szolár (@flexik) fixed a typo in the README,
    {#82}[mime-types/ruby-mime-types#82]
  * Fixed {#80}[mime-types/ruby-mime-types#80],
    clarifying the relationship of MIME::Type#content_type and
    MIME::Type#simplified, with Ken Ip (@kenips).
* Development:
  * Juanito Fatas (@JuanitoFatas) enabled container mode on Travis CI,
    {#87}[mime-types/ruby-mime-types#87].
* Moved development to a mime-types organization under
  {mime-types/ruby-mime-types}[https://github.com/mime-types/ruby-mime-types].
jperkin pushed a commit that referenced this pull request Jul 17, 2015
2015.6.21
=========
----

* Fix #31: HTML entities stay inside link.
* Fix #71: Coverage detects command line tests.
* Fix #39: Documentation update.
* Fix #61: Functionality added for optional use of automatic links.
* Feature #80: ``title`` attribute is preserved in both inline and reference links.
* Feature #82: More command line options. See docs.


2015.6.12
=========
----

* Feature #76: Making ``pre`` blocks clearer for further automatic formatting.
* Fix #71: Coverage detects tests carried out in ``subprocesses``


2015.6.6
========
----

* Fix #24: ``3.200.3`` vs ``2014.7.3`` output quirks.
* Fix #61. Malformed links in markdown output.
* Feature #62: Automatic version number.
* Fix #63: Nested code, anchor bug.
* Fix #64: Proper handling of anchors with content that starts with tags.
* Feature #67: Documentation all over the module.
* Feature #70: Adding tests for the module.
* Fix #73: Typo in config documentation.
jperkin pushed a commit that referenced this pull request Jan 17, 2016
* Disable debug library

Changelog:
Release 1.6.1 (2015-08-03)
==========================

- added project and solution files for Visual Studio 2015
- upgraded bundled SQLite to 3.8.11.1
- fixed GH #782: Poco::JSON::PrintHandler not working for nested arrays
- fixed GH #819: JSON Stringifier fails with preserve insert order
- fixed GH #878: UUID tryParse
- fixed GH #869: FIFOBuffer::read(T*, std::size_t) documentation inaccurate
- fixed GH #861: Var BadCastException
- fixed GH #779: BUG in 1.6.0 Zip code
- fixed GH #769: Poco::Var operator== throws exception
- fixed GH #766: Poco::JSON::PrintHandler not working for objects in array
- fixed GH #763: Unable to build static with NetSSL_OpenSSL for OS X
- fixed GH #750: BsonWriter::write<Binary::Ptr> missing size ?
- fixed GH #741: Timestamp anomaly in Poco::Logger on WindowsCE
- fixed GH #735: WEC2013 build fails due to missing Poco::Path methods.
- fixed GH #722: poco-1.6.0: Unicode Converter Test confuses string and char types
- fixed GH #719: StreamSocket::receiveBytes and FIFOBuffer issue in 1.6
- fixed GH #706: POCO1.6 Sample EchoServer BUG
- fixed GH #646: Prevent possible data race in access to Timer::_periodicInerval
- DeflatingStream: do not flush underlying stream on sync() as these can cause
  corrupted files in Zip archives


Release 1.6.0 (2014-12-22)
==========================

- fixed GH #625: MongoDB ensureIndex double insert?
- fixed GH #622: Crypto: RSATest::testSign() should verify with public key only
- fixed GH #620: Data documentation sample code outdated
- fixed GH #618: OS X 10.10 defines PAGE_SIZE macro, conflicts with PAGE_SIZE in Thread_POSIX.cpp
- fixed GH #616: Visual Studio warning C4244
- fixed GH #612: OpenSSLInitializer calls OPENSSL_config but not CONF_modules_free
- fixed GH #608: (Parallel)SocketAcceptor ctor/dtor call virtual functions
- fixed GH #607: Idle Reactor high CPU usage
- fixed GH #606: HTMLForm constructor read application/x-www-form-urlencoded UTF-8 request
  body first parameter with BOM in name
- fixed GH #596: For OpenSSL 1.0.1, include openssl/crypto.h not openssl/fips.h
- fixed GH #592: Incorrect format string in Poco::Dynamic::Struct
- fixed GH #590: Poco::Data::SQlite doesn't support URI filenames
- fixed GH #564: URI::encode
- fixed GH #560: DateTime class calculates a wrong day
- fixed GH #549: Memory allocation is not safe between fork() and execve()
- fixed GH #500: SSLManager causes a crash
- fixed GH #490: 2 byte frame with payload length of 0 throws "Incomplete Frame Received" exception
- fixed GH #483: multiple cases for sqlite_busy
- fixed GH #482: Poco::JSON::Stringifier::stringify bad behaviour
- fixed GH #478: HTTPCredentials not according to HTTP spec
- fixed GH #471: vs2010 release builds have optimization disabled ?
- fixed GH #468: HTTPClientSession/HTTPResponse not forwarding exceptions
- fixed GH #438: Poco::File::setLastModified() doesn't work
- fixed GH #402: StreamSocket::receiveBytes(FIFOBuffer&) and sendBytes(FIFOBuffer&) are
  not thread safe
- fixed GH #345: Linker warning LNK4221 in Foundation for SignalHandler.obj, String.obj
  and ByteOrder.obj
- fixed GH #331: Poco::Zip does not support files with ".." in the name.
- fixed GH #318: Logger local time doesn't automatically account for DST
- fixed GH #294: Poco::Net::TCPServerParams::setMaxThreads(int count) will not accept count == 0.
- fixed GH #215: develop WinCE build broken
- fixed GH #63: Net::NameValueCollection::size() returns int
- Poco::Logger: formatting methods now support up to 10 arguments.
- added Poco::Timestamp::raw()
- Poco::DeflatingOutputStream and Poco::InflatingOutputStreams also flush underlying stream
  on flush()/sync().
- Poco::Util::Timer: prevent re-schedule of cancelled TimerTask
- enabled WinRegistryKey and WinRegistryConfiguration for WinCE
- Poco::BasicEvent improvements and preparations for future support of lambdas/std::function
- upgraded bundled sqlite to 3.8.7.2
- Poco::Thread: added support for starting functors/lambdas
- Poco::Net::HTTPClientSession: added support for global proxy configuration
- added support for OAuth 1.0/2.0 via Poco::Net::OAuth10Credentials and
  Poco::Net::OAuth20Credentials classes.
- Poco::Net::IPAddress: fixed IPv6 prefix handling issue on Windows
- added Poco::Timestamp::TIMEVAL_MIN and Poco::Timestamp::TIMEVAL_MAX
- added Poco::Clock::CLOCKVAL_MIN and Poco::Clock::CLOCKVAL_MAX
- added poco_assert_msg() and poco_assert_msg_dbg() macros
- Poco::Net::Context: fixed a memory leak if the CA file was not found while creating the
  Context object (the underlying OpenSSL context would leak)
- Poco::URI: added new constructor to create URI from Path
- Various documentation and style fixes
- Removed support (project/solution files) for Visual Studio.NET 2003 and Visual Studio 2005.
- Improved CMake support


Release 1.5.4 (2014-10-14)
==========================

- fixed GH #326: compile Net lib 1.5.2 without UTF8 support enabled
- fixed GH #518: NetworkInterface.cpp compile error w/ POCO_NO_WSTRING (1.5.3)
- Fixed MSVC 2010 warnings on large alignment
- make HTTPAuthenticationParams::parse() add value on end of string
- fixed GH #482: Poco::JSON::Stringifier::stringify bad behaviour
- fixed GH #508: Can't compile for arm64 architecture
- fixed GH #510: Incorrect RSAKey construction from istream
- fix SharedMemory for WinCE/WEC2013
- Add NIOS2 double conversion detection, fixes compile errors
- added VS2013 project/solution files for Windows Embedded Compact 2013
- added Process::isRunning()
- NetSSL: Fix typo in documentation
- NetSSL_OpenSSL: support for TLS 1.1 and 1.2
- Zip: Added CM_AUTO, which automatically selects CM_STORE or CM_DEFLATE based
  on file extension. Used to avoid double-compression of already compressed file
  formats such as images.
- added %L modifier to PatternFormatter to switch to local time
- removed unnecessary explicit in some multi-arg constructors
- Allow SecureStreamSocket::attach() to be used in server connections
- added Var::isBoolean() and fixed JSON stringifier
- added poco_unexpected() macro invoking Bugcheck::unexpected() to deal
  with unexpected exceptions in destructors
- fixed GH #538 prevent destructors from throwing exceptions
- improved HTTP server handling of errors while reading header
- fixed GH #545: use short for sign
- upgraded SQLite to 3.8.6
- fixed GH #550 WebSocket fragmented message problem
- improved HTTPClientSession handling of network errors while sending the request
- updated bundled PCRE to 8.35.0
- fixed GH #552: FIFOBuffer drain() problem
- fixed GH #402: StreamSocket::receiveBytes(FIFOBuffer&) and sendBytes(FIFOBuffer&) are
  not thread safe
- HTTPCookie: fix documentation for max age
- added Timestamp::raw() and Clock::raw()
- Poco::Buffer properly handles zero-sized buffers
- GH #512: Poco:Data:ODBC:Binder.h causes a crash
- Added Crypto_Win and NetSSL_Win libraries which are re-implementations of existing
  Crypto and NetSSL_OpenSSL libraries based on WinCrypt/Schannel. The new libraries
  can be used as an almost drop-in replacement for the OpenSSL based libraries on
  Windows and Windows Embedded Compact platforms. Only available from GitHub for now.


Release 1.5.3 (2014-06-30)
==========================

- fixed GH# 316: Poco::DateTimeFormatter::append() gives wrong result for
  Poco::LocalDateTime
- Poco::Data::MySQL: added SQLite thread cleanup handler
- Poco::Net::X509Certificate: improved and fixed domain name verification for
  wildcard domains
- added Poco::Clock class, which uses a system-provided monotonic clock
  (if available) and is thus not affected by system realtime clock changes.
  Monotonic Clock is available on Windows, Linux, OS X and on POSIX platforms
  supporting clock_gettime() and CLOCK_MONOTONIC.
- Poco::Timer, Poco::Stopwatch, Poco::TimedNotificationQueue and Poco::Util::Timer
  have been changed to use Poco::Clock instead of Poco::Timestamp and are now
  unaffected by system realtime clock changes.
- fixed GH# 350: Memory leak in Data/ODBC with BLOB
- Correctly set MySQL time_type for Poco::Data::Date.
- fixed GH #352: Removed redundant #includes and fixed spelling mistakes.
- fixed setting of MYSQL_BIND is_unsigned value.
- fixed GH #360: CMakeLists foundation: add Clock.cpp in the list of source files
- Add extern "C" around <net/if.h> on HPUX platform.
- added runtests.sh
- fixed CPPUNIT_IGNORE parsing
- fixed Glob from start path, for platforms not alowing transverse from root (Android)
- added NTPClient (Rangel Reale)
- added PowerShell build script
- added SmartOS build support
- fix warnings in headers
- XMLWriter: removed unnecessary apostrophe escaping (&apos)
- MongoDB: use Int32 for messageLength
- fixed GH #380: SecureSocket+DialogSocket crashes with SIGSEGV when timeout occours
- Improve RSADigestEngine, using Poco::Crypto::DigestEngine to calculate hash before signing
- added Poco::PBKDF2Engine
- Fixed GH #380: SecureSocket+DialogSocket crashes with SIGSEGV when timeout occours
- added support for a 'Priority' attribute on cookies.
- GH #386: fixed bug in MailMessage without content-transfer-encoding header
- GH #384: ew hash algorithms support for RSADigestEngine
- fixed Clock overflow bug on Windows
- Poco::ByteOrder now uses intrinsics, if available
- CMake: added /bigobj option for msvc
- Fix typo to restore Net/TestSuite_x64_vs120 build
- correct path for CONFIGURE_FILE in CMakeLists.txt
- Building Poco 1.5.2 for Synology RS812+ (Intel Atom) (honor POCO_NO_INOTIFY)
- added WEC2013 support to buildwin.cmd and buildwin.ps1
- HTMLForm: in URL encoding, percent-encode more characters
- Fixed #include <linux/if.h> conflict with other libraries
- Poco::Net::X509Certificate::verify() no longer uses DNS reverse lookups to validate host names
- cert hostname validation is case insensitive and stricter for wildcard certificates
- TCPServer: do not reduce the capacity of the default ThreadPool
- added POCO_LOG_DEBUG flag
- Zip: fixed a crash caused by an I/O error
- added runtest script for windows
- added SQlite Full Text Search support
- added Thread::trySleep() and Thread::wakeUp()
- fixed GH #410: Bug in JSON::Object.stringify() in 1.5.2
- fixed GH #362: Defect in Var::parseString when there is no space between value and newline
- fixed GH #314: JSON parsing bug
- added GH #313: MetaColumn additions for Data::ODBC and Data::SQLite
- fixed GH #346: Make Poco::Data::Date and Poco::Data::Time compare functions const.
- fixed GH #341: Compiling poco-1.5.2 for Cygwin
- fixed GH #305: There are bugs in Buffer.h
- fixed GH #321: trivial build fixes (BB QNX build)
- fixed GH #440: MongoDB ObjectId string formatting
- added SevenZip library (Guenter Obiltschnig)
- fixed GH #442: Use correct prefix length field of Windows IP_ADAPTER_PREFIX structure
- improved GH #328: NetworkInterface on Windows XP
- fixed GH #154 Add support for MYSQL_TYPE_NEWDECIMAL to Poco::Data::MySQL
- fixed GH #290: Unicode support
- fixed GH #318: Logger local time doesn't automatically account for DST
- fixed GH #363: DateTimeParser tryParse/parse
- added HTMLForm Content-Length calculation (Rangel Reale)
- Make TemporaryFile append a slash to tempDir
- fixed GH #319 android build with cmake
- added hasDelegates() method to AbstractEvent
- fixed GH #230: Poco::Timer problem
- fixed GH #317: Poco::Zip does not support newer Zip file versions.
- fixed GH #176: Poco::JSON::Stringifier UTF encoding
- fixed GH #458: Broadcast address and subnet mask for IEEE802.11 network interface
- fixed GH #456: poco: library install dirs per RUNTIME/LIBRARY/ARCHIVE


Release 1.5.2 (2013-09-16)
==========================

- added MongoDB library
- fixed GH #57: poco-1.5.1: Doesn't compile for Android
- added VoidEvent (Arturo Castro)
- fixed GH #80: NumberFormatter::append broken
- fixed GH #93: ParallelSocketAcceptor virtual functions
- optional small object optimization for IPAddress, SocketAddress, Any and Dynamic::Var
- SQLite events (insert, update, delete, commit, rollback) handlers
- merged GH #91: Improve SQLite multi-threaded use (Rangel Reale)
- merged GH #86: Invalid pointers to vector internals (Adrian Imboden)
- automatic library initialization macros
- fixed GH #110: WebSocket accept() fails when Connection header contains multiple tokens
- fixed GH #71: WebSocket and broken Timeouts (POCO_BROKEN_TIMEOUTS)
- fixed a warning in Poco/Crypto/OpenSSLInitializer.h
- fixed GH #109: Bug in Poco::Net::SMTPClientSession::loginUsingPlain
- added clang libc++ build configurations for Darwin and iPhone (Andrea Bigagli)
- fixed GH #116: Wrong timezone parsing in DateTimeParse (Matej Knopp)
- fixed GH #118: JSON::Object::stringify endless loop
- added Recursive and SortedDirectoryIterator (Marian Krivos)
- added ListMap (map-like container with preserving insertion order)
- MailMessage: attachments saving support and consistent read/write
- fixed GH #124: Possible buffer overrun in Foundation/EventLogChannel
- fixed GH #119: JSON::Object holds values in ordered map
- added JSON::PrintHandler
- renamed JSON::DefaultHandler to ParseHandler (breaking change!)
- fixed GH #127: Eliminate -Wshadow warnings
- fixed GH #79: Poco::Thread leak on Linux
- fixed GH #61: static_md build configs for Crypto and NetSSL
- fixed GH #130: prefer sysconf over sysctlbyname
- fixed GH #131: no timezone global var on OpenBSD
- fixed GH #102: Some subprojects don't have x64 solutions for VS 2010
- added GH #75: Poco::Uri addQueryParameter method
- Poco::Environment::osDisplayName() now recognizes Windows 8/Server 2012
- fixed GH #140: Poco::Runnable threading cleanup issue
- simplified default TCP/HTTPServer construction
- fixed GH #141: Application::run() documentation/implementation discrepancy
- changed RowFormatter to SharedPtr<RowFormatter> in Data::RecordSet interface (breaking change!)
- fixed GH #144: Poco::Dynamic emits invalid JSON
- removed naked pointers from Data interfaces
- fixed GH #82: name conflict in Data::Keywords::bind
- fixed GH #157: MySQL: cannot bind to 'long' data type on Windows/Visual C++
- fixed GH #158: MySQL: MYSQL_BIND 'is_unsigned' member is not set
- fixed GH #160: MultipartReader ignores first part, if preamble is missing
- fixed GH #156: Possible buffer overrun in Foundation/EventLogChannel
- XML: fixed an issue with parsing a memory buffer > 2 GB
- upgraded to expat 2.1.0
- Data/ODBC: added support for setting query timeout (via setProperty
  of "queryTimeout"). Timeout is int, given in seconds.
- fixed a potential endless loop in SecureStreamSocketImpl::sendBytes()
  and also removed unnecessary code.
- fixed GH #159: Crash in openssl CRYPTO_thread_id() after library libPocoCrypto.so
  has been unloaded.
- fixed GH #155: MailOutputStream mangles consecutive newline sequences
- fixed GH #139: FileChannel::PROP_FLUSH is invalid (contains a tab character)
- fixed GH #173: HTTPClientSession::proxyConnect forces DNS lookup of host names
- fixed GH #194: MessageNotification constructor is inefficient.
- fixed GH #189: Poco::NumberParser::tryParse() documentation bug
- fixed GH #172: IPv6 Host field is stripped of Brackets in HTTPClientSession
- fixed GH #188: Net: SocketAddress operator < unusable for std::map key
- fixed GH #128: DOMWriter incorrectly adds SYSTEM keyword to DTD if PUBLIC is
  already specified
- fixed GH #65: Poco::format() misorders sign and padding specifiers
- upgraded bundled SQLite to 3.7.17
- replaced JSON parser with Poco::Web::JSON parser (from sandbox)
- added JSON conversion to Dynamic Struct and Array
- added VarIterator
- modified behavior of empty Var (empty == empty)
- added Alignment.h header for C++03 alignment needs
- added Data/WebNotifier (DB, WebSocket) example
- fixed GH #209: Poco::NumberFormatter double length
- fixed GH #204: Upgrade zlib to 1.2.8
- fixed GH #198: The "application.configDir" property is not always created.
- fixed GH #185: Poco::NumberFormatter::format(double value, int precision)
  ignore precision == 0
- fixed GH #138: FreeBSD JSON tests fail
- fixed GH #99: JSON::Query an JSON::Object
- limited allowed types for JSON::Query to Object, Array, Object::Ptr,
  Array::Ptr and empty
- fixed GH #175: HTMLForm does not read URL parameters on POST or PUT
- added GH #187: MySQL: allow access to the underlying connection handle
- added GH #186: MySQL: support for MYSQL_SECURE_AUTH
- fixed GH #174: MySQL: 4GB allocated when reading any largetext or largeblob field
- fixed a potential memory leak in Poco::Net::HTTPClientSession if it is misused
  (e.g., sendRequest() is sent two times in a row without an intermediate call to
  receiveResponse(), or by calling receiveResponse() two times in a row without
  an intermediate call to sendRequest()) - GH #217
- removed a few unnecessary protected accessor methods from Poco::Net::HTTPClientSession
  that would provide inappropriate access to internal state
- merged GH #210: Don't call CloseHandle() twice on Windows; Ability to select the
  threadpool that will be used to start an Activity(Patrice Tarabbia)
- fixed GH #212: JSONConfiguration was missing from the vs90 project(Patrice Tarabbia)
- fixed GH #220: add qualifiers for FPEnvironment in C99 (Lucas Clemente)
- fixed GH #222: HTTPCookie doesn't support expiry times in the past (Karl Reid)
- fixed GH #224: building 1.5.1 on Windows for x64
- fixed GH# 233: ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only) does not work
- fixed GH# 231: Compatibility issue with Poco::Net::NetworkInterface
- fixed GH# 236: Bug in RecursiveDirectoryIterator
- added ColorConsoleChannel and WindowsColorConsoleChannel classes supporting
  colorizing log messages
- fixed GH# 259: Poco::EventLogChannel fails to find 64bit Poco Foundation dll
- fixed GH# 254: UTF8::icompare unexpected behavior
- Poco::UUID::tryParse() also accepts UUIDs without hyphens. Also updated documentation
  (links to specifications).
- added GH# 268: Method to get JSON object value using Poco::Nullable
- fixed GH# 267: JSON 'find' not returning empty result if object is expected but another value is found
- Added support for ARM64 architecture and iPhone 5s 64-bit builds
  (POCO_TARGET_OSARCH=arm64).


Release 1.5.1 (2013-01-11)
==========================

- using double-conversion library for floating-point numeric/string conversions
- added Poco::istring (case-insensitive string) and Poco::isubstr
- added SQLite sys.dual (in-memory system table)
- applied SF Patch #120: The ExpireLRUCache does not compile with a tuple as key on Visual Studio 2010
- fixed SF Bug #599: JSON::Array and JSON::Object size() member can implicitly lose precision
- fixed SF Bug #602: iterating database table rows not correct if no data in table
- fixed SF Bug #603: count() is missing in HashMap
- fixed GH #23: JSON::Object::stringify throw BadCastException
- fixed GH #16: NetworkInterface::firstAddress() should not throw on unconfigured interfaces
- Android compile/build support (by Rangel Reale)
- TypeHandler::prepare() now takes const-reference
- fixed GH #27: Poco::URI::decode() doesn't properly handle '+'
- fixed GH #31: JSON implementation bug
- fixed SF #597: Configure script ignores cflags
- fixed SF #593: Poco 1.5.0 on FreeBSD: cannot find -ldl
- added SF #542: SocketAddress() needs port-only constructor
- fixed SF #215: Wrong return type in SocketConnector.h
- applied SF Patch #97: fix c++0x / clang++ bugs
- fixed GH32/SF596: Poco::JSON: Parsing long integer (int64) value fails.
- added Net ifconfig sample (contributed by Philip Prindeville)
- merged GH #34: add algorithm header (Roger Meier/Philip Prindeville)
- fixed GH #26: Cannot compile on gcc
- merged SF #111: FTP Client logging (Marian Krivos)
- fixed GH #30: Poco::Path::home() throws when called from Windows Service
- fixed GH #22: MySQL connection string lowercased
- added MySQL support for Date/Time
- upgraded SQLite to version 3.7.15.1 (2012-12-19)
- improved SQLite execute() return (affected rows) value and added tests
- added SQLite::Utility::isThreadSafe() function
- added SQLite::Utility::setThreadMode(int mode) function
- fixed GH #36: 'distclean' requires 3 traversals of project tree
- fixed GH #41: Buffer::resize crash
- fixed GH #42: Linux unbundled builds don't link
- fixed GH #44: Problems with win x64 build
- fixed GH #46: 1.5.1 build fails on OS X when using libc++
- fixed GH #48: Need getArgs() accessor to Util::Application to retrieve start-up arguments
- fixed GH #49: NetworkInterface::list doesn't return MAC addresses
- fixed GH #51: Android should use isfinite, isinf, isnan and signbit from the std namespace
- fixed GH #53: JSON unicode fixes and running tests on invalid unicode JSON
- added ParallelAcceptor and ParallelReactor classes
- added EOF and error to FIFOBuffer


Release 1.5.0 (2012-10-14)
==========================

- added JSON library
- added Util::JSONConfiguration
- added FIFOBuffer and FIFOBufferStream
- fixed SF# 3522906: Unregistering handlers from SocketReactor
- fixed SF# 3522084: AbstractConfiguration does not support 64-bit integers
- HTTPServer::stopAll(): close the socket instead of just shutting it down, as the latter won't wake up a select() on Windows
- added SMTPLogger
- added cmake support
- fixed SF#3538778: NetworkInterface enumeration uses deprecated API
- fixed SF#3538779: IPAddress lacks useful constructors: from prefix mask, native SOCKADDR
- fixed SF#3538780: SocketAddress needs operator < function
- fixed SF#3538775: Issues building on Fedora/Centos, etc. for AMD64
- fixed SF#3538786: Use size_t for describing data-blocks in DigestEngine
- added IPAddress bitwise operators (&,|,^,~)
- added IPAddress BinaryReader/Writer << and >> operators
- modified IPAddress to force IPv6 to lowercase (RFC 5952)
- fixed SF#3538785: SMTPClientSession::sendMessage() should take recipient list
- added IPAddress::prefixLength()
- UTF portability improvements
- fixed SF#3556186: Linux shouldn't use <net/if.h> in Net/SocketDefs.h
- added IPAddress RFC 4291 compatible site-local prefix support
- fixed SF#3012166: IPv6 patch
- added SF#3558085: Add formatter to MACAddress object
- fixed SF#3552774: Don't hide default target in subordinate makefile
- fixed SF#3534307: Building IPv6 for Linux by default
- fixed SF#3516844: poco missing symbols with external >=lipcre-8.13
- added SF#3544720: AbstractConfigurator to support 64bit values
- fixed SF#3522081: WinRegistryConfiguration unable to read REG_QWORD values
- fixed SF#3563626: For Win32 set Up/Running flags on NetworkInterface
- fixed SF#3560807: Deprecate setPeerAddress() as this is now done in getifaddrs
- fixed SF#3560776: Fix byte-ordering issues with INADDR_* literals
- fixed SF#3563627: Set IP address on multicast socket from socket family
- fixed SF#3563999: Size BinaryWriter based on buffer's capacity(), not size()
- fixed SF#102 Fix building Poco on Debian GNU/kFreeBSD
- fixed SF#321 Binding DatTime or Timestamp
- fixed SF#307 Detect the SQL driver type at run time
- added VS 2012 Projects/Solutions
- enhanced and accelerated numeric parsing for integers and floats
- fixed SF#590 Segfault on FreeBSD when stack size not rounded
- added warn function and warnmsg macro in CppUnit
- fixed SF# 3558012 Compilation fails when building with -ansi or -std=c++0x
- fixed SF# 3563517 Get rid of loss-of-precision warnings on x64 MacOS
- fixed SF#3562244: Portability fix for AF_LINK
- fixed SF #3562400: DatagramSocketImpl comment is incorrect


Release 1.4.7p1 (2014-11-25)
============================

- Fixed Visual C++ 2010-2013 project files. Release builds now have optimization enabled.
- Poco::URI: added constructor to create URI from Path.
- fixed GH #618: OS X 10.10 defines PAGE_SIZE macro, conflicts with PAGE_SIZE in Thread_POSIX.cpp
- Poco::Net::HTTPClientSession: added support for global proxy configuration
- fixed GH #331: Poco::Zip does not support files with .. in the name.
- fixed a memory leak in Poco::Net::Context constructor when it fails to load the certificate
  or private key files.
- upgraded bundled SQLite to 3.8.7.2
- fixed GH #229: added missing value() function
- fixed GH #69: MySQL empty text/blob


Release 1.4.7 (2014-10-06)
==========================

- fixed GH #398: PropertyFileConfiguration: input != output
- fixed GH #368: Build failure of Poco 1.4.6p2 on FreeBSD 9.2
- fixed GH #318: Logger local time doesn't automatically account for DST
- fixed GH #317: Poco::Zip does not support newer Zip file versions.
- fixed GH #454: Fix: handle unhandled exceptions
- fixed GH #463: XML does not compile with XML_UNICODE_WCHAR_T
- fixed GH #282: Using Thread in a global can cause crash on Windows
- fixed GH #424: Poco::Timer deadlock
- fixed GH #465: Fix result enum type XML_Error -> XML_Status
- fixed GH #510: Incorrect RSAKey construction from istream
- fixed GH #332: POCO::ConsoleChannnel::initColors() assigns no color to
  PRIO_TRACE and wrong color to PRIO_FATAL
- fixed GH #550: WebSocket fragmented message problem
- Poco::Data::MySQL: added SQLite thread cleanup handler
- Poco::Net::X509Certificate: improved and fixed domain name verification for
  wildcard domains
- fixed a crash in Foundation testsuite with Visual C++ 2012
- improved and fixed domain name verification for wildcard domains in
  Poco::Net::X509Certificate
- updated TwitterClient sample to use new 1.1 API and OAuth
- added Poco::Clock class, which uses a system-provided monotonic clock
  (if available) and is thus not affected by system realtime clock changes.
  Monotonic Clock is available on Windows, Linux, OS X and on POSIX platforms
  supporting clock_gettime() and CLOCK_MONOTONIC.
- Poco::Timer, Poco::Stopwatch, Poco::TimedNotificationQueue and Poco::Util::Timer
  have been changed to use Poco::Clock instead of Poco::Timestamp and are now
  unaffected by system realtime clock changes.
- added Poco::PBKDF2Engine class template
- Poco::Net::HTTPCookie: added support for Priority attribute (backport from develop)
- fixed makedepend.* scripts to work in paths containing '.o*'
  (contributed by Per-Erik Bjorkstad, Hakan Bengtsen)
- Upgraded bundled SQLite to 3.8.6
- Support for Windows Embedded Compact 2013 (Visual Studio 2012)
- Project and solution files for Visual Studio 2013
- Changes for C++11 compatibility.
- fixed an issue with receiving empty web socket frames (such as ping)
- improved error handling in secure socket classes
- Poco::ByteOrder now uses intrinsics if available
- added new text encoding classes: Latin2Encoding, Windows1250Encoding, Windows1251Encoding
- Zip: Added CM_AUTO, which automatically selects CM_STORE or CM_DEFLATE based on file extension.
  Used to avoid double-compression of already compressed file formats such as images.


Release 1.4.6p4 (2014-04-18)
============================

- no longer use reverse DNS lookups for cert hostname validation
- cert hostname validation is case insensitive and more strict
- HTMLForm: in URL encoding, percent-encode more special characters
- fixed thread priority issues on POSIX platforms with non-standard scheduling policy
- XMLWriter no longer escapes apostrophe character
- fixed GH #316: Poco::DateTimeFormatter::append() gives wrong result for Poco::LocalDateTime
- fixed GH #305 (memcpy in Poco::Buffer uses wrong size if type != char)
- Zip: fixed a crash caused by an I/O error (e.g., full disk) while creating a Zip archive


Release 1.4.6p3 (2014-04-02)
============================

- Fixed a potential security vulnerability in client-side X509
  certificate verification.


Release 1.4.6p2 (2013-09-16)
============================

- fixed GH #156: Possible buffer overrun in Foundation/EventLogChannel
- XML: fixed an issue with parsing a memory buffer > 2 GB
- upgraded to expat 2.1.0
- Data/ODBC: added support for setting query timeout (via setProperty
  of "queryTimeout"). Timeout is int, given in seconds.
- fixed a potential endless loop in SecureStreamSocketImpl::sendBytes()
  and also removed unnecessary code.
- fixed GH #159: Crash in openssl CRYPTO_thread_id() after library libPocoCrypto.so
  has been unloaded.
- fixed GH #155: MailOutputStream mangles consecutive newline sequences
- fixed GH# 139: FileChannel::PROP_FLUSH is invalid (contains a tab character)
- fixed GH# 173: HTTPClientSession::proxyConnect forces DNS lookup of host names
- fixed GH# 194: MessageNotification constructor is inefficient.
- fixed GH# 189: Poco::NumberParser::tryParse() documentation bug
- fixed GH# 172: IPv6 Host field is stripped of Brackets in HTTPClientSession
- fixed GH# 188: Net: SocketAddress operator < unusable for std::map key
- fixed GH# 128: DOMWriter incorrectly adds SYSTEM keyword to DTD if PUBLIC is
  already specified
- fixed GH# 65: Poco::format() misorders sign and padding specifiers
- upgraded bundled SQLite to 3.7.17
- upgraded bundled zlib to 1.2.8
- fixed a potential memory leak in Poco::Net::HTTPClientSession if it is misused
  (e.g., sendRequest() is sent two times in a row without an intermediate call to
  receiveResponse(), or by calling receiveResponse() two times in a row without
  an intermediate call to sendRequest()) - GH #217
- removed a few unnecessary protected accessor methods from Poco::Net::HTTPClientSession
  that would provide inappropriate access to internal state
- fixed GH# 223 (Poco::Net::HTTPCookie does not support expiry times in the past)
- fixed GH# 233: ServerSocket::bind6(Poco::UInt16 port, bool reuseAddress, bool ipV6Only)
  does not work
- added ColorConsoleChannel and WindowsColorConsoleChannel classes supporting
  colorizing log messages
- fixed GH# 259: Poco::EventLogChannel fails to find 64bit Poco Foundation dll
- fixed GH# 254: UTF8::icompare unexpected behavior
- Poco::UUID::tryParse() also accepts UUIDs without hyphens. Also updated documentation
  (links to specifications).
- Added support for ARM64 architecture and iPhone 5s 64-bit builds
  (POCO_TARGET_OSARCH=arm64).


Release 1.4.6p1 (2013-03-06)
============================

- fixed GH# 71: WebSocket and broken Timeouts (POCO_BROKEN_TIMEOUTS)
- fixed an ambiguity error with VC++ 2010 in Data/MySQL testsuite
- Poco::Net::NetworkInterface now provides the interface index even for IPv4
- added DNS::reload() as a wrapper for res_init().
- On Linux, Poco::Environment::nodeId() first always tries to obtain the
  MAC address of eth0, before looking for other interfaces.
- Poco::Net::HTTPSession now always resets the buffer in connect() to clear
  any leftover data from a (failed) previous session
- fixed copysign namespace issue in FPEnvironment_DUMMY.h
- fixed a warning in Poco/Crypto/OpenSSLInitializer.h
- added a build configuration for BeagleBoard/Angstrom
- fixed GH# 109: Bug in Poco::Net::SMTPClientSession::loginUsingPlain)
- fixed compile errors with clang -std=c++11
- fixed GH# 116: Wrong timezone parsing in DateTimeParse (fix by Matej Knopp)
- updated bundled SQLite to 3.7.15.2


Release 1.4.6 (2013-01-10)
==========================

- changed FPEnvironment_DUMMY.h to include <cmath> instead of <math.h>
- updated bundled SQLite to 3.7.15.1
- fixed GH# 30: Poco::Path::home() throws
- fixed SF Patch# 120 The ExpireLRUCache does not compile with a tuple as key on VS2010
- fixed SF# 603 count() is missing in HashMap
- Crypto and NetSSL_OpenSSL project files now use OpenSSL *MD.lib library files for
  static_md builds. Previously, the DLL import libs were used.
- Poco::Environment::osDisplayName() now recognizes Windows 8/Server 2012


Release 1.4.5 (2012-11-19)
==========================

- added Visual Studio 2012 project files
- buildwin.cmd now support building with msbuild for VS2010 and 2012.
- added Poco::Optional class
- fixed SF# 3558012 Compilation fails when building with -ansi or -std=c++0x
- fixed SF# 3563517 Get rid of loss-of-precision warnings on x64 MacOS
- fixed SF# 3562244: Portability fix for AF_LINK
- fixed SF# 3562400: DatagramSocketImpl comment
- fixed SF# 594: Websocket fails with small masked payloads
- fixed SF# 588: Missing POCO_ARCH and POCO_ARCH_LITTLE_ENDIAN define for WinCE on SH4
- fixed SF# 581: Out-of-bound array access in Unicode::properties() function.
- fixed SF# 590: Segfault on FreeBSD when stack size not rounded
- fixed SF# 586: Poco::DateTimeParser and ISO8601 issues when seconds fraction has more than 6 digits
- Poco::Net::HTTPSSessionInstantiator::registerInstantiator() now optionally accepts a
  Poco::Net::Context object.
- added Poco::XML::XMLWriter::depth() member function.
- added Poco::XML::XMLWriter::uniquePrefix() and Poco::XML::XMLWriter::isNamespaceMapped().
- Poco::FileChannel now supports a new rotateOnOpen property (true/false) which can be used
  to force rotation of the log file when it's opened.
- fixed a bug in Poco::XML::XMLWriter::emptyElement(): need to pop namespace context
- OS X builds now use Clang as default compiler
- Updated SQLite to 3.7.14.1
- POCO_SERVER_MAIN macro now has a try ... catch block for Poco::Exception and writes
  the displayText to stderr.
- Poco/Platform.h now defines POCO_LOCAL_STATIC_INIT_IS_THREADSAFE macro if the compiler
  generates thread-safe static local initialization code.


Release 1.4.4 (2012-09-03)
==========================

- ZipStream now builds correctly in unbundled build.
- added proxy digest authentication support to Net library
- integrated MySQL BLOB fixes from Franky Braem.
- use standard OpenSSL import libraries (libeay32.lib, ssleay32.lib) for Crypto and
  NetSSL_OpenSSL Visual Studio project files.
- fixed a potential buffer corruption issue in Poco::Net::SecureStreamSocket if lazy
  handshake is enabled and the first attempt to complete the handshake fails
- Poco::DateTimeParser::tryParse() without format specifier now correctly parses ISO8601
  date/times with fractional seconds.
- Poco::Process::launch() now has additional overloads allowing to specify an initial
  directory and/or environment.
- Poco::Net::FTPClientSession: timeout was not applied to data connection, only to
  control connection.
- Fixed potential IPv6 issue with socket constructors if IPv6 SocketAddress is given
  (contributed by ??????? ????????? <[email protected]>).
- Added an additional (optional) parameter to Poco::Thread::setOSPriority() allowing to
  specify a scheduling policy. Currently this is only used on POSIX platforms and allows
  specifying SCHED_OTHER (default), SCHED_FIFO or SCHED_RR, as well as other
  platform-specific policy values.
- Added Poco::Crypto::DigestEngine class providing a Poco::DigestEngine interface to
  the digest algorithms provided by OpenSSL.
- Fixed some potential compiler warnings in Crypto library
- In some cases, when an SSL exception was unexpectedly closed, a generic Poco::IOException
  was thrown. This was fixed to throw a SSLConnectionUnexpectedlyClosedException instead.
- Added Poco::ObjectPool class template.
- Poco::Net::HTTPServer has a new stopAll() method allowing stopping/aborting of all
  currently active client connections.
- The HTTP server framework now actively prevents sending a message body in the
  response to a HEAD request, or in case of a 204 No Content or 304 Not Modified
  response status.
- fixed a DOM parser performance bug (patch by Peter Klotz)
- fixed SF# 3559325: Util Windows broken in non-Unicode
- updated iOS build configuration to use xcode-select for finding toolchain
- Poco::Net::SecureSocketImpl::shutdown() now also shuts down the underlying socket.
- fixed SF# 3552597: Crypto  des-ecb error
- fixed SF# 3550553: SecureSocketImpl::connect hangs
- fixed SF# 3543047: Poco::Timer bug for long startInterval/periodic interval
- fixed SF# 3539695: Thread attributes should be destroyed using the pthread_attr_destroy()
- fixed SF# 3532311: Not able to set socket option on ServerSocket before bind
  Added Poco::Net::Socket::init(int af) which can be used to explicitely
  initialize the underlying socket before calling bind(), connect(), etc.
- fixed SF# 3521347: Typo in UnWindows.h undef
- fixed SF# 3519474: WinRegistryConfiguration bug
  Also added tests and fixed another potential issue with an empty root path passed to the constructor.
- fixed SF# 3516827: wrong return value of WinRegistryKey::exists()
- fixed SF# 3515284: RSA publickey format(X.509 SubjectPublicKeyInfo)
- fixed SF# 3503267: VxWorks OS prio is not set in standard constructor
- fixed SF# 3500438: HTTPResponse failure when reason is empty
- fixed SF# 3495656: numberformater, numberparser error in mingw
- fixed SF# 3496493: Reference counting broken in TaskManager postNotification
- fixed SF# 3483174: LogFile flushing behavior on Windows
  Flushing is now configurable for FileChannel and SimpleFileChannel
  using the "flush" property (true or false).
- fixed SF# 3479561: Subsequent IPs on a NIC is not enumerated
- fixed SF# 3478665: Permission checks in Poco::File not correct for root
- fixed SF# 3475050: Threading bug in initializeNetwork() on Windows
- fixed SF# 3552680: websocket small frames bug and proposed fix
- fixed a WebSocket interop issue with Firefox
- added Poco::Net::MessageHeader::hasToken()
- Poco::AtomicCounter now uses GCC 4.3 builtin atomics on more platforms
- fixed SF# 3555938: NetSSL: socket closed twice
- socket exceptions now include OS error code
- fixed SF# 3556975: Need to fix Shared Memory for memory map
- Poco::Net::SecureSocketImpl::close() now catches exceptions thrown by its call to shutdown().
- fixed SF# 3535990: POCO_HAVE_IPv6 without POCO_WIN32_UTF8 conflict
- fixed SF# 3559665: Poco::InflatingInputStream may not always inflate completely
- added Poco::DirectoryWatcher class
- fixed SF# 3561464: Poco::File::isDevice() can throw due to sharing violation
- Poco::Zip::Compress::addRecursive() has a second variant that allows to specify the compression method.
- Upgraded internal SQLite to 3.7.14


Release 1.4.3p1 (2012-01-23)
============================

- fixed SF# 3476926: RegDeleteKeyEx not available on Windows XP 32-bit


Release 1.4.3 (2012-01-16)
==========================

- fixed a compilation error with Data/MySQL on QNX.
- fixed Util project files for WinCE (removed sources not compileable on CE)
- removed MD2 license text from Ackowledgements document
- fixed iPhone build config for Xcode 4.2 (compiler name changed to llvm-g++)
- Poco::Util::XMLConfiguration: delimiter char (default '.') is now configurable.
  This allows for working with XML documents having element names with '.' in them.
- Poco::Util::OptionProcessor: Required option arguments can now be specified as
  separate command line arguments, as in "--option value" in addition to the
  "--option=value" format.
- Poco::Util::HelpFormatter: improved option help formatting if  indentation has
  been set explicitely.
- added Mail sample to NetSSL_OpenSSL, showing use of Poco::Net::SecureSMTPClientSession.
- added additional read() overloads to Poco::Net::HTMLForm.
- fixed SF# 3440769: Poco::Net::HTTPResponse doesn't like Amazon EC2 cookies.
- added support for requiring TLSv1 to Poco::Net::Context.
- added an additional constructor to Poco::Net::HTTPBasicCredentials, allowing
  the object to be created from a string containing a base64-encoded, colon-separated
  username and password.
- Poco::Zip::ZipStreamBuf: fixed a crash if CM_STORE was used.
- Added setContentLength64() and getContentLength64() to Poco::Net::HTTPMessage.
- added Poco::Environment::osDisplayName().
- fixed SF# 3463096: WinService leaves dangling handles (open() now does not reopen the
  service handle if it's already open)
- fixed SF# 3426537: WinRegistryConfiguration can't read virtualized keys
- added Poco::Buffer::resize()
- fixed SF# 3441822: thread safety issue in HTTPClientSession:
  always use getaddrinfo() instead of gethostbyname() on all platforms supporting it
- added version resource to POCO DLLs
- fixed SF# 3440599: Dir Path in Quotes in PATH cause PathTest::testFind to fail.
- fixed SF# 3406030: Glob::collect problem
- added Poco::Util::AbstractConfiguration::enableEvents()
- Poco::AtomicCounter now uses GCC builtins with GCC 4.1 or newer
  (contributed by Alexey Milovidov)
- made Poco::Logger::formatDump() public as it may be useful for others as well
  (SF# 3453446)
- Poco::Net::DialogSocket now has a proper copy constructor (SF# 3414602)
- Poco::Net::MessageHeader and Poco::Net::HTMLForm now limit the maximum number of
  fields parsed from a message to prevent certain kinds of denial-of-service
  attacks. The field limit can be changed with the new method setFieldLimit().
  The default limit is 100.
- Poco::NumberFormatter, Poco::NumberParser and Poco::format() now always use the
  classic ("C") locale to format and parse floating-point numbers.
- added Poco::StreamCopier::copyStream64(), Poco::StreamCopier::copyStreamUnbuffered64()
  and Poco::StreamCopier::copyToString64(). These functions use a 64-bit integer
  to count the number of bytes copied.
- upgraded internal zlib to 1.2.5
- upgraded internal sqlite to 3.7.9
- XML: integrated bugfix for Expat bug# 2958794 (memory leak in poolGrow)
- Added support for HTTP Digest authentication (based on a contribution by
  Anton V. Yabchinskiy (arn at bestmx dot ru)). For information on how
  to use this, see the Poco::Net::HTTPCredentials, Poco::Net::HTTPDigestCredentials
  and Poco::Net::HTTPAuthenticationParams classes.
- Poco::Net::HTTPStreamFactory and Poco::Net::HTTPSStreamFactory now support Basic
  and Digest authentication. Username and password must be provided in the URI.
- added Poco::Net::WebSocket, supporting the WebSocket protocol as described in RFC 6455
- NetSSL_OpenSSL: added client-side support for Server Name Indication.
  Poco::Net::SecureSocketImpl::connectSSL() now calls SSL_set_tlsext_host_name()
  if its available (OpenSSL 9.8.6f and later).
- added Poco::Net::HTTPClientSession::proxyConnect() (factored out from
  Poco::Net::HTTPSClientSession::connect())
- added Poco::Process::kill(const Poco::ProcessHandle&) which is preferable to
  kill(pid) on Windows, as process IDs on Windows may be reused.
- fixed SF# 3471463: Compiler warnings with -Wformat
- Poco::Util::Application::run() now catches and logs exceptions thrown in initialize()
- Fixed a WinCE-specific bug in Poco::Util::ServerApplication where uninitialize() would
  be called twice.
- fixed SF# 3471957: WinRegistryKey::deleteKey() unable to delete alt views
- Added additional constructor to Poco::ScopedLock and Poco::ScopedLockWithUnlock
  accepting a timeout as second argument.
- Added Poco::Logger::parseLevel()
- Poco::format(): an argument that does not match the format
  specifier no longer results in a BadCastException. The string [ERRFMT] is
  written to the result string instead.
- PageCompiler: added createSession page attribute.
jperkin pushed a commit that referenced this pull request Apr 11, 2016
--------------------------------------
Changes in Devel::NYTProf 6.03 - 25th March 2016

  Fix to account for the deep stack optimizations in perl 5.23.8
    by Dave Mitchell, with my great gratitude!
  Fix SIGUSR2 on MSWin32 and div by zero #78 PR#79
    with thanks to Nicolas Georges.
  Fix for perl 5.8.8 but adding definition for tTHX.
  Unify 'Profile format error' messages.

  Improve the TROUBLESHOOTING docs.
  Added some more docs for the start=init option #85
  Corrected URL of KCachegrind home page #87
    with thanks to Denis Ibaev.
  Corrected URL of sample report #80
  Removed dead code.nytimes.com URL and redundant history #84
jperkin pushed a commit that referenced this pull request Jun 13, 2016
The versioning is quite confusing (2.010 vs 1.030). I went with
the lower version.

For the same reason I didn't use the github framework.

Changes:

    Adds italic styles to family. (GitHub issue #6)
    Adds Powerline symbols. (GitHub issue #43)
    Adds mathematical operators specifically requested to date.
    (GitHub issue #49)
    Adds geometric shapes specifically requested to date. (GitHub
    issue #51)
    Changes vendor ID from ADBE to ADBO. (GitHub issue #80)
    Updates name table to remove full license text. (GitHub issue
    #83)
    Increases length of em dash. (GitHub issue #85)
    Adds character variants features (ccXX).
    Adds support for some extended Latin (IPA).
    Adds characters to fully support WGL4 standard.
    Adds characters that were missing for Arabic and Hebrew
    transliteration schemes.
    Adds a few emoji characters.
    Adds SVG colored versions of these characters: ☑ ✓ ♪ ♫ ♥ ♦ ☺ ☻
    ❤ ☕ 💩 🤖 🔒
    Nudges the dot accent up to prevent from collapsing in CFF
    fonts.
    Adjusts design and positioning of cedillas.
    Updates the design of the following glyphs in intermediate
    weights, thanks to intermediate master: B, M, N, W, e, g, m,
    w, Bstroke, Hbar, Oslash, Tbar, Eth, ae, bstroke, dcroat,
    eogonek, hbar, oslash, oe, eth, zero.0, zero.0o, zero.0c, e.sups
    Updates design of ringhalfleftmod, ringhalfrightmod.

The following changes only apply to the Roman fonts:

    Adds support for Greek and Cyrillic. (GitHub issues #48 & #85)
    Adds alternate lowercase i with foot serifs (ss04 – stylistic
    set 4).
jperkin pushed a commit that referenced this pull request Aug 4, 2016
pkgsrc changes:
 - set license
 - revamp build definitions
 - revamp blk3.mk and bump API_DEPENDS to 0.13 (recent software depends on new ode-config)
 - drop all local patches as not needed

upstream changes:
Changes for 0.13

New features:

    Stable, implicit gyroscopic forces (patch #185 by Joseph Cooper). Bodies with gyroscopic forces won't gain energy anymore.
    New joint: transmission joint (patch #182 by Dimitris Papavasiliou).
    Contacts now have rolling friction (patch #184 by Joseph Cooper).
    Removed the need for defining dSINGLE/dDOUBLE; this is stored now in the generated ode/precision.h header.
    New joint: Double Ball (AKA "distance joint").
    New joint: Double Hinge.
    Threaded execution support interface added. Optional built-in threading implementation added. Internal threading implementation is excluded by default and to be used, it must be enabled with configure/premake: --disable-threading-intf (--no-threading-intf for Windows/Premake). This allows disabling threading interface support.

Bug fixes

    Joint feedback forces application fixed in QuickStep implementation
    Bug #89 by Luc: (dJointAddSliderForce() adds a zero force when the parent body is NULL)
    Bug #88 by Luc: heightfield data assigned to a wrong field in dGeomHeightfieldSetHeightfieldData
    Fixed cylinder AABB computation.
    Removed ALLOCA calls from dHashSpace; it should not depend on stack size limits anymore.
    Bugs in AMotor joint (patch #181)
    Bugs in PU joint (patch #186)
    Fixed issue with friction and non-friction constraints being intermixed during constraints random reordering in QuickStep.
    Fixed matrix inversion bug (patch #183).
    Fixed issue with some kinds of joints (Ball, DBall, DHinge, Fixed) might overwrite world ERP value with their custom ERP during getInfo2() call and that inappropriate value would then be passed to subsequent joints in solver instead of world ERP.
    Fixed issues reported in patches #151 and #22 (collisions with SAPSpace and QuadTreeSpace might not work because geometries list was misused in them).
    Fixed IsPointInPolygon in convex.cpp (patch #160 by Janis Rucis)
    Fixed zero comparisons in OPCODE to use relative error instead of absolute epsilon value (found by Bill Sellers)
    Fixed dhinge's last constraint to properly handle rotations.
    Fixed plane2d joint: uninitialized variables (reported by Dimitris Papavasiliou)
    Bug #80 by Georg Martius: better handling of capsule-box with deep penetrations.
    Fixed zero-mu issues: now either mu or mu2 can be set to zero.

Other changes

    Public headers cleaned to cause less pollution of typedefs and macros.

Changes for 0.12

    Added python bindings, contributed by Gideon Klompje.
    Integrated libccd from Daniel Fiser, provides new colliders based on GJK, EPA and MPR. Now cylinders can collide with cylinders!
    New functions have been added:
        dWorldUseSharedWorkingMemory()
        dWorldCleanupWorkingMemory()
        dWorldSetStepMemoryReservationPolicy()
        dWorldSetStepMemoryManager()
        dGeomLowLevelControl(): change/query OPCODE trimesh-sphere contact merging behavior at runtime.
        dGeomGetRelPointPos() (patch #2991622)
        dGeomGetPosRelPoint() (patch #2991622)
        dGeomVectorToWorld() (patch #2991622)
        dGeomVectorFromWorld() (patch #2991622)
    dWorldStepFast1 API removed along with dWorld[Get/Set]AutoEnableDepthSF1
    dWorldStep() and dWorldQuickStep() have been changed to return boolean success status, and avoid allocation on stack.
    dInitODE2() changed to automatically call AllocateODEDataForThread(dAllocateFlagBasicData) after library initialization.
    Made sure neither dSINGLE or dDOUBLE is defined by default; the user should always explicitly specify the precision.
    Fixed a bug in dGeomCopyOffsetRotation().
    Macros changed to static inline functions in odemath.h and related files.
    Improvement for trimesh-plane collision.
    odecpp classes changed to be inheritable and easily expandable
    QuadTreeSpace implementation corrected to avoid object-block relation ambiguity due to numeric errors.
    Fixed bug affecting disabled joints and dWorldStep.
    Added extern "C" wrapper to dWorldExportDIF().
    Fixed bug #2937076: don't try to build demos if drawstuff is disabled.
    Applied patch #2931174 to make demos work for recent MacOS.
    Applied patch #2931177 to fix the demos' framerate on X11.
    Applied patch #2995450 to generate up to four contacts for box-plane collision test and fix contact depths.
    Applied patch #3030783 to fix drawstuff dimensions being ignored in OSX GLUT port.
    Applied patch #3429454: fix compilation on some platforms.
    Heightfield zone boundaries calculation code fixed to also consider whole next cell after the AABB if the AABB ends exactly at the cell boundary.
    New demo: demo_tracks.
    Fixed a box-capsule bug: more reasonable normal for deep penetrations.
    Many internal fixes to world stepping and collision detection code.


Changes for 0.11.1

    Made the new trimesh collider the default.
    Added a "-texturepath" option to drawstuff.
    Heightfield rotation fixed to avoid NaNs while rotating infinite MIN/MAX heights.
    Incorrect parameter order fixed on contact merging in Sphere-Trimesh collisions.
    Fixed bug #2685170: use the C99 __func__ instead of __FUNCTION__ when a C99 implementation is available.
    Remove unused code in demo_joints.cpp.
    Fix bug in collision categories in demo_jointPU.
    Added a possibility to initialize/close ODE multiple times recursively has been added. Also, now a call to dSpaceSetManualCleanup() is required for each space right after creation if ODE has been initialized in thread data manual cleanup mode.
    Thread local data has been cleaned up from OPCODE and OdeTls.
    New house of cards demo, which stresses the friction handling stability.


Changes for 0.11

This release contains many joint-related bug fixes, and some new features like kinematic bodies, better convex-convex collision detection and some extra functions.

    Fix bug: Fix problem when attaching no body to a joint.
    Fix problem with dJointGetUniversalAngle2 when the joint is attached to only a body 2. The sign was inverted.
    Fix bug reported by Tilman: dxJointPU::getInfo1 was setting twice the limit of limot1 to zero and not limot2.
    Fixed a bug in dSpaceCollide2: if both geoms are not in spaces they would not have valid AABBs.
    Swapped geometries returned in contacts for OPCODE Trimesh-Plane collisions as they were returned in unnatural order being different from that in GIMPACT
    Fixed an inverted sign problem on positions of joints PU and PR.
    Fix bug: when a slider, piston, pu or pr joint had only one body attached to position 2, dJointAttach(jId, 0, bId). The body was not push in the right direction to move back between the limits.
    Fix bug in dJointGetPUAxis2: the axis was not multiplied with the the rotation matrix of the good body.
    Fix bug if there is only one body on the PU joint the axis returned was not the right one.
    New functions: dJointSetUniversalAxis1Offset and dJointSetUniversalAxis2Offset.
    New functions: dJointEnable, dJointDisable, dJointIsEnabled (patch #2454764).
    New functions: dGeomTriMeshSetTriMergeCallback/dGeomTriMeshGetTriMergeCallback.
    New function: void dJointSetPUAnchorOffset (deprecating dJointSetPUAnchorDelta).
    New functions: dJointGetPRAngle and dJointGetPRAngleRate.
    New functions: dBodyGetGyroscopicMode and dBodySetGyroscopicMode (patch #2019242).
    Applied patch #2538046: Heightfield AABB bounds patch.
    Applied patch #2381592, which adds support for Kinematic Bodies.
    Applied a patch to make GIMPACT trimesh-ray collisions to be consistent with those in OPCODE (bug #2214623).
    Applied a patch to make side1, side2 fields of contact structure be always initialized.
    Applied patch #2158425: This patch enable GIMPACT to work on 64-bit machine.
    Applied patch #2080674: Improved dBodySetRotation; now exact rotation matrices are preserved until the next simulation step.
    Enable the motor on the rotoide part of the PR joint.
    Added Blender script to create ODE convex geoms under tools.
    Convex-Convex collision detection code is finally (nearly) stable.


Changes for 0.10.1

This is a bugfix release, so you shouldn't expect anything to stop working from 0.10.

    New function: dJointSetPistonAnchorOffset
    Add new function dJointSetHingeAxisDelta
    Fix problem with dJointGetPistonPosition and dJointGetPistonPositionRate when the joint is attached to only a body 2. The sign was inversed.
    Update the slider joint to have the same behavior as the other joint when there is only a body2 attached to it.
    Rename the new function dJointSetHingeAxisDelta to dJointSetHingeAxisOffset. This will remove confusion with the old function dJointSetHingeAnchorDelta.
    Bug fix: Max Correcting Vel behavior is now the same as before 0.10.


Changes for 0.10

    New functions: dInitODE2(), dAllocateODEDataForThread(), dCleanupODEAllDataForThread(). This adds support for ability to run collision detection from multiple threads for separate spaces.
    New functions: dCheckConfiguration(), dGetConfiguration(), to test how ODE was compiled.
    New function: dJointGetNumBodies (patch #1901550).
    New function: dSpaceGetClass (patch #1901637).
    New function: dSetColliderOverride(), to register custom collision handling functions.
    Added damping and MaxAngularVel() functions.
    Applied patch #1335202: Contact Joint Motion (see demo_motion.cpp).
    Applied patch #1851394: support for GIMPACT with double precision, dCollide fix.
    Applied patch #1813079 (moved callback).
    Added possibility to collide a space of lower sublevel as a geometry against another space of a higher level with dSpaceCollide2. dSpaceSetSublevel/dSpaceGetSublevel are used for sublevel assignment/retrieval.
    Fixed a bug in dJointXXXGetInfo. The value in limot.limit was not always updated. (Ex: If hi and lo limit were changed).
    New Joint: Prismatic Universal (patch #1828454).
    New Joint: Piston, with demo.
    Disabled building shared library by default with autotools. ODE shouldn't be installed as a system library.
    Fixed drawstuff build issues on OSX.
    Removed release and debug flags for configure.in: CPPFLAGS, CFLAGS, CXXFLAGS should be set by the user to their liking, respecting autotools policies.
    Added 'Sweep and Prune' collision space.
    Optimizations, many bug fixes, and code cleanup.


Changes from 0.8 to 0.9

    New Feature: CONTACTS_UNIMPORTANT flag added for dCollide() to allow canceling any contact improvements and return any contacts found as soon as possible
    New feature: Add erp/cfm parameters to fixed and ball joint. SF PATCH 1478244
    Assert on zero normalizations, add dSafeNormalize. Added boolean result for dNormalize3() and dNormalize4() so that normalization success could be checked
    SF Patch 1808007: fix gimpact compiler warning
    Apply SF patch 1800579: dGeomTriMeshSetData does not work with GIMPACT
    Fix: heightfield collision could return less contacts than was possible
    Fix: the deepest contact might be not selected if there was a lack of contact slots in trimesh-trimesh and trimesh-box cases (function exited immediately and did not check for possible contact coincidences).
    Improvement: optimizations for GIMPACT versions of trimesh-capsule, trimesh-trimesh, trimesh-plane, trimesh-sphere
    Improvement: dCollideConvexPlane optimized
    Fix: cylinder-box collision did not respect requested contact count limit
    Fix SF issue 1729096 by adding dMassSetTrimeshTotal
    Apply SF patch 1685107: Enforce 1 contact request
    Apply SF Patch 1697014: Update JointPR code
    Catch SF BUG 1621938: gimpact only does stride 12.
    patch 1769851 by Jon Watte: recalc aabb when new setting new data
    Added Richard Barrington's model loader for XNA (to be used with ODE.NET)
    1586733 collision_trimesh_trimesh.cpp OPCODE fix Added Francisco Leon's alternate trimesh-trimesh collider.
    1691402 Heighfield performance patch patch
    1696933 Fix bug in dWorldExportDIF when joint in "limbo"
    Renamed "tests" to "demos" and split out unit test project. Updated premake scripts and Visual Studio files; automake files still need to be updated.
    Make building demos optional. SF patch 1650563
    lib64 fixes, SF patch 1646598
    Warn against using double precision with gimpact
    Many more bug fixes and optimizations.

Changes from 0.7 to 0.8

    New Rotoide - Prismatic Joint
    Optimisation when dGYROSCOPIC is disabled (default)
    dJointGetUniversalAngles to efficiently get both angles at once.


Changes from 0.6 to 0.7

    New heightfield primitive for terrains.
    Trimesh-Plane collision.
    Ray-Cylinder collision.
    Integration of the plane-2d joint.
    Improved support for convex hulls.
    Fix for joint limit handling.
    Half-space optimisation for axis aligned planes.


Changes from 0.5 to 0.6

    Added flat-capped cylinders.
    CCylinder has been renamed as Capsule.
    Added support for geom offsets.
    Improved stepping function (dWorldQuickStep)
    Much improved support for trimesh collision shapes
    Added support for 64-bit systems
    Started support for convex hulls

    New and improved build system
    Lots of bug fixes, stability, and performance improvements


Geom Offset Overview

Geom offsets allow geom objects to be offset from a body's position. This is useful for cases where an object has an offset centre of mass, or is made up out of several geoms each with their own local position. Native support for geom offsets means that the geomTransform container is now obselete.

The real advantage over geomTransform is that there is a much easier interface for setting, getting, and modifying a geom's offset from its body. The elimination of geomTransform simplifies callbacks which no longer have to special case that geom class type. In terms of performance, the new code has a negligible performance difference and a memory improvement compared to using a geomTransform.
Geom Offset and Bodies

An offset only makes sense for geoms which are connected to bodies. It is an error to attempt to set an offset for a geom which is not connected to a body. When a geom is disconnected from a body, any offset will be automatically eliminated. Thus, the possible states a geom can be in are:

    Geom
    Geom on body
    Geom on body, with an offset

To create an offset, just call on of the geomSetOffset functions. The offset will be automatically created if it does not yet exist. Geom offsets are normally set by specifying the offset in local coordinates. An extra set of functions are provided to allow an offset to be determined by providing world coordinates and subtracting them from the current body position. These second set of functions, geomSetOffsetWorldPosition(),etc, allow the user to essentially say "keep the body where it is, and move its geom to this position in the world".
Geom Offset API

This is defined in the doxygen documentation.
Geom Offset affect on existing API

The following functions have been updated such that they transparently work with offsets.

   void dGeomSetPosition (dGeomID, dReal x, dReal y, dReal z)
   void dGeomSetRotation (dGeomID, const dMatrix3 R)
   void dGeomSetQuaternion (dGeomID, const dQuaternion)
   const dReal * dGeomGetPosition (dGeomID)
   const dReal * dGeomGetRotation (dGeomID)
   void dGeomGetQuaternion (dGeomID, dQuaternion result)
   void dGeomGetAABB (dGeomID, dReal aabb[6])

The functions that get a geom's position will return its final position in world coordinates. If a geom is offset, it is no longer true that dGeomGetPosition()==dBodyGetPosition(). Instead, each will return its own world position, with the geom being offset from the body.

The functions that set a geom's position will move the body to the position such that the geom will have the position passed in. So if the geom has a positional offset of (0,0,1), and we call dGeomSetPosition(g,10,10,10), the end result will be the body's position being set to (10,10,9). As such, either dGeomSetPosition or dBodySetPosition can be used, depending on which is more convenient. The other position is automatically updated.
Geom Offset and geomTransform

GeomTransforms are still supported, and all existing code transparently works. When writing new code, however, it is far easier to work with geoms and offsets.

The change eliminates a large amount of special casing needed to do when working with geomTransforms. Setting an offset is trivial, and does not require inserting or removing new GeomTransforms from spaces. There is no need to special case getting an offset geom's world position, or setting an offset geom's world position.

It is especially useful in the collide callback. The old way required getting the object as the real geom (but without being able to easily grab its Transform, or even its body!), or as its Transform (forcing special casing code to extract the real geom in that case).
jperkin pushed a commit that referenced this pull request Aug 30, 2016
Add ALTERNATIVES file.

v0.10.0: 2016.05.02
- New Action birthday: list birthdays, sorted by month and day
- option -p, --pretty was renamed to -p, --parsable: So, the pretty formatted email or
  phone number table is the default now. Please adapt the configuration files of potential email and
  phone applications (e.g.: mutt email -p %s)

v0.11.0: 2016.07.17
- Made khard python3 compatible (#59)
- Enhanced read and write support for vcard versions 3.0 and 4.0
- user input parser:
    - Improved robustness and error handling
    - Fixed org attribute parsing (#57)
    - Support for private vcard extensions (#51)
- New action birthdays (#64)
- New options:
    --display to display contacts by first or last name (#66)
    --search-in-source-files to speed up program initialization (#75)
    --skip-unparsable to skip unparsable vcard files (#75)
    --strict-search to narrow the contact search to the name field
- Added some aliases for program actions (#65)
- Removed davcontroler module due to the python3 incompatibility (script moved into the misc folder)
- Updated zsh completion function and khards example config file

v0.11.1: 2016.07.31
- Workaround for the photo attribute parsing issue of vobject library 0.9.2 (#80)
- setup.py: try to convert readme file into restructured text format (pypi requirement) and specify encoding explicitly (#83)
jperkin pushed a commit that referenced this pull request Oct 18, 2016
* replace Fixnum+Bignum with Integer #80 (lamont-granquist)
* update travis matrix #78 (lamont-granquist)
jperkin pushed a commit that referenced this pull request Oct 26, 2016
### Minor Enhancements

 * Make Archive subclass of Page (#67)
 * Don't limit slugs/title to strings (#41)

### Development Fixes

 * Update Travis config and Gemfile for Ruby < 2.2.2 support (#68)
 * Consolidate History file to work with jekyllbot (#80)
wiedi pushed a commit to wiedi/pkgsrc-legacy that referenced this pull request Nov 17, 2016
Upstream changes:
1.7.1 - "Election"

    [Bugs]

    * Minor release to incorporate fix for CPAN indexing, which
      prevented proper updates [cjfields]
    * Fix problem in managing Target attribute for gff3 [Jukes34]
    * Minor bug fixes related to NCBI HTTPS support [cjfields]

1.7.0 - "Disney"

    [New site]

    * We have migrated to Github Pages. This was actually planned, but the
      recent OBF server compromise forced our hand.

      Brian Osborne [bosborne] took this under his wing to move docs and has
      done a tremendous amount of work formatting the site and working out some
      of the idiosyncracies with the new Jekyll-based design.  Mark Jensen, Paul
      Cantalupo and Franscison Ossandon also helped.  Kudos!!

    * Similarly, the official issue tracker is now Github Issues.  This has
      been updated in the relevant documentation bits (we hope!)

    [Code changes]

    * Previously deprecated modules removed
      * Bio::Tools::Infernal, Bio::Tools::ERPIN, Bio::Tools::RNAMotif
    * Bio::DB::SeqHound has been removed due to the service no longer being
      available
    * Bio::Tools::Analysis::Protein::Mitoprot has been removed for security
      reasons due to the server no longer having a valid cert
    * Bio::EUtilities, Bio::Biblio are now separate releases on CPAN
    * Bio::Coordinate, Bio::SearchIO::blastxml,
      Bio::SearchIO::Writer::BSMLResultWriter are now separate releases to be
      added on CPAN

    [New features]

    * Docker instances of tagged releases are available! [hlapp]
    * NCBI HTTPS support [mjohnson and others]
    * Bio::SearchIO::infernal
      - Issue TritonDataCenter#131: added CMSEARCH parsing support for Infernal 1.1 [pcantalupo]
    * Bio::Search::HSP::ModelHSP
      - Added a 'noncanonical_string' method to retrieve the NC line from CMSEARCH
        reports [pcantalupo]
    * Bio::Search::Result::INFERNALResult
      - Added new module to represent features of Infernal reports [pcantalupo]
    * Bio::DB::Taxonomy SQLite option [cjfields]
    * WrapperBase quoted option values [majensen]
    * Various documentation fixes and updates [bosborne]

   [Bug Fixes]

    * Fixes in Bio::Root::Build to deal with META.json/yml for CPAN indexing [cjfields]
    * Bio::SeqFeature::Generic spliced_seq() bug fix [Eric Snyder, via bosborne]
    * NeXML parser fixes [fjossandon]
    * Bug fix for Bio::DB::SeqFeature memory adapter [lstein]
    * RT 103272 : SeqFeature database deletion skipped features with a decimal -
      Joshua Fortriede (Xenbase)
    * RT 98374: AlignIO issues with sequence names not correctly parsing - Xiaoyu Zhuo
    * Issue TritonDataCenter#70: CONTIG parsing in GenBank output fixed [fjossandon]
    * Issue TritonDataCenter#76: Circular genome fixes with Bio::Location::Split [fjossandon]
    * Issue TritonDataCenter#80: Fix lack of caching issue with Bio::DB::Taxonomy [fjossandon]
    * Issue TritonDataCenter#81: Small updates to make sure possible memory leaks are detected [cjfields]
    * Issue TritonDataCenter#84: EMBL format wrapping problem [nyamned]
    * Issue TritonDataCenter#90: Missing entries for translation tables 24 and 25 [fjossandon]
    * Issue TritonDataCenter#95: Speed up of Bio::DB::Fasta::subseq by using a compiled regex
      or compiled C code (when Inline::C is installed) [rocky]
    * Fix various Bio::Tools::Analysis remote server config problems [cjfields]
    * Added several missing 'Data::Stag' and 'LWP::UserAgent' requirements [fjossandon]
    * Added a workaround in Bio::DB::Registry to get Username in Windows [fjossandon]
    * For HMMer report parsing, changed "$hsp->bits" to return 0 instead of undef
      to be consistent with "$hit->bits" behaviour [fjossandon]
    * Fixed a bug in HMMer3 parsing, where an homology line ending in CS or RF
      aminoacids made "next_seq" confused and broke the parser [fjossandon]
    * Adjusted FTLocationFactory.pm to comply with current GenBank Feature Table
      Definition, so now "join(complement(C..D),complement(A..B))" is equivalent
      to "complement(join(A..B,C..D))" [fjossandon]
    * For the many many many fixes that weren't mentioned - blame the release guy!
wiedi pushed a commit to wiedi/pkgsrc-legacy that referenced this pull request Nov 17, 2016
jperkin pushed a commit that referenced this pull request Nov 28, 2016
A major update to Streamlink.

With this release, we include a Windows binary as well as numerous plugin changes and fixes.

The main features are:

    Windows binary (and generation!) thanks to the fabulous work by @beardypig
    Multiple plugin fixes
    Remove unneeded run-as-root (no more warning you when you run as root, we trust that you know what you're doing)
    Fix stream quality naming issue

Beardypig <[email protected]> (13):
      fix stream quality naming issue with py2 vs. py3, fixing #89 (#96)
      updated connectcast plugin to support the new rtmp streams; fixes #93 (#95)
      Fix for erroneous escape coding the livecoding plugin. Fixes #106 (#121)
      TVPlayer.com: fix for 400 error, correctly set the platform parameter (#123)
      Added a method to automatically determine the encoding when parsing JSON, if no encoding is provided. (#122)
      when retry-streams and twitch-disable-hosting arguments are used the stream is retried until a non-hosted stream is found (#125)
      plugins.goodgame: Update for API change (#130)
      plugins.adultswim: added a new adultswim.com plugin (#139)
      plugins.goodgame: restored DDOS protection cookie support (#136)
      plugins.younow: update API url (#135)
      plugins.euronew: update to support the new site (#141)
      plugins.webtv: added a new plugin to support web.tv (#144)
      plugins.connectcast: fix regex issue with python 3 (#152)

Brainzyy <[email protected]> (1):
      Add piczel.tv plugin (courtesy of @intact) (#114)

Charlie Drage <[email protected]> (1):
      Update release scripts

Erk- <[email protected]> (1):
      Changed the twitch plugin to use https instead of http as discussed in #103 (#104)

Forrest <[email protected]> (2):
      Modify the changelog link (#107)
      Update cli to note a few windows issues (#108)

Simon Bernier St-Pierre <[email protected]> (1):
      change icon

Simon Bernier St-Pierre <[email protected]> (1):
      finish the installer (#98)

Stefan <[email protected]> (1):
      Debian packaging base (#80)

Stefan <[email protected]> (1):
      remove run-as-root option, reworded warning #85 (#109)

Weslly <[email protected]> (1):
      Fixed afreecatv.com url matching (#90)

bastimeyer <[email protected]> (2):
      Improve NSIS installer script
      Remove shortcut from previous releases on Windows

beardypig <[email protected]> (8):
      plugins.cybergame: update to support changes to the live streams on the cybergame.tv website
      Use pycryptodome inplace of pyCrypto
      Automated build of the Windows NSIS installer
      support for relative paths for rtmpdump
      makeinstaller: install the streamlinkrc file in to the users %APPDATA% directory
      remove references to livestreamer in the win32 config template
      stream.rtmpdump: fixed the rtmpdump path issue, introduced in 6bf7fd7
      pin requests to <2.12.0 to avoid the strict IDNA2008 validation

ethanhlc <[email protected]> (1):
      fixed instance of livestreamer (#99)

intact <[email protected]> (1):
      plugins.livestream: Support old player urls

mmetak <[email protected]> (2):
      fix vaughnlive.tv info_url (#88)
      fix vaughnlive.tv info_url (yet again...) (#143)

skulblakka <[email protected]> (1):
      Overworked Plugin for ZDF Mediathek (#154)

sqrt2 <[email protected]> (1):
      Fix ORF TVthek plugin (#113)

tam1m <[email protected]> (1):
      Fix zdf_mediathek TypeError (#156)
jperkin pushed a commit that referenced this pull request Mar 20, 2017
2.1.0 / 2017-01-01

Major Enhancements

* Fix breaking changes in LSI api. Displays errors instead of raising where
  possible. #87

2.0.5 / 2016-12-30 - removed due to breaking change, and no longer available

Major Enhancements

* Stopwords get encoded to utf8 (#83)
* Fix searching issues where no document is added to lsi (#77)
* Added method to add custom path to user-created stopword directory (#73)

Minor Enhancements

* Test newer rubies (#85)
* Fixed errors in README (#68, #79, #80)
* Added an option to the bayesian classifier to disable word stemming (#61)
* Added missing parens and renamed some variables (#59)
jperkin pushed a commit that referenced this pull request Apr 10, 2017
0.3.7
  * Fix issue #84: check if stream has 'closed' attribute before testing it
  * Fix issue #74: objects might become None at exit
0.3.6
  * Fix issue #81: fix ValueError when a closed stream was used
0.3.5
  * Bumping version to re-upload a wheel distribution
0.3.4
  * Fix issue #47 and #80 - stream redirection now strips ANSI codes on Linux
  * Fix issue #53 - strip readline markers
  * Fix issue #32 - assign orig_stdout and orig_stderr when initialising
  * Fix issue #57 - Fore.RESET did not reset style of LIGHT_EX colors.
    Fixed by Andy Neff
  * Fix issue #51 - add context manager syntax. Thanks to Matt Olsen.
  * Fix issue #48 - colorama didn't work on Windows when environment
    variable 'TERM' was set.
  * Fix issue #54 - fix pylint errors in client code.
  * Changes to readme and other improvements by Marc Abramowitz and Zearin
0.3.3
  * Fix Google Code issue #13 - support changing the console title with OSC
    escape sequence
  * Fix Google Code issue #16 - Add support for Windows xterm emulators
  * Fix Google Code issue #30 - implement \033[nK (clear line)
  * Fix Google Code issue #49 - no need to adjust for scroll when new position
    is already relative (CSI n A\B\C\D)
  * Fix Google Code issue #55 - erase_data fails on Python 3.x
  * Fix Google Code issue #46 - win32.COORD definition missing
  * Implement \033[0J and \033[1J (clear screen options)
  * Fix default ANSI parameters
  * Fix position after \033[2J (clear screen)
  * Add command shortcuts: colorama.Cursor, colorama.ansi.set_title,
    colorama.ansi.clear_line, colorama.ansi.clear_screen
  * Fix issue #22 - Importing fails for python3 on Windows
  * Thanks to John Szakmeister for adding support for light colors
  * Thanks to Charles Merriam for adding documentation to demos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants