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

ruby 2.0 errors with gem install #162

Closed
auxsoft opened this issue Jan 7, 2014 · 4 comments
Closed

ruby 2.0 errors with gem install #162

auxsoft opened this issue Jan 7, 2014 · 4 comments

Comments

@auxsoft
Copy link

auxsoft commented Jan 7, 2014

With a fresh install of package ruby200-2.0.0

gem install somegem

gives error

ERROR:  While executing gem ... (NoMethodError)
    undefined method `empty?' for nil:NilClass
        /opt/local/lib/ruby/2.0.0/rubygems/installer.rb:575:in `process_options'
        /opt/local/lib/ruby/2.0.0/rubygems/installer.rb:120:in `initialize'
        /opt/local/lib/ruby/2.0.0/rubygems/dependency_installer.rb:374:in `new'
        /opt/local/lib/ruby/2.0.0/rubygems/dependency_installer.rb:374:in `block in install'
        /opt/local/lib/ruby/2.0.0/rubygems/dependency_installer.rb:347:in `each'
        /opt/local/lib/ruby/2.0.0/rubygems/dependency_installer.rb:347:in `each_with_index'
        /opt/local/lib/ruby/2.0.0/rubygems/dependency_installer.rb:347:in `install'
        /opt/local/lib/ruby/2.0.0/rubygems/commands/install_command.rb:166:in `block in execute'
        /opt/local/lib/ruby/2.0.0/rubygems/commands/install_command.rb:158:in `each'
        /opt/local/lib/ruby/2.0.0/rubygems/commands/install_command.rb:158:in `execute'
        /opt/local/lib/ruby/2.0.0/rubygems/command.rb:305:in `invoke_with_build_args'
        /opt/local/lib/ruby/2.0.0/rubygems/command_manager.rb:170:in `process_args'
        /opt/local/lib/ruby/2.0.0/rubygems/command_manager.rb:130:in `run'
        /opt/local/lib/ruby/2.0.0/rubygems/gem_runner.rb:60:in `run'
        /opt/local/bin/gem200:21:in `<main>'

That traces back to this pkgsrc patch:

+    if not @install_root.empty?
+      @bin_dir = File.join(@install_root, @bin_dir)
+    end

https://github.com/joyent/pkgsrc/blob/3dc2648a8d9aa295d6bc4cff9310aa596b6846bd/lang/ruby200-base/patches/patch-lib_rubygems_installer.rb#L34

@mamash
Copy link

mamash commented Jan 8, 2014

Thanks, that condition needs a check @install_root.nil? too. I'll fix upstream and backport to 2013Q3.

@auxsoft
Copy link
Author

auxsoft commented Jan 8, 2014

Yes. I patched my installation with unless @install_root.nil? || @install_root.empty? . I don't know why install_root is needed, though.

@mamash
Copy link

mamash commented Jan 8, 2014

It's for pkgsrc's own ruby-* packages. pkgsrc always installs into a DESTDIR sandbox when creating a binary package.

jperkin pushed a commit that referenced this issue 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)
@mamash
Copy link

mamash commented Jan 29, 2014

This was fixed earlier.

@mamash mamash closed this as completed Jan 29, 2014
jperkin pushed a commit that referenced this issue Mar 14, 2014
=== 3.12.2 / 2013-02-24

* Bug fixes
  * Fixed bug in syntax-highlighting that would corrupt regular expressions.
    Ruby Bug #6488 by Benny Lyne Amorsen.
  * Fixed lexing of character syntax (<code>?x</code>).  Reported by Xavier
    Noria.
  * Fixed tokenization of % when it is not followed by a $-string type
  * Fixed display of __END__ in documentation examples in HTML output
  * Fixed tokenization of reserved words used as new-style hash keys
  * Fixed HEREDOC output for the limited case of a heredoc followed by a line
    end.  When a HEREDOC is not followed by a line end RDoc is not currently
    smart enough to restore the source correctly.  Bug #162 by Zachary Scott.
jperkin pushed a commit that referenced this issue 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 issue Apr 1, 2014
---
3.3
---

* Add ``include`` parameter to ``setuptools.find_packages()``.

---
3.2
---

* Pull Request #39: Add support for C++ targets from Cython ``.pyx`` files.
* Issue #162: Update dependency on certifi to 1.0.1.
* Issue #164: Update dependency on wincertstore to 0.2.
jacques pushed a commit to oldbayindustries/pkgsrc that referenced this issue Apr 7, 2014
=== 3.12.2 / 2013-02-24

* Bug fixes
  * Fixed bug in syntax-highlighting that would corrupt regular expressions.
    Ruby Bug #6488 by Benny Lyne Amorsen.
  * Fixed lexing of character syntax (<code>?x</code>).  Reported by Xavier
    Noria.
  * Fixed tokenization of % when it is not followed by a $-string type
  * Fixed display of __END__ in documentation examples in HTML output
  * Fixed tokenization of reserved words used as new-style hash keys
  * Fixed HEREDOC output for the limited case of a heredoc followed by a line
    end.  When a HEREDOC is not followed by a line end RDoc is not currently
    smart enough to restore the source correctly.  Bug TritonDataCenter#162 by Zachary Scott.
jperkin pushed a commit that referenced this issue Apr 15, 2014
---
3.3
---

* Add ``include`` parameter to ``setuptools.find_packages()``.

---
3.2
---

* Pull Request #39: Add support for C++ targets from Cython ``.pyx`` files.
* Issue #162: Update dependency on certifi to 1.0.1.
* Issue #164: Update dependency on wincertstore to 0.2.
jperkin pushed a commit that referenced this issue Apr 28, 2014
Add test

Upstream changes:
1.5.6 (2014-04-14)

Bug fixes:

