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

apache-tomcat-7.0.35 installs empty folders in /opt/local/share/tomcat and nothing else #59

Closed
AlainODea opened this issue Jun 18, 2013 · 3 comments

Comments

@AlainODea
Copy link

After running pkgin in apache-tomcat-7.0.35 on a fresh sdc:sdc:base64:13.1.0 (image 9eac5c0c-a941-11e2-a7dc-57a6b041988f) in Joyent Compute Service I cannot start Tomcat.

I am using http://pkgsrc.joyent.com/packages/SmartOS/2013Q1/x86_64/All.

It appears to be missing most of the install content:

# find / -mtime 0 | grep tomcat | grep -v pkg
find: /system/lxproc/37601/fd/4: No such file or directory
find: /proc/37601/fd/4: No such file or directory
/opt/local/share/tomcat
/opt/local/share/tomcat/work
/opt/local/share/tomcat/temp
/opt/local/share/tomcat/conf
/opt/local/share/tomcat/logs

The install appear to be broken by a syntax error on line 1555 in +INSTALL (excerpt shows lines 1547 to 1555):

case ${STAGE} in
POST-INSTALL)
    if ! projects -l tomcat >/dev/null 2>&1; then
      LANG=C projadd -U tomcat -G tomcat \
        -K "process.max-file-descriptor=(basic,10000,deny)" \
        -c "Tomcat service" tomcat
    fi
;;
ESAC

Here is /var/db/pkgin/pkg_install-err.log

---Jun 18 21:32:00: installing p5-Net-SSLeay-1.49nb1...
---Jun 18 21:32:01: installing p5-Net-LibIDN-0.12nb4...
---Jun 18 21:32:01: installing p5-Socket6-0.23nb3...
---Jun 18 21:32:01: installing p5-Net-IP-1.26...
---Jun 18 21:32:02: installing p5-IO-Socket-INET6-2.69nb1...
---Jun 18 21:32:02: installing p5-Digest-SHA-5.84...
---Jun 18 21:32:02: installing p5-Digest-MD5-2.52nb1...
---Jun 18 21:32:02: installing heimdal-1.5.2nb7...
---Jun 18 21:32:03: installing libgpg-error-1.11...
---Jun 18 21:32:03: installing p5-GSSAPI-0.28nb3...
---Jun 18 21:32:03: installing p5-Digest-HMAC-1.03nb1...
---Jun 18 21:32:03: installing p5-Net-DNS-0.69...
---Jun 18 21:32:04: installing p5-TimeDate-1.20nb3...
---Jun 18 21:32:04: installing p5-IO-Socket-SSL-1.77...
---Jun 18 21:32:04: installing xmlcatmgr-2.2nb1...
---Jun 18 21:32:05: installing libgcrypt-1.5.0...
---Jun 18 21:32:05: installing binutils-2.22nb1...
---Jun 18 21:32:06: installing p5-Net-SMTP-SSL-1.01nb3...
---Jun 18 21:32:06: installing p5-MailTools-2.12...
---Jun 18 21:32:06: installing p5-MIME-Base64-3.13nb2...
pkg_add: A different version of p5-MIME-Base64-3.13nb2 is already installed: p5-MIME-Base64-3.13nb2
pkg_add: 1 package addition failed
---Jun 18 21:32:06: installing p5-Error-0.17019...
---Jun 18 21:32:06: installing p5-Email-Valid-0.190nb1...
---Jun 18 21:32:06: installing p5-Authen-SASL-2.16...
---Jun 18 21:32:06: installing expat-2.1.0...
---Jun 18 21:32:06: installing libyaml-0.1.4...
---Jun 18 21:32:06: installing libxslt-1.1.28...
---Jun 18 21:32:07: installing libxml2-2.9.0nb3...
pkg_add: A different version of libxml2-2.9.0nb3 is already installed: libxml2-2.9.0nb3
pkg_add: 1 package addition failed
---Jun 18 21:32:07: installing gcc47-4.7.2nb3...
pkg_alternatives: the alternative `/opt/local/gcc47/bin/@[email protected]++' is not an executable
---Jun 18 21:32:14: installing scmgit-base-1.8.1.5...
---Jun 18 21:32:15: installing gmake-3.82nb5...
---Jun 18 21:32:16: installing ruby193-base-1.9.3p392...
---Jun 18 21:32:17: installing ruby193-yajl-1.1.0...
---Jun 18 21:32:17: installing ruby193-nokogiri-1.5.6...
---Jun 18 21:32:17: installing ruby193-readline-1.9.3p392nb2...
---Jun 18 21:32:17: installing pkg-config-0.28...
---Jun 18 21:41:47: removing smtools-20130417...
---Jun 18 21:41:47: removing pkgin-0.6.3.1.1...
---Jun 18 21:41:47: removing nodejs-0.10.4...
---Jun 18 21:41:48: installing smtools-20130509...
---Jun 18 21:41:48: installing pkgin-0.6.3.1.1nb2...
---Jun 18 21:41:49: installing nodejs-0.10.7...
---Jun 18 21:52:16: installing sun-jre6-6.0.26...
---Jun 18 21:52:22: installing apache-tomcat-7.0.35...
/opt/local/pkg/apache-tomcat-7.0.35/+INSTALL: line 1555: syntax error near unexpected token `newline'
/opt/local/pkg/apache-tomcat-7.0.35/+INSTALL: line 1555: `ESAC'
/opt/local/pkg/apache-tomcat-7.0.35/+INSTALL: line 1555: syntax error near unexpected token `newline'
/opt/local/pkg/apache-tomcat-7.0.35/+INSTALL: line 1555: `ESAC'
pkg_add: install script returned error status
pkg_add: Couldn't remove /opt/local/pkg/apache-tomcat-7.0.35: File exists
pkg_add: 1 package addition failed

Here is the install transcript:

]# pkgin in apache-tomcat-7.0.35
calculating dependencies... done.

nothing to upgrade.
2 packages to be installed: sun-jre6-6.0.26 apache-tomcat-7.0.35 (49M to download, 134M to install)

proceed ? [Y/n] y
downloading packages...
sun-jre6-6.0.26.tgz                                                    100%   42MB  41.9MB/s  41.9MB/s   00:01
apache-tomcat-7.0.35.tgz                                               100% 7623KB   7.4MB/s   7.4MB/s   00:00
installing packages...
installing sun-jre6-6.0.26...


        Operating System Distributor License for Java version 1.1

SUN MICROSYSTEMS, INC. ("SUN") IS WILLING TO LICENSE THE JAVA PLATFORM
STANDARD EDITION DEVELOPER KIT ("JDK" - THE "SOFTWARE") TO YOU ONLY
UPON THE CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS
LICENSE AGREEMENT (THE "AGREEMENT"). PLEASE READ THE AGREEMENT
CAREFULLY. BY INSTALLING, USING, OR DISTRIBUTING THIS SOFTWARE, YOU
ACCEPT ALL OF THE TERMS OF THE AGREEMENT.

1.  DEFINITIONS. "Software" means the code identified above in binary
    form, any other machine readable materials including, but not
    limited to, libraries, source files, header files, and data files),
    any updates or error corrections provided by Sun, and any user
    manuals, programming guides and other documentation provided to you
    by Sun under this Agreement, and any subsequent versions that Sun
    makes available to you hereunder.  "Operating System" means any
    version of the Linux or OpenSolaris operating systems that manages
    the hardware resources of a general purpose desktop or server
    computer and shares these resources with various software programs
    that run on top of it. "Programs" means Java technology applets and
    applications intended to run on the Java Platform Standard Edition
    (Java SE platform) platform on Java-enabled general purpose desktop
    computers and servers.

2.  License Grant. Subject to the terms and conditions of this
    Agreement, as well as the restrictions and exceptions set forth in
    the Software README file, Sun grants you a non-exclusive,
    non-transferable, royalty-free limited license to reproduce and use
    the Software internally, complete and unmodified, for the sole
    purposes of running Programs and designing, developing and testing
    Programs.  Sun also grants you a non-exclusive, non-transferable,
    royalty-free limited license to reproduce and distribute the
    Software, directly or indirectly through your licensees,
    distributors, resellers, or OEMs, electronically or in physical
    form or pre-installed with your Operating System on a general
    purpose desktop computer or server, provided that: (a) the Software
    and any proprietary legends or notices are complete and unmodified;
    (b) the Software is distributed with your Operating System, and
    such distribution is solely for the purposes of running Programs
    under the control of your Operating System and designing,
    developing and testing Programs to be run under the control of your
    Operating System; (c) you do not combine, configure or distribute
    the Software to run in conjunction with any additional software
    that implements the same or similar functionality or APIs as the
    Software; (d) you do not remove or modify any included license
    agreement or impede or prevent it from displaying and requiring
    acceptance; (e) you only distribute the Software subject to this
    license agreement; and (f) you agree to defend and indemnify Sun
    and its licensors from and against any damages, costs, liabilities,
    settlement amounts and/or expenses (including attorneys' fees)
    incurred in connection with any claim, lawsuit or action by any
    third party that arises or results from (i) the use or distribution
    of your Operating System, or any part thereof, in any manner, or
    (ii) your use or distribution of the Software in violation of the
    terms of this Agreement or applicable law.  You shall not be
    obligated under Section 2(f)(i) if such claim would not have
    occurred but for a modification made to your Operating System by
    someone not under your direction or control, and you were in
    compliance with all other terms of this Agreement.  If the Software
    README file permits certain files to be replaced or omitted from
    your distribution, then any such replacement(s) or omission(s)

Do you agree to the above license terms? [yes or no]
yes
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/amd64/jvm.cfg.default to /opt/local/java/sun6/lib/amd64/jvm.cfg
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/calendars.properties.default to /opt/local/java/sun6/lib/calendars.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/content-types.properties.default to /opt/local/java/sun6/lib/content-types.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages.properties.default to /opt/local/java/sun6/lib/deploy/messages.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_de.properties.default to /opt/local/java/sun6/lib/deploy/messages_de.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_es.properties.default to /opt/local/java/sun6/lib/deploy/messages_es.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_fr.properties.default to /opt/local/java/sun6/lib/deploy/messages_fr.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_it.properties.default to /opt/local/java/sun6/lib/deploy/messages_it.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_ja.properties.default to /opt/local/java/sun6/lib/deploy/messages_ja.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_ko.properties.default to /opt/local/java/sun6/lib/deploy/messages_ko.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_pt_BR.properties.default to /opt/local/java/sun6/lib/deploy/messages_pt_BR.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_sv.properties.default to /opt/local/java/sun6/lib/deploy/messages_sv.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_zh_CN.properties.default to /opt/local/java/sun6/lib/deploy/messages_zh_CN.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_zh_HK.properties.default to /opt/local/java/sun6/lib/deploy/messages_zh_HK.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/deploy/messages_zh_TW.properties.default to /opt/local/java/sun6/lib/deploy/messages_zh_TW.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/flavormap.properties.default to /opt/local/java/sun6/lib/flavormap.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.5.8.bfc.default to /opt/local/java/sun6/lib/fontconfig.5.8.bfc
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.5.8.properties.src.default to /opt/local/java/sun6/lib/fontconfig.5.8.properties.src
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.5.9.bfc.default to /opt/local/java/sun6/lib/fontconfig.5.9.bfc
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.5.9.properties.src.default to /opt/local/java/sun6/lib/fontconfig.5.9.properties.src
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.OpenSolaris.bfc.default to /opt/local/java/sun6/lib/fontconfig.OpenSolaris.bfc
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.OpenSolaris.properties.src.default to /opt/local/java/sun6/lib/fontconfig.OpenSolaris.properties.src
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.bfc.default to /opt/local/java/sun6/lib/fontconfig.bfc
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/fontconfig.properties.src.default to /opt/local/java/sun6/lib/fontconfig.properties.src
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/i386/jvm.cfg.default to /opt/local/java/sun6/lib/i386/jvm.cfg
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/images/cursors/cursors.properties.default to /opt/local/java/sun6/lib/images/cursors/cursors.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/logging.properties.default to /opt/local/java/sun6/lib/logging.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/management/management.properties.default to /opt/local/java/sun6/lib/management/management.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/net.properties.default to /opt/local/java/sun6/lib/net.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/psfont.properties.ja.default to /opt/local/java/sun6/lib/psfont.properties.ja
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/psfontj2d.properties.default to /opt/local/java/sun6/lib/psfontj2d.properties
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/security/java.security.default to /opt/local/java/sun6/lib/security/java.security
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/security/sunpkcs11-solaris.cfg.default to /opt/local/java/sun6/lib/security/sunpkcs11-solaris.cfg
sun-jre6-6.0.26: copying /opt/local/java/sun6/lib/sound.properties.default to /opt/local/java/sun6/lib/sound.properties
Loading classes to share ... done.
Rewriting and unlinking classes ... done.
Calculating hash values for String objects .. done.
Calculating fingerprints ... done.
Removing unshareable information ... done.
Moving pre-ordered read-only objects to shared space at 0xd7e00000 ... done.
Moving read-only objects to shared space at 0xd8274cc8 ... done.
Moving common symbols to shared space at 0xd82768f8 ... done.
Moving remaining symbols to shared space at 0xd834b048 ... done.
Moving string char arrays to shared space at 0xd834c468 ... done.
Moving additional symbols to shared space at 0xd8409d58 ... done.
Read-only space ends at 0xd849e608, 6940168 bytes.
Moving pre-ordered read-write objects to shared space at 0xd8800000 ... done.
Moving read-write objects to shared space at 0xd8f2db50 ... done.
Moving String objects to shared space at 0xd8f6f410 ... done.
Read-write space ends at 0xd8fb97c8, 8099784 bytes.
Updating references to shared objects ... done.

installing apache-tomcat-7.0.35...
apache-tomcat-7.0.35: Creating group ``tomcat''
apache-tomcat-7.0.35: Creating user ``tomcat''
passwd: password information changed for tomcat
pkg_install warnings: 0, errors: 1
pkg_install error log can be found in /var/db/pkgin/pkg_install-err.log
reading local summary...
processing local summary...
updating database: 100%
marking apache-tomcat-7.0.35 as non auto-removable
@AlainODea
Copy link
Author

The package can't be removed as far as I can tell and it blocks the installation of the other apache-tomcat versions.

@mamash
Copy link

mamash commented Jun 20, 2013

This is fixed resolved (package was replaced with the typo fixed). To clean up the borked install, just 'rm -rf /opt/local/pkg/apache-tomcat-7.0.35' and re-install the package.

@mamash mamash closed this as completed Jun 20, 2013
@AlainODea
Copy link
Author

Thank you @mamash :)

jperkin pushed a commit that referenced this issue Sep 16, 2013
== 2.7.0 / 2013-08-03 Charlie Savage

* Do not call Ruby code during a GC cycle (Dirkjan Bussink)
* Fix thread error handling (Geoffrey Giesemann)
* Set libxml error handler when a libxml-ruby error handler is set (Geoffrey Giesemann)
* Fix tests for nil TypeErrors (Geoffrey Giesemann)
* Fix segmentation fault for issue #62.  The deregisternode function was incorrectly
  NULLing out a node's mark and free functions for nodes removed from a document tree (Charlie Savage)
* Cleanup writer code (Charlie Savage)
* Fix equality check of LibXML::XML::Error against other objects (Michał Szajbe)
* Fix XML::Writer.set_quote_char UT, wrong expected string (#63).  (julp)
* Fix potential segfault when GC occurs while creating ns from xpath (Timothy Elliott)
* Fix segmentation fault after failing to load external schema (#59).  (Clifford Heath)
jperkin pushed a commit that referenced this issue Dec 9, 2013
Changelog:
0.8.7	2012-11-27

 BUG FIXES

  * Fix use of alternates in ``DiskObjectStore``.{__contains__,__iter__}.
    (Dmitriy)

  * Fix compatibility with Python 2.4. (David Carr)

0.8.6	2012-11-09

 API CHANGES

  * dulwich.__init__ no longer imports client, protocol, repo and
    server modules. (Jelmer Vernooij)

 FEATURES

  * ConfigDict now behaves more like a dictionary.
    (Adam 'Cezar' Jenkins, issue #58)

  * HTTPGitApplication now takes an optional
    `fallback_app` argument. (Jonas Haag, issue #67)

  * Support for large pack index files. (Jameson Nash)

 TESTING

  * Make index entry tests a little bit less strict, to cope with
    slightly different behaviour on various platforms.
    (Jelmer Vernooij)

  * ``setup.py test`` (available when setuptools is installed) now
    runs all tests, not just the basic unit tests.
    (Jelmer Vernooij)

 BUG FIXES

  * Commit._deserialize now actually deserializes the current state rather than
    the previous one. (Yifan Zhang, issue #59)

  * Handle None elements in lists of TreeChange objects. (Alex Holmes)

  * Support cloning repositories without HEAD set.
    (D-Key, Jelmer Vernooij, issue #69)

  * Support ``MemoryRepo.get_config``. (Jelmer Vernooij)

  * In ``get_transport_and_path``, pass extra keyword arguments on to
    HttpGitClient. (Jelmer Vernooij)

0.8.5	2012-03-29

 BUG FIXES

  * Avoid use of 'with' in dulwich.index. (Jelmer Vernooij)

  * Be a little bit strict about OS behaviour in index tests.
    Should fix the tests on Debian GNU/kFreeBSD. (Jelmer Vernooij)

0.8.4	2012-03-28

 BUG FIXES

  * Options on the same line as sections in config files are now supported.
    (Jelmer Vernooij, #920553)

  * Only negotiate capabilities that are also supported by the server.
    (Rod Cloutier, Risto Kankkunen)

  * Fix parsing of invalid timezone offsets with two minus signs.
    (Jason R. Coombs, #697828)

  * Reset environment variables during tests, to avoid
    test isolation leaks reading ~/.gitconfig. (Risto Kankkunen)

 TESTS

  * $HOME is now explicitly specified for tests that use it to read
    ``~/.gitconfig``, to prevent test isolation issues.
    (Jelmer Vernooij, #920330)

 FEATURES

  * Additional arguments to get_transport_and_path are now passed
    on to the constructor of the transport. (Sam Vilain)

  * The WSGI server now transparently handles when a git client submits data
    using Content-Encoding: gzip.
    (David Blewett, Jelmer Vernooij)

  * Add dulwich.index.build_index_from_tree(). (milki)
jperkin pushed a commit that referenced this issue Dec 9, 2013
== 2.7.0 / 2013-08-03 Charlie Savage

* Do not call Ruby code during a GC cycle (Dirkjan Bussink)
* Fix thread error handling (Geoffrey Giesemann)
* Set libxml error handler when a libxml-ruby error handler is set (Geoffrey Giesemann)
* Fix tests for nil TypeErrors (Geoffrey Giesemann)
* Fix segmentation fault for issue #62.  The deregisternode function was incorrectly
  NULLing out a node's mark and free functions for nodes removed from a document tree (Charlie Savage)
* Cleanup writer code (Charlie Savage)
* Fix equality check of LibXML::XML::Error against other objects (Michał Szajbe)
* Fix XML::Writer.set_quote_char UT, wrong expected string (#63).  (julp)
* Fix potential segfault when GC occurs while creating ns from xpath (Timothy Elliott)
* Fix segmentation fault after failing to load external schema (#59).  (Clifford Heath)
jperkin pushed a commit that referenced this issue Jan 6, 2014
Incompatible Changes:
* can no longer use both `\' and `:' (didn't work anyway)

New Features:
* Handling of run-time errors (default: die) is now overridable by
  subclasses via signature_error_handler(). [github #54]
* Can now have aliased named parameters. [github #57]
* remove dependency on Devel::BeginLift [github #39]
* can now use `when' to specify default conditions [github #48]
* can use `//=' as a shortcut for `when undef' [github #45]
* can now provide `where' constraints in addition to (or instead
  of) a type [github #7]
* can now use `...' to disable further argument checking [github #49]
* can now specify more than one alternative in type unions [github #55]
* can now nest parameterized types

Bug Fixes:
* Removed experimental smartmatch warnings
* Don't require Data::Alias for named params unless you have to [github #71]
* Fixed obscure bug where an eval in Method::Signatures wouldn't
  be skipped when carp'ing (i.e. in carp_location_for()) [github #72]
* Data::Alias is only loaded when needed avoiding a threads + eval
  bug in most cases and improving compile time performance.
  [rt.cpan.org 82922, github #62]
* Compile-time errors now reporting proper line numbers. [github #61]
* Trailing commas on parameter lists are now ok. [rt.cpan.org 81364]
* Default condition of `when {}' now interpreted as `when { $_ ~~
  {} }' (avoids parse error). [github #60]

Optimizations:
* better signature parsing using PPI [github #11]

Distribution Fixes:
* Fixed failing test in 5.10.0 (uncovered by CPAN Testers)
* Fixed repo link in metadata (thanks dsteinbrunner) [github #87]
* Add M::S::Parameter to MANIFEST [github #76]
* Change representation of Infinity to work on Win32 [github #75]
* Fixed stray detritus in MANIFEST.
* Somehow my last-minute fix to the new error handler test didn't
  make it in; this will fix "Can't locate Moose.pm" errors.
* Fixed test failing on 5.10.0 as per github #59.
* Fixed subtests failing on Test::More's prior to 0.96.

Docs:
* Updated close parend problem to include quotes and a workaround
  [rt.cpan.org 85925]
* Fixed some typos (thanks dsteinbrunner) [github #88]
* Found and fixed missing parend
* Minor clarifications here and there.
* Clarified what doesn't work in Perl 5.8.
* Added Function::Parameters to See Also section.
* Updated copyright.
* documented all new features
* new ASCI-art breakdown of signature syntax
* minor tweaks and corrections

Misc:
* Rearranged so signature is now an object [github #30]
* Add hook for Travis CI [github #78]
* Failure to parse parameters will now produce a more useful error.
jperkin pushed a commit that referenced this issue Jan 21, 2014
Changelog:
0.8.7	2012-11-27

 BUG FIXES

  * Fix use of alternates in ``DiskObjectStore``.{__contains__,__iter__}.
    (Dmitriy)

  * Fix compatibility with Python 2.4. (David Carr)

0.8.6	2012-11-09

 API CHANGES

  * dulwich.__init__ no longer imports client, protocol, repo and
    server modules. (Jelmer Vernooij)

 FEATURES

  * ConfigDict now behaves more like a dictionary.
    (Adam 'Cezar' Jenkins, issue #58)

  * HTTPGitApplication now takes an optional
    `fallback_app` argument. (Jonas Haag, issue #67)

  * Support for large pack index files. (Jameson Nash)

 TESTING

  * Make index entry tests a little bit less strict, to cope with
    slightly different behaviour on various platforms.
    (Jelmer Vernooij)

  * ``setup.py test`` (available when setuptools is installed) now
    runs all tests, not just the basic unit tests.
    (Jelmer Vernooij)

 BUG FIXES

  * Commit._deserialize now actually deserializes the current state rather than
    the previous one. (Yifan Zhang, issue #59)

  * Handle None elements in lists of TreeChange objects. (Alex Holmes)

  * Support cloning repositories without HEAD set.
    (D-Key, Jelmer Vernooij, issue #69)

  * Support ``MemoryRepo.get_config``. (Jelmer Vernooij)

  * In ``get_transport_and_path``, pass extra keyword arguments on to
    HttpGitClient. (Jelmer Vernooij)

0.8.5	2012-03-29

 BUG FIXES

  * Avoid use of 'with' in dulwich.index. (Jelmer Vernooij)

  * Be a little bit strict about OS behaviour in index tests.
    Should fix the tests on Debian GNU/kFreeBSD. (Jelmer Vernooij)

0.8.4	2012-03-28

 BUG FIXES

  * Options on the same line as sections in config files are now supported.
    (Jelmer Vernooij, #920553)

  * Only negotiate capabilities that are also supported by the server.
    (Rod Cloutier, Risto Kankkunen)

  * Fix parsing of invalid timezone offsets with two minus signs.
    (Jason R. Coombs, #697828)

  * Reset environment variables during tests, to avoid
    test isolation leaks reading ~/.gitconfig. (Risto Kankkunen)

 TESTS

  * $HOME is now explicitly specified for tests that use it to read
    ``~/.gitconfig``, to prevent test isolation issues.
    (Jelmer Vernooij, #920330)

 FEATURES

  * Additional arguments to get_transport_and_path are now passed
    on to the constructor of the transport. (Sam Vilain)

  * The WSGI server now transparently handles when a git client submits data
    using Content-Encoding: gzip.
    (David Blewett, Jelmer Vernooij)

  * Add dulwich.index.build_index_from_tree(). (milki)
jperkin pushed a commit that referenced this issue Jan 21, 2014
== 2.7.0 / 2013-08-03 Charlie Savage

* Do not call Ruby code during a GC cycle (Dirkjan Bussink)
* Fix thread error handling (Geoffrey Giesemann)
* Set libxml error handler when a libxml-ruby error handler is set (Geoffrey Giesemann)
* Fix tests for nil TypeErrors (Geoffrey Giesemann)
* Fix segmentation fault for issue #62.  The deregisternode function was incorrectly
  NULLing out a node's mark and free functions for nodes removed from a document tree (Charlie Savage)
* Cleanup writer code (Charlie Savage)
* Fix equality check of LibXML::XML::Error against other objects (Michał Szajbe)
* Fix XML::Writer.set_quote_char UT, wrong expected string (#63).  (julp)
* Fix potential segfault when GC occurs while creating ns from xpath (Timothy Elliott)
* Fix segmentation fault after failing to load external schema (#59).  (Clifford Heath)
jperkin pushed a commit that referenced this issue Jan 21, 2014
Incompatible Changes:
* can no longer use both `\' and `:' (didn't work anyway)

New Features:
* Handling of run-time errors (default: die) is now overridable by
  subclasses via signature_error_handler(). [github #54]
* Can now have aliased named parameters. [github #57]
* remove dependency on Devel::BeginLift [github #39]
* can now use `when' to specify default conditions [github #48]
* can use `//=' as a shortcut for `when undef' [github #45]
* can now provide `where' constraints in addition to (or instead
  of) a type [github #7]
* can now use `...' to disable further argument checking [github #49]
* can now specify more than one alternative in type unions [github #55]
* can now nest parameterized types

Bug Fixes:
* Removed experimental smartmatch warnings
* Don't require Data::Alias for named params unless you have to [github #71]
* Fixed obscure bug where an eval in Method::Signatures wouldn't
  be skipped when carp'ing (i.e. in carp_location_for()) [github #72]
* Data::Alias is only loaded when needed avoiding a threads + eval
  bug in most cases and improving compile time performance.
  [rt.cpan.org 82922, github #62]
* Compile-time errors now reporting proper line numbers. [github #61]
* Trailing commas on parameter lists are now ok. [rt.cpan.org 81364]
* Default condition of `when {}' now interpreted as `when { $_ ~~
  {} }' (avoids parse error). [github #60]

Optimizations:
* better signature parsing using PPI [github #11]

Distribution Fixes:
* Fixed failing test in 5.10.0 (uncovered by CPAN Testers)
* Fixed repo link in metadata (thanks dsteinbrunner) [github #87]
* Add M::S::Parameter to MANIFEST [github #76]
* Change representation of Infinity to work on Win32 [github #75]
* Fixed stray detritus in MANIFEST.
* Somehow my last-minute fix to the new error handler test didn't
  make it in; this will fix "Can't locate Moose.pm" errors.
* Fixed test failing on 5.10.0 as per github #59.
* Fixed subtests failing on Test::More's prior to 0.96.

Docs:
* Updated close parend problem to include quotes and a workaround
  [rt.cpan.org 85925]
* Fixed some typos (thanks dsteinbrunner) [github #88]
* Found and fixed missing parend
* Minor clarifications here and there.
* Clarified what doesn't work in Perl 5.8.
* Added Function::Parameters to See Also section.
* Updated copyright.
* documented all new features
* new ASCI-art breakdown of signature syntax
* minor tweaks and corrections

Misc:
* Rearranged so signature is now an object [github #30]
* Add hook for Travis CI [github #78]
* Failure to parse parameters will now produce a more useful error.
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)
jperkin pushed a commit that referenced this issue Jan 29, 2014
Changes from 2.2.1 to 2.2.2
===========================

* The `copy_args` argument of `NumExpr` function has been brought
  back.  This has been mainly necessary for compatibility with
  PyTables < 3.0, which I decided to continue to support.  Fixed #115.

* The `__nonzero__` method in `ExpressionNode` class has been
  commented out.  This is also for compatibility with PyTables < 3.0.
  See #24 for details.

* Fixed the type of some parameters in the C extension so that s390
  architecture compiles.  Fixes #116.  Thank to Antonio Valentino for
  reporting and the patch.


Changes from 2.2 to 2.2.1
=========================

* Fixes a secondary effect of "from numpy.testing import `*`", where
  division is imported now too, so only then necessary functions from
  there are imported now.  Thanks to Christoph Gohlke for the patch.

Changes from 2.1 to 2.2
=======================

* [LICENSE] Fixed a problem with the license of the
  numexpr/win32/pthread.{c,h} files emulating pthreads on Windows
  platforms.  After persmission from the original authors is granted,
  these files adopt the MIT license and can be redistributed without
  problems.  See issue #109 for details
  (https://code.google.com/p/numexpr/issues/detail?id=110).

* [ENH] Improved the algorithm to decide the initial number of threads
  to be used.  This was necessary because by default, numexpr was
  using a number of threads equal to the detected number of cores, and
  this can be just too much for moder systems where this number can be
  too high (and counterporductive for performance in many cases).
  Now, the 'NUMEXPR_NUM_THREADS' environment variable is honored, and
  in case this is not present, a maximum number of *8* threads are
  setup initially.  The new algorithm is fully described in the Users
  Guide now in the note of 'General routines' section:
  https://code.google.com/p/numexpr/wiki/UsersGuide#General_routines.
  Closes #110.

* [ENH] numexpr.test() returns `TestResult` instead of None now.
  Closes #111.

* [FIX] Modulus with zero with integers no longer crashes the
  interpreter.  It nows puts a zero in the result.  Fixes #107.

* [API CLEAN] Removed `copy_args` argument of `evaluate`.  This should
  only be used by old versions of PyTables (< 3.0).

* [DOC] Documented the `optimization` and `truediv` flags of
  `evaluate` in Users Guide
  (https://code.google.com/p/numexpr/wiki/UsersGuide).

Changes from 2.0.1 to 2.1
===========================

* Dropped compatibility with Python < 2.6.

* Improve compatibiity with Python 3:

  - switch from PyString to PyBytes API (requires Python >= 2.6).
  - fixed incompatibilities regarding the int/long API
  - use the Py_TYPE macro
  - use the PyVarObject_HEAD_INIT macro instead of PyObject_HEAD_INIT

* Fixed several issues with different platforms not supporting
  multithreading or subprocess properly (see tickets #75 and #77).

* Now, when trying to use pure Python boolean operators, 'and',
  'or' and 'not', an error is issued suggesting that '&', '|' and
  '~' should be used instead (fixes #24).

Changes from 2.0 to 2.0.1
=========================

* Added compatibility with Python 2.5 (2.4 is definitely not supported
  anymore).

* `numexpr.evaluate` is fully documented now, in particular the new
  `out`, `order` and `casting` parameters.

* Reduction operations are fully documented now.

* Negative axis in reductions are not supported (they have never been
  actually), and a `ValueError` will be raised if they are used.


Changes from 1.x series to 2.0
==============================

- Added support for the new iterator object in NumPy 1.6 and later.

  This allows for better performance with operations that implies
  broadcast operations, fortran-ordered or non-native byte orderings.
  Performance for other scenarios is preserved (except for very small
  arrays).

- Division in numexpr is consistent now with Python/NumPy.  Fixes #22
  and #58.

- Constants like "2." or "2.0" must be evaluated as float, not
  integer.  Fixes #59.

- `evaluate()` function has received a new parameter `out` for storing
  the result in already allocated arrays.  This is very useful when
  dealing with large arrays, and a allocating new space for keeping
  the result is not acceptable.  Closes #56.

- Maximum number of threads raised from 256 to 4096.  Machines with a
  higher number of cores will still be able to import numexpr, but
  limited to 4096 (which is an absurdly high number already).
jperkin pushed a commit that referenced this issue Mar 14, 2014
Changelog:
0.8.7	2012-11-27

 BUG FIXES

  * Fix use of alternates in ``DiskObjectStore``.{__contains__,__iter__}.
    (Dmitriy)

  * Fix compatibility with Python 2.4. (David Carr)

0.8.6	2012-11-09

 API CHANGES

  * dulwich.__init__ no longer imports client, protocol, repo and
    server modules. (Jelmer Vernooij)

 FEATURES

  * ConfigDict now behaves more like a dictionary.
    (Adam 'Cezar' Jenkins, issue #58)

  * HTTPGitApplication now takes an optional
    `fallback_app` argument. (Jonas Haag, issue #67)

  * Support for large pack index files. (Jameson Nash)

 TESTING

  * Make index entry tests a little bit less strict, to cope with
    slightly different behaviour on various platforms.
    (Jelmer Vernooij)

  * ``setup.py test`` (available when setuptools is installed) now
    runs all tests, not just the basic unit tests.
    (Jelmer Vernooij)

 BUG FIXES

  * Commit._deserialize now actually deserializes the current state rather than
    the previous one. (Yifan Zhang, issue #59)

  * Handle None elements in lists of TreeChange objects. (Alex Holmes)

  * Support cloning repositories without HEAD set.
    (D-Key, Jelmer Vernooij, issue #69)

  * Support ``MemoryRepo.get_config``. (Jelmer Vernooij)

  * In ``get_transport_and_path``, pass extra keyword arguments on to
    HttpGitClient. (Jelmer Vernooij)

0.8.5	2012-03-29

 BUG FIXES

  * Avoid use of 'with' in dulwich.index. (Jelmer Vernooij)

  * Be a little bit strict about OS behaviour in index tests.
    Should fix the tests on Debian GNU/kFreeBSD. (Jelmer Vernooij)

0.8.4	2012-03-28

 BUG FIXES

  * Options on the same line as sections in config files are now supported.
    (Jelmer Vernooij, #920553)

  * Only negotiate capabilities that are also supported by the server.
    (Rod Cloutier, Risto Kankkunen)

  * Fix parsing of invalid timezone offsets with two minus signs.
    (Jason R. Coombs, #697828)

  * Reset environment variables during tests, to avoid
    test isolation leaks reading ~/.gitconfig. (Risto Kankkunen)

 TESTS

  * $HOME is now explicitly specified for tests that use it to read
    ``~/.gitconfig``, to prevent test isolation issues.
    (Jelmer Vernooij, #920330)

 FEATURES

  * Additional arguments to get_transport_and_path are now passed
    on to the constructor of the transport. (Sam Vilain)

  * The WSGI server now transparently handles when a git client submits data
    using Content-Encoding: gzip.
    (David Blewett, Jelmer Vernooij)

  * Add dulwich.index.build_index_from_tree(). (milki)
jperkin pushed a commit that referenced this issue Mar 14, 2014
== 2.7.0 / 2013-08-03 Charlie Savage

* Do not call Ruby code during a GC cycle (Dirkjan Bussink)
* Fix thread error handling (Geoffrey Giesemann)
* Set libxml error handler when a libxml-ruby error handler is set (Geoffrey Giesemann)
* Fix tests for nil TypeErrors (Geoffrey Giesemann)
* Fix segmentation fault for issue #62.  The deregisternode function was incorrectly
  NULLing out a node's mark and free functions for nodes removed from a document tree (Charlie Savage)
* Cleanup writer code (Charlie Savage)
* Fix equality check of LibXML::XML::Error against other objects (Michał Szajbe)
* Fix XML::Writer.set_quote_char UT, wrong expected string (#63).  (julp)
* Fix potential segfault when GC occurs while creating ns from xpath (Timothy Elliott)
* Fix segmentation fault after failing to load external schema (#59).  (Clifford Heath)
jperkin pushed a commit that referenced this issue Mar 14, 2014
Incompatible Changes:
* can no longer use both `\' and `:' (didn't work anyway)

New Features:
* Handling of run-time errors (default: die) is now overridable by
  subclasses via signature_error_handler(). [github #54]
* Can now have aliased named parameters. [github #57]
* remove dependency on Devel::BeginLift [github #39]
* can now use `when' to specify default conditions [github #48]
* can use `//=' as a shortcut for `when undef' [github #45]
* can now provide `where' constraints in addition to (or instead
  of) a type [github #7]
* can now use `...' to disable further argument checking [github #49]
* can now specify more than one alternative in type unions [github #55]
* can now nest parameterized types

Bug Fixes:
* Removed experimental smartmatch warnings
* Don't require Data::Alias for named params unless you have to [github #71]
* Fixed obscure bug where an eval in Method::Signatures wouldn't
  be skipped when carp'ing (i.e. in carp_location_for()) [github #72]
* Data::Alias is only loaded when needed avoiding a threads + eval
  bug in most cases and improving compile time performance.
  [rt.cpan.org 82922, github #62]
* Compile-time errors now reporting proper line numbers. [github #61]
* Trailing commas on parameter lists are now ok. [rt.cpan.org 81364]
* Default condition of `when {}' now interpreted as `when { $_ ~~
  {} }' (avoids parse error). [github #60]

Optimizations:
* better signature parsing using PPI [github #11]

Distribution Fixes:
* Fixed failing test in 5.10.0 (uncovered by CPAN Testers)
* Fixed repo link in metadata (thanks dsteinbrunner) [github #87]
* Add M::S::Parameter to MANIFEST [github #76]
* Change representation of Infinity to work on Win32 [github #75]
* Fixed stray detritus in MANIFEST.
* Somehow my last-minute fix to the new error handler test didn't
  make it in; this will fix "Can't locate Moose.pm" errors.
* Fixed test failing on 5.10.0 as per github #59.
* Fixed subtests failing on Test::More's prior to 0.96.

Docs:
* Updated close parend problem to include quotes and a workaround
  [rt.cpan.org 85925]
* Fixed some typos (thanks dsteinbrunner) [github #88]
* Found and fixed missing parend
* Minor clarifications here and there.
* Clarified what doesn't work in Perl 5.8.
* Added Function::Parameters to See Also section.
* Updated copyright.
* documented all new features
* new ASCI-art breakdown of signature syntax
* minor tweaks and corrections

Misc:
* Rearranged so signature is now an object [github #30]
* Add hook for Travis CI [github #78]
* Failure to parse parameters will now produce a more useful error.
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 Mar 14, 2014
Changes from 2.2.1 to 2.2.2
===========================

* The `copy_args` argument of `NumExpr` function has been brought
  back.  This has been mainly necessary for compatibility with
  PyTables < 3.0, which I decided to continue to support.  Fixed #115.

* The `__nonzero__` method in `ExpressionNode` class has been
  commented out.  This is also for compatibility with PyTables < 3.0.
  See #24 for details.

* Fixed the type of some parameters in the C extension so that s390
  architecture compiles.  Fixes #116.  Thank to Antonio Valentino for
  reporting and the patch.


Changes from 2.2 to 2.2.1
=========================

* Fixes a secondary effect of "from numpy.testing import `*`", where
  division is imported now too, so only then necessary functions from
  there are imported now.  Thanks to Christoph Gohlke for the patch.

Changes from 2.1 to 2.2
=======================

* [LICENSE] Fixed a problem with the license of the
  numexpr/win32/pthread.{c,h} files emulating pthreads on Windows
  platforms.  After persmission from the original authors is granted,
  these files adopt the MIT license and can be redistributed without
  problems.  See issue #109 for details
  (https://code.google.com/p/numexpr/issues/detail?id=110).

* [ENH] Improved the algorithm to decide the initial number of threads
  to be used.  This was necessary because by default, numexpr was
  using a number of threads equal to the detected number of cores, and
  this can be just too much for moder systems where this number can be
  too high (and counterporductive for performance in many cases).
  Now, the 'NUMEXPR_NUM_THREADS' environment variable is honored, and
  in case this is not present, a maximum number of *8* threads are
  setup initially.  The new algorithm is fully described in the Users
  Guide now in the note of 'General routines' section:
  https://code.google.com/p/numexpr/wiki/UsersGuide#General_routines.
  Closes #110.

* [ENH] numexpr.test() returns `TestResult` instead of None now.
  Closes #111.

* [FIX] Modulus with zero with integers no longer crashes the
  interpreter.  It nows puts a zero in the result.  Fixes #107.

* [API CLEAN] Removed `copy_args` argument of `evaluate`.  This should
  only be used by old versions of PyTables (< 3.0).

* [DOC] Documented the `optimization` and `truediv` flags of
  `evaluate` in Users Guide
  (https://code.google.com/p/numexpr/wiki/UsersGuide).

Changes from 2.0.1 to 2.1
===========================

* Dropped compatibility with Python < 2.6.

* Improve compatibiity with Python 3:

  - switch from PyString to PyBytes API (requires Python >= 2.6).
  - fixed incompatibilities regarding the int/long API
  - use the Py_TYPE macro
  - use the PyVarObject_HEAD_INIT macro instead of PyObject_HEAD_INIT

* Fixed several issues with different platforms not supporting
  multithreading or subprocess properly (see tickets #75 and #77).

* Now, when trying to use pure Python boolean operators, 'and',
  'or' and 'not', an error is issued suggesting that '&', '|' and
  '~' should be used instead (fixes #24).

Changes from 2.0 to 2.0.1
=========================

* Added compatibility with Python 2.5 (2.4 is definitely not supported
  anymore).

* `numexpr.evaluate` is fully documented now, in particular the new
  `out`, `order` and `casting` parameters.

* Reduction operations are fully documented now.

* Negative axis in reductions are not supported (they have never been
  actually), and a `ValueError` will be raised if they are used.


Changes from 1.x series to 2.0
==============================

- Added support for the new iterator object in NumPy 1.6 and later.

  This allows for better performance with operations that implies
  broadcast operations, fortran-ordered or non-native byte orderings.
  Performance for other scenarios is preserved (except for very small
  arrays).

- Division in numexpr is consistent now with Python/NumPy.  Fixes #22
  and #58.

- Constants like "2." or "2.0" must be evaluated as float, not
  integer.  Fixes #59.

- `evaluate()` function has received a new parameter `out` for storing
  the result in already allocated arrays.  This is very useful when
  dealing with large arrays, and a allocating new space for keeping
  the result is not acceptable.  Closes #56.

- Maximum number of threads raised from 256 to 4096.  Machines with a
  higher number of cores will still be able to import numexpr, but
  limited to 4096 (which is an absurdly high number already).
jperkin pushed a commit that referenced this issue Mar 17, 2014
=== 2.9.4 / 2014-02-10

* Bug fixes
  * Improve proxy escaping from 2.9.2.  Pull request #59 by Mislav Marohnić.

=== 2.9.3 / 2014-02-06

* Bug fixes
  * Fix breakage in 2.9.2 for users without proxies.  Pull request #56 by
    Yoshihiro TAKAHARA (merged), #57 by ChuckLin, #58 by Kenny Meyer.

=== 2.9.2 / 2014-02-05

* Bug fixes
  * Special characters in proxy passwords are now handled correctly.  Issue
    #48 by Mislav Marohnić.  Pull request #54 by Juha Kajava

=== 2.9.1 / 2014-01-22

* Bug fixes
  * Added license to gemspec.  Issue #47 by Benjamin Fleischer
  * Set Net::HTTP#keep_alive_timeout when supported by ruby.  Pull request #53
    by Dylan Thacker-Smith.
  * The backtrace is preserved for errors in #reset to help with debugging.
    Issue #41 by Andrew Cholakian.
jperkin pushed a commit that referenced this issue Mar 18, 2014
=== 2.9.4 / 2014-02-10

* Bug fixes
  * Improve proxy escaping from 2.9.2.  Pull request #59 by Mislav Marohnić.

=== 2.9.3 / 2014-02-06

* Bug fixes
  * Fix breakage in 2.9.2 for users without proxies.  Pull request #56 by
    Yoshihiro TAKAHARA (merged), #57 by ChuckLin, #58 by Kenny Meyer.

=== 2.9.2 / 2014-02-05

* Bug fixes
  * Special characters in proxy passwords are now handled correctly.  Issue
    #48 by Mislav Marohnić.  Pull request #54 by Juha Kajava

=== 2.9.1 / 2014-01-22

* Bug fixes
  * Added license to gemspec.  Issue #47 by Benjamin Fleischer
  * Set Net::HTTP#keep_alive_timeout when supported by ruby.  Pull request #53
    by Dylan Thacker-Smith.
  * The backtrace is preserved for errors in #reset to help with debugging.
    Issue #41 by Andrew Cholakian.
jperkin pushed a commit that referenced this issue Apr 15, 2014
        Feature request #44: Allow override of the From: field on forensic
                reports.
        Feature request #45: Log the host portion of ignored
                Authentication-Results fields at "debug" level.
        Feature request #56: Add "RequiredHeaders" setting to enforce syntax
                checks against a message and reject those that don't comply.
        Feature request #65: Add "ForensicReportsBcc".
        Fix bug #46: Charitable tweak to a couple of log messages.
        Fix bug #55: The "SoftwareHeader" setting wasn't being set properly.
        Fix bug #58: The "smtp.mailfrom" part of an Authentication-Results
                field might contain only a domain name.
        Fix bug #60: Default AuthservID to the name provided by the MTA,
                not the local host name, which is consistent with what
                OpenDKIM does.
        Merge request #2: Validate external recipients before adding them to
                report recipient lists.
        Record all DKIM results to the history file, rather than only
                passing results.
        BUILD: Fix bug #50: Check libbsd for strlcat() and strlcpy() so we
                don't make our own when we don't need to.
        CONTRIB: Fix bug #52: Update path to draft RFC in contrib/spec.
        CONTRIB: Fix bug #59: Allow database name, userid and password to be
                specified on the command line rather than hard-coding them.
        DOCS: Fix bug #48: Add a libopendmarc use overview page.
        DOCS: Fix bug #53: Add man page for opendmarc-importstats.
        REPORTS: Fix bug #51: Check status after every phase of SMTP when
                sending reports.
        REPORTS: Fix DKIM status importing.
        LIBOPENDMARC: Fix bug #68: Fix strict/relaxed checking logic when
                a public suffix list is available.
        LIBOPENDMARC: Fixed a bug where in some instances the fetch of the
                orgainizational domain could wrongly return the from domain.
        LIBOPENDMARC: Fix call to missing function.
jperkin pushed a commit that referenced this issue Aug 12, 2014
2014-07-02 version 0.5.9:

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

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

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

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

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

- Issue #89: Make six use absolute imports.

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

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

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

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

- Issue #80: Add six.urllib.request.splituser mapping.
jperkin pushed a commit that referenced this issue Apr 3, 2015
managers to love. From the repo:

Merge pull request #59
Merge pull request #50
Encourage running unittests on py3 as well
Fix release notes __all__ formatting
jperkin pushed a commit that referenced this issue Apr 16, 2015
Add test target

Upstream changes:
2015-03-14 -- 1.3.6

    * Class.slots raises NotImplementedError for old style classes.
      Closes issue #67.

    * Add a new option to AstroidManager, `optimize_ast`, which
      controls if peephole optimizer should be enabled or not.
      This prevents a regression, where the visit_binop method
      wasn't called anymore with astroid 1.3.5, due to the differences
      in the resulting AST. Closes issue #82.


2015-03-11 -- 1.3.5

    * Add the ability to optimize small ast subtrees,
      with the first use in the optimization of multiple
      BinOp nodes. This removes recursivity in the rebuilder
      when dealing with a lot of small strings joined by the
      addition operator. Closes issue #59.

    * Obtain the methods for the nose brain tip through an
      unittest.TestCase instance. Closes Pylint issue #457.

    * Fix a crash which occurred when a class was the ancestor
      of itself. Closes issue #78.

    * Improve the scope_lookup method for Classes regarding qualified
      objects, with an attribute name exactly as one provided in the
      class itself.

      For example, a class containing an attribute 'first',
      which was also an import and which had, as a base, a qualified name
      or a Gettattr node, in the form 'module.first', then Pylint would
      have inferred the `first` name as the function from the Class,
      not the import. Closes Pylint issue #466.

    * Implement the assigned_stmts operation for Starred nodes,
      which was omitted when support for Python 3 was added in astroid.
      Closes issue #36.


2015-01-17 -- 1.3.4

    * Get the first element from the method list when obtaining
      the functions from nose.tools.trivial. Closes Pylint issue #448.

2015-01-16 -- 1.3.3

    * Restore file_stream to a property, but deprecate it in favour of
      the newly added method Module.stream. By using a method instead of a
      property, it will be easier to properly close the file right
      after it is used, which will ensure that no file descriptors are
      leaked. Until now, due to the fact that a module was cached,
      it was not possible to close the file_stream anywhere.
      file_stream will start emitting PendingDeprecationWarnings in
      astroid 1.4, DeprecationWarnings in astroid 1.5 and it will
      be finally removed in astroid 1.6.

    * Add inference tips for 'tuple', 'list', 'dict' and 'set' builtins.

    * Add brain definition for most string and unicode methods

    * Changed the API for Class.slots. It returns None when the class
      doesn't define any slots. Previously, for both the cases where
      the class didn't have slots defined and when it had an empty list
      of slots, Class.slots returned an empty list.

    * Add a new method to Class nodes, 'mro', for obtaining the
      the method resolution order of the class.

    * Add brain tips for six.moves. Closes issue #63.

    * Improve the detection for functions decorated with decorators
      which returns static or class methods.

    * .slots() can contain unicode strings on Python 2.

    * Add inference tips for nose.tools.


2014-11-22 -- 1.3.2

    * Fixed a crash with invalid subscript index.

    * Implement proper base class semantics for Python 3, where
      every class derives from object.

    * Allow more fine-grained control over C extension loading
      in the manager.

2014-11-21 -- 1.3.1

    * Fixed a crash issue with the pytest brain module.

2014-11-20 -- 1.3.0

    * Fix a maximum recursion error occured during the inference,
      where statements with the same name weren't filtered properly.
      Closes pylint issue #295.

    * Check that EmptyNode has an underlying object in
      EmptyNode.has_underlying_object.

    * Simplify the understanding of enum members.

    * Fix an infinite loop with decorator call chain inference,
      where the decorator returns itself. Closes issue #50.

    * Various speed improvements. Patch by Alex Munroe.

    * Add pytest brain plugin. Patch by Robbie Coomber.

    * Support for Python versions < 2.7 has been dropped, and the
      source has been made compatible with Python 2 and 3. Running
      2to3 on installation for Python 3 is not needed anymore.

    * astroid now depends on six.

    * modutils._module_file opens __init__.py in binary mode.
      Closes issues #51 and #13.

    * Only C extensions from trusted sources (the standard library)
      are loaded into the examining Python process to build an AST
      from the live module.

    * Path names on case-insensitive filesystems are now properly
      handled. This fixes the stdlib detection code on Windows.

    * Metaclass-generating functions like six.with_metaclass
      are now supported via some explicit detection code.

    * astroid.register_module_extender has been added to generalize
      the support for module extenders as used by many brain plugins.

    * brain plugins can now register hooks to handle failed imports,
      as done by the gobject-introspection plugin.

    * The modules have been moved to a separate package directory,
      `setup.py develop` now works correctly.


2014-08-24 -- 1.2.1

    * Fix a crash occurred when inferring decorator call chain.
      Closes issue #42.

    * Set the parent of vararg and kwarg nodes when inferring them.
      Closes issue #43.

    * namedtuple inference knows about '_fields' attribute.

    * enum members knows about the methods from the enum class.

    * Name inference will lookup in the parent function
      of the current scope, in case searching in the current scope
      fails.

    * Inference of the functional form of the enums takes into
      consideration the various inputs that enums accepts.

    * The inference engine handles binary operations (add, mul etc.)
      between instances.

    * Fix an infinite loop in the inference, by returning a copy
      of instance attributes, when calling 'instance_attr'.
      Closes issue #34 (patch by Emile Anclin).

    * Don't crash when trying to infer unbound object.__new__ call.
      Closes issue #11.

2014-07-25  --  1.2.0

    * Function nodes can detect decorator call chain and see if they are
      decorated with builtin descriptors (`classmethod` and `staticmethod`).

    * infer_call_result called on a subtype of the builtin type will now
      return a new `Class` rather than an `Instance`.

    * `Class.metaclass()` now handles module-level __metaclass__ declaration
      on python 2, and no longer looks at the __metaclass__ class attribute on
      python 3.

    * Function nodes can detect if they are decorated with subclasses
      of builtin descriptors when determining their type
      (`classmethod` and `staticmethod`).

    * Add `slots` method to `Class` nodes, for retrieving
      the list of valid slots it defines.

    * Expose function annotation to astroid: `Arguments` node
      exposes 'varargannotation', 'kwargannotation' and 'annotations'
      attributes, while `Function` node has the 'returns' attribute.

    * Backported most of the logilab.common.modutils module there, as
      most things there are for pylint/astroid only and we want to be
      able to fix them without requiring a new logilab.common release

    * Fix names grabed using wildcard import in "absolute import mode"
      (ie with absolute_import activated from the __future__ or with
      python 3). Fix pylint issue #58.

    * Add support in pylint-brain for understanding enum classes.

2014-04-30  --  1.1.1
    * `Class.metaclass()` looks in ancestors when the current class
      does not define explicitly a metaclass.

    * Do not cache modules if a module with the same qname is already
      known, and only return cached modules if both name and filepath
      match. Fixes pylint Bitbucket issue #136.

2014-04-18  --  1.1.0
    * All class nodes are marked as new style classes for Py3k.

    * Add a `metaclass` function to `Class` nodes to
      retrieve their metaclass.

    * Add a new YieldFrom node.

    * Add support for inferring arguments to namedtuple invocations.

    * Make sure that objects returned for namedtuple
      inference have parents.

    * Don't crash when inferring nodes from `with` clauses
      with multiple context managers. Closes #18.

    * Don't crash when a class has some __call__ method that is not
      inferable. Closes #17.

    * Unwrap instances found in `.ancestors()`, by using their _proxied
      class.
jperkin pushed a commit that referenced this issue Apr 20, 2015
* Feature #56: Treat '-' file parameter as stdin.
* Feature #57: Retain escaping of html except within code or pre tags.
* Feature #59: Write image tags with height and width attrs as raw
  html to retain dimensions
jperkin pushed a commit that referenced this issue Apr 24, 2015
* Feature #56: Treat '-' file parameter as stdin.
* Feature #57: Retain escaping of html except within code or pre tags.
* Feature #59: Write image tags with height and width attrs as raw
  html to retain dimensions
jperkin pushed a commit that referenced this issue Aug 30, 2016
Add ALTERNATIVES file.

v0.10.0: 2016.05.02
- New Action birthday: list birthdays, sorted by month and day
- option -p, --pretty was renamed to -p, --parsable: So, the pretty formatted email or
  phone number table is the default now. Please adapt the configuration files of potential email and
  phone applications (e.g.: mutt email -p %s)

v0.11.0: 2016.07.17
- Made khard python3 compatible (#59)
- Enhanced read and write support for vcard versions 3.0 and 4.0
- user input parser:
    - Improved robustness and error handling
    - Fixed org attribute parsing (#57)
    - Support for private vcard extensions (#51)
- New action birthdays (#64)
- New options:
    --display to display contacts by first or last name (#66)
    --search-in-source-files to speed up program initialization (#75)
    --skip-unparsable to skip unparsable vcard files (#75)
    --strict-search to narrow the contact search to the name field
- Added some aliases for program actions (#65)
- Removed davcontroler module due to the python3 incompatibility (script moved into the misc folder)
- Updated zsh completion function and khards example config file

v0.11.1: 2016.07.31
- Workaround for the photo attribute parsing issue of vobject library 0.9.2 (#80)
- setup.py: try to convert readme file into restructured text format (pypi requirement) and specify encoding explicitly (#83)
jperkin pushed a commit that referenced this issue Sep 30, 2016
Version 1.12.0 (29 Sep 2016)

Daniel Stenberg (29 Sep 2016)
- RELEASE-NOTES: 1.12.0

- [David Drysdale brought this change]

  ares-test-misc: test ares_create_query with escaped trailing dot

- ares_create_query: avoid single-byte buffer overwrite

  ... when the name ends with an escaped dot.

  CVE-2016-5180

  Bug: https://c-ares.haxx.se/adv_20160929.html

- ares_library_initialized.3: added

- make: bump CARES_VERSION_INFO for release

David Drysdale (29 Sep 2016)
- man: update ares_init_options.3

Daniel Stenberg (29 Sep 2016)
- ares_library_init.3: corrected the ares_library_init_mem proto

- README.md: remove space from link

- README: link to the correct c-ares badge!

  Reported-by: David Hotham

  Fixes #63

- docs: minor formatting edits

- ares_destroy.3: formatting polish

- ares_init.3: split the init docs into two separate man pages

- SECURITY: point to the vulnerabilities page now

- RELEASE-NOTES: synced with daa7235b1a5

- ares_create_query.3: edit language

  Tried to make the man page more readable.

David Drysdale (26 Sep 2016)
- test: fix gMock to work with gcc >= 6.x

  Taken from:
  google/googletest#705 (comment)

Daniel Stenberg (26 Sep 2016)
- [Brad House brought this change]

  headers: remove checks for and defines of variable sizes

  ... they're not really used and by avoiding them in the ares_build.h
  output we make the public header less dependent on data sizes.

David Drysdale (24 Sep 2016)
- api: add ARES_OPT_NOROTATE optmask value

  Fix up a couple of problems with configuring whether c-ares rotates
  between different name servers between requests.

  Firstly, ares_save_options() returns (in *optmask) the value of
  (channel->optmask & ARES_OPT_ROTATE), which doesn't necessarily
  indicate whether the channel is or is not actually doing rotation.
  This can be confusing/incorrect if:
   - the channel was originally configured without ARES_OPT_ROTATE
     (so it appears that the channel is not rotating)
   - the /etc/resolv.conf file includes the 'rotate' option
     (so the channel is actually performing rotation).

  Secondly, it is not possible to reliably configure a channel
  to not-rotate; leaving off ARES_OPT_ROTATE is not enough, since
  a 'rotate' option in /etc/resolv.conf will turn it on again.

  Therefore:
   - add an ARES_OPT_NOROTATE optmask value to allow explicit
     configuration of no-rotate behaviour
   - in ares_save_options(), report the value of channel->rotate
     as exactly one of (optmask & ARES_OPT_ROTATE) or
     (optmask & ARES_OPT_NOROTATE).

  In terms of back-compatibility:
   - existing apps that set ARES_OPT_ROTATE will continue to rotate,
     and to have ARES_OPT_ROTATE reported back from ares_save_options()
   - existing apps that don't set ARES_OPT_ROTATE will continue to
     use local config/defaults to decide whether to rotate, and will
     now get ARES_OPT_ROTATE or ARES_OPT_NOROTATE reported back from
     ares_save_options() rather than 0.

- ares_init_options: only propagate init failures from options

  Commit 46bb820be3a8 ("ares_init_options: don't lose init failure")
  changed init behaviour so that earlier errors in initialization
  weren't lost.  In particular, if the user passes in specific
  options but they are not applied (e.g. because of an allocation
  failure), that failure needs to be reported back to the user; this
  also applies when duplicating a channel with ares_dup().

  However, other initialization failures can be ignored and
  overridden -- in particular, if init_by_resolv_conf() or
  init_by_environment() fail, then falling back to default values
  is OK.

  So only preserve failures from the init_by_options() stage, not
  from all initialization stages.

  Fixes issue 60.

- test: Force reinstall of libtool on OSX

  Travis build environment appears to have changed.

- test: Add valgrind build variant

- test: Add null pointer to gtest args

  GoogleTest assumes that there is a null pointer in argv[argc],
  so make it look like that. Without this change, tests run with
  command-line arguments get memory errors under valgrind/ASAN.

Daniel Stenberg (21 Aug 2016)
- AUTHOR: maybe gitgub isn't really an author =)

- AUTHORS: added contributors from the git log

- LICENSE.md: add a stand-alone license file

  Just the MIT license used in the top the source files moved out to a
  stand-alone file for easier reference and discovery.

- README: added "CII best practices" badge

- SECURITY.md: suggested "security process" for the project

David Drysdale (17 Aug 2016)
- test: Add Clang static analysis build to Travis

  Run scan-build over the library source code, but skip the
  tests.  Needs a later Clang install in Travis

- test: more info on how to run fuzz testing

- test: make fuzzer driver code C not C++

- test: fuzzer mode for AFL's persistent mode

  When fuzzing with AFL, if the LLVM-based instrumentation is
  used (via the afl-clang-fast wrapper), then it is possible to
  have a single execution of the fuzzer program iterate multiple
  times over the fuzzing entrypoint (similar to libFuzzer's normal
  mode of execution) with different data.  This is much (e.g. 10x)
  faster.

  Add code to support this, by checking whether __AFL_LOOP is
  defined at compile-time.

  Also, shift the code to effectively be C rather than C++.

- test: simplify deps for fuzzer entrypoint

  No need to depend on the rest of the test code (ares-test.h) for
  the fuzzer entrypoint; this makes the entrypoint slightly simpler
  to build with LLVM's libFuzzer.

  Also shift the code to effectively be C rather than C++

- test: disable MinGW tests

  The test binary built in the MinGW build is failing for some
  reason.  It works for me when I build locally, so I'm guessing
  it's down to some sort of AppVeyor environment issue.

  Disable for now.

Daniel Stenberg (16 Aug 2016)
- read_tcp_data: remove superfluous NULL check

  CID 56884 by Coverity. The pointer is already derefenced before this
  point so it can't be NULL here anyway.

- web: http => https

GitHub (20 Jul 2016)
- [David Drysdale brought this change]

  Merge pull request #59 from fuze/master

  Update msvc_ver.inc for VS2015 Update 3

- [Chris Araman brought this change]

  Update msvc_ver.inc

  support Visual Studio 2015 Update 3

David Drysdale (2 May 2016)
- Fix trailing comment for #endif

Daniel Stenberg (30 Apr 2016)
- email: use Gisle's "new" address

David Drysdale (18 Apr 2016)
- test: drop superfluous fuzz inputs

  Where there are multiple fuzz input files that only differ in
  the first two bytes (the query ID), just keep the first such
  file.

svante karlsson (15 Apr 2016)
- Update msvc_ver.inc

  support Visual Studio 2015 Update 2

David Drysdale (31 Mar 2016)
- test: Run fuzzcheck.sh in Travis build

- test: add fuzzing check script to tests

  Add a test script that runs the fuzzing command over the
  corpus of DNS packets.  This doesn't actually do any fuzzing
  (it just runs them as inputs without generating any variations)
  but it does ensure that the fuzzing entrypoint is still working.

- test: allow multiple files in aresfuzz command line

  If no arguments are specified, use stdin as input.
  Otherwise treat each argument as a filename and feed
  its contents to the fuzz entrypoint.

- test: Add corpus of DNS packets

  For fuzz testing it is useful to start from a corpus of valid
  packets, so fill out the test/fuzzinput/ directory with a bunch
  of inputs.

  These packets were generated by temporarily modifying the c-ares
  process_answer() function to save off any incoming response messages.

- test: Add utility to show DNS packet from file

- [nordsturm brought this change]

  Fix nsort initialization

  Author: Alexander Drachevskiy
  http://c-ares.haxx.se/mail/c-ares-archive-2014-07/0004.shtml
  http://c-ares.haxx.se/mail/c-ares-archive-2014-07/0014.shtml

- test: Check setting nsort=0 option is respected

- test: Update fuzzing function prototype

  libFuzzer changed expected return type from void to int
  in LLVM 3.8.

- Explicitly clear struct servent before use

  On a build where MSAN has been manually set up (which involves
  using an MSAN-instrumented version of the standard C++ library, see
  https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo)
  there's a warning about use of uninitialized memory here.  It
  might be a false positive, but the fix is trivial so include it.

- test: for AF_UNSPEC, return CNAME only for AAAA, but valid A record

  Also shuffle expected responses rsp6/rsp4 into the order they will occur.

- [Chris Araman brought this change]

  msvc_ver.inc: support Visual Studio 2015 Update 1

- build: commonize MSVC version detection

  Remove the need to copy/paste version number mapping between
  Makefile.msvc and test/Makefile.msvc.

- test: Use different name in live test

- test: Only pass unused args to GoogleTest

- ahost.c: add cast to fix C++ compile

  If ahost.c is force-compiled as C++ the missing cast from
  (void *) to (char **) is problematic.

- ares_library_cleanup: reset ares_realloc too

  Otherwise a subsequent use of the library might use a previous
  incarnation's realloc() implementation.

Daniel Stenberg (9 Mar 2016)
- [Brad House brought this change]

  configure: check if tests can get built before enabled

  The current approach for disabling tests is not a good solution because
  it forces you to pass --disable-tests, rather than auto-detect if your
  system can support the tests in the first place.  Many (most?) systems
  do not have C++11.  This also causes issues when chain-building c-ares,
  the hosting system needs to be updated to support passing this
  additional flag if necessary, it doesn't seem reasonable to add this
  requirement which breaks compatibility.

  This change auto-detects if the system can build the tests and
  automatically disable them if it cannot.  If you pass --enable-tests to
  configure and the system cannot build them either due to lack of system
  support, or because cross-compilation is being used, it will throw an
  appropriate error since the user indicated they really did want the
  tests.

David Drysdale (3 Mar 2016)
- [Viktor Szakats brought this change]

  Makefile.m32: add support for CROSSPREFIX

- [Viktor Szakats brought this change]

  Makefile.m32: add support for extra flags

  Allow specification of CARES_{LD,C}FLAG_EXTRAS envvars
  for mingw

- test: Build with MinGW on AppVeyor

- test: avoid in6addr_* constants

  These aren't available on MinGW, so use explicit addresses instead.

- test: add missing #includes for dns-proto.cc

- [Gregor Jasny brought this change]

  Fix man page typos detected by Lintian

Daniel Stenberg (19 Feb 2016)
- configure: acknowledge --disable-tests

  Fixes #44

- AUTHORS: added contributors from the 1.11.0 release

- bump: start working on the next version

Version 1.11.0 (19 Feb 2016)

Daniel Stenberg (19 Feb 2016)
- RELEASE-NOTES: final edits for 1.11.0

David Drysdale (15 Feb 2016)
- ares_dup.3: remove mention of nonexistent function

  ares_dup_options() doesn't exist, so don't document it.

- test: skip repeated build steps

  Top-level buildconf/configure now triggers for the
  test/ subdir too, so don't need to do explicitly.

- test: namespaces unavailable when cross-compiling

Daniel Stenberg (13 Feb 2016)
- configure: only run configure in test when NOT cross-compiling

  ... as the tests won't run cross-compiled anyway

David Drysdale (13 Feb 2016)
- test: prefer ON_CALL to EXPECT_CALL to reduce flakes

  For UDP tests, there's a chance of a retry.  EXPECT_CALL only
  expects a single request to arrive at the server; ON_CALL allows
  for a UDP retry and repeats the same answer.

  Note that ON_CALL and EXPECT_CALL can't be mixed in the same
  test, and that tests that have a varied sequence of responses
  for the same repeated request still have to use EXPECT_CALL.

Daniel Stenberg (13 Feb 2016)
- configure: run configure in 'test' too

  Having the test dir completely stand-alone causes too many issues for
  users and devs. It still needs to be built specifically.

- configure: build silently by default

- buildconf: run test/buildconf too if present

- test/configure: build silently by default

- [Gregor Jasny brought this change]

  dist: Distribute README.md

  Closes #42

Version 1.11.0 (11 Feb 2016)

Daniel Stenberg (11 Feb 2016)
- Makefile.am: distribute the test dir too

- RELEASE-NOTES: synced with 385582bd14b68a

- [Nicolas \"Pixel\" Noble brought this change]

  ares_win32_init: make LoadLibrary work when using UNICODE too

  Closes #17

David Drysdale (11 Feb 2016)
- Use "resolve" as synonym of "dns" in nsswitch.conf

  Modern Linux systems may have libnss_resolve from systemd as the
  resolver, which is then configured in /etc/nsswitch.conf with
  the "resolve" keyword rather than "dns".

  Fixes #33

- ares_set_socket_callback: make manpage match code

  The code in ares_process.c that invokes the socket creation/connection
  callback only checks for rc < 0, not for standard ares error codes.

- Merge pull request #36 from AGWA-forks/master

  Add ares_set_socket_configure_callback()

- test: Update init tests to match behaviour

  Unreadable config files are now treated the same way
  as absent config files.

- [Fedor Indutny brought this change]

  Ignore `fopen` errors to use default values

  After 46bb820be3a83520e70e6c5f0c5133253fcd69cd `init_by_resolv_conf`
  errors are no longer swallowed in `ares_init_options`. This has exposed
  a previously unknown bug in `lookups` initialization code.

  If there is no lookup configuration in `resolv.conf`,
  `init_by_resolv_conf` will attempt to read it from other files available
  on the system. However, some of these files may have restricted
  permissions (like `600`), which will lead to `EACCESS` errno, which in
  turn is handled like a fatal error by `init_by_resolv_conf`.

  However, it sounds illogical that this error should be handled as a
  fatal. There is a `init_by_defaults` call that overrides `lookups` with
  default value, and certainly possible absence of lookup information is
  the reason why this function exists in a first place!

  I suggest handling any `fopen` errors as non-fatal ones, allowing to
  pick up the `lookups` value from different config files, or to pick up
  default value.

Andrew Ayer (9 Feb 2016)
- Document callback type in man page for ares_set_socket_callback

- Add ares_set_socket_configure_callback()

  This function sets a callback that is invoked after the socket is
  created, but before the connection is established.  This is an ideal
  time to customize various socket options.

David Drysdale (9 Feb 2016)
- test: ares_set_socket_callback failure behaviour

- test: Check ares_parse_txt_reply_ext() entrypoint

- [Fedor Indutny brought this change]

  txt: introduce `ares_parse_txt_reply_ext`

  Introduce `ares_txt_ext` structure with an extra `record_start`
  field, which indicates a start of a new TXT record, thus allowing to
  differentiate the chunks in the same record, from a chunks in a
  different record.

  Introduce a new API method: `ares_parse_txt_reply_ext` that works with
  this kind of struct.

- doc: Update missed repo references

- doc: Update docs on contributing

- test: Run command line tools in Travis

  Do a quick execution of each of the command line tools
  in the continuous integration build, so that any (say)
  sanitizer failures show up.

- acountry: drop inert test

  If ver_1 is true, then z0 and z1 must both be 'z', and so
  (z0 != 'z' && z1 != 'z') can never be true.

  CID 56879, pointed out by Coverity.

- doc: update badge locations to master repo

- test: Enable maintainer mode + debug in Travis

- test: Add an iOS build target

- test: Ignore SIGPIPE in tests

- test: More initialization tests

- test: Improve containerized test mechanism

  Aim is to ensure that code coverage information can escape the
  container.  To do this:
   - Enter a new mount namespace too, so that we can...
   - Bind mount the expected source directory into the container
   - Share memory with the sub-process so coverage information is
     shared too.

- test: Make contained tests easier to write

- test: Add framework for containerized testing

  On Linux we can potentially use user and UTS namespaces to run  a test
  in a pseudo-container with:
   - arbitrary filesystem (e.g. /etc/resolv.conf, /etc/nsswitch.conf, /etc/hosts)
   - arbitrary hostname/domainname.

  Include a first pass at the framework code to allow this, along with a
  first test case that uses the container.

- test: Use a longer timeout for less flakiness

  Having occasional test failures from timeout before multiple
  queries can complete, so up the default timeout for the test
  from 100ms to 1500ms.

- test: Make failure tests more robust

  Different platforms will do different numbers of allocations
  in the processing of a given API call; just check that the
  return code is either success or ENOMEM, and free off any
  returned state in the former case.

  Also cope with ECONNREFUSED as well as ENOTFOUND.

- test: Get test code building under Windows

   - Initial nmake file based off library nmake file
   - Cast socket call arguments to (char *)
   - Use wrapper sclose() that maps to closesocket() or close()
   - Build a config.h indicating presence of headers
   - Conditionally include netdb.h
   - Remove unnecessary include of sys/socket.h
   - Force longer bitmask for allocation failure tracking
   - Call WSAStartup() / WSACleanup() in main()
   - Set TCP_NODELAY for mock server
   - Turn on tests in AppVeyor build

- test: Disable tests that manipulate env on Windows

- test: Move file lists into Makefile.inc

  In preparation for a Win32 build of the test suite.

- test: Add a simple multi-server test

  Check rotate option does something

- test: Allow for multiple mock servers

   - Update the MockServer to allow separate specification of
     UDP and TCP ports
   - Have an array of mock servers listening on consecutive
     sets of ports.
   - Rename Process(fd) to ProcessFD(fd) to avoid confusion.
   - Initialize channel by using the new ares_set_servers_ports()
     entrypoint, so multiple ports on the same loopback address
     can be used.

- test: Update test for set/get_servers variants

  Ports are significant in the _ports_ variant functions, so update test to cope.

- test: Make GetNameServers() utility function port-aware

  Also make it generally available.

- test: more testing, including of internal static functions

- test: more tests, especially fallback processing

   - Make mock server listen on UDP + TCP in parallel.
   - Test UDP->TCP fallback on truncation
   - Test EDNS->no-EDNS fallback
   - Test some environment init options
   - Test nonsense reply

  test: short response

- test: more tests, particularly of initialization

- test: Run mock tests over both TCP and UDP

  With the exception of a few tests that make use of the timed
  retry aspect of UDP.

- test: Run mock tests over both IPv4 and IPv6

- test: Add more tests for edge cases

- test: more nooks and crannies of pton functions

- test: More tests for PTR parsing

- test: Use of HOSTALIAS environment variable

- test: Add RAII utility classes for testing

   - TempFile holds specific contents
   - EnvValue sets an environment variable

- test: More search domain scenarios

- test: Remove duplicate flags from Makefile.am

- test: Make test code leak-free

- test: More tests

   - test use of sortlist
   - test gethostbyname(AF_UNSPEC)

- test: Test ares_gethostbyname_file()

- test: Add more tests of ares_getnameinfo()

- test: Tweak tests, add alloc failure test

- test: Test init with options

- test: More tests

   - ares_inet_net_pton() variants
   - ares_getsock() variants

- test: Expose ProcessWork() function

- test: More parsing tests

  Including:
   - Split each parse function test set out into separate files.
   - Add an allocation failure test for each parsing function.
   - Add error check test for each parsing function.

- test: Add various additional tests

- test: More tests

  Include tests of internal functions, based on the value of the
  CARES_SYMBOL_HIDING macro; need to configure the library with
  --disable-symbol-hiding to enable these tests.

- test: Allow command line override of mock server port

- test: Add README.md documentation

- test: Temporarily avoid latest Python requests package

  Currently get error from Travis on this install step, and downgrading one
  version appears to fix the problem.

  "Could not find any downloads that satisfy the requirement pyOpenSSL>=0.13
  (from requests[security])"

- test: Add AppVeyor config file for Windows build

- test: Add configuration for a Travis build

  Cover Linux & OSX on the container infrastructure, but install
  a later G++ to satisfy the tests' need for C++11.

  Use a build matrix to include a variety of build variants:
   - ASAN
   - UBSAN
   - LSAN
   - Coverage via coveralls.io

  test: invoke ASAN and coverage in Travis build

  Also shift to use explicit build matrix

  test: Use coveralls.io for coverage tracking

  test: Add a build with UBSAN

  Also expand and re-order the setting of environment variables
  for easier modification.

  test: Add LSAN build to Travis config

- test: Add initial unit tests for c-ares library

  The tests are written in C++11, using the GoogleTest and GoogleMock
  frameworks.  They have their own independent autoconf setup, so that
  users of the library need not have a C++ compiler just to get c-ares
  working (however, the test/configure.ac file does assume the use of
  a shared top-level m4/ directory).  However, this autoconf setup has
  only been tested on Linux and OSX so far.

  Run with "./arestest", or "./arestest -v" to see extra debug info.
  The GoogleTest options for running specific tests are also
  available (e.g. "./arestest --gtest_filter=*Live*").

  The tests are nowhere near complete yet (currently hitting around
  60% coverage as reported by gcov), but they do include examples
  of a few different styles of testing:

   - There are live tests (ares-test-live.cc), which assume that the
     current machine has a valid DNS setup and connection to the
     internet; these tests issue queries for real domains but don't
     particularly check what gets returned.  The tests will fail on
     an offline machine.

   - There a few mock tests (ares-test-mock.cc) that set up a fake DNS
     server and inject its port into the c-ares library configuration.
     These tests allow specific response messages to be crafted and
     injected, and so are likely to be used for many more tests in
     future.

      - To make this generation/injection easier, the dns-proto.h file
        includes C++ helper classes for building DNS packets.

   - Other library entrypoints that don't require network activity
     (e.g. ares_parse_*_reply) are tested directly.

   - There are few tests of library-internal functions that are not
     normally visible to API users (in ares-test-internal.cc).

   - A couple of the tests use a helper method of the test fixture to
     inject memory allocation failures, using the earlier change to the
     library to allow override of malloc/realloc/free.

   - There is also an entrypoint to allow Clang's libfuzzer to drive
     the packet parsing code in ares_parse_*_reply, together with a
     standalone wrapper for it (./aresfuzz) to allow use of afl-fuzz
     for further fuzz testing.

- test: Add local copy of GoogleMock/GoogleTest 1.7.0

  Don't check in gtest/m4 files, as they are unused and interfere
  with the top-level configure process.

- doc: Show build badges in README.md

  Note that these URLs will need to be updated if/when the test branch
  gets pulled into the master repo/branch.

- doc: Convert README to README.md

  Gives better display on GitHub

- doc: Update in preparation for next release

  Assume 1.11.0 is next (as there are various API additions).
  Also add myself to AUTHORS.

- build: Allow header compilation by Windows C++ compiler

- build: Expose whether symbol hiding is on

  Adding the CARES_SYMBOL_HIDING definition allows the test suite to
  detect whether internal symbols are available or not.

- build: Add autoconf macros for C++11 code using pthreads

  Pull in testing macros from the GNU autoconf archive to allow
  configure scripts to test for and setup use of a C++11 compiler
  (AX_CXX_COMPILE_STDCXX_11) and the pthreads library (AX_PTHREAD).

  Note that these macros are not used by the main library autoconf,
  just by the tests (which share the same m4/ directory).

- build: Add a code coverage option

  Configure with:
    ./configure --enable-code-coverage
  Show coverage output with:
    make code-coverage-capture

  Built on m4/ax_code_coverage.m4 from the GNU autoconf archive
  to provide the macros to check for presence of gcov + lcov;
  upstream macro modified to:
   - Remove use of $(AM_DEFAULT_VERBOSITY) , as earlier versions of
     autoconf (such as the one used by default on Travis) do not have this.
   - Rather than automatically defining CODE_COVERAGE_RULES to be a set
     of makefile rules that use ifeq/endif (which is GNU make-specific),
     instead only define CODE_COVERAGE_RULES if coverages is turned on,
     and in that case don't use conditionals in the makefile.

- api: Add entrypoints to allow use of per-server ports

  Add user-visible entrypoints ares_{get,set}_servers_ports(3), which
  take struct ares_addr_port_node rather than struct ares_addr_node.
  This structure includes a UDP and TCP port number; if this is set
  to zero, the channel-wide port values are used as before.

  Similarly, add a new ares_set_servers_ports_csv(3) entrypoint, which
  is analogous to ares_set_servers(3) except it doesn't ignore any
  specified port information; instead, any per-server specified port
  is used as both the UDP and TCP port for that server.

  The internal struct ares_addr is extended to hold the UDP/TCP ports,
  stored in network order, with the convention that a value of zero
  indicates that the channel-wide UDP/TCP port should be used.

  For the internal implementation of ares_dup(3), shift to use the
  _ports() version of the get/set functions, so port information is
  transferred correctly to the new channel.

  Update manpages, and add missing ares_set_servers_csv to the lists
  while we're at it

- api: Add ares_set_sortlist(3) entrypoint

  Allow explicit configuration of the channel's sortlist, by
  specifying a string in the same format as the equivalent
  /etc/resolv.conf option.

  This allows library users to perform the same configuration
  that is available via /etc/resolv.conf, but without needing
  to change that file.

- api: Allow injection of user-specified malloc/free functions

  Add a new ares_library_init_mem() initialization function for the
  library which allows the library user to specify their own malloc,
  realloc & free equivalents for use library-wide.

  Store these function pointers in library-wide global variables,
  defaulting to libc's malloc(), realloc() and free().

  Change all calls to malloc, realloc and free to use the function pointer
  instead.  Also ensure that ares_strdup() is always available
  (even if the local environment includes strdup(3)), and change the
  library code to always use it.

  Convert calls to calloc() to use ares_malloc() + memset

- api: Add option to expose some internal functions

  Purely for testing, add --enable-expose-statics option to configure
  which converts some static internal functions to be externally visible.

- api: Expose the ares_library_initialized() function

- ahost: Allow repeated -s <domain> options

  This also removes a potential leak where later -s options would
  replace earlier ones without freeing the relevant string.

- Mark unhittable lines

  Add comments for the benefit of the lcov tool, marking
  lines that cannot be hit.  Typically these are fall-back
  protection arms that are already covered by earlier checks,
  and so it's not worth taking out the unhittable code (in case
  someone changes the code between the two places in future).

- ares_set_servers_csv.3: make return type match code

- bitncmp: update comment to match code behaviour

- ares_striendstr: fix so non-NULL return can happen

  This looks to have been broken since it was first introduced in 2005 in
  commit aba0b775ea30 ("Added ares_getnameinfo which mimics the
  getnameinfo API")

- config_sortlist: free any existing sortlist on (re)alloc failure

  If we get an allocation failure on 2nd or later entry in the sortlist, the
  code would return ENOMEM but still leave the initial entries allocated.
  Ensure that *sortlist is set to NULL whenever ENOMEM is returned.

- ares_dup: clear new channel on failure

  If the attempt to transfer IPv6 servers from the old to the new channel
  fails, the previous code would still return a channel to the user even though
  an error return code was generated.  This makes it likely that users would
  leak the channel, so explicitly clear the channel in this case.

- ares_init_options: don't lose init failure

  If (say) init_by_options() fails, the subsequent call to
  init_by_defaults() was overwriting the return code with
  success.  Still call init_by_defaults() regardless, but track
  its return value separately

- ares_gethostbyname: don't leak valid-but-empty hostent

  If an AF_UNSPEC query gets a valid response to its AAAA query,
  but which has no IPv6 addresses in it, then the code chains on to
  a A record query.  However, the hostent from the AAAA response
  was being leaked along the way (because it gets replaced before
  the follow-on end_hquery() invocation).

- ares_parse_txt_reply: propagate errors from per-substring loop

  If we get an allocation failure when processing a particular substring in a
  TXT record, that failure is silently lost; fix that by propagating errors from
  the inner loop to the outer loop.

- process_answer: fix things up correctly when removing EDNS option

  When a server rejects an EDNS-equipped request, we retry without
  the EDNS option.  However, in TCP mode, the 2-byte length prefix was
  being calculated wrong -- it was built from the answer length rather than
  the length of the original request.

  Also, it is theoretically possible that the call to realloc() might change
  the data pointed to; to allow for this, qbuf also needs updating.

  (Both these fixes were actually included in a patchset sent on the mailing
  list in Oct 2012, but were included with other functional changes that
  didn't get merged:
  http://c-ares.haxx.se/mail/c-ares-archive-2012-10/0004.shtml)

- ares__read_line: clear buf pointer on realloc failure

- ares_expand_name: check for valid bits in label length

  The top two bits of the label length indicate whether this is a
  label length (00) or an index to a name elsewhere in the message
  (11).  RFC1035 4.1.4 says that the other possible values for the
  top two bits (01, 10) are reserved for future use.

Daniel Stenberg (23 Jan 2016)
- [Gregor Jasny brought this change]

  Fix typos detected by lintian

  Closes #32

- [Gregor Jasny brought this change]

  Distribute all man pages

- README.cares: s/I/Daniel

  ... and add a pointer to an existing version of the original area 1.1.1
  package.a

- read_tcp_data: don't try to use NULL pointer after malloc failure

  CID 56884, pointed out by Coverity. We really should make this function
  return an error code so that a malloc() failure can return back a major
  failure.

- configure_socket: explicitly ignore return code

  CID 56889 in Coverity pointed out the return code from setsocknonblock()
  is ignored, and this added typecast to (void) makes it explicit.

- ahost: check the select() return code

  Fixes CID 137189, pointed out by Coverity

David Drysdale (18 Jan 2016)
- Fix buildconf on platforms using glibtoolize

  Commit c49a87eea538 changed buildconf to only check for
  libtoolize, but missed a line

- Don't exit loop early leaving uninitialized entries

  Update for commit affc63cba875d.

  The original patch from Gregor Jasny did not have the break
  statement; I incorrectly added it to prevent continuing the loop.
  However, the later entries in the array would then be left
  uninitialized, causing problems for later cleanup.

  So fix to match Gregor's original patch, with apologies.

Daniel Stenberg (18 Jan 2016)
- buildconf: remove check for libtool, it only requires libtoolize

David Drysdale (17 Jan 2016)
- [Gregor Jasny brought this change]

  Use libresolv to initialize cares on iPhone targets

  On iPhone targets like iOS, watchOS or tvOS the file
  /etc/resolv.conf cannot be used to configure cares.

  Instead the resolver library is queried for configuration
  values.

  CC: Yury Kirpichev <[email protected]>

Daniel Stenberg (17 Jan 2016)
- README: updated to new repo URL

David Drysdale (14 Jan 2016)
- [Lei Shi brought this change]

  Fixing slow DNS lookup issue

  This patch is fixing the dns lookup issue due to dummy dns information
  of a disconnected adapter(in my case is a bluetooth adapter). I changed
  the dns lookup policy to try GetNetworkParams first because the
  GetNetworkParams provides the most reliable dns information (lots of
  checks were done by system). I also filter out inoperable adapter in
  DNS_AdaptersAddresses in case GetNetworkParams fail.

- Merge pull request #30 from p-push/vs-2015

  Support Visual Studio 2015

Oleg Pudeyev (3 Jan 2016)
- [Gisle Vanem brought this change]

  Support Visual Studio 2015

David Drysdale (11 Nov 2015)
- [Andrew Andkjar brought this change]

  added another version case to Makefile.msvc

  nmake version 11.00.61030.0 resolves to CC_VERS_NUM = 110

- Merge pull request #26 from bitbouncer/vs-2013

  added define for visual studio 2013

svante karlsson (25 Jun 2015)
- added define for visual studio 2013

Jakub Hrozek (6 Nov 2014)
- ares__read_line: free buf on realloc failure

- Destroy options if ares_save_options fails

  It's possible that, if ares_save_options failed, the opts structure
  would contain some allocated memory. Calling ares_destroy_options in
  this case is safe, because ares_save_options zeroes out the memory
  initially.

- [David Drysdale brought this change]

  Continue loop if space for hostname not large enough

  When attempting to build a search domain from the local hostname
  (used as a fallback when no other methods have given a search
  domain), the code doubles the buffer size on each loop iteration.

  However, the loop previously had a WHILE_FALSE terminator so the continue
  statement exited the loop rather than going round again.

Daniel Stenberg (30 Oct 2014)
- ares_getnameinfo.3: there is no ares_getaddrinfo

David Drysdale (30 Sep 2014)
- [Gregor Jasny brought this change]

  Prevent tmpbuf from overrunning

  Fix Coverity error CID 56886.

  Signed-off-by: Gregor Jasny <[email protected]>

- [Gregor Jasny brought this change]

  Re-start loop if select fails

  Fix Coverity error CID 56882

  Signed-off-by: Gregor Jasny <[email protected]>

- [Gregor Jasny brought this change]

  Free temporary variable in error path

  Fix Coverity CID 56890

  Signed-off-by: Gregor Jasny <[email protected]>

- [Gregor Jasny brought this change]

  Fix integer shift overflow if both tcp_socket and udp_socket are set

  The problem occurs if at the start of the loop the sockindex is at the
  last valid ARES_GETSOCK_MAXNUM position. If then both udp_socket and
  tcp_socket are valid, sockindex gets incremented for UDP first and
  points one entry behind the array for the tcp block.
  So the fix is to check after every increment of sockindex if it is still
  valid.

  Fix Coverity error CID 56878

  Signed-off-by: Gregor Jasny <[email protected]>

- [Gregor Jasny brought this change]

  Null check before dereference

  Fix Coverity error CID 56880

  Signed-off-by: Gregor Jasny <[email protected]>

Jakub Hrozek (28 Jul 2014)
- [Gisle Vanem brought this change]

  Comment in ares_ipv6.h

David Drysdale (25 Jul 2014)
- CONTRIBUTING: add file to indicate mailing list is preferred

- Add -t u option to ahost

  Add an option to allow specification of the AF_UNSPEC
  address family.

Jakub Hrozek (24 Jul 2014)
- host_callback: Fall back to AF_INET on searching with AF_UNSPEC

  Previously, when an ares_gethostbyname() searched with AF_UNSPEC and the
  first AF_INET6 call only returned CNAMEs, the host_callback never
  retried AF_INET.

  This patch makes sure than on ARES_SUCCESS, the result of AF_INET6 is
  taken as authoritative only if the result contains some addresses.

- [David Drysdale brought this change]

  Move memset call below platform-specific declarations

  A GitHub commenter [1] says that my recent change to ahost.c has
  problems compiling on Windows + C89 platforms.

  [1]  c-ares/c-ares@ee22246507c9#commitcomment-6587616

- [David Drysdale brought this change]

  Update ahost man page to describe -s option.

  Commit ee22246507c9 added the -s <domain> option to the
  ahost command, but neglected to update the man page to
  describe it.

  Also fix typo in description of -t option.

- ares_parse_soa_reply: Do not leak rr_name on allocation failure

  If ares_malloc_data failed, already allocated rr_name would go out of
  scope.

- [David Drysdale brought this change]

  Don't override explicitly specified search domains

  Only set search domains from /etc/resolv.conf if there isn't a value
  already present in the channel.

- [David Drysdale brought this change]

  Allow specification of search domain in ahost

  Add the "-s domain" command line option to override the search
  domains.

Daniel Stenberg (12 May 2014)
- Revert "ares_parse_aaaa_reply: fix leak when reply contains 1 alias and no address"

  This reverts commit 440110b303fdbfadb3ad53d30eeb98cc45d70451.

- [Frederic Germain brought this change]

  ares_parse_aaaa_reply: fix leak when reply contains 1 alias and no address

- [Doug Kwan brought this change]

  ares_build.h: fix building on 64-bit powerpc

  There are two issues.

  1. gcc actually does not use __ppc__ and __ppc64__ but __PPC__ and
  __PPC64__.  The tests of __ILP32__ and __LP64__ are sufficient for gcc.

  2. clang defines __GNU__ and defines both __ppc64__ and __ppc__ when
  targeting ppc64.  This makes CARES_SIZEOF_LONG to be 4 on a ppc64 system
  when building with clang.

  My patch is two change the order of the checks so that we check the
  64-bit case first.

- refresh: updated now with automake 1.14

- [David Drysdale brought this change]

  single_domain: Invalid memory access for empty string input

  We noticed a small buglet in ares_search() when it gets an empty string
  as input -- the single_domain() utility function in ares_search.c
  accesses invalid memory (before the start of the string).

Guenter Knauf (31 Aug 2013)
- Fixed warning 'type specifier missing'.

Daniel Stenberg (30 Aug 2013)
- [Tor Arntsen brought this change]

  ares_rules.h: CARES_SIZEOF_LONG doesn't exist anymore, don't test for it

  It was removed in f19387dd72432

- nowarn: use <limits.h> instead of configure for size of long

  This makes the header file much more multi-arch friendly and can be used
  as-is with both 32 bit and 64 bit builds.

- timeoffset: made static and private

  ares__timeoffset() was only used once within this single source file

- timeadd: make static

  ares__timeadd() was only ever used from within the same source

Yang Tse (18 Jul 2013)
- xc-am-iface.m4: comments refinement

- configure: fix 'subdir-objects' distclean related issue

  See XC_AMEND_DISTCLEAN comments for details.

- configure: automake 1.14 compatibility tweak (use XC_AUTOMAKE)

- xc-am-iface.m4: provide XC_AUTOMAKE macro

Daniel Stenberg (12 May 2013)
- gitignore: ignore all ares_*pdf but also CHANGES.dist

- bump: start working towards 1.10.1
jperkin pushed a commit that referenced this issue Mar 20, 2017
2.1.0 / 2017-01-01

Major Enhancements

* Fix breaking changes in LSI api. Displays errors instead of raising where
  possible. #87

2.0.5 / 2016-12-30 - removed due to breaking change, and no longer available

Major Enhancements

* Stopwords get encoded to utf8 (#83)
* Fix searching issues where no document is added to lsi (#77)
* Added method to add custom path to user-created stopword directory (#73)

Minor Enhancements

* Test newer rubies (#85)
* Fixed errors in README (#68, #79, #80)
* Added an option to the bayesian classifier to disable word stemming (#61)
* Added missing parens and renamed some variables (#59)
wiedi pushed a commit to wiedi/pkgsrc-legacy that referenced this issue Jan 28, 2018
Changelog:
 Build and translation fixes [TritonDataCenter#58, TritonDataCenter#59]
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