Check the last line even if it has no end-of-line. (Issue #273)
1.5.5 (2014-04-10)

Bug fixes:

Fix regression with E22 checks and inline comments. (Issue #271)
1.5.4 (2014-04-07)

Bug fixes:

Fix negative offset with E303 before a multi-line docstring. (Issue #269)
1.5.3 (2014-04-04)

Bug fixes:

Fix wrong offset computation when error is on the last char of a physical line. (Issue #268)
1.5.2 (2014-04-04)

Changes:

Distribute a universal wheel file.
Bug fixes:

Report correct line number for E303 with comments. (Issue #60)
Do not allow newline after parameter equal. (Issue #252)
Fix line number reported for multi-line strings. (Issue #220)
Fix false positive E121/E126 with multi-line strings. (Issue #265)
Fix E501 not detected in comments with Python 2.5.
Fix caret position with --show-source when line contains tabs.
1.5.1 (2014-03-27)

Bug fixes:

Fix a crash with E125 on multi-line strings. (Issue #263)
1.5 (2014-03-26)

Changes:

Report E129 instead of E125 for visually indented line with same indent as next logical line. (Issue #126)
Report E265 for space before block comment. (Issue #190)
Report E713 and E714 when operators not in and is not are recommended. (Issue #236)
Allow long lines in multiline strings and comments if they cannot be wrapped. (Issue #224).
Optionally disable physical line checks inside multiline strings, using # noqa. (Issue #242)
Change text for E121 to report "continuation line under-indented for hanging indent" instead of indentation not being a multiple of 4.
Report E131 instead of E121 / E126 if the hanging indent is not consistent within the same continuation block. It helps when error E121 or E126 is in the ignore list.
Report E126 instead of E121 when the continuation line is hanging with extra indentation, even if indentation is not a multiple of 4.
Bug fixes:

Allow the checkers to report errors on empty files. (Issue #240)
Fix ignoring too many checks when --select is used with codes declared in a flake8 extension. (Issue #216)
Fix regression with multiple brackets. (Issue #214)
Fix StyleGuide to parse the local configuration if the keyword argument paths is specified. (Issue #246)
Fix a false positive E124 for hanging indent. (Issue #254)
Fix a false positive E126 with embedded colon. (Issue #144)
Fix a false positive E126 when indenting with tabs. (Issue #204)
Fix behaviour when exclude is in the configuration file and the current directory is not the project directory. (Issue #247)
The logical checks can return None instead of an empty iterator. (Issue #250)
Do not report multiple E101 if only the first indentation starts with a tab. (Issue #237)
Fix a rare false positive W602. (Issue #34)
1.4.6 (2013-07-02)

Changes:

Honor # noqa for errors E711 and E712. (Issue #180)
When both a tox.ini and a setup.cfg are present in the project directory, merge their contents. The tox.ini file takes precedence (same as before). (Issue #182)
Give priority to --select over --ignore. (Issue #188)
Compare full path when excluding a file. (Issue #186)
New option --hang-closing to switch to the alternative style of closing bracket indentation for hanging indent. Add error E133 for closing bracket which is missing indentation. (Issue #103)
Accept both styles of closing bracket indentation for hanging indent. Do not report error E123 in the default configuration. (Issue #103)
Bug fixes:

Do not crash when running AST checks and the document contains null bytes. (Issue #184)
Correctly report other E12 errors when E123 is ignored. (Issue #103)
Fix false positive E261/E262 when the file contains a BOM. (Issue #193)
Fix E701, E702 and E703 not detected sometimes. (Issue #196)
Fix E122 not detected in some cases. (Issue #201 and #208)
Fix false positive E121 with multiple brackets. (Issue #203)
1.4.5 (2013-03-06)

When no path is specified, do not try to read from stdin. The feature was added in 1.4.3, but it is not supported on Windows. Use - filename argument to read from stdin. This usage is supported since 1.3.4. (Issue #170)
Do not require setuptools in setup.py. It works around an issue with pip and Python 3. (Issue #172)
Add __pycache__ to the ignore list.
Change misleading message for E251. (Issue #171)
Do not report false E302 when the source file has a coding cookie or a comment on the first line. (Issue #174)
Reorganize the tests and add tests for the API and for the command line usage and options. (Issues #161 and #162)
Ignore all checks which are not explicitly selected when select is passed to the StyleGuide constructor.
1.4.4 (2013-02-24)

Report E227 or E228 instead of E225 for whitespace around bitwise, shift or modulo operators. (Issue #166)
Change the message for E226 to make clear that it is about arithmetic operators.
Fix a false positive E128 for continuation line indentation with tabs.
Fix regression with the --diff option. (Issue #169)
Fix the TestReport class to print the unexpected warnings and errors.
1.4.3 (2013-02-22)

Hide the --doctest and --testsuite options when installed.
Fix crash with AST checkers when the syntax is invalid. (Issue #160)
Read from standard input if no path is specified.
Initiate a graceful shutdown on Control+C.
Allow to change the checker_class for the StyleGuide.
1.4.2 (2013-02-10)

Support AST checkers provided by third-party applications.
Register new checkers with register_check(func_or_cls, codes).
Allow to construct a StyleGuide with a custom parser.
Accept visual indentation without parenthesis after the if statement. (Issue #151)
Fix UnboundLocalError when using # noqa with continued lines. (Issue #158)
Re-order the lines for the StandardReport.
Expand tabs when checking E12 continuation lines. (Issue #155)
Refactor the testing class TestReport and the specific test functions into a separate test module.
1.4.1 (2013-01-18)

Allow sphinx.ext.autodoc syntax for comments. (Issue #110)
Report E703 instead of E702 for the trailing semicolon. (Issue #117)
Honor # noqa in addition to # nopep8. (Issue #149)
Expose the OptionParser factory for better extensibility.
1.4 (2012-12-22)

Report E226 instead of E225 for optional whitespace around common operators (*, **, /, + and -). This new error code is ignored in the default configuration because PEP 8 recommends to "use your own judgement". (Issue #96)
Lines with a # nopep8 at the end will not issue errors on line length E501 or continuation line indentation E12*. (Issue #27)
Fix AssertionError when the source file contains an invalid line ending "\r\r\n". (Issue #119)
Read the [pep8] section of tox.ini or setup.cfg if present. (Issue #93 and #141)
Add the Sphinx-based documentation, and publish it on http://pep8.readthedocs.org/. (Issue #105)
jperkin pushed a commit that referenced this issue Jun 2, 2014
Add test

Upstream changes:
1.5.6 (2014-04-14)

Bug fixes:

Check the last line even if it has no end-of-line. (Issue #273)
1.5.5 (2014-04-10)

Bug fixes:

Fix regression with E22 checks and inline comments. (Issue #271)
1.5.4 (2014-04-07)

Bug fixes:

Fix negative offset with E303 before a multi-line docstring. (Issue #269)
1.5.3 (2014-04-04)

Bug fixes:

Fix wrong offset computation when error is on the last char of a physical line. (Issue #268)
1.5.2 (2014-04-04)

Changes:

Distribute a universal wheel file.
Bug fixes:

Report correct line number for E303 with comments. (Issue #60)
Do not allow newline after parameter equal. (Issue #252)
Fix line number reported for multi-line strings. (Issue #220)
Fix false positive E121/E126 with multi-line strings. (Issue #265)
Fix E501 not detected in comments with Python 2.5.
Fix caret position with --show-source when line contains tabs.
1.5.1 (2014-03-27)

Bug fixes:

Fix a crash with E125 on multi-line strings. (Issue #263)
1.5 (2014-03-26)

Changes:

Report E129 instead of E125 for visually indented line with same indent as next logical line. (Issue #126)
Report E265 for space before block comment. (Issue #190)
Report E713 and E714 when operators not in and is not are recommended. (Issue #236)
Allow long lines in multiline strings and comments if they cannot be wrapped. (Issue #224).
Optionally disable physical line checks inside multiline strings, using # noqa. (Issue #242)
Change text for E121 to report "continuation line under-indented for hanging indent" instead of indentation not being a multiple of 4.
Report E131 instead of E121 / E126 if the hanging indent is not consistent within the same continuation block. It helps when error E121 or E126 is in the ignore list.
Report E126 instead of E121 when the continuation line is hanging with extra indentation, even if indentation is not a multiple of 4.
Bug fixes:

Allow the checkers to report errors on empty files. (Issue #240)
Fix ignoring too many checks when --select is used with codes declared in a flake8 extension. (Issue #216)
Fix regression with multiple brackets. (Issue #214)
Fix StyleGuide to parse the local configuration if the keyword argument paths is specified. (Issue #246)
Fix a false positive E124 for hanging indent. (Issue #254)
Fix a false positive E126 with embedded colon. (Issue #144)
Fix a false positive E126 when indenting with tabs. (Issue #204)
Fix behaviour when exclude is in the configuration file and the current directory is not the project directory. (Issue #247)
The logical checks can return None instead of an empty iterator. (Issue #250)
Do not report multiple E101 if only the first indentation starts with a tab. (Issue #237)
Fix a rare false positive W602. (Issue #34)
1.4.6 (2013-07-02)

Changes:

Honor # noqa for errors E711 and E712. (Issue #180)
When both a tox.ini and a setup.cfg are present in the project directory, merge their contents. The tox.ini file takes precedence (same as before). (Issue #182)
Give priority to --select over --ignore. (Issue #188)
Compare full path when excluding a file. (Issue #186)
New option --hang-closing to switch to the alternative style of closing bracket indentation for hanging indent. Add error E133 for closing bracket which is missing indentation. (Issue #103)
Accept both styles of closing bracket indentation for hanging indent. Do not report error E123 in the default configuration. (Issue #103)
Bug fixes:

Do not crash when running AST checks and the document contains null bytes. (Issue #184)
Correctly report other E12 errors when E123 is ignored. (Issue #103)
Fix false positive E261/E262 when the file contains a BOM. (Issue #193)
Fix E701, E702 and E703 not detected sometimes. (Issue #196)
Fix E122 not detected in some cases. (Issue #201 and #208)
Fix false positive E121 with multiple brackets. (Issue #203)
1.4.5 (2013-03-06)

When no path is specified, do not try to read from stdin. The feature was added in 1.4.3, but it is not supported on Windows. Use - filename argument to read from stdin. This usage is supported since 1.3.4. (Issue #170)
Do not require setuptools in setup.py. It works around an issue with pip and Python 3. (Issue #172)
Add __pycache__ to the ignore list.
Change misleading message for E251. (Issue #171)
Do not report false E302 when the source file has a coding cookie or a comment on the first line. (Issue #174)
Reorganize the tests and add tests for the API and for the command line usage and options. (Issues #161 and #162)
Ignore all checks which are not explicitly selected when select is passed to the StyleGuide constructor.
1.4.4 (2013-02-24)

Report E227 or E228 instead of E225 for whitespace around bitwise, shift or modulo operators. (Issue #166)
Change the message for E226 to make clear that it is about arithmetic operators.
Fix a false positive E128 for continuation line indentation with tabs.
Fix regression with the --diff option. (Issue #169)
Fix the TestReport class to print the unexpected warnings and errors.
1.4.3 (2013-02-22)

Hide the --doctest and --testsuite options when installed.
Fix crash with AST checkers when the syntax is invalid. (Issue #160)
Read from standard input if no path is specified.
Initiate a graceful shutdown on Control+C.
Allow to change the checker_class for the StyleGuide.
1.4.2 (2013-02-10)

Support AST checkers provided by third-party applications.
Register new checkers with register_check(func_or_cls, codes).
Allow to construct a StyleGuide with a custom parser.
Accept visual indentation without parenthesis after the if statement. (Issue #151)
Fix UnboundLocalError when using # noqa with continued lines. (Issue #158)
Re-order the lines for the StandardReport.
Expand tabs when checking E12 continuation lines. (Issue #155)
Refactor the testing class TestReport and the specific test functions into a separate test module.
1.4.1 (2013-01-18)

Allow sphinx.ext.autodoc syntax for comments. (Issue #110)
Report E703 instead of E702 for the trailing semicolon. (Issue #117)
Honor # noqa in addition to # nopep8. (Issue #149)
Expose the OptionParser factory for better extensibility.
1.4 (2012-12-22)

Report E226 instead of E225 for optional whitespace around common operators (*, **, /, + and -). This new error code is ignored in the default configuration because PEP 8 recommends to "use your own judgement". (Issue #96)
Lines with a # nopep8 at the end will not issue errors on line length E501 or continuation line indentation E12*. (Issue #27)
Fix AssertionError when the source file contains an invalid line ending "\r\r\n". (Issue #119)
Read the [pep8] section of tox.ini or setup.cfg if present. (Issue #93 and #141)
Add the Sphinx-based documentation, and publish it on http://pep8.readthedocs.org/. (Issue #105)
jperkin pushed a commit that referenced this issue Aug 30, 2014
## python-markdown2 2.2.2

- [pull #156] Footnotes XML compatibility.
- [pull #157] Horizontal rule minimum length.
- [pull #162] Fix escaping fenced code block with safe mode
- [pull #163] Fix code highlight with safe mode
jperkin pushed a commit that referenced this issue Dec 1, 2014
Changelog:
================================================================================
GLM 0.9.5.4: 2014-06-21
--------------------------------------------------------------------------------
- Fixed non-utf8 character #196
- Added FindGLM install for CMake #189
- Fixed GTX_color_space - saturation #195
- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191
- Fixed builtin GLM_ARCH_SSE4 #204
- Optimized Quaternion vector rotation #205
- Fixed missing doxygen @endcond tag #211
- Fixed instruction set detection with Clang #158
- Fixed orientate3 function #207
- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
- Added GTX_io for io with <iostream> #144
- Fixed fastDistance ambiguity #215
- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to
  tweakedInfinitePerspective
- Fixed std::copy and std::vector with GLM types #214
- Fixed strict aliasing issues #212, #152
- Fixed std::nextafter not supported with C++11 on Android #213
- Fixed corner cases in exp and log functions for quaternions #199

================================================================================
GLM 0.9.5.3: 2014-04-02
--------------------------------------------------------------------------------
- Added instruction set auto detection with Visual C++ using _M_IX86_FP - /arch
  compiler argument
- Fixed GTX_raw_data code dependency
- Fixed GCC instruction set detection
- Added GLM_GTX_matrix_transform_2d extension (#178, #176)
- Fixed CUDA issues (#169, #168, #183, #182)
- Added support for all extensions but GTX_string_cast to CUDA
- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)
- Fixed missing bitfieldInterleave definisions
- Fixed usubBorrow (#171)
- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)
- Added full tests for eulerAngle*** functions (#173)
- Added workaround for a CUDA compiler bug (#186, #185)

================================================================================
GLM 0.9.5.2: 2014-02-08
--------------------------------------------------------------------------------
- Fixed initializer list ambiguity (#159, #160)
- Fixed warnings with the Android NDK 9c
- Fixed non power of two matrix products
- Fixed mix function link error
- Fixed SSE code included in GLM tests on "pure" platforms
- Fixed undefined reference to fastInverseSqrt (#161)
- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)
- Fix dot product clamp range for vector angle functions. (#163)
- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c (#152)
- Fixed GLM_GTC_constants description brief (#162)

================================================================================
GLM 0.9.5.1: 2014-01-11
--------------------------------------------------------------------------------
- Fixed angle and orientedAngle that sometimes return NaN values (#145)
- Deprecated degrees for function parameters and display a message
- Added possible static_cast conversion of GLM types (#72)
- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)
- Fixed mismatch between some declarations and definitions
- Fixed inverse link error when using namespace glm; (#147)
- Optimized matrix inverse and division code (#149)
- Added intersectRayPlane function (#153)
- Fixed outerProduct return type (#155)

================================================================================
GLM 0.9.5.0: 2013-12-25
--------------------------------------------------------------------------------
- Added forward declarations (glm/fwd.hpp) for faster compilations
- Added per feature headers
- Minimized GLM internal dependencies
- Improved Intel Compiler detection
- Added bitfieldInterleave and _mm_bit_interleave_si128 functions
- Added GTX_scalar_relational
- Added GTX_dual_quaternion
- Added rotation function to GTX_quaternion (#22)
- Added precision variation of each type
- Added quaternion comparison functions
- Fixed GTX_multiple for negative value
- Removed GTX_ocl_type extension
- Fixed post increment and decrement operators
- Fixed perspective with zNear == 0 (#71)
- Removed l-value swizzle operators
- Cleaned up compiler detection code for unsupported compilers
- Replaced C cast by C++ casts
- Fixed .length() that should return a int and not a size_t
- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t
- Removed unnecessary conversions
- Optimized packing and unpacking functions
- Removed the normalization of the up argument of lookAt function (#114)
- Added low precision specializations of inversesqrt
- Fixed ldexp and frexp implementations
- Increased assert coverage
- Increased static_assert coverage
- Replaced GLM traits by STL traits when possible
- Allowed including individual core feature
- Increased unit tests completness
- Added creating of a quaternion from two vectors
- Added C++11 initializer lists
- Fixed umulExtended and imulExtended implementations for vector types (#76)
- Fixed CUDA coverage for GTC extensions
- Added GTX_io extension
- Improved GLM messages enabled when defining GLM_MESSAGES
- Hidden matrix _inverse function implementation detail into private section

================================================================================
GLM 0.9.4.6: 2013-09-20
--------------------------------------------------------------------------------
- Fixed detection to select the last known compiler if newer version #106
- Fixed is_int and is_uint code duplication with GCC and C++11 #107
- Fixed test suite build while using Clang in C++11 mode
- Added c++1y mode support in CMake test suite
- Removed ms extension mode to CMake when no using Visual C++
- Added pedantic mode to CMake test suite for Clang and GCC
- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows
  for ICC
- Added compilation errors for unsupported compiler versions
- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112
- Fixed const ref issue on assignment operator taking a scalar parameter #116
- Fixed glm::eulerAngleY implementation #117

================================================================================
GLM 0.9.4.5: 2013-08-12
--------------------------------------------------------------------------------
- Fixed CUDA support
- Fixed inclusion of intrinsics in "pure" mode #92
- Fixed language detection on GCC when the C++0x mode isn't enabled #95
- Fixed issue #97: register is deprecated in C++11
- Fixed issue #96: CUDA issues
- Added Windows CE detection #92
- Added missing value_ptr for quaternions #99

================================================================================
GLM 0.9.4.4: 2013-05-29
--------------------------------------------------------------------------------
- Fixed slerp when costheta is close to 1 #65
- Fixed mat4x2 value_type constructor #70
- Fixed glm.natvis for Visual C++ 12 #82
- Added assert in inversesqrt to detect division by zero #61
- Fixed missing swizzle operators #86
- Fixed CUDA warnings #86
- Fixed GLM natvis for VC11 #82
- Fixed GLM_GTX_multiple with negative values #79
- Fixed glm::perspective when zNear is zero #71

================================================================================
GLM 0.9.4.3: 2013-03-20
--------------------------------------------------------------------------------
- Detected qualifier for Clang
- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions
- Fixed squad, intermediate and exp quaternion functions
- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a vec3
- Clarify the license applying on the manual
- Added a docx copy of the manual
- Fixed GLM_GTX_matrix_interpolation
- Fixed isnan and isinf on Android with Clang
- Autodetected C++ version using __cplusplus value
- Fixed mix for bool and bvec* third parameter

================================================================================
GLM 0.9.4.2: 2013-02-14
--------------------------------------------------------------------------------
- Fixed compAdd from GTX_component_wise
- Fixed SIMD support for Intel compiler on Windows
- Fixed isnan and isinf for CUDA compiler
- Fixed GLM_FORCE_RADIANS on glm::perspective
- Fixed GCC warnings
- Fixed packDouble2x32 on XCode
- Fixed mix for vec4 SSE implementation
- Fixed 0x2013 dash character in comments that cause issue in Windows
  Japanese mode
- Fixed documentation warnings
- Fixed CUDA warnings

================================================================================
GLM 0.9.4.1: 2012-12-22
--------------------------------------------------------------------------------
- Improved half support: -0.0 case and implicit conversions
- Fixed Intel Composer Compiler support on Linux
- Fixed interaction between quaternion and euler angles
- Fixed GTC_constants build
- Fixed GTX_multiple
- Fixed quat slerp using mix function when cosTheta close to 1
- Improved fvec4SIMD and fmat4x4SIMD implementations
- Fixed assert messages
- Added slerp and lerp quaternion functions and tests

================================================================================
GLM 0.9.4.0: 2012-11-18
--------------------------------------------------------------------------------
- Added Intel Composer Compiler support
- Promoted GTC_espilon extension
- Promoted GTC_ulp extension
- Removed GLM website from the source repository
- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments
- Fixed detection of Clang and LLVM GCC on MacOS X
- Added debugger visualizers for Visual C++ 2012

================================================================================
GLM 0.9.3.4: 2012-06-30
--------------------------------------------------------------------------------
- Added SSE4 and AVX2 detection.
- Removed VIRTREV_xstream and the incompatibility generated with GCC
- Fixed C++11 compiler option for GCC
- Removed MS language extension option for GCC (not fonctionnal)
- Fixed bitfieldExtract for vector types
- Fixed warnings
- Fixed SSE includes

================================================================================
GLM 0.9.3.3: 2012-05-10
--------------------------------------------------------------------------------
- Fixed isinf and isnan
- Improved compatibility with Intel compiler
- Added CMake test build options: SIMD, C++11, fast math and MS land ext
- Fixed SIMD mat4 test on GCC
- Fixed perspectiveFov implementation
- Fixed matrixCompMult for none-square matrices
- Fixed namespace issue on stream operators
- Fixed various warnings
- Added VC11 support
jperkin pushed a commit that referenced this issue Dec 1, 2014
Version 2.0
-----------
(released Nov 9, 2014)

- Default lexer encoding is now "guess", i.e. UTF-8 / Locale / Latin1 is
  tried in that order.

- Major update to Swift lexer (pull request #410).

- Multiple fixes to lexer guessing in conflicting cases:

  * recognize HTML5 by doctype
  * recognize XML by XML declaration
  * don't recognize C/C++ as SystemVerilog

- Simplified regexes and builtin lists.


Version 2.0rc1
--------------
(released Oct 16, 2014)

- Dropped Python 2.4 and 2.5 compatibility.  This is in favor of single-source
  compatibility between Python 2.6, 2.7 and 3.3+.

- New website and documentation based on Sphinx (finally!)

- Lexers added:

  * APL (#969)
  * Agda and Literate Agda (pull request #203)
  * Alloy (pull request #355)
  * AmbientTalk
  * BlitzBasic (pull request #197)
  * ChaiScript (pull request #24)
  * Chapel (pull request #256)
  * Cirru (pull request #275)
  * Clay (pull request #184)
  * ColdFusion CFC (pull request #283)
  * Cryptol and Literate Cryptol (pull request #344)
  * Cypher (pull request #257)
  * Docker config files
  * EBNF (pull request #193)
  * Eiffel (pull request #273)
  * GAP (pull request #311)
  * Golo (pull request #309)
  * Handlebars (pull request #186)
  * Hy (pull request #238)
  * Idris and Literate Idris (pull request #210)
  * Igor Pro (pull request #172)
  * Inform 6/7 (pull request #281)
  * Intel objdump (pull request #279)
  * Isabelle (pull request #386)
  * Jasmin (pull request #349)
  * JSON-LD (pull request #289)
  * Kal (pull request #233)
  * Lean (pull request #399)
  * LSL (pull request #296)
  * Limbo (pull request #291)
  * Liquid (#977)
  * MQL (pull request #285)
  * MaskJS (pull request #280)
  * Mozilla preprocessors
  * Mathematica (pull request #245)
  * NesC (pull request #166)
  * Nit (pull request #375)
  * Nix (pull request #267)
  * Pan
  * Pawn (pull request #211)
  * Perl 6 (pull request #181)
  * Pig (pull request #304)
  * Pike (pull request #237)
  * QBasic (pull request #182)
  * Red (pull request #341)
  * ResourceBundle (#1038)
  * Rexx (pull request #199)
  * Rql (pull request #251)
  * Rsl
  * SPARQL (pull request #78)
  * Slim (pull request #366)
  * Swift (pull request #371)
  * Swig (pull request #168)
  * TADS 3 (pull request #407)
  * Todo.txt todo lists
  * Twig (pull request #404)

- Added a helper to "optimize" regular expressions that match one of many
  literal words; this can save 20% and more lexing time with lexers that
  highlight many keywords or builtins.

- New styles: "xcode" and "igor", similar to the default highlighting of
  the respective IDEs.

- The command-line "pygmentize" tool now tries a little harder to find the
  correct encoding for files and the terminal (#979).

- Added "inencoding" option for lexers to override "encoding" analogous
  to "outencoding" (#800).

- Added line-by-line "streaming" mode for pygmentize with the "-s" option.
  (pull request #165)  Only fully works for lexers that have no constructs spanning
  lines!

- Added an "envname" option to the LaTeX formatter to select a replacement
  verbatim environment (pull request #235).

- Updated the Makefile lexer to yield a little more useful highlighting.

- Lexer aliases passed to ``get_lexer_by_name()`` are now case-insensitive.

- File name matching in lexers and formatters will now use a regex cache
  for speed (pull request #205).

- Pygments will now recognize "vim" modelines when guessing the lexer for
  a file based on content (pull request #118).

- Major restructure of the ``pygments.lexers`` module namespace.  There are now
  many more modules with less lexers per module.  Old modules are still around
  and re-export the lexers they previously contained.

- The NameHighlightFilter now works with any Name.* token type (#790).

- Python 3 lexer: add new exceptions from PEP 3151.

- Opa lexer: add new keywords (pull request #170).

- Julia lexer: add keywords and underscore-separated number
  literals (pull request #176).

- Lasso lexer: fix method highlighting, update builtins. Fix
  guessing so that plain XML isn't always taken as Lasso (pull request #163).

- Objective C/C++ lexers: allow "@" prefixing any expression (#871).

- Ruby lexer: fix lexing of Name::Space tokens (#860) and of symbols
  in hashes (#873).

- Stan lexer: update for version 2.4.0 of the language (pull request #162, PR#255, PR#377).

- JavaScript lexer: add the "yield" keyword (pull request #196).

- HTTP lexer: support for PATCH method (pull request #190).

- Koka lexer: update to newest language spec (pull request #201).

- Haxe lexer: rewrite and support for Haxe 3 (pull request #174).

- Prolog lexer: add different kinds of numeric literals (#864).

- F# lexer: rewrite with newest spec for F# 3.0 (#842), fix a bug with
  dotted chains (#948).

- Kotlin lexer: general update (pull request #271).

- Rebol lexer: fix comment detection and analyse_text (pull request #261).

- LLVM lexer: update keywords to v3.4 (pull request #258).

- PHP lexer: add new keywords and binary literals (pull request #222).

- external/markdown-processor.py updated to newest python-markdown (pull request #221).

- CSS lexer: some highlighting order fixes (pull request #231).

- Ceylon lexer: fix parsing of nested multiline comments (#915).

- C family lexers: fix parsing of indented preprocessor directives (#944).

- Rust lexer: update to 0.9 language version (pull request #270, PR#388).

- Elixir lexer: update to 0.15 language version (pull request #392).

- Fix swallowing incomplete tracebacks in Python console lexer (#874).
jperkin pushed a commit that referenced this issue Apr 16, 2015
4.14 2015-04-01

    [ RELEASE NOTES ]
    - This release removes the AUTOLOAD and compile optimisations from CGI.pm
      that were introduced into CGI.pm twenty (20) years ago as a response to
      its large size, which meant there was a significant compile time penalty.

    - This optimisation is no longer relevant and makes the code difficult to
      deal with as well as making test coverage metrics incorrect. Benchmarks
      show that advantages of AUTOLOAD / lazy loading / deferred compile are
      less than 0.05s, which will be dwarfed by just about any meaningful code
      in a cgi script. If this is an issue for you then you should look at
      running CGI.pm in a persistent environment (FCGI, etc)

    - To offset some of the time added by removing the AUTOLOAD functionality
      the dependencies have been made runtime rather than compile time. The
      POD has also been split into its own file. CGI.pm now contains around
      4000 lines of code, which compared to some modules on CPAN isn't really
      that much

    - This essentially deprecates the -compile pragma and ->compile method. The
      -compile pragma will no longer do anything, whereas the ->compile method
      will raise a deprecation warning. More importantly this also REMOVES the
      -any pragma because as per the documentation this pragma needed to be
      "used with care or not at all" and allowing arbitrary HTML tags is almost
      certainly a bad idea. If you are using the -any pragma and using arbitrary
      tags (or have typo's in your code) your code will *BREAK*

    - Although this release should be back compatible (with the exception of any
      code using the -any pragma) you are encouraged to test it throughly as if
      you are doing anything out of the ordinary with CGI.pm (i.e. have bugs
      that may have been masked by the AUTOLOAD feature) you may see some issues.

    - References: GH #162, GH #137, GH #164

    [ FEATURES ]
    - CGI::Carp now has $CGI::Carp::FULL_PATH for displaying the full path to the
      offending script in error messages

    - CGI now has env_query_string() for getting the value of QUERY_STRING from the
      environment and not that fiddled with by CGI.pm (which is what query_string()
      does) (GH #161)

    - CGI::ENCODE_ENTITIES var added to control which chracters are encoded by the
      call to the HTML::Entities module - defaults to &<>"\x8b\x9b' (GH #157)

    [ SPEC / BUG FIXES ]
    - Add the multi_param method to :cgi export (thanks to xblitz for the patch
      and tests. GH #167)

    - Fix warning for lack of HTTP_USER_AGENT in CGI::Carp (GH #168)

    - Fix imports when called from CGI::Fast, restores the import of CGI functions
      into the callers namespace for users of CGI::Fast (GH leejo/cgi-fast#11 and
      GH leejo/cgi-fast#12)

    [ INTERNALS ]
    - Remove dependency on constant - internal DEBUG, XHTML_DTD and EBCDIC
      constants changes to $_DEBUG, $_XHTML_DTD, and $_EBCDIC

    [ DOCUMENTATION ]
    - Add missing documentation for env variable fetching routines (GH #163)
jperkin pushed a commit that referenced this issue Apr 24, 2015
4.15 2015-04-20

    [ RELEASE NOTES ]
    - This release removes the AUTOLOAD and compile optimisations from CGI.pm
      that were introduced into CGI.pm twenty (20) years ago as a response to
      its large size, which meant there was a significant compile time penalty.

    - This optimisation is no longer relevant and makes the code difficult to
      deal with as well as making test coverage metrics incorrect. Benchmarks
      show that advantages of AUTOLOAD / lazy loading / deferred compile are
      less than 0.05s, which will be dwarfed by just about any meaningful code
      in a cgi script. If this is an issue for you then you should look at
      running CGI.pm in a persistent environment (FCGI, etc)

    - To offset some of the time added by removing the AUTOLOAD functionality
      the dependencies have been made runtime rather than compile time. The
      POD has also been split into its own file. CGI.pm now contains around
      4000 lines of code, which compared to some modules on CPAN isn't really
      that much

    - This essentially deprecates the -compile pragma and ->compile method. The
      -compile pragma will no longer do anything, whereas the ->compile method
      will raise a deprecation warning. More importantly this also REMOVES the
      -any pragma because as per the documentation this pragma needed to be
      "used with care or not at all" and allowing arbitrary HTML tags is almost
      certainly a bad idea. If you are using the -any pragma and using arbitrary
      tags (or have typo's in your code) your code will *BREAK*

    - Although this release should be back compatible (with the exception of any
      code using the -any pragma) you are encouraged to test it throughly as if
      you are doing anything out of the ordinary with CGI.pm (i.e. have bugs
      that may have been masked by the AUTOLOAD feature) you may see some issues.

    - References: GH #162, GH #137, GH #164

    [ SPEC / BUG FIXES ]
    - make the list context warning in param show the filename rather than
      the package so we have more information on exactly where the warning
      has been raised from (GH #171)
    - correct self_url when PATH_INFO and SCRIPT_NAME are the same but we
      are not running under IIS (GH #176)
    - Add the multi_param method to :cgi export (thanks to xblitz for the patch
      and tests. GH #167)
    - Fix warning for lack of HTTP_USER_AGENT in CGI::Carp (GH #168)
    - Fix imports when called from CGI::Fast, restores the import of CGI functions
      into the callers namespace for users of CGI::Fast (GH leejo/cgi-fast#11 and
      GH leejo/cgi-fast#12)

    [ FEATURES ]
    - CGI::Carp now has $CGI::Carp::FULL_PATH for displaying the full path to the
      offending script in error messages
    - CGI now has env_query_string() for getting the value of QUERY_STRING from the
      environment and not that fiddled with by CGI.pm (which is what query_string()
      does) (GH #161)
    - CGI::ENCODE_ENTITIES var added to control which chracters are encoded by the
      call to the HTML::Entities module - defaults to &<>"\x8b\x9b' (GH #157)

    [ DOCUMENTATION ]
    - Fix some typos (GH #173, GH #174)
    - All *documentation* for HTML functionality in CGI has been moved into
      its own namespace: CGI::HTML::Functions - although the functionality
      continues to exist within CGI.pm so there are no code changes required
      (GH #142)
    - Add missing documentation for env variable fetching routines (GH #163)

    [ TESTING ]
    - Increase test coverage (GH #3)

    [ INTERNALS ]
    - Cwd made a TEST_REQUIRES rather than a BUILD_REQUIRES in Makefile.PL
      (GH #170)
    - AutoloadClass variables have been removed as AUTOLOAD was removed in
      v4.14 so these are no longer necessary (GH #172 thanks to alexmv)
    - Remove dependency on constant - internal DEBUG, XHTML_DTD and EBCDIC
      constants changes to $_DEBUG, $_XHTML_DTD, and $_EBCDIC
jperkin pushed a commit that referenced this issue May 22, 2015
Upstream changes:
1.2.0 2015-04-14 07:13:00+0000
	- [core] bundle libyaml #248 (Kazuho Oku)
	- [core] implement master-worker process mode and daemon mode (bundles Server::Starter) #258 #270 (Kazuho Oku)
	- [file] more mime-types by default #250 #254 #280 (Tatsuhiko Kubo, George Liu, Kazuho Oku)
	- [file][http1] fix connection being closed if the length of content is zero #276 (Kazuho Oku)
	- [headers] fix heap overrun during configuration #251 (Kazuho Oku)
	- [http2] do not delay sending PUSH_PROMISE #221 (Kazuho Oku)
	- [http2] reduce memory footprint under high load #271 (Kazuho Oku)
	- [http2] fix incorrect error sent when number of streams exceed the limit #268 (Kazuho Oku)
	- [proxy] fix heap overrun when building request sent to upstream #266 #269 (Moto Ishizawa, Kazuho Oku)
	- [proxy] fix laggy response in case the length of content is zero #274 #276 (Kazuho Oku)
	- [SSL] fix potential stall while reading data from client #268 (Kazuho Oku)
	- [SSL] bundle LibreSSL #236 #272 (Kazuho Oku)
	- [SSL] obtain source-level compatibility with BoringSSL #228 (Kazuho Oku)
	- [SSL] add directive `listen.ssl.cipher-preference` for controlling the selection logic of cipher-suites #233 (Kazuho Oku)
	- [SSL] disable TLS compression #252 (bisho)
	- [libh2o] fix C++ compatibility (do not use empty struct) #225 (Kazuho Oku)
	- [libh2o] search external dependencies using pkg-config #227 (Kazuho Oku)
	- [misc] fix GCC version detection bug used for controlling compiler warnings #224 (Kazuho Oku)
	- [misc] check merory allocation failures in socket pool #265 (Tatsuhiko Kubo)

1.1.1 2015-03-09 06:12:00+0000
	- [proxy] fix crash on NetBSD when upstream connection is persistent #217 (Kazuho Oku)
	- [misc] fix compile error on FreeBSD #211 #212 (Syohei Yoshida)

1.1.0 2015-03-06 06:41:00+0000
	- [core][file] send redirects appending '/' as abs-path redirects #209 (Kazuho Oku)
	- [headers] add directives for manipulating response headers #204 (Kazuho Oku)
	- [http2] do not send a corrupt response if header value is longer than 126 bytes #193 (Kazuho Oku)
	- [http2] fix interoperability issue with nghttp2 0.7.5 and above 5c42eb1 (Kazuho Oku)
	- [proxy] send `via` header to upstream #191 (Kazuho Oku)
	- [proxy] resolve hostname asynchronously #207 (Kazuho Oku)
	- [proxy] distribute load between upstream servers (using `rand()`) #208 (Kazuho Oku)
	- [proxy] fix a bug that may cause a corrupt `location` header being forwarded #190 (Kazuho Oku)
	- [reproxy] add support for `x-reproxy-url` header #187 #197 (Daisuke Maki, Kazuho Oku)

1.0.1 2015-02-23 05:50:00+0000
	- [core] change backlog size from 65,536 to 65,535 #183 (Tatsuhiko Kubo)
	- [http2] fix assertion failure in HPACK encoder #186 (Kazuho Oku)
	- [http2] add `extern` to some global variables that were not marked as such #178 (Kazuho Oku)
	- [proxy] close persistent upstream connection if client abruptly closes the stream #188 (Kazuho Oku)
	- [proxy] fix internal state corruption in case upstream sends response headers divided into multpile packets #189 (Kazuho Oku)
	- [SSL] add host header to OCSP request #176 (Masaaki Hirose)
	- [libh2o] do not require header files under `deps/` when using libh2o #173 (Kazuho Oku)
	- [libh2o] fix compile error in examples when compiled with `H2O_USE_LIBUV=0` #177 (Kazuho Oku)
	- [libh2o] in example, add missing / after the reference path #180 (Matthieu Garrigues)
	- [misc] fix invalid HTML in sample page #175 (Deepak Prakash)

1.0.0 2015-02-18 20:01:00+0000
	- [core] add redirect handler #150 (Kazuho Oku)
	- [core] add `pid-file` directive for specifying the pid file #164 (Kazuho Oku)
	- [core] connections accepted by host-specific listeners should not be handled by handlers of other hosts #163 (Kazuho Oku)
	- [core] (FreeBSD) fix a bug that prevented the standalone server from booting when run as root #160 (Kazuho Oku)
	- [core] switch to pipe-based interthread messaging #154 (Kazuho Oku)
	- [core] use kqueue on all BSDs #156 (Kazuho Oku)
	- [access-log] more logging directives: %H, %m, %q, %U, %V, %v #158 (Kazuho Oku)
	- [access-log] bugfix: header values were not logged when specified using uppercase letters #157 (Kazuho Oku)
	- [file] add application/json to defalt MIME-types #159 (Tatsuhiko Kubo)
	- [http2] add support for the finalized version of HTTP/2 #166 (Kazuho Oku)
	- [http2] fix issues reported by h2spec v0.0.6 #165 (Kazuho Oku)
	- [proxy] merge the cookie headers before sending to upstream #161 (Kazuho Oku)
	- [proxy] simplify the configuration directives (and make persistent upstream connections as default) #162 (Kazuho Oku)
	- [SSL] add configuration directive to preload DH params #148 (Jeff Marrison)
	- [libh2o] separate versioning scheme using H2O_LIBRARY_VERSION_* #167 (Kazuho Oku)

0.9.2 2015-02-10 04:17:00+0000
	- [core] graceful shutdown on SIGTERM #119 (Kazuho Oku)
	- [core] less TCP errors under high load #81 (Kazuho Oku)
	- [file] add support for HEAD requests #110 (Mark Hoersken)
	- [http1] MSIE workaround (send `Cache-Control: private` in place of Vary) #114 (Kazuho Oku)
	- [http2] support server-push #133 (Kazuho Oku)
	- [http2] fix spurious RST_STREAMS being sent #132 (Kazuho Oku)
	- [http2] weight-based distribution of bandwidth #135 (Kazuho Oku)
	- [proxy] added configuration directive `proxy.preserve-host` #112 (Masahiro Nagano)
	- [proxy] sends X-Forwarded-For and X-Forwarded-Proto headers #112 (Masahiro Nagano)
	- [proxy] stability improvements #61 (Kazuho Oku)
	- [misc] adjustments to make the source code more analyzer-friendly #113,#117 (Nick Desaulniers, Maks Naumov)

0.9.1 2015-01-19 21:13:00+0000
	- added configuration directives: ssl/cipher-suite, ssl/ocsp-update-interval, ssl/ocsp-max-failures, expires, file.send-gzip
	- [http2] added support for draft-16 (draft-14 is also supported)
	- [http2] dependency-based prioritization
	- [http2] improved conformance to the specification
	- [SSL] OCSP stapling (automatically enabled by default)
	- [SSL] fix compile error with OpenSSL below version 1.0.1
	- [file] content negotiation (serving .gz files)
	- [expires] added support for Cache-Control: max-age
	- [libh2o] libh2o and the header files installed by `make install`
	- [libh2o] fix compile error when used from C++
	- automatically setuids to nobody when run as root and if `user` directive is not set
	- automatically raises RLIMIT_NOFILE
	- uses all CPU cores by default
	- now compiles on NetBSD and other BSD-based systems
jperkin pushed a commit that referenced this issue Jun 1, 2015
4.20 2015-05-29

    [ RELEASE NOTES ]
    - CGI.pm is now considered "done". See also "mature" and "legacy"
      Features requests and none critical issues will be outright rejected.
      The module is now in maintenance mode for critical issues only.

    - This release removes the AUTOLOAD and compile optimisations from CGI.pm
      that were introduced into CGI.pm twenty (20) years ago as a response to
      its large size, which meant there was a significant compile time penalty.

    - This optimisation is no longer relevant and makes the code difficult to
      deal with as well as making test coverage metrics incorrect. Benchmarks
      show that advantages of AUTOLOAD / lazy loading / deferred compile are
      less than 0.05s, which will be dwarfed by just about any meaningful code
      in a cgi script. If this is an issue for you then you should look at
      running CGI.pm in a persistent environment (FCGI, etc)

    - To offset some of the time added by removing the AUTOLOAD functionality
      the dependencies have been made runtime rather than compile time. The
      POD has also been split into its own file. CGI.pm now contains around
      4000 lines of code, which compared to some modules on CPAN isn't really
      that much

    - This essentially deprecates the -compile pragma and ->compile method. The
      -compile pragma will no longer do anything, whereas the ->compile method
      will raise a deprecation warning. More importantly this also REMOVES the
      -any pragma because as per the documentation this pragma needed to be
      "used with care or not at all" and allowing arbitrary HTML tags is almost
      certainly a bad idea. If you are using the -any pragma and using arbitrary
      tags (or have typo's in your code) your code will *BREAK*

    - Although this release should be back compatible (with the exception of any
      code using the -any pragma) you are encouraged to test it throughly as if
      you are doing anything out of the ordinary with CGI.pm (i.e. have bugs
      that may have been masked by the AUTOLOAD feature) you may see some issues.

    - References: GH #162, GH #137, GH #164

    [ SPEC / BUG FIXES ]
    - make the list context warning in param show the filename rather than
      the package so we have more information on exactly where the warning
      has been raised from (GH #171)
    - correct self_url when PATH_INFO and SCRIPT_NAME are the same but we
      are not running under IIS (GH #176)
    - Add the multi_param method to :cgi export (thanks to xblitz for the patch
      and tests. GH #167)
    - Fix warning for lack of HTTP_USER_AGENT in CGI::Carp (GH #168)
    - Fix imports when called from CGI::Fast, restores the import of CGI functions
      into the callers namespace for users of CGI::Fast (GH leejo/cgi-fast#11 and
      GH leejo/cgi-fast#12)

    [ FEATURES ]
    - CGI::Carp now has $CGI::Carp::FULL_PATH for displaying the full path to the
      offending script in error messages
    - CGI now has env_query_string() for getting the value of QUERY_STRING from
      the environment and not that fiddled with by CGI.pm (which is what
      query_string() does) (GH #161)
    - CGI::ENCODE_ENTITIES var added to control which chracters are encoded by
      the call to the HTML::Entities module - defaults to &<>"' (GH #157 - the
      \x8b and \x9b chars have been removed from this list as we are concerned
      more about unicode compat these days than old browser support.)

    [ DOCUMENTATION ]
    - Fix some typos (GH #173, GH #174)
    - All *documentation* for HTML functionality in CGI has been moved into
      its own namespace: CGI::HTML::Functions - although the functionality
      continues to exist within CGI.pm so there are no code changes required
      (GH #142)
    - Add missing documentation for env variable fetching routines (GH #163)

    [ TESTING ]
    - Increase test coverage (GH #3)

    [ INTERNALS ]
    - Cwd made a TEST_REQUIRES rather than a BUILD_REQUIRES in Makefile.PL
      (GH #170)
    - AutoloadClass variables have been removed as AUTOLOAD was removed in
      v4.14 so these are no longer necessary (GH #172 thanks to alexmv)
    - Remove dependency on constant - internal DEBUG, XHTML_DTD and EBCDIC
      constants changes to $_DEBUG, $_XHTML_DTD, and $_EBCDIC
jperkin pushed a commit that referenced this issue Nov 20, 2015
CHANGELOG:
1.16.0.1 --> 1.17.0
===================

AST changes:

* Replaced VarA with AppA in Asst (#168).
* Promoted list/tuple members changed from Promoted to Type (#162).
* Update PatBind, Match, and Alt from containing Binds to Maybe Binds to
  distinguish between empty where clauses and where clauses with no
  binds (#244).
* Add RoleAnnotDecl and Role to support Role annotations (#215).
* Move NameSpace field from EVar/IVar to EAbs/IAbs.

Other changes:

* Add standalone parsers for ImportDecl.
* Fix pretty-printer bugs for HaRP (#160).
* Insert parentheses when pretty-printing non-atomic bang types (#169).
* Un-reverse confusion of left and right arrow (#175).
* Prettyprint option pragmas like 1.15 (#172).
* Conditionally insert lines when pretty-printing declarations (#171).
* Distinguish deriving (Show) from deriving Show (#189).
* Allow parsing of unicode subscript and superscript functions (#173).
* Pretty print unboxed tuples with spaces (#193).
* Improve performance when parsing long extension lists (#200).
* Properly pretty print constructor and class operators (#204).
* Read Haskell source files as UTF-8 (#223).
* Fix ExplicitNamespaces parsing (#216).
* PolyKinds implies KindSignatures (#220).
* Preserve location information for infix binds (#205).
* Preserve positional information in checkPattern (#231).
* Maintain correct line numbers when parsing multiline GHC_OPTIONS (#218).
* Correctly parse "*" with TypeOperators (#81).
* Export the "pretty" method (#222).
* Add javascript calling convention for foreign imports (#236).
* Add non-greedy parsers for module heads (#191).
* Add a flag to disable arity checking when parsing (#260).
* Parse "-" in type signatures (#206).
* Add support for type wildcards and expression holes (#252).
* Add support for Pattern Synonyms (#197).
* Bump the happy lower bound (#250).
* Make test suite pass on GHC 7.12 (#224).
* Support linking Haddock comments to AST nodes (#213).
* Parse multiline LANGUAGE pragmas (#217).
* Parse trailing where (#25).
* Parse modules starting with pragmas and indented
  "module" keyword (#122).
* Use pretty-show to get human readable test outputs.
* Respect fixity declarations inside where/let/class in
  `applyFixities` (#212).
* Correctly parse the combination of view patterns and bang patterns. (#276)
jperkin pushed a commit that referenced this issue Dec 30, 2015
Ok MAINTAINER bsiegert.

While doing that, update to current release, 0.29.0.
Changes since 0.24.0:

Version 0.29.0
--------------

Compatibility notes:

- when upgrading to 0.29.0 you need to upgrade client as well as server
  installations due to the locking and commandline interface changes otherwise
  you'll get an error msg about a RPC protocol mismatch or a wrong commandline
  option.
  if you run a server that needs to support both old and new clients, it is
  suggested that you have a "borg-0.28.2" and a "borg-0.29.0" command.
  clients then can choose via e.g. "borg --remote-path=borg-0.29.0 ...".
- the default waiting time for a lock changed from infinity to 1 second for a
  better interactive user experience. if the repo you want to access is
  currently locked, borg will now terminate after 1s with an error message.
  if you have scripts that shall wait for the lock for a longer time, use
  --lock-wait N (with N being the maximum wait time in seconds).

Bug fixes:

- hash table tuning (better chosen hashtable load factor 0.75 and prime initial
  size of 1031 gave ~1000x speedup in some scenarios)
- avoid creation of an orphan lock for one case, #285
- --keep-tag-files: fix file mode and multiple tag files in one directory, #432
- fixes for "borg upgrade" (attic repo converter), #466
- remove --progress isatty magic (and also --no-progress option) again, #476
- borg init: display proper repo URL
- fix format of umask in help pages, #463

New features:

- implement --lock-wait, support timeout for UpgradableLock, #210
- implement borg break-lock command, #157
- include system info below traceback, #324
- sane remote logging, remote stderr, #461:

  - remote log output: intercept it and log it via local logging system,
    with "Remote: " prefixed to message. log remote tracebacks.
  - remote stderr: output it to local stderr with "Remote: " prefixed.
- add --debug and --info (same as --verbose) to set the log level of the
  builtin logging configuration (which otherwise defaults to warning), #426
  note: there are few messages emitted at DEBUG level currently.
- optionally configure logging via env var BORG_LOGGING_CONF
- add --filter option for status characters: e.g. to show only the added
  or modified files (and also errors), use "borg create -v --filter=AME ...".
- more progress indicators, #394
- use ISO-8601 date and time format, #375
- "borg check --prefix" to restrict archive checking to that name prefix, #206

Other changes:

- hashindex_add C implementation (speed up cache re-sync for new archives)
- increase FUSE read_size to 1024 (speed up metadata operations)
- check/delete/prune --save-space: free unused segments quickly, #239
- increase rpc protocol version to 2 (see also Compatibility notes), #458
- silence borg by default (via default log level WARNING)
- get rid of C compiler warnings, #391
- upgrade OS X FUSE to 3.0.9 on the OS X binary build system
- use python 3.5.1 to build binaries
- docs:

  - new mailing list borgbackup@python.org, #468
  - readthedocs: color and logo improvements
  - load coverage icons over SSL (avoids mixed content)
  - more precise binary installation steps
  - update release procedure docs about OS X FUSE
  - FAQ entry about unexpected 'A' status for unchanged file(s), #403
  - add docs about 'E' file status
  - add "borg upgrade" docs, #464
  - add developer docs about output and logging
  - clarify encryption, add note about client-side encryption
  - add resources section, with videos, talks, presentations, #149
  - Borg moved to Arch Linux [community]
  - fix wrong installation instructions for archlinux


Version 0.28.2
--------------

New features:

- borg create --exclude-if-present TAGFILE - exclude directories that have the
  given file from the backup. You can additionally give --keep-tag-files to
  preserve just the directory roots and the tag-files (but not backup other
  directory contents), #395, attic #128, attic #142

Other changes:

- do not create docs sources at build time (just have them in the repo),
  completely remove have_cython() hack, do not use the "mock" library at build
  time, #384
- avoid hidden import, make it easier for PyInstaller, easier fix for #218
- docs:

  - add description of item flags / status output, fixes #402
  - explain how to regenerate usage and API files (build_api or
    build_usage) and when to commit usage files directly into git, #384
  - minor install docs improvements


Version 0.28.1
--------------

Bug fixes:

- do not try to build api / usage docs for production install,
  fixes unexpected "mock" build dependency, #384

Other changes:

- avoid using msgpack.packb at import time
- fix formatting issue in changes.rst
- fix build on readthedocs


Version 0.28.0
--------------

Compatibility notes:

- changed return codes (exit codes), see docs. in short:
  old: 0 = ok, 1 = error. now: 0 = ok, 1 = warning, 2 = error

New features:

- refactor return codes (exit codes), fixes #61
- add --show-rc option enable "terminating with X status, rc N" output, fixes 58, #351
- borg create backups atime and ctime additionally to mtime, fixes #317
  - extract: support atime additionally to mtime
  - FUSE: support ctime and atime additionally to mtime
- support borg --version
- emit a warning if we have a slow msgpack installed
- borg list --prefix=thishostname- REPO, fixes #205
- Debug commands (do not use except if you know what you do: debug-get-obj,
  debug-put-obj, debug-delete-obj, debug-dump-archive-items.

Bug fixes:

- setup.py: fix bug related to BORG_LZ4_PREFIX processing
- fix "check" for repos that have incomplete chunks, fixes #364
- borg mount: fix unlocking of repository at umount time, fixes #331
- fix reading files without touching their atime, #334
- non-ascii ACL fixes for Linux, FreeBSD and OS X, #277
- fix acl_use_local_uid_gid() and add a test for it, attic #359
- borg upgrade: do not upgrade repositories in place by default, #299
- fix cascading failure with the index conversion code, #269
- borg check: implement 'cmdline' archive metadata value decoding, #311
- fix RobustUnpacker, it missed some metadata keys (new atime and ctime keys
  were missing, but also bsdflags). add check for unknown metadata keys.
- create from stdin: also save atime, ctime (cosmetic)
- use default_notty=False for confirmations, fixes #345
- vagrant: fix msgpack installation on centos, fixes #342
- deal with unicode errors for symlinks in same way as for regular files and
  have a helpful warning message about how to fix wrong locale setup, fixes #382
- add ACL keys the RobustUnpacker must know about

Other changes:

- improve file size displays, more flexible size formatters
- explicitly commit to the units standard, #289
- archiver: add E status (means that an error occured when processing this
  (single) item
- do binary releases via "github releases", closes #214
- create: use -x and --one-file-system (was: --do-not-cross-mountpoints), #296
- a lot of changes related to using "logging" module and screen output, #233
- show progress display if on a tty, output more progress information, #303
- factor out status output so it is consistent, fix surrogates removal,
  maybe fixes #309
- move away from RawConfigParser to ConfigParser
- archive checker: better error logging, give chunk_id and sequence numbers
  (can be used together with borg debug-dump-archive-items).
- do not mention the deprecated passphrase mode
- emit a deprecation warning for --compression N (giving a just a number)
- misc .coverragerc fixes (and coverage measurement improvements), fixes #319
- refactor confirmation code, reduce code duplication, add tests
- prettier error messages, fixes #307, #57
- tests:

  - add a test to find disk-full issues, #327
  - travis: also run tests on Python 3.5
  - travis: use tox -r so it rebuilds the tox environments
  - test the generated pyinstaller-based binary by archiver unit tests, #215
  - vagrant: tests: announce whether fakeroot is used or not
  - vagrant: add vagrant user to fuse group for debianoid systems also
  - vagrant: llfuse install on darwin needs pkgconfig installed
  - vagrant: use pyinstaller from develop branch, fixes #336
  - benchmarks: test create, extract, list, delete, info, check, help, fixes #146
  - benchmarks: test with both the binary and the python code
  - archiver tests: test with both the binary and the python code, fixes #215
  - make basic test more robust
- docs:

  - moved docs to borgbackup.readthedocs.org, #155
  - a lot of fixes and improvements, use mobile-friendly RTD standard theme
  - use zlib,6 compression in some examples, fixes #275
  - add missing rename usage to docs, closes #279
  - include the help offered by borg help <topic> in the usage docs, fixes #293
  - include a list of major changes compared to attic into README, fixes #224
  - add OS X install instructions, #197
  - more details about the release process, #260
  - fix linux glibc requirement (binaries built on debian7 now)
  - build: move usage and API generation to setup.py
  - update docs about return codes, #61
  - remove api docs (too much breakage on rtd)
  - borgbackup install + basics presentation (asciinema)
  - describe the current style guide in documentation
  - add section about debug commands
  - warn about not running out of space
  - add example for rename
  - improve chunker params docs, fixes #362
  - minor development docs update


Version 0.27.0
--------------

New features:

- "borg upgrade" command - attic -> borg one time converter / migration, #21
- temporary hack to avoid using lots of disk space for chunks.archive.d, #235:
  To use it: rm -rf chunks.archive.d ; touch chunks.archive.d
- respect XDG_CACHE_HOME, attic #181
- add support for arbitrary SSH commands, attic #99
- borg delete --cache-only REPO (only delete cache, not REPO), attic #123


Bug fixes:

- use Debian 7 (wheezy) to build pyinstaller borgbackup binaries, fixes slow
  down observed when running the Centos6-built binary on Ubuntu, #222
- do not crash on empty lock.roster, fixes #232
- fix multiple issues with the cache config version check, #234
- fix segment entry header size check, attic #352
  plus other error handling improvements / code deduplication there.
- always give segment and offset in repo IntegrityErrors


Other changes:

- stop producing binary wheels, remove docs about it, #147
- docs:
  - add warning about prune
  - generate usage include files only as needed
  - development docs: add Vagrant section
  - update / improve / reformat FAQ
  - hint to single-file pyinstaller binaries from README


Version 0.26.1
--------------

This is a minor update, just docs and new pyinstaller binaries.

- docs update about python and binary requirements
- better docs for --read-special, fix #220
- re-built the binaries, fix #218 and #213 (glibc version issue)
- update web site about single-file pyinstaller binaries

Note: if you did a python-based installation, there is no need to upgrade.


Version 0.26.0
--------------

New features:

- Faster cache sync (do all in one pass, remove tar/compression stuff), #163
- BORG_REPO env var to specify the default repo, #168
- read special files as if they were regular files, #79
- implement borg create --dry-run, attic issue #267
- Normalize paths before pattern matching on OS X, #143
- support OpenBSD and NetBSD (except xattrs/ACLs)
- support / run tests on Python 3.5

Bug fixes:

- borg mount repo: use absolute path, attic #200, attic #137
- chunker: use off_t to get 64bit on 32bit platform, #178
- initialize chunker fd to -1, so it's not equal to STDIN_FILENO (0)
- fix reaction to "no" answer at delete repo prompt, #182
- setup.py: detect lz4.h header file location
- to support python < 3.2.4, add less buggy argparse lib from 3.2.6 (#194)
- fix for obtaining ``char *`` from temporary Python value (old code causes
  a compile error on Mint 17.2)
- llfuse 0.41 install troubles on some platforms, require < 0.41
  (UnicodeDecodeError exception due to non-ascii llfuse setup.py)
- cython code: add some int types to get rid of unspecific python add /
  subtract operations (avoid ``undefined symbol FPE_``... error on some platforms)
- fix verbose mode display of stdin backup
- extract: warn if a include pattern never matched, fixes #209,
  implement counters for Include/ExcludePatterns
- archive names with slashes are invalid, attic issue #180
- chunker: add a check whether the POSIX_FADV_DONTNEED constant is defined -
  fixes building on OpenBSD.

Other changes:

- detect inconsistency / corruption / hash collision, #170
- replace versioneer with setuptools_scm, #106
- docs:

  - pkg-config is needed for llfuse installation
  - be more clear about pruning, attic issue #132
- unit tests:

  - xattr: ignore security.selinux attribute showing up
  - ext3 seems to need a bit more space for a sparse file
  - do not test lzma level 9 compression (avoid MemoryError)
  - work around strange mtime granularity issue on netbsd, fixes #204
  - ignore st_rdev if file is not a block/char device, fixes #203
  - stay away from the setgid and sticky mode bits
- use Vagrant to do easy cross-platform testing (#196), currently:

  - Debian 7 "wheezy" 32bit, Debian 8 "jessie" 64bit
  - Ubuntu 12.04 32bit, Ubuntu 14.04 64bit
  - Centos 7 64bit
  - FreeBSD 10.2 64bit
  - OpenBSD 5.7 64bit
  - NetBSD 6.1.5 64bit
  - Darwin (OS X Yosemite)


Version 0.25.0
--------------

Compatibility notes:

- lz4 compression library (liblz4) is a new requirement (#156)
- the new compression code is very compatible: as long as you stay with zlib
  compression, older borg releases will still be able to read data from a
  repo/archive made with the new code (note: this is not the case for the
  default "none" compression, use "zlib,0" if you want a "no compression" mode
  that can be read by older borg). Also the new code is able to read repos and
  archives made with older borg versions (for all zlib levels  0..9).

Deprecations:

- --compression N (with N being a number, as in 0.24) is deprecated.
  We keep the --compression 0..9 for now to not break scripts, but it is
  deprecated and will be removed later, so better fix your scripts now:
  --compression 0 (as in 0.24) is the same as --compression zlib,0 (now).
  BUT: if you do not want compression, you rather want --compression none
  (which is the default).
  --compression 1 (in 0.24) is the same as --compression zlib,1 (now)
  --compression 9 (in 0.24) is the same as --compression zlib,9 (now)

New features:

- create --compression none (default, means: do not compress, just pass through
  data "as is". this is more efficient than zlib level 0 as used in borg 0.24)
- create --compression lz4 (super-fast, but not very high compression)
- create --compression zlib,N (slower, higher compression, default for N is 6)
- create --compression lzma,N (slowest, highest compression, default N is 6)
- honor the nodump flag (UF_NODUMP) and do not backup such items
- list --short just outputs a simple list of the files/directories in an archive

Bug fixes:

- fixed --chunker-params parameter order confusion / malfunction, fixes #154
- close fds of segments we delete (during compaction)
- close files which fell out the lrucache
- fadvise DONTNEED now is only called for the byte range actually read, not for
  the whole file, fixes #158.
- fix issue with negative "all archives" size, fixes #165
- restore_xattrs: ignore if setxattr fails with EACCES, fixes #162

Other changes:

- remove fakeroot requirement for tests, tests run faster without fakeroot
  (test setup does not fail any more without fakeroot, so you can run with or
  without fakeroot), fixes #151 and #91.
- more tests for archiver
- recover_segment(): don't assume we have an fd for segment
- lrucache refactoring / cleanup, add dispose function, py.test tests
- generalize hashindex code for any key length (less hardcoding)
- lock roster: catch file not found in remove() method and ignore it
- travis CI: use requirements file
- improved docs:

  - replace hack for llfuse with proper solution (install libfuse-dev)
  - update docs about compression
  - update development docs about fakeroot
  - internals: add some words about lock files / locking system
  - support: mention BountySource and for what it can be used
  - theme: use a lighter green
  - add pypi, wheel, dist package based install docs
  - split install docs into system-specific preparations and generic instructions
jperkin pushed a commit that referenced this issue Dec 30, 2015
----
19.2
----

* Pull Request #163: Add get_command_list method to Distribution.
* Pull Request #162: Add missing whitespace to multiline string
  literals.

------
19.1.1
------

* Issue #476: Cast version to string (using default encoding)
  to avoid creating Unicode types on Python 2 clients.
* Issue #477: In Powershell downloader, use explicit rendering
  of strings, rather than rely on ``repr``, which can be
  incorrect (especially on Python 2).

----
19.1
----

* Issue #215: The bootstrap script ``ez_setup.py`` now
  automatically detects
  the latest version of setuptools (using PyPI JSON API) rather
  than hard-coding a particular value.
* Issue #475: Fix incorrect usage in _translate_metadata2.

----
19.0
----

* Issue #442: Use RawConfigParser for parsing .pypirc file.
  Interpolated values are no longer honored in .pypirc files.

------
18.8.1
------

* Issue #440: Prevent infinite recursion when a SandboxViolation
  or other UnpickleableException occurs in a sandbox context
  with setuptools hidden. Fixes regression introduced in Setuptools
  12.0.
jperkin pushed a commit that referenced this issue Jul 17, 2016
What's new in Pylint 1.6.1?
===========================

Release date: 2016-07-07

    * Use environment markers for supporting conditional dependencies.


What's New in Pylint 1.6.0?
===========================

Release date: 2016-07-07

    * Added a new extension, `pylint.extensions.mccabe`, for warning
      about complexity in code.

    * Deprecate support for --optimize-ast. Part of #975.

    * Deprecate support for the HTML output. Part of #975.

    * Deprecate support for --output-files. Part of #975.

    * Fixed a documentation error for the check_docs extension. Fixes #735.

    * Made the list of property-defining decorators configurable.

    * Fix a bug where the top name of a qualified import was detected as unused variable.

      Close #923.

    * bad-builtin is now an extension check.

    * generated-members support qualified name through regular expressions.

      For instance, one can specify a regular expression as --generated-members=astroid.node_classes.*
      for ignoring every no-member error that is accessed as in `astroid.node_classes.missing.object`.

    * Add the ability to ignore files based on regex matching, with the new ``--ignore-patterns``
      option.

      This addresses issue #156 by allowing for multiple ignore patterns
      to be specified. Rather than clobber the existing ignore option, we
      introduced a new one called ignore-patterns.

    * Added a new error, 'trailing-newlines', which is emitted when a file
      has trailing new lines.

      Closes issue #682.

    * Add a new option, 'redefining-builtins-modules', for controlling the modules
      which can redefine builtins, such as six.moves and future.builtins.

      Close #464.

    * 'reimported' is emitted when the same name is imported from different module.

      Close #162.

    * Add a new recommendation checker, 'consider-iterating-dictionary', which is emitted
      which is emitted when a dictionary is iterated through .keys().

      Close #699

    * Use the configparser backport for Python 2

      This fixes a problem we were having with comments inside values, which is fixed
      in Python 3's configparser.
      Close #828

    * A new error was added, 'invalid-length-returned', when the `__len__`
      special method returned something else than a non-negative number.

      Close issue #557

    * Switch to using isort internally for wrong-import-order.

      Closes #879.

    * check_docs extension can find constructor parameters in __init__.

      Closes #887.

    * Don't warn about invalid-sequence-index if the indexed object has unknown base
      classes.

      Closes #867

    * Don't crash when checking, for super-init-not-called, a method defined in an if block.

    * Do not emit import-error or no-name-in-module for fallback import blocks by default.

      Until now, we warned with these errors when a fallback import block (a TryExcept block
      that contained imports for Python 2 and 3) was found, but this gets cumbersome when
      trying to write compatible code. As such, we don't check these blocks by default,
      but the analysis can be enforced by using the new ``--analyse-fallback-block`` flag.

      Close #769.


What's New in Pylint 1.5.6?
===========================

Release date: 2016-06-06


    * config files with BOM markers can now be read.

      Close #864.

    * epylint.py_run does not crash on big files, using .communicate() instead of .wait()

      Close #599


What's New in Pylint 1.5.5?
===========================

Release date: 2016-03-21

    * Let visit_importfrom from Python 3 porting checker be called when everything is disabled

      Because the visit method was filtering the patterns it was expecting to be activated,
      it didn't run when everything but one pattern was disabled, leading to spurious false
      positives

      Close #852

    * Don't emit unsubscriptable-value for classes with unknown
      base classes.

      Close #776.

    * Use an OrderedDict for storing the configuration elements

      This fixes an issue related to impredictible order of the disable / enable
      elements from a config file. In certain cases, the disable was coming before
      the enable which resulted in classes of errors to be enabled, even though the intention
      was to disable them. The best example for this was in the context of running multiple
      processes, each one of it having different enables / disables that affected the output.

      Close #815

    * Don't consider bare and broad except handlers as ignoring NameError,
      AttributeError and similar exceptions, in the context of checkers for
      these issues.

      Closes issue #826


What's New in Pylint 1.5.4?
===========================

Release date: 2016-01-15


    * Merge StringMethodChecker with StringFormatChecker. This fixes a
      bug where disabling all the messages and enabling only a handful of
      messages from the StringFormatChecker would have resulted in no
      messages at all.

    * Don't apply unneeded-not over sets.


What's New in Pylint 1.5.3?
===========================

Release date: 2016-01-11


    * Handle the import fallback idiom with regard to wrong-import-order.

      Closes issue #750.

    * Decouple the displaying of reports from the displaying of messages

      Some reporters are aggregating the messages instead of displaying
      them when they are available. The actual displaying was conflatted
      in the generate_reports. Unfortunately this behaviour was flaky
      and in the case of the JSON reporter, the messages weren't shown
      at all if a file had syntax errors or if it was missing.
      In order to fix this, the aggregated messages can now be
      displayed with Reporter.display_message, while the reports are
      displayed with display_reports.

      Closes issues #766 and #765.

    * Ignore function calls with variadic arguments without a context.

      Inferring variadic positional arguments and keyword arguments
      will result into empty Tuples and Dicts, which can lead in
      some cases to false positives with regard to no-value-for-parameter.
      In order to avoid this, until we'll have support for call context
      propagation, we're ignoring such cases if detected.
      Closes issue #722.

    * Treat AsyncFunctionDef just like FunctionDef nodes,
      by implementing visit_asyncfunctiondef in terms of
      visit_functiondef.

      Closes issue #767.

    * Take in account kwonlyargs when verifying that arguments
      are defined with the check_docs extension.

      Closes issue #745.

    * Suppress reporting 'unneeded-not' inside `__ne__` methods

      Closes issue #749.


What's New in Pylint 1.5.2?
===========================

Release date: 2015-12-21


    * Don't crash if graphviz is not installed, instead emit a
      warning letting the user to know.

      Closes issue #168.

    * Accept only functions and methods for the deprecated-method checker.

      This prevents a crash which can occur when an object doesn't have
      .qname() method after the inference.

    * Don't emit super-on-old-class on classes with unknown bases.
      Closes issue #721.

    * Allow statements in `if` or `try` blocks containing imports.

      Closes issue #714.


What's New in Pylint 1.5.1?
===========================

Release date: 2015-12-02


    * Don't emit unsubscriptable-object if the node is found
      inside an abstract class. Closes issue #685.

    * Add wrong-import-position to check_messages's decorator arguments
      for ImportChecker.leave_module

      This fixes an esoteric bug which occurs when ungrouped-imports and
      wrong-import-order are disabled and pylint is executed on multiple files.
      What happens is that without wrong-import-position in check_messages,
      leave_module will never be called, which means that the first non-import node
      from other files might leak into the current file,
      leading to wrong-import-position being emitted by pylint.

    * Fix a crash which occurred when old visit methods are encountered
      in plugin modules. Closes issue #711.

    * Don't emit import-self and cyclic-import for relative imports
      of modules with the same name as the package itself.
      Closes issues #708 and #706.


What's New in Pylint 1.5.0?
===========================

Release date: 2015-11-29

    * Added multiple warnings related to imports. 'wrong-import-order'
      is emitted when PEP 8 recommendations regarding imports are not
      respected (that is, standard imports should be followed by third-party
      imports and then by local imports). 'ungrouped-imports' is emitted
      when imports from the same package or module are not placed
      together, but scattered around in the code. 'wrong-import-position'
      is emitted when code is mixed with imports, being recommended for the
      latter to be at the top of the file, in order to figure out easier by
      a human reader what dependencies a module has.
      Closes issue #692.

    * Added a new refactoring warning, 'unneeded-not', emitted
      when an expression with the not operator could be simplified.
      Closes issue #670.

    * Added a new refactoring warning, 'simplifiable-if-statement',
      used when an if statement could be reduced to a boolean evaluation
      of its test. Closes issue #698.

    * Added a new refactoring warning, 'too-many-boolean-expressions',
      used when a if statement contains too many boolean expressions,
      which makes the code less maintainable and harder to understand.
      Closes issue #677.

    * Property methods are shown as attributes instead of functions in
      pyreverse class diagrams. Closes Issue #284

    * Add a new refactoring error, 'too-many-nested-blocks', which is emitted
      when a function or a method has too many nested blocks, which makes the
      code less readable and harder to understand. Closes issue #668.

    * Add a new error, 'unsubscriptable-object', that is emitted when
      value used in subscription expression doesn't support subscription
      (i.e. doesn't define __getitem__ method).

    * Don't warn about abstract classes instantiated in their own
      body. Closes issue #627.

    * Obsolete options are not present by default in the generated
      configuration file. Closes issue #632.

    * non-iterator-returned can detect classes with iterator-metaclasses.
      Closes issue #679.

    * Add a new error, 'unsupported-membership-test', emitted when value
      to the right of the 'in' operator doesn't support membership test
      protocol (i.e. doesn't define __contains__/__iter__/__getitem__)

    * Add new errors, 'not-an-iterable', emitted when non-iterable value
      is used in an iterating context (starargs, for-statement,
      comprehensions, etc), and 'not-a-mapping', emitted when non-mapping
      value is used in a mapping context. Closes issue #563.

    * Make 'no-self-use' checker not emit a warning if there is a 'super()'
      call inside the method.
      Closes issue #667.

    * Add checker to identify multiple imports on one line.
      Closes issue #598.

    * Fix unused-argument false positive when the "+=" operator is used.
      Closes issue #518.

    * Don't emit import-error for ignored modules. PyLint will not emit import
      errors for any import which is, or is a subpackage of, a module in
      the ignored-modules list. Closes issue #223.

    * Fix unused-import false positive when the import is used in a
      class assignment. Closes issue #475

    * Add a new error, 'not-context-manager', emitted when something
      that doesn't implement __enter__ and __exit__ is used in a with
      statement.

    * Add a new warning, 'confusing-with-statement', emitted by the
      base checker, when an ambiguous looking with statement is used.
      For example `with open() as first, second` which looks like a
      tuple assignment but is actually 2 context managers.

    * Add a new warning, 'duplicate-except', emitted when there is an
      exception handler which handles an exception type that was handled
      before. Closes issue #485.

    * A couple of warnings got promoted to errors, since they could uncover
      potential bugs in the code. These warnings are: assignment-from-none,
      unbalanced-tuple-unpacking, unpacking-non-sequence, non-iterator-returned.
      Closes issue #388.

    * Allow ending a pragma control with a semicolon. In this way, users
      can continue a pragma control with a reason for why it is used,
      as in `# pylint: disable=old-style-class;reason=...`.
      Closes issue #449.

    * --jobs can be used with --load-plugins now. Closes issue #456.

    * Improve the performance of --jobs when dealing only with a package
      name. Closes issue #479.

    * Don't emit an unused-wildcard-import when the imported name comes
      from another module and it is in fact a __future__ name.

    * The colorized reporter now works on Windows. Closes issue #96.

    * Remove pointless-except warning. It was previously disabled by
      default and it wasn't very useful. Closes issue #506.

    * Fix a crash on Python 3 related to the string checker, which
      crashed when it encountered a bytes string with a .format
      method called.

    * Don't warn about no-self-use for builtin properties.

    * Fix a false positive for bad-reversed-sequence, when a subclass
      of a `dict` provides a __reversed__ method.

    * Change the default no-docstring-rgx so missing-docstring isn't
      emitted for private functions.

    * Don't emit redefined-outer-name for __future__ directives.
      Closes issue #520.

    * Provide some hints for the bad-builtin message. Closes issue #522.

    * When checking for invalid arguments to a callable, in typecheck.py,
      look up for the __init__ in case the found __new__ comes from builtins.

      Since the __new__ comes from builtins, it will not have attached any
      information regarding what parameters it expects, so the check
      will be useless. Retrieving __init__ in that case will at least
      detect a couple of false negatives. Closes issue #429.

    * Don't emit no-member for classes with unknown bases.

      Since we don't know what those bases might add, we simply ignore
      the error in this case.

    * Lookup in the implicit metaclass when checking for no-member,
      if the class in question has an implicit metaclass, which is
      True for new style classes. Closes issue #438.

    * Add two new warnings, duplicate-bases and inconsistent-mro.

      duplicate-bases is emitted when a class has the same bases
      listed more than once in its bases definition, while inconsistent-mro
      is emitted when no sane mro hierarchy can be determined. Closes issue #526.

    * Remove interface-not-implemented warning. Closes issue #532.

    * Remove the rest of interface checks: interface-is-not-class,
      missing-interface-method, unresolved-interface. The reason is that
      its better to start recommending ABCs instead of the old Zope era
      of interfaces. One side effect of this change is that ignore-iface-methods
      becomes a noop, it's deprecated and it will be removed at some time.

    * Emit a proper deprecation warning for reporters.BaseReporter.add_message.

      The alternative way is to use handle_message. add_message will be removed in
      Pylint 1.6.

    * Added new module 'extensions' for optional checkers with the test
      directory 'test/extensions' and documentation file 'doc/extensions.rst'.

    * Added new checker 'extensions.check_docs' that verifies parameter
      documention in Sphinx, Google, and Numpy style.

    * Detect undefined variable cases, where the "definition" of an undefined
      variable was in del statement. Instead of emitting used-before-assignment,
      which is totally misleading, it now emits undefined-variable.
      Closes issue #528.

    * Don't emit attribute-defined-outside-init and access-member-before-definition
      for mixin classes. Actual errors can occur in mixin classes, but this is
      controlled by the ignore-mixin-members option. Closes issue #412.

    * Improve the detection of undefined variables and variables used before
      assignment for variables used as default arguments to function,
      where the variable was first defined in the class scope.
      Closes issue #342 and issue #404.

    * Add a new warning, 'unexpected-special-method-signature', which is emitted
      when a special method (dunder method) doesn't have the expected signature,
      which can lead to actual errors in the application code.
      Closes issue #253.

    * Remove 'bad-context-manager' due to the inclusion of 'unexpected-special-method-signature'.

    * Don't emit no-name-in-module if the import is guarded by an ImportError, Exception or
      a bare except clause.

    * Don't emit no-member if the attribute access node is protected by an
      except handler, which handles AttributeError, Exception or it is a
      bare except.

    * Don't emit import-error if the import is guarded by an ImportError, Exception or a
      bare except clause.

    * Don't emit undefined-variable if the node is guarded by a NameError, Exception
      or bare except clause.

    * Add a new warning, 'using-constant-test', which is emitted when a conditional
      statement (If, IfExp) uses a test which is always constant, such as numbers,
      classes, functions etc. This is most likely an error from the user's part.
      Closes issue #524.

    * Don't emit 'raising-non-exception' when the exception has unknown
      bases. We don't know what those bases actually are and it's better
      to assume that the user knows what he is doing rather than emitting
      a message which can be considered a false positive.

    * Look for a .pylintrc configuration file in the current folder,
      if pylintrc is not found. Dotted pylintrc files will not be searched
      in the parents of the current folder, as it is done for pylintrc.

    * Add a new error, 'invalid-unary-type-operand', emitted when
      an unary operand is used on something which doesn't support that
      operation (for instance, using the unary bitwise inversion operator
      on an instance which doesn't implement __invert__).

    * Take in consideration differences between arguments of various
      type of functions (classmethods, staticmethods, properties)
      when checking for `arguments-differ`. Closes issue #548.

    * astroid.inspector was moved to pylint.pyreverse, since it belongs
      there and it doesn't need to be in astroid.

    * astroid.utils.LocalsVisitor was moved to pylint.pyreverse.LocalsVisitor.

    * pylint.checkers.utils.excepts_import_error was removed.
      Use pylint.chekcers.utils.error_of_type instead.

    * Don't emit undefined-all-variables for nodes which can't be
      inferred (YES nodes).

    * yield-outside-func is also emitted for `yield from`.

    * Add a new error, 'too-many-star-expressions', emitted when
      there are more than one starred expression (`*x`) in an assignment.
      The warning is emitted only on Python 3.

    * Add a new error, 'invalid-star-assignment-target', emitted when
      a starred expression (`*x`) is used as the lhs side of an assignment,
      as in `*x = [1, 2]`. This is not a SyntaxError on Python 3 though.

    * Detect a couple of objects which can't be base classes (bool,
      slice, range and memoryview, which weren't detected until now).

    * Add a new error for the Python 3 porting checker, `import-star-module-level`,
      which is used when a star import is detected in another scope than the
      module level, which is an error on Python 3. Using this will emit a
      SyntaxWarning on Python 2.

    * Add a new error, 'star-needs-assignment-target', emitted on Python 3 when
      a Starred expression (`*x`) is not used in an assignment target. This is not
      caught when parsing the AST on Python 3, so it needs to be a separate check.

    * Add a new error, 'unsupported-binary-operation', emitted when
      two a binary arithmetic operation is executed between two objects
      which don't support it (a number plus a string for instance).
      This is currently disabled, since the it exhibits way too many false
      positives, but it will be reenabled as soon as possible.

    * New imported features from astroid into pyreverse: pyreverse.inspector.Project,
      pyreverse.inspector.project_from_files and pyreverse.inspector.interfaces.

      These were moved since they didn't belong in astroid.

    * Enable misplaced-future for Python 3. Closes issue #580.

    * Add a new error, 'nonlocal-and-global', which is emitted when a
      name is found to be both nonlocal and global in the same scope.
      Closes issue #581.

    * ignored-classes option can work with qualified names (ignored-classes=optparse.Values)
      Closes issue #297.

    * ignored-modules can work with qualified names as well as with Unix pattern
      matching for recursive ignoring. Closes issues #244.

    * Improve detection of relative imports in non-packages, as well as importing
      missing modules with a relative import from a package.

    * Don't emit no-init if not all the bases from a class are known.
      Closes issue #604.

    * --no-space-check option accepts `empty-line` as a possible option.
      Closes issue #541.

    * --generate-rcfile generates by default human readable symbols
      for the --disable option. Closes issue #608.

    * Improved the not-in-loop checker to properly detect more cases.

    * Add a new error, 'continue-in-finally', which is emitted when
      the `continue` keyword is found inside a `finally` clause, which
      is a SyntaxError.

    * The --zope flag is deprecated and it is slated for removal
      in Pylint 1.6.

      The reason behind this removal is the fact that it's a specialized
      flag and there are solutions for the original problem:
      use --generated-members with the members that causes problems
      when using Zope or add AST transforms tailored to the zope
      project.

      At the same time, --include-ids and --symbols will also be removed
      in Pylint 1.6. Closes issue #570.

    * missing-module-attribute was removed and the corresponding
      CLI option, required-attributes, which is slated for removal
      in Pylint 1.6.

    * missing-reversed-argument was removed.

      The reason behind this is that this kind of errors should be
      detected by the type checker for *all* the builtins and not
      as a special case for the reversed builtin. This will happen
      shortly in the future.

    * --comment flag is obsolete and it will be removed in Pylint 1.6.

    * --profile flag is obsolete and it will be removed in Pylint 1.6.

    * Add a new error, 'misplaced-bare-raise'.

      The error is used when a bare raise is not used inside an except clause.
      This can generate a RuntimeError in Python, if there are no active exceptions
      to be reraised. While it works in Python 2 due to the fact that the exception
      leaks outside of the except block, it's nevertheless a behaviour that
      an user shouldn't depend upon, since it's not obvious to the reader of the code
      what exception will be raised and it will not be compatible with Python 3 anyhow.
      Closes issue #633.

    * Bring logilab-common's ureports into pylint.reporters.

      With this change, we moved away from depending on logilab-common,
      having in Pylint all the components that were used from logilab-common.
      The API should be considered an implementation detail and can change at
      some point in the future.
      Closes issue #621.

    * `reimported` is emitted for reimported objects on the same line.

      Closes issue #639.

    * Abbreviations of command line options are not supported anymore.

      Using abbreviations for CLI options was never considered to be
      a feature of pylint, this fact being only a side effect of using optparse.
      As this was the case, using --load-plugin or other abbreviation
      for --load-plugins never actually worked, while it also didn't raise
      an error. Closes issue #424.

    * Add a new error, 'nonlocal-without-binding'

      The error is emitted on Python 3 when a nonlocal name is not bound
      to any variable in the parents scopes. Closes issue #582.

    * 'deprecated-module' can be shown for modules which aren't
       available. Closes issue #362.

    * Don't consider a class abstract if its members can't
      be properly inferred.

      This fixes a false positive related to abstract-class-instantiated.
      Closes issue #648.

    * Add a new checker for the async features added by PEP 492.

    * Add a new error, 'yield-inside-async-function', emitted on
      Python 3.5 and upwards when the `yield` statement is found inside
      a new coroutine function (PEP 492).

    * Add a new error, 'not-async-context-manager', emitted when
      an async context manager block is used with an object which doesn't
      support this protocol (PEP 492).

    * Add a new convention warning, 'singleton-comparison', emitted when
      comparison to True, False or None is found.

    * Don't emit 'assigning-non-slot' for descriptors. Closes issue #652.

    * Add a new error, 'repeated-keyword', when a keyword argument is passed
      multiple times into a function call.

      This is similar with redundant-keyword-arg, but it's mildly different
      that it needs to be a separate error.

    * --enable=all can now be used. Closes issue #142.

    * Add a new convention message, 'misplaced-comparison-constant',
      emitted when a constant is placed in the left hand side of a comparison,
      as in '5 == func()'. This is also called Yoda condition, since the
      flow of code reminds of the Star Wars green character, conditions usually
      encountered in languages with variabile assignments in conditional
      statements.

    * Add a new convention message, 'consider-using-enumerate', which is
      emitted when code that uses `range` and `len` for iterating is encountered.
      Closes issue #684.

    * Added two new refactoring messages, 'no-classmethod-decorator' and
      'no-staticmethod-decorator', which are emitted when a static method or a class
      method is declared without using decorators syntax.

      Closes issue #675.
jperkin pushed a commit that referenced this issue Aug 24, 2016
NEWS:
Version 2.5.3
-------------
- Updated zoneinfo to 2016d
- Fixed parser bug where unambiguous datetimes fail to parse when dayfirst is
  set to true. (gh issue #233, pr #234)
- Bug in zoneinfo file on platforms such as Google App Engine which do not
  do not allow importing of subprocess.check_call was reported and fixed by
  @savraj (gh issue #239, gh pr #240)
- Fixed incorrect version in documentation (gh issue #235, pr #243)

Version 2.5.2
-------------
- Updated zoneinfo to 2016c
- Fixed parser bug where yearfirst and dayfirst parameters were not being
  respected when no separator was present. (gh issue #81 and #217, pr #229)

Version 2.5.1
-------------
- Updated zoneinfo to 2016b
- Changed MANIFEST.in to explicitly include test suite in source distributions,
  with help from @koobs (gh issue #193, pr #194, #201, #221)
- Explicitly set all line-endings to LF, except for the NEWS file, on a
  per-repository basis (gh pr #218)
- Fixed an issue with improper caching behavior in rruleset objects (gh issue
  #104, pr #207)
- Changed to an explicit error when rrulestr strings contain a missing BYDAY
  (gh issue #162, pr #211)
- tzfile now correctly handles files containing leapcnt (although the leapcnt
  information is not actually used). Contributed by @hjoukl (gh issue #146, pr
  #147)
- Fixed recursive import issue with tz module (gh pr #204)
- Added compatibility between tzwin objects and datetime.time objects (gh issue
  #216, gh pr #219)
- Refactored monolithic test suite by module (gh issue #61, pr #200 and #206)
- Improved test coverage in the relativedelta module (gh pr #215)
- Adjusted documentation to reflect possibly counter-intuitive properties of
  RFC-5545-compliant rrules, and other documentation improvements in the rrule
  module (gh issue #105, gh issue #149 - pointer to the solution by @phep,
  pr #213).


Version 2.5.0
-------------
- Updated zoneinfo to 2016a
- zoneinfo_metadata file version increased to 2.0 - the updated updatezinfo.py
  script will work with older zoneinfo_metadata.json files, but new metadata
  files will not work with older updatezinfo.py versions. Additionally, we have
  started hosting our own mirror of the Olson databases on a github pages
  site (https://dateutil.github.io/tzdata/) (gh pr #183)
- dateutil zoneinfo tarballs now contain the full zoneinfo_metadata file used
  to generate them. (gh issue #27, gh pr #85)
- relativedelta can now be safely subclassed without derived objects reverting
  to base relativedelta objects as a result of arithmetic operations.
  (lp:1010199, gh issue #44, pr #49)
- relativedelta 'weeks' parameter can now be set and retrieved as a property of
  relativedelta instances. (lp: 727525, gh issue #45, pr #49)
- relativedelta now explicitly supports fractional relative weeks, days, hours,
  minutes and seconds. Fractional values in absolute parameters (year, day, etc)
  are now deprecated. (gh issue #40, pr #190)
- relativedelta objects previously did not use microseconds to determine of two
  relativedelta objects were equal. This oversight has been corrected.
  Contributed by @elprans (gh pr #113)
- rrule now has an xafter() method for retrieving multiple recurrences after a
  specified date. (gh pr #38)
- str(rrule) now returns an RFC2445-compliant rrule string, contributed by
  @schinckel and @armicron (lp:1406305, gh issue #47, prs #50, #62 and #160)
- rrule performance under certain conditions has been significantly improved
  thanks to a patch contributed by @dekoza, based on an article by Brian Beck
  (@exogen) (gh pr #136)
- The use of both the 'until' and 'count' parameters is now deprecated as
  inconsistent with RFC2445 (gh pr #62, #185)
- Parsing an empty string will now raise a ValueError, rather than returning the
  datetime passed to the 'default' parameter. (gh issue #78, pr #187)
- tzwinlocal objects now have a meaningful repr() and str() implementation
  (gh issue #148, prs #184 and #186)
- Added equality logic for tzwin and tzwinlocal objects. (gh issue #151,
  pr #180, #184)
- Added some flexibility in subclassing timelex, and switched the default
  behavior over to using string methods rather than comparing against a fixed
  list. (gh pr #122, #139)
- An issue causing tzstr() to crash on Python 2.x was fixed. (lp: 1331576,
  gh issue #51, pr #55)
- An issue with string encoding causing exceptions under certain circumstances
  when tzname() is called was fixed. (gh issue #60, #74, pr #75)
- Parser issue where calling parse() on dates with no day specified when the
  day of the month in the default datetime (which is "today" if unspecified) is
  greater than the number of days in the parsed month was fixed (this issue
  tended to crop up between the 29th and 31st of the month, for obvious reasons)
  (canonical gh issue #25, pr #30, #191)
- Fixed parser issue causing fuzzy_with_tokens to raise an unexpected exception
  in certain circumstances. Contributed by @MichaelAquilina (gh pr #91)
- Fixed parser issue where years > 100 AD were incorrectly parsed. Contributed
  by @Bachmann1234 (gh pr #130)
- Fixed parser issue where commas were not a valid separator between seconds
  and microseconds, preventing parsing of ISO 8601 dates. Contributed by
  @ryanss (gh issue #28, pr #106)
- Fixed issue with tzwin encoding in locales with non-Latin alphabets
  (gh issue #92, pr #98)
- Fixed an issue where tzwin was not being properly imported on Windows.
  Contributed by @labrys. (gh pr #134)
- Fixed a problem causing issues importing zoneinfo in certain circumstances.
  Issue and solution contributed by @alexxv (gh issue #97, pr #99)
- Fixed an issue where dateutil timezones were not compatible with basic time
  objects. One of many, many timezone related issues contributed and tested by
  @labrys. (gh issue #132, pr #181)
- Fixed issue where tzwinlocal had an invalid utcoffset. (gh issue #135,
  pr #141, #142)
- Fixed issue with tzwin and tzwinlocal where DST transitions were incorrectly
  parsed from the registry. (gh issue #143, pr #178)
- updatezinfo.py no longer suppresses certain OSErrors. Contributed by @bjamesv
  (gh pr #164)
- An issue that arose when timezone locale changes during runtime has been
  fixed by @carlosxl and @mjschultz (gh issue #100, prs #107, #109)
- Python 3.5 was added to the supported platforms in the metadata (@tacaswell
  gh pr #159) and the test suites (@moreati gh pr #117).
- An issue with tox failing without unittest2 installed in Python 2.6 was fixed
  by @moreati (gh pr #115)
- Several deprecated functions were replaced in the tests by @moreati
  (gh pr #116)
- Improved the logic in Travis and Appveyor to alleviate issues where builds
  were failing due to connection issues when downloading the IANA timezone
  files. In addition to adding our own mirror for the files (gh pr #183), the
  download is now retried a number of times (with a delay) (gh pr #177)
- Many failing doctests were fixed by @moreati. (gh pr #120)
- Many fixes to the documentation (gh pr #103, gh pr #87 from @radarhere,
  gh pr #154 from @gpoesia, gh pr #156 from @awsum, gh pr #168 from @ja8zyjits)
- Added a code coverage tool to the CI to help improve the library. (gh pr #182)
- We now have a mailing list - dateutil@python.org, graciously hosted by
  Python.org.


Version 2.4.2
-------------
- Updated zoneinfo to 2015b.
- Fixed issue with parsing of tzstr on Python 2.7.x; tzstr will now be decoded
  if not a unicode type. gh #51 (lp:1331576), gh pr #55.
- Fix a parser issue where AM and PM tokens were showing up in fuzzy date
  stamps, triggering inappropriate errors. gh #56 (lp: 1428895), gh pr #63.
- Missing function "setcachesize" removed from zoneinfo __all__ list by @ryanss,
  fixing an issue with wildcard imports of dateutil.zoneinfo. (gh pr #66).
- (PyPi only) Fix an issue with source distributions not including the test
  suite.


Version 2.4.1
-------------

- Added explicit check for valid hours if AM/PM is specified in parser.
  (gh pr #22, issue #21)
- Fix bug in rrule introduced in 2.4.0 where byweekday parameter was not
  handled properly. (gh pr #35, issue #34)
- Fix error where parser allowed some invalid dates, overwriting existing hours
  with the last 2-digit number in the string. (gh pr #32, issue #31)
- Fix and add test for Python 2.x compatibility with boolean checking of
  relativedelta objects. Implemented by @nimasmi (gh pr #43) and Cédric Krier
  (lp: 1035038)
- Replaced parse() calls with explicit datetime objects in unit tests unrelated
  to parser. (gh pr #36)
- Changed private _byxxx from sets to sorted tuples and fixed one currently
  unreachable bug in _construct_byset. (gh pr #54)
- Additional documentation for parser (gh pr #29, #33, #41) and rrule.
- Formatting fixes to documentation of rrule and README.rst.
- Updated zoneinfo to 2015a.
jperkin pushed a commit that referenced this issue Mar 20, 2017
== 2.2.0 / 2017-03-09

Enhancements
- diagnostic context inheritance is now optional [PR #160]
- add support for setting a UTC offset [PR #157]
- setting a basepath for call tracing [PR #154]

Bug Fixes
- use thread-local variables for diagnostic contexts [PR #162]
- replace `Fixnum` with `Integer` [PR #161]
- fixed a race condition in the rolling file appender [PR #151]

Deprecations
- dropped Ruby 1.9 support
jperkin pushed a commit that referenced this issue May 23, 2017
---------------------------------------
cmark 0.27.1
 jgm released this on 19 Nov 2016 揃 46 commits to master since this release

 -  Set policy for CMP0063 to avoid a warning (#162).
    Put set_policy under cmake version test.
    Otherwise we get errors in older versions of cmake.
 -  Use VERSION_GREATER to clean up cmake version test.
 -  Improve afl target. Use afl-clang by default. Set default for path.

cmark 0.27.0
 jgm released this on 19 Nov 2016 揃 49 commits to master since this release

 -  Update spec to 0.27.
 -  Fix warnings building with MSVC on Windows (#165, Hugh Bellamy).
 -  Fix CMAKE_C_VISIBILITY_PRESET for cmake versions greater than 1.8
    (e.g. 3.6.2) (#162, Hugh Bellamy). This lets us build swift-cmark
    on Windows, using clang-cl.
 -  Fix for non-matching entities (#161, Yuki Izumi).
 -  Modified print_delimiters (commented out) so it compiles again.
 -  make format: don't change order of includes.
    Changed logic for null/eol checks (#160).
    * only check once for "not at end of line"
    * check for null before we check for newline characters (the
      previous patch would fail for NULL + CR)
 -  Fix by not advancing past both \0 and \n (Yuki Izumi).
 -  Add test for NUL-LF sequence (Yuki Izumi).
 -  Fix memory leak in list parsing (Yuki Izumi).
 -  Use cmark_mem to free where used to alloc (Yuki Izumi).
 -  Allow a shortcut link before a ( (commonmark/commonmark-spec#427).
 -  Allow tabs after setext header line (commonmark/commonmark.js#109).
 -  Don't let URI schemes start with spaces.
 -  Fixed h2..h6 HTML blocks (commonmark/commonmark-spec#430). Added regression test.
 -  Autolink scheme can contain digits (Gábor Csárdi)
 -  Fix nullary function declarations in cmark.h (Nick Wellnhofer).
 -  Fixes strict prototypes warnings.
 -  COPYING: Update file name and remove duplicate section and
     (Peter Eisentraut).
 -  Fix typo (Pavlo Kapyshin).
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

No branches or pull requests

2 participants