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

spread not working #77

Closed
alcir opened this issue Oct 14, 2013 · 9 comments
Closed

spread not working #77

alcir opened this issue Oct 14, 2013 · 9 comments

Comments

@alcir
Copy link

alcir commented Oct 14, 2013

spread is not working, while the package from the EC repository works, 32 and 64 bit version.

@mamash
Copy link

mamash commented Oct 14, 2013

Can you be a little more specific? I can confirm a typo in the spread SMF manifest (missing 'type' attribute on the stop method) in 2013Q2, and I'm fixing that now. However, with that fixed, spread works for me across two nodes with a simple configuration; e.g. services come up, and I can use spuser to join a group.

@alcir
Copy link
Author

alcir commented Oct 14, 2013

really? I use wackamole. And in a two nodes config, the vip never rise.

@mamash
Copy link

mamash commented Oct 14, 2013

Hm, isn't that more of a wackamole problem then? Spread is just the message bus.

@alcir
Copy link
Author

alcir commented Oct 16, 2013

I don't think.
Wackamole and Spread, from EC repositroy works fine. With the same configuration, the packages from pkgsrc don't work.
Again, if I compile spread from sources (but using the -m32 flag), then wackamole from pkgsrc works fine.
If I compile spread from sources without using -m32, wackamole doesn't work.

@mamash
Copy link

mamash commented Oct 16, 2013

I had a look at how EC builds spread. There are some patches that fix the build process - none of which is an issue under pkgsrc - and also some that modify the source files. Alas, with no history.

@alcir
Copy link
Author

alcir commented Oct 16, 2013

I've tried to apply these patches to the pkgsrc package. But wackamole doesn't work.
Have you tried wackamole?

@mamash
Copy link

mamash commented Oct 16, 2013

No, but Richard from Joyent support has worked with a big JPC customer, and based on his notes on an internal ticket he made it work just fine. I'll get his notes.

@mamash
Copy link

mamash commented Oct 16, 2013

I just made a new cluster of two SmartOS VMs and spread/wackamole work fine. Here's how to reproduce:

  • Provision two VMs with "allow_ip_spoofing":1 set, using the base-13.2.1 (base64-13.2.1) image.
  • Install spread and wackamole (pkgin -y in spread wackamole).
  • Put down basic spread.conf and wackamole.conf files (see below)
  • Make sure the node names (e.g. 'node1') match the VM hostnames (/etc/nodename) and the name/IP resolve (via /etc/hosts)
  • Start spread (svcadm enable spread)
  • Start wackamole (svcadm enable wackamole)

I can see the VIP show up as net0:1 on both nodes, and is constantly available as I start/stop the first/second nodes.

Files used:

/opt/local/etc/spread.conf

Spread_Segment  10.88.88.127:4803 {
        node1 10.88.88.221
        node2 10.88.88.222
}
DebugFlags = { PRINT EXIT }
EventPriority = pDEBUG
RuntimeDir = /var/spool/spread
EventTimeStamp

/opt/local/etc/wackamole.conf

Spread = 4803
SpreadRetryInterval = 5s
Group = wack1
Control = /var/run/wack.it
Prefer None
VirtualInterfaces {
        net0:10.88.88.220/32
}
Arp-Cache = 60s
balance {
        AcquisitionsPerRound = all
        interval = 4s
}
mature = 5s

/etc/nodename

node1

/etc/hosts

::1        localhost
127.0.0.1  localhost loghost f8e0e411-5e26-4c51-8153-01ac9eb4d1ea
10.88.88.221  node1
10.88.88.222  node2

Notes:

  • Alternatively, you can modify the SMF start method for spread and force an arbitrary node name, and not mangle your /etc/nodename:
svccfg -s spread setprop start/exec = astring: '"/opt/local/sbin/spread -n node1"'
  • To have spread log to a file, make sure spread:spread has access, as that's the user/group the service is run as.

drscream pushed a commit to drscream/pkgsrc-legacy that referenced this issue Oct 20, 2013
-----
1.1.4
-----

* Issue TritonDataCenter#77: Fix error in upload command (Python 2.4).

-----
1.1.3
-----

* Fix NameError in previous patch.

-----
1.1.2
-----

* Issue TritonDataCenter#69: Correct issue where 404 errors are returned for URLs with
  fragments in them (such as #egg=).

-----
1.1.1
-----

* Issue TritonDataCenter#75: Add ``--insecure`` option to ez_setup.py to accommodate
  environments where a trusted SSL connection cannot be validated.
* Issue TritonDataCenter#76: Fix AttributeError in upload command with Python 2.4.
@alcir
Copy link
Author

alcir commented Oct 21, 2013

Yes, I can confirm that it works.
I don't really know where the problem was, where my mistake was.
Thanks.

jperkin pushed a commit that referenced this issue Nov 1, 2013
(No changelog for 0.9.3 supplied, but includes maintainer change.)

Version 0.9.2
-------------

Released 2013/9/11

- Upgrade wtforms to 1.0.5.
- No lazy string for i18n `#77`_.
- No DateInput widget in html5 `#81`_.
- PUT and PATCH for CSRF `#86`_.

.. _`#77`: wtforms/flask-wtf#77
.. _`#81`: wtforms/flask-wtf#81
.. _`#86`: wtforms/flask-wtf#86


Version 0.9.1
-------------

Released 2013/8/21

This is a patch version for backward compitable for Flask<0.10 `#82`_.

.. _`#82`: wtforms/flask-wtf#82

Version 0.9.0
-------------

Released 2013/8/15

- Add i18n support (issue #65)
- Use default html5 widgets and fields provided by wtforms
- Python 3.3+ support
- Redesign form, replace SessionSecureForm
- CSRF protection solution
- Drop wtforms imports
- Fix recaptcha i18n support
- Fix recaptcha validator for python 3
- More test cases, it's 90%+ coverage now
- Redesign documentation
jperkin pushed a commit that referenced this issue Dec 9, 2013
Fix a tyop in DESCR.

Upstream changes:
-----------------

v1.9.0 (6th Nov 2012)
---------------------

* #97 (with a little #93): Improve config parsing of `ProxyCommand` directives
  and provide a wrapper class to allow subprocess-driven proxy commands to be
  used as `sock=` arguments for `SSHClient.connect`.
* #77: Allow `SSHClient.connect()` to take an explicit `sock` parameter
  overriding creation of an internal, implicit socket object.
* Thanks in no particular order to Erwin Bolwidt, Oskari Saarenmaa, Steven
  Noonan, Vladimir Lazarenko, Lincoln de Sousa, Valentino Volonghi, Olle
  Lundberg, and Github user `@acrish` for the various and sundry patches
  leading to the above changes.

v1.8.1 (6th Nov 2012)
---------------------

* #90: Ensure that callbacks handed to `SFTPClient.get()` always fire at least
  once, even for zero-length files downloaded. Thanks to Github user `@enB` for
  the catch.
* #85: Paramiko's test suite overrides
  `unittest.TestCase.assertTrue/assertFalse` to provide these modern assertions
  to Python 2.2/2.3, which lacked them. However on newer Pythons such as 2.7,
  this now causes deprecation warnings. The overrides have been patched to only
  execute when necessary. Thanks to `@Arfrever` for catch & patch.


v1.8.0 (3rd Oct 2012)
---------------------

* #17 ('ssh' 28): Fix spurious `NoneType has no attribute 'error'` and similar
  exceptions that crop up on interpreter exit.
* 'ssh' 32: Raise a more useful error explaining which `known_hosts` key line was
  problematic, when encountering `binascii` issues decoding known host keys.
  Thanks to `@thomasvs` for catch & patch.
* 'ssh' 33: Bring `ssh_config` parsing more in line with OpenSSH spec, re: order of
  setting overrides by `Host` specifiers. Specifically, the overrides now go by
  file order instead of automatically sorting by `Host` value length. In
  addition, the first value found per config key (e.g. `Port`, `User` etc)
  wins, instead of the last. Thanks to Jan Brauer for the contribution.
* 'ssh' 36: Support new server two-factor authentication option
  (`RequiredAuthentications2`), at least re: combining key-based & password
  auth. Thanks to Github user `bninja`.
* 'ssh' 11: When raising an exception for hosts not listed in
  `known_hosts` (when `RejectPolicy` is in effect) the exception message was
  confusing/vague. This has been improved somewhat. Thanks to Cal Leeming for
  highlighting the issue.
* 'ssh' 40: Fixed up & expanded EINTR signal handling. Thanks to Douglas Turk.
* 'ssh' 15: Implemented parameter substitution in SSHConfig, matching the
  implementation of `ssh_config(5)`. Thanks to Olle Lundberg for the patch.
* 'ssh' 24: Switch some internal type checking to use `isinstance` to help prevent
  problems with client libraries using subclasses of builtin types. Thanks to
  Alex Morega for the patch.
* Fabric #562: Agent forwarding would error out (with `Authentication response
  too long`) or freeze, when more than one remote connection to the local agent
  was active at the same time. This has been fixed. Thanks to Steven McDonald
  for assisting in troubleshooting/patching, and to GitHub user `@lynxis` for
  providing the final version of the patch.
* 'ssh' 5: Moved a `fcntl` import closer to where it's used to help avoid
  `ImportError` problems on Windows platforms. Thanks to Jason Coombs for the
  catch + suggested fix.
* 'ssh' 4: Updated implementation of WinPageant integration to work on 64-bit
  Windows. Thanks again to Jason Coombs for the patch.
* Added an IO loop sleep() call to avoid needless CPU usage when agent
  forwarding is in use.
* Handful of internal tweaks to version number storage.
* Updated `setup.py` with `==dev` install URL for `pip` users.
* Updated `setup.py` to account for packaging problems in PyCrypto 2.4.0
* Added an extra `atfork()` call to help prevent spurious RNG errors when
  running under high parallel (multiprocess) load.
* Merge PR #28: paramiko/paramiko#28 which adds a
  ssh-keygen like demo module. (Sofian Brabez)

v1.7.7.2 16may12
----------------
  * Merge pull request #63: paramiko/paramiko#63 which
    fixes exceptions that occur when re-keying over fast connections. (Dwayne
    Litzenberger)
jperkin pushed a commit that referenced this issue Dec 9, 2013
3.2 (2012-11-27)
----------------

* Documentation file layout restructuring.
  [thet]

* Fix time support. vTime events can be instantiated with a datetime.time
  object, and do not inherit from datetime.time itself.
  [rdunklau]

* Correctly handle tzinfo objects parsed with dateutil. Fixes #77.
  [warvariuc, thet]

* Text values are escaped correclty. Fixes #74.
  [warvariuc]

* Returned old folding algorithm, as the current implementation fails in some
  cases. Fixes #72, Fixes #73.
  [warvariuc]

* Supports to_ical() on date/time properties for dates prior to 1900.
  [cdevienne]
jperkin pushed a commit that referenced this issue Dec 9, 2013
to allow package to continue to work as previously packaged. +LICENSE;
From NEWS:

tig-1.1
-------

Incompatibilities:

 - Disable diff move/copy detection by default, boosting diff
   performance on larger projects. Use git config 'diff.renames' option
   (git-wide) to set your preferred behavior. Environment variable
   TIG_DIFF_OPTS can be used to restore the old behavior.
 - Values set for author-width and filename-width will result in widths
   one character bigger than previously.

Improvements:

 - Typing a text in the prompt will be interpreted as a tig command.
   Prefixing the command with a '!' will execute this system command in
   an external pager. Entering a single key will execute the
   corresponding key binding.
 - Basic support for wrapping long line in pager, diff, and stage views.
   Enable using: `set wrap-lines = yes`. (GH #2)
 - User-defined commands prefixed with a '?' means prompt before
   execution. Example: `bind main B !?git rebase -i %(commit)`.
 - User-defined commands prefixed with a '<' means exit after execution.
   Example: `bind main C !<git commit`. (GH #66)
 - User-defined commands are executed unquoted to support shell commands.
   Example: `bind generic I !@sh -c "echo -n %(commit) | xclip -selection c"`.
   (GH #65)
 - Configure case-insensitive searches using: `set ignore-case = yes`.
 - Add "deleted mode" line type for better diff coloring.
 - Open editor when requesting edit action from within a file diff.
 - Update AX_WITH_CURSES to build under Cygwin.
 - Improve tigrc(5) documentation. (Debian #682766)
 - Allow to build on Mac OS 10.7 without the configure script. (GH #25)
 - Add option to split the view vertically instead of horizontally.
   Example: `set vertical-split = yes'. (GH #76)
 - Add 'show-id' and 'id-width' options to configure the display of
   commit IDs in the main view and ID width in the blame view. (GH #77)
 - Allow to override git-based encoding to UTF-8 by setting
   'i18n.commitencoding' or 'gui.encoding'.
 - Improve autobuild support to track generated files and work with
   autoreconf 2.61.
 - Commit IDs are read from stdin when --stdin is given; works for main
   and diff view, e.g. `tig --no-walk --stdin < cherry-picks.txt`.
 - Add option to disable focusing of the child view when it's opened.
   Disable using: `set focus-child = no`. (GH #83)
 - Allow to open blob related with added content in a diff. (GH #91)

Bug fixes:

 - Fix commit graph regression when a path spec is specified. (GH #53)
 - Main view: only show staged/unstaged changes for the current branch.
 - Support submodules created with current version of git. (GH #54)
 - Fix diff status message for file diffs with no content changes.
 - Fix parent blaming when tig is launched in subdirectory. (GH #70)
 - Do not show deleted branch when reloading the branch view.

tig-1.0
-------

The master repository is git://github.com/jonas/tig.git, and the old
master repository (http://jonas.nitro.dk/tig/tig.git) will be retired.

Improvements:

 - Use git-log(1)s default commit ordering. The old behavior can be
   restored by adding `set commit-order = topo` to ~/.tigrc.
 - Support staging of single lines. Bound to '1' default. (GH #21)
 - Use +<lineno> to open the initial view at an arbitrary line. (GH #20)
 - Add show-notes ~/.tigrc option. Notes are displayed by default.
 - Support jumping to specific SHAs in the main view.
 - Decorate replaced commits.
 - Display line numbers in main view.
 - Colorize binary diff stats. (GH #17)
 - Custom colorization of lines matching a string prefix (GH #16).
   Example configuration: color "Reported-by:" green default
 - Use git's color settings for the main, status and diff views.
   Put `set read-git-colors = no` in ~/.tigrc to disable.
 - Handle editor options with multiple arguments. (GH #12)
 - Show filename when running tig blame with copy detection. (GH #19)
 - Use 'source <path>' command to load additional files from ~/.tigrc
 - User-defined commands prefixed with '@' are run with no console
   output, e.g.

   	bind generic 3 !@rm sys$command

 - Make display of space changes togglable in the diff and stage view.
   Bound to 'W' by default.
 - Use per-file encoding specified in gitattributes(5) for blobs and
   unstaged files.
 - Obsolete commit-encoding option and pass --encoding=UTF-8 to revision
   commands.
 - Main view: show uncommitted changes as staged/unstaged commits.
   Can be disabled by putting `set show-changes = no` in ~/.tigrc.
 - Add %(prompt) external command variable, which will prompt for the
   argument value.
 - Log information about git commands when the TIG_TRACE environment
   variable is set. Example: `TIG_TRACE=/tmp/tig.log tig`
 - Branch view: Show the title of the last commit.
 - Increase the author auto-abbreviation threshold to 10. (GH #49)
 - For old commits show number of years in relative dates. (GH #50)

Bug fixes:

 - Fix navigation behavior when going from branch to main view. (GH #38)
 - Fix segfault when sorting the tree view by author name.
 - Fix diff stat navigation for unmodified files with stat changes.
 - Show branches/refs which names are a substring of the current branch.
 - Stage view: fix off-by-one error when jumping to a file in a diff
   with only one file.
 - Fix diff-header colorization. (GH #15)

tig-0.18
--------

Incompatibilities:

 - Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD
   environment variables.

Improvements:

 - Pressing enter on diff stat file lines will jump to file's diff.
 - Naïvely color blame IDs to distinguish lines.
 - Document palette color options used for revision graph and blame IDs.
 - Add support for blaming diff lines.
 - Add diff-context option and bindings to increase the diff context in
   the diff and stage view.
 - (GH-6) Make blame configurable via extra options passed from the command
   line and blame-options setting from ~/.tigrc. For example:

   	set blame-options = -C -C -C

Bug fixes:

 - Expand browsing state variables for prompt. (LP #694780, Debian #635546)
 - Fix segfault when sorting the branch view by author.
 - Expand %(directory) to . for the root directory. (GH-3)
 - Accept 'utf-8' for the line-graphics option as indicated in the docs.
 - Use erasechar() to check for the correct backspace character.
jperkin pushed a commit that referenced this issue Dec 9, 2013
Upstream changes:
2.0008 2013-07-06 00:09:43-0700
    [BUG FIXES]
    - Fix a chache issue that UTF8 flags were not turned on
      as expected (#82)
    - Fix Metakolon doc (#83)

2.0007 2013-06-21 13:16:16-0700
    [DOCUMENTS]
    - Add doc about chomping newlines (<:- ... -:>)

    [NEW FEATURES]
    - Add pre_process_handler to pre-process template content (bluescreen)

2.0006 2013-06-02 22:58:27
    [BUG FIXES]
    - Fix an issue that the state of VM broke on exception
      reported by nihen

2.0005 2013-06-02 12:23:15
    [BUG FIXES]
    - Fix a Multiplexed WRAPPER issue reportedy by @kawamuray (#79)
      Those who use WRAPPER, template cascading, or anonymous functions
      (lambdas) are strongly recommended to upgrade Xslate.

2.0004 2013-05-29 20:27:07
    [TEST FIXES]
    - Template string must be bytes (#78)

2.0003 2013-05-10 12:59:11
    [BUG FIXES]
    - Fix a crash on compiling templates (#77)

2.0002 2013-04-26 12:51:47
    [BUG FIXES]
    - Support perl-blead (5.17.11)
jperkin pushed a commit that referenced this issue Dec 9, 2013
-----
1.1.4
-----

* Issue #77: Fix error in upload command (Python 2.4).

-----
1.1.3
-----

* Fix NameError in previous patch.

-----
1.1.2
-----

* Issue #69: Correct issue where 404 errors are returned for URLs with
  fragments in them (such as #egg=).

-----
1.1.1
-----

* Issue #75: Add ``--insecure`` option to ez_setup.py to accommodate
  environments where a trusted SSL connection cannot be validated.
* Issue #76: Fix AttributeError in upload command with Python 2.4.
jperkin pushed a commit that referenced this issue Dec 9, 2013
(No changelog for 0.9.3 supplied, but includes maintainer change.)

Version 0.9.2
-------------

Released 2013/9/11

- Upgrade wtforms to 1.0.5.
- No lazy string for i18n `#77`_.
- No DateInput widget in html5 `#81`_.
- PUT and PATCH for CSRF `#86`_.

.. _`#77`: wtforms/flask-wtf#77
.. _`#81`: wtforms/flask-wtf#81
.. _`#86`: wtforms/flask-wtf#86


Version 0.9.1
-------------

Released 2013/8/21

This is a patch version for backward compitable for Flask<0.10 `#82`_.

.. _`#82`: wtforms/flask-wtf#82

Version 0.9.0
-------------

Released 2013/8/15

- Add i18n support (issue #65)
- Use default html5 widgets and fields provided by wtforms
- Python 3.3+ support
- Redesign form, replace SessionSecureForm
- CSRF protection solution
- Drop wtforms imports
- Fix recaptcha i18n support
- Fix recaptcha validator for python 3
- More test cases, it's 90%+ coverage now
- Redesign documentation
jperkin pushed a commit that referenced this issue Jan 21, 2014
to allow package to continue to work as previously packaged. +LICENSE;
From NEWS:

tig-1.1
-------

Incompatibilities:

 - Disable diff move/copy detection by default, boosting diff
   performance on larger projects. Use git config 'diff.renames' option
   (git-wide) to set your preferred behavior. Environment variable
   TIG_DIFF_OPTS can be used to restore the old behavior.
 - Values set for author-width and filename-width will result in widths
   one character bigger than previously.

Improvements:

 - Typing a text in the prompt will be interpreted as a tig command.
   Prefixing the command with a '!' will execute this system command in
   an external pager. Entering a single key will execute the
   corresponding key binding.
 - Basic support for wrapping long line in pager, diff, and stage views.
   Enable using: `set wrap-lines = yes`. (GH #2)
 - User-defined commands prefixed with a '?' means prompt before
   execution. Example: `bind main B !?git rebase -i %(commit)`.
 - User-defined commands prefixed with a '<' means exit after execution.
   Example: `bind main C !<git commit`. (GH #66)
 - User-defined commands are executed unquoted to support shell commands.
   Example: `bind generic I !@sh -c "echo -n %(commit) | xclip -selection c"`.
   (GH #65)
 - Configure case-insensitive searches using: `set ignore-case = yes`.
 - Add "deleted mode" line type for better diff coloring.
 - Open editor when requesting edit action from within a file diff.
 - Update AX_WITH_CURSES to build under Cygwin.
 - Improve tigrc(5) documentation. (Debian #682766)
 - Allow to build on Mac OS 10.7 without the configure script. (GH #25)
 - Add option to split the view vertically instead of horizontally.
   Example: `set vertical-split = yes'. (GH #76)
 - Add 'show-id' and 'id-width' options to configure the display of
   commit IDs in the main view and ID width in the blame view. (GH #77)
 - Allow to override git-based encoding to UTF-8 by setting
   'i18n.commitencoding' or 'gui.encoding'.
 - Improve autobuild support to track generated files and work with
   autoreconf 2.61.
 - Commit IDs are read from stdin when --stdin is given; works for main
   and diff view, e.g. `tig --no-walk --stdin < cherry-picks.txt`.
 - Add option to disable focusing of the child view when it's opened.
   Disable using: `set focus-child = no`. (GH #83)
 - Allow to open blob related with added content in a diff. (GH #91)

Bug fixes:

 - Fix commit graph regression when a path spec is specified. (GH #53)
 - Main view: only show staged/unstaged changes for the current branch.
 - Support submodules created with current version of git. (GH #54)
 - Fix diff status message for file diffs with no content changes.
 - Fix parent blaming when tig is launched in subdirectory. (GH #70)
 - Do not show deleted branch when reloading the branch view.

tig-1.0
-------

The master repository is git://github.com/jonas/tig.git, and the old
master repository (http://jonas.nitro.dk/tig/tig.git) will be retired.

Improvements:

 - Use git-log(1)s default commit ordering. The old behavior can be
   restored by adding `set commit-order = topo` to ~/.tigrc.
 - Support staging of single lines. Bound to '1' default. (GH #21)
 - Use +<lineno> to open the initial view at an arbitrary line. (GH #20)
 - Add show-notes ~/.tigrc option. Notes are displayed by default.
 - Support jumping to specific SHAs in the main view.
 - Decorate replaced commits.
 - Display line numbers in main view.
 - Colorize binary diff stats. (GH #17)
 - Custom colorization of lines matching a string prefix (GH #16).
   Example configuration: color "Reported-by:" green default
 - Use git's color settings for the main, status and diff views.
   Put `set read-git-colors = no` in ~/.tigrc to disable.
 - Handle editor options with multiple arguments. (GH #12)
 - Show filename when running tig blame with copy detection. (GH #19)
 - Use 'source <path>' command to load additional files from ~/.tigrc
 - User-defined commands prefixed with '@' are run with no console
   output, e.g.

   	bind generic 3 !@rm sys$command

 - Make display of space changes togglable in the diff and stage view.
   Bound to 'W' by default.
 - Use per-file encoding specified in gitattributes(5) for blobs and
   unstaged files.
 - Obsolete commit-encoding option and pass --encoding=UTF-8 to revision
   commands.
 - Main view: show uncommitted changes as staged/unstaged commits.
   Can be disabled by putting `set show-changes = no` in ~/.tigrc.
 - Add %(prompt) external command variable, which will prompt for the
   argument value.
 - Log information about git commands when the TIG_TRACE environment
   variable is set. Example: `TIG_TRACE=/tmp/tig.log tig`
 - Branch view: Show the title of the last commit.
 - Increase the author auto-abbreviation threshold to 10. (GH #49)
 - For old commits show number of years in relative dates. (GH #50)

Bug fixes:

 - Fix navigation behavior when going from branch to main view. (GH #38)
 - Fix segfault when sorting the tree view by author name.
 - Fix diff stat navigation for unmodified files with stat changes.
 - Show branches/refs which names are a substring of the current branch.
 - Stage view: fix off-by-one error when jumping to a file in a diff
   with only one file.
 - Fix diff-header colorization. (GH #15)

tig-0.18
--------

Incompatibilities:

 - Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD
   environment variables.

Improvements:

 - Pressing enter on diff stat file lines will jump to file's diff.
 - Naïvely color blame IDs to distinguish lines.
 - Document palette color options used for revision graph and blame IDs.
 - Add support for blaming diff lines.
 - Add diff-context option and bindings to increase the diff context in
   the diff and stage view.
 - (GH-6) Make blame configurable via extra options passed from the command
   line and blame-options setting from ~/.tigrc. For example:

   	set blame-options = -C -C -C

Bug fixes:

 - Expand browsing state variables for prompt. (LP #694780, Debian #635546)
 - Fix segfault when sorting the branch view by author.
 - Expand %(directory) to . for the root directory. (GH-3)
 - Accept 'utf-8' for the line-graphics option as indicated in the docs.
 - Use erasechar() to check for the correct backspace character.
jperkin pushed a commit that referenced this issue Jan 21, 2014
Upstream changes:
2.0008 2013-07-06 00:09:43-0700
    [BUG FIXES]
    - Fix a chache issue that UTF8 flags were not turned on
      as expected (#82)
    - Fix Metakolon doc (#83)

2.0007 2013-06-21 13:16:16-0700
    [DOCUMENTS]
    - Add doc about chomping newlines (<:- ... -:>)

    [NEW FEATURES]
    - Add pre_process_handler to pre-process template content (bluescreen)

2.0006 2013-06-02 22:58:27
    [BUG FIXES]
    - Fix an issue that the state of VM broke on exception
      reported by nihen

2.0005 2013-06-02 12:23:15
    [BUG FIXES]
    - Fix a Multiplexed WRAPPER issue reportedy by @kawamuray (#79)
      Those who use WRAPPER, template cascading, or anonymous functions
      (lambdas) are strongly recommended to upgrade Xslate.

2.0004 2013-05-29 20:27:07
    [TEST FIXES]
    - Template string must be bytes (#78)

2.0003 2013-05-10 12:59:11
    [BUG FIXES]
    - Fix a crash on compiling templates (#77)

2.0002 2013-04-26 12:51:47
    [BUG FIXES]
    - Support perl-blead (5.17.11)
jperkin pushed a commit that referenced this issue Jan 21, 2014
-----
1.1.4
-----

* Issue #77: Fix error in upload command (Python 2.4).

-----
1.1.3
-----

* Fix NameError in previous patch.

-----
1.1.2
-----

* Issue #69: Correct issue where 404 errors are returned for URLs with
  fragments in them (such as #egg=).

-----
1.1.1
-----

* Issue #75: Add ``--insecure`` option to ez_setup.py to accommodate
  environments where a trusted SSL connection cannot be validated.
* Issue #76: Fix AttributeError in upload command with Python 2.4.
jperkin pushed a commit that referenced this issue Jan 21, 2014
(No changelog for 0.9.3 supplied, but includes maintainer change.)

Version 0.9.2
-------------

Released 2013/9/11

- Upgrade wtforms to 1.0.5.
- No lazy string for i18n `#77`_.
- No DateInput widget in html5 `#81`_.
- PUT and PATCH for CSRF `#86`_.

.. _`#77`: wtforms/flask-wtf#77
.. _`#81`: wtforms/flask-wtf#81
.. _`#86`: wtforms/flask-wtf#86


Version 0.9.1
-------------

Released 2013/8/21

This is a patch version for backward compitable for Flask<0.10 `#82`_.

.. _`#82`: wtforms/flask-wtf#82

Version 0.9.0
-------------

Released 2013/8/15

- Add i18n support (issue #65)
- Use default html5 widgets and fields provided by wtforms
- Python 3.3+ support
- Redesign form, replace SessionSecureForm
- CSRF protection solution
- Drop wtforms imports
- Fix recaptcha i18n support
- Fix recaptcha validator for python 3
- More test cases, it's 90%+ coverage now
- Redesign documentation
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).
@mamash mamash closed this as completed Jan 29, 2014
jperkin pushed a commit that referenced this issue Mar 14, 2014
3.2 (2012-11-27)
----------------

* Documentation file layout restructuring.
  [thet]

* Fix time support. vTime events can be instantiated with a datetime.time
  object, and do not inherit from datetime.time itself.
  [rdunklau]

* Correctly handle tzinfo objects parsed with dateutil. Fixes #77.
  [warvariuc, thet]

* Text values are escaped correclty. Fixes #74.
  [warvariuc]

* Returned old folding algorithm, as the current implementation fails in some
  cases. Fixes #72, Fixes #73.
  [warvariuc]

* Supports to_ical() on date/time properties for dates prior to 1900.
  [cdevienne]
jperkin pushed a commit that referenced this issue Mar 14, 2014
to allow package to continue to work as previously packaged. +LICENSE;
From NEWS:

tig-1.1
-------

Incompatibilities:

 - Disable diff move/copy detection by default, boosting diff
   performance on larger projects. Use git config 'diff.renames' option
   (git-wide) to set your preferred behavior. Environment variable
   TIG_DIFF_OPTS can be used to restore the old behavior.
 - Values set for author-width and filename-width will result in widths
   one character bigger than previously.

Improvements:

 - Typing a text in the prompt will be interpreted as a tig command.
   Prefixing the command with a '!' will execute this system command in
   an external pager. Entering a single key will execute the
   corresponding key binding.
 - Basic support for wrapping long line in pager, diff, and stage views.
   Enable using: `set wrap-lines = yes`. (GH #2)
 - User-defined commands prefixed with a '?' means prompt before
   execution. Example: `bind main B !?git rebase -i %(commit)`.
 - User-defined commands prefixed with a '<' means exit after execution.
   Example: `bind main C !<git commit`. (GH #66)
 - User-defined commands are executed unquoted to support shell commands.
   Example: `bind generic I !@sh -c "echo -n %(commit) | xclip -selection c"`.
   (GH #65)
 - Configure case-insensitive searches using: `set ignore-case = yes`.
 - Add "deleted mode" line type for better diff coloring.
 - Open editor when requesting edit action from within a file diff.
 - Update AX_WITH_CURSES to build under Cygwin.
 - Improve tigrc(5) documentation. (Debian #682766)
 - Allow to build on Mac OS 10.7 without the configure script. (GH #25)
 - Add option to split the view vertically instead of horizontally.
   Example: `set vertical-split = yes'. (GH #76)
 - Add 'show-id' and 'id-width' options to configure the display of
   commit IDs in the main view and ID width in the blame view. (GH #77)
 - Allow to override git-based encoding to UTF-8 by setting
   'i18n.commitencoding' or 'gui.encoding'.
 - Improve autobuild support to track generated files and work with
   autoreconf 2.61.
 - Commit IDs are read from stdin when --stdin is given; works for main
   and diff view, e.g. `tig --no-walk --stdin < cherry-picks.txt`.
 - Add option to disable focusing of the child view when it's opened.
   Disable using: `set focus-child = no`. (GH #83)
 - Allow to open blob related with added content in a diff. (GH #91)

Bug fixes:

 - Fix commit graph regression when a path spec is specified. (GH #53)
 - Main view: only show staged/unstaged changes for the current branch.
 - Support submodules created with current version of git. (GH #54)
 - Fix diff status message for file diffs with no content changes.
 - Fix parent blaming when tig is launched in subdirectory. (GH #70)
 - Do not show deleted branch when reloading the branch view.

tig-1.0
-------

The master repository is git://github.com/jonas/tig.git, and the old
master repository (http://jonas.nitro.dk/tig/tig.git) will be retired.

Improvements:

 - Use git-log(1)s default commit ordering. The old behavior can be
   restored by adding `set commit-order = topo` to ~/.tigrc.
 - Support staging of single lines. Bound to '1' default. (GH #21)
 - Use +<lineno> to open the initial view at an arbitrary line. (GH #20)
 - Add show-notes ~/.tigrc option. Notes are displayed by default.
 - Support jumping to specific SHAs in the main view.
 - Decorate replaced commits.
 - Display line numbers in main view.
 - Colorize binary diff stats. (GH #17)
 - Custom colorization of lines matching a string prefix (GH #16).
   Example configuration: color "Reported-by:" green default
 - Use git's color settings for the main, status and diff views.
   Put `set read-git-colors = no` in ~/.tigrc to disable.
 - Handle editor options with multiple arguments. (GH #12)
 - Show filename when running tig blame with copy detection. (GH #19)
 - Use 'source <path>' command to load additional files from ~/.tigrc
 - User-defined commands prefixed with '@' are run with no console
   output, e.g.

   	bind generic 3 !@rm sys$command

 - Make display of space changes togglable in the diff and stage view.
   Bound to 'W' by default.
 - Use per-file encoding specified in gitattributes(5) for blobs and
   unstaged files.
 - Obsolete commit-encoding option and pass --encoding=UTF-8 to revision
   commands.
 - Main view: show uncommitted changes as staged/unstaged commits.
   Can be disabled by putting `set show-changes = no` in ~/.tigrc.
 - Add %(prompt) external command variable, which will prompt for the
   argument value.
 - Log information about git commands when the TIG_TRACE environment
   variable is set. Example: `TIG_TRACE=/tmp/tig.log tig`
 - Branch view: Show the title of the last commit.
 - Increase the author auto-abbreviation threshold to 10. (GH #49)
 - For old commits show number of years in relative dates. (GH #50)

Bug fixes:

 - Fix navigation behavior when going from branch to main view. (GH #38)
 - Fix segfault when sorting the tree view by author name.
 - Fix diff stat navigation for unmodified files with stat changes.
 - Show branches/refs which names are a substring of the current branch.
 - Stage view: fix off-by-one error when jumping to a file in a diff
   with only one file.
 - Fix diff-header colorization. (GH #15)

tig-0.18
--------

Incompatibilities:

 - Remove support for the deprecated TIG_{MAIN,DIFF,LOG,TREE,BLOB}_CMD
   environment variables.

Improvements:

 - Pressing enter on diff stat file lines will jump to file's diff.
 - Naïvely color blame IDs to distinguish lines.
 - Document palette color options used for revision graph and blame IDs.
 - Add support for blaming diff lines.
 - Add diff-context option and bindings to increase the diff context in
   the diff and stage view.
 - (GH-6) Make blame configurable via extra options passed from the command
   line and blame-options setting from ~/.tigrc. For example:

   	set blame-options = -C -C -C

Bug fixes:

 - Expand browsing state variables for prompt. (LP #694780, Debian #635546)
 - Fix segfault when sorting the branch view by author.
 - Expand %(directory) to . for the root directory. (GH-3)
 - Accept 'utf-8' for the line-graphics option as indicated in the docs.
 - Use erasechar() to check for the correct backspace character.
jperkin pushed a commit that referenced this issue Mar 14, 2014
Upstream changes:
2.0008 2013-07-06 00:09:43-0700
    [BUG FIXES]
    - Fix a chache issue that UTF8 flags were not turned on
      as expected (#82)
    - Fix Metakolon doc (#83)

2.0007 2013-06-21 13:16:16-0700
    [DOCUMENTS]
    - Add doc about chomping newlines (<:- ... -:>)

    [NEW FEATURES]
    - Add pre_process_handler to pre-process template content (bluescreen)

2.0006 2013-06-02 22:58:27
    [BUG FIXES]
    - Fix an issue that the state of VM broke on exception
      reported by nihen

2.0005 2013-06-02 12:23:15
    [BUG FIXES]
    - Fix a Multiplexed WRAPPER issue reportedy by @kawamuray (#79)
      Those who use WRAPPER, template cascading, or anonymous functions
      (lambdas) are strongly recommended to upgrade Xslate.

2.0004 2013-05-29 20:27:07
    [TEST FIXES]
    - Template string must be bytes (#78)

2.0003 2013-05-10 12:59:11
    [BUG FIXES]
    - Fix a crash on compiling templates (#77)

2.0002 2013-04-26 12:51:47
    [BUG FIXES]
    - Support perl-blead (5.17.11)
jperkin pushed a commit that referenced this issue Mar 14, 2014
-----
1.1.4
-----

* Issue #77: Fix error in upload command (Python 2.4).

-----
1.1.3
-----

* Fix NameError in previous patch.

-----
1.1.2
-----

* Issue #69: Correct issue where 404 errors are returned for URLs with
  fragments in them (such as #egg=).

-----
1.1.1
-----

* Issue #75: Add ``--insecure`` option to ez_setup.py to accommodate
  environments where a trusted SSL connection cannot be validated.
* Issue #76: Fix AttributeError in upload command with Python 2.4.
jperkin pushed a commit that referenced this issue Mar 14, 2014
(No changelog for 0.9.3 supplied, but includes maintainer change.)

Version 0.9.2
-------------

Released 2013/9/11

- Upgrade wtforms to 1.0.5.
- No lazy string for i18n `#77`_.
- No DateInput widget in html5 `#81`_.
- PUT and PATCH for CSRF `#86`_.

.. _`#77`: wtforms/flask-wtf#77
.. _`#81`: wtforms/flask-wtf#81
.. _`#86`: wtforms/flask-wtf#86


Version 0.9.1
-------------

Released 2013/8/21

This is a patch version for backward compitable for Flask<0.10 `#82`_.

.. _`#82`: wtforms/flask-wtf#82

Version 0.9.0
-------------

Released 2013/8/15

- Add i18n support (issue #65)
- Use default html5 widgets and fields provided by wtforms
- Python 3.3+ support
- Redesign form, replace SessionSecureForm
- CSRF protection solution
- Drop wtforms imports
- Fix recaptcha i18n support
- Fix recaptcha validator for python 3
- More test cases, it's 90%+ coverage now
- Redesign documentation
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
== 1.3.2 20131208

* Anon tests assigned unique class name.
* Fix TypeError on connect timeout with 1.8.x, 2.x.
* Complete revert to previous logger logic.
* start_timeout and tcp_nodelay parameters
* SSL Fix, revert not setting default ciphers.
* Copy hash params at init.
* Fix ssl => true for Ruby 1.9.x and 2.x.
* Expanded list of STOMP default SSL ciphers:
* Do not change caller's :hosts array
* Issue #78, again.
* Clean up logger interfacing.
* Fixes from RSpec testing

== 1.3.1 20131002

* Method calls to the logger object should check for that method first (#83)

== 1.3.0 20130930

* ERROR frames now raise an exception in the Stomp::Client thread(#73, #81)
* Allow anonymous connections (#75)
* Fix for subscription id handling in STOMP 1.1 (#78)
* Added a NullLogger (#77)
* Added :tcp_nodelay option (disable Nagle's algorithm) (#76)
* Read receipt ids are now UUIDs
* Added a :start_timeout parameter
jperkin pushed a commit that referenced this issue Mar 18, 2014
== 1.3.2 20131208

* Anon tests assigned unique class name.
* Fix TypeError on connect timeout with 1.8.x, 2.x.
* Complete revert to previous logger logic.
* start_timeout and tcp_nodelay parameters
* SSL Fix, revert not setting default ciphers.
* Copy hash params at init.
* Fix ssl => true for Ruby 1.9.x and 2.x.
* Expanded list of STOMP default SSL ciphers:
* Do not change caller's :hosts array
* Issue #78, again.
* Clean up logger interfacing.
* Fixes from RSpec testing

== 1.3.1 20131002

* Method calls to the logger object should check for that method first (#83)

== 1.3.0 20130930

* ERROR frames now raise an exception in the Stomp::Client thread(#73, #81)
* Allow anonymous connections (#75)
* Fix for subscription id handling in STOMP 1.1 (#78)
* Added a NullLogger (#77)
* Added :tcp_nodelay option (disable Nagle's algorithm) (#76)
* Read receipt ids are now UUIDs
* Added a :start_timeout parameter
jperkin pushed a commit that referenced this issue Apr 1, 2014
---
3.7
---

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

---
3.6
---

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

---
3.5
---

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

---
3.4
---

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

---
3.3
---

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

-----
3.2.1
-----

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

  Also, make the error message more verbose.

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

---
3.2
---

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

* File keyring:

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

* Add a test for removing one item in group.

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

---
3.1
---

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

-----
3.0.5
-----

* Issue #114: Fix logic in pyfs detection.

-----
3.0.4
-----

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

-----
3.0.3
-----

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

-----
3.0.2
-----

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

-----
3.0.1
-----

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

---
3.0
---

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

-----
2.1.1
-----

* Restored Python 2.5 compatibility (lost in 2.0).

---
2.1
---

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

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

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

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

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

*  Fixes to GnomeKeyring and SecretService tests.

-----
2.0.3
-----

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

-----
2.0.2
-----

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

-----
2.0.1
-----

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

---
2.0
---

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

-----
1.6.1
-----

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

---
1.6
---

*  GNOME Keyring backend:

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

* Secret Service backend:

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

---
1.5
---

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

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

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

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

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

---
1.4
---

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

---
1.3
---

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

-----
1.2.3
-----

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

-----
1.2.2
-----

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

-----
1.2.1
-----

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

---
1.2
---

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

-----
1.1.2
-----

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

-----
1.1.1
-----

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

---
1.1
---

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

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

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

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

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

---
1.0
---

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

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

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

* Merged 0.9.3 to include fix for #75.

----
0.10
----

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

-----
0.9.3
-----

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

-----
0.9.2
-----

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

-----
0.9.1
-----

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

---
0.9
---

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

-----
0.8.1
-----

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

---
0.8
---

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

*Backward Compatibility Notice*

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

-----
0.7.1
-----

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

---
0.7
---

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

-----
0.6.2
-----

* fix compiling on OSX with XCode 4.0

-----
0.6.1
-----

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

---
0.6
---

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

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

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

---
3.6
---

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

---
3.5
---

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

---
3.4
---

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

---
3.3
---

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

-----
3.2.1
-----

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

  Also, make the error message more verbose.

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

---
3.2
---

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

* File keyring:

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

* Add a test for removing one item in group.

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

---
3.1
---

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

-----
3.0.5
-----

* Issue #114: Fix logic in pyfs detection.

-----
3.0.4
-----

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

-----
3.0.3
-----

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

-----
3.0.2
-----

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

-----
3.0.1
-----

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

---
3.0
---

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

-----
2.1.1
-----

* Restored Python 2.5 compatibility (lost in 2.0).

---
2.1
---

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

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

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

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

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

*  Fixes to GnomeKeyring and SecretService tests.

-----
2.0.3
-----

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

-----
2.0.2
-----

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

-----
2.0.1
-----

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

---
2.0
---

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

-----
1.6.1
-----

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

---
1.6
---

*  GNOME Keyring backend:

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

* Secret Service backend:

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

---
1.5
---

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

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

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

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

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

---
1.4
---

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

---
1.3
---

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

-----
1.2.3
-----

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

-----
1.2.2
-----

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

-----
1.2.1
-----

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

---
1.2
---

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

-----
1.1.2
-----

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

-----
1.1.1
-----

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

---
1.1
---

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

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

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

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

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

---
1.0
---

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

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

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

* Merged 0.9.3 to include fix for #75.

----
0.10
----

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

-----
0.9.3
-----

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

-----
0.9.2
-----

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

-----
0.9.1
-----

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

---
0.9
---

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

-----
0.8.1
-----

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

---
0.8
---

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

*Backward Compatibility Notice*

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

-----
0.7.1
-----

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

---
0.7
---

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

-----
0.6.2
-----

* fix compiling on OSX with XCode 4.0

-----
0.6.1
-----

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

---
0.6
---

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

* Add a utility to access the keyring from the command line.
jperkin pushed a commit that referenced this issue May 7, 2014
PR pkg/48781 by me.

Version 1.8.8
* don't clobber user's PATH (mayersj1: Steve Mayer) #77

Version 1.8.7
* use more lines for fallback man page detection, misc. code cleanups (eworm-de: Christian Hesse)

Version 1.8.6
* allow _vimrc on non-windows (mortonfox: Morton Fox)

Version 1.8.5
* fix up arrow binding again, broken in 1.8.4

Version 1.8.4
* disable help screen 'h' binding, cursor moves left instead (Github issue #71)

Version 1.8.3
* reexec self under bash or ksh when available, especially on Solaris (Github issue #63)
* add vim command -c option (aroig: Abdo Roig-Maranges)
* allow ~/.vim/vimpagerrc as conf file (lucc: Lucas Hoffmann)
jperkin pushed a commit that referenced this issue Jun 2, 2014
PR pkg/48781 by me.

Version 1.8.8
* don't clobber user's PATH (mayersj1: Steve Mayer) #77

Version 1.8.7
* use more lines for fallback man page detection, misc. code cleanups (eworm-de: Christian Hesse)

Version 1.8.6
* allow _vimrc on non-windows (mortonfox: Morton Fox)

Version 1.8.5
* fix up arrow binding again, broken in 1.8.4

Version 1.8.4
* disable help screen 'h' binding, cursor moves left instead (Github issue #71)

Version 1.8.3
* reexec self under bash or ksh when available, especially on Solaris (Github issue #63)
* add vim command -c option (aroig: Abdo Roig-Maranges)
* allow ~/.vim/vimpagerrc as conf file (lucc: Lucas Hoffmann)
jperkin pushed a commit that referenced this issue Jul 23, 2014
1.7.3
-----

- Issue #77: Fix import six on Python 3.4 with a custom loader.

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

## 0.8.12 (2015-05-26)

* Fix `HTTP.timeout` API (was loosing previously defined options). (@ixti)


## 0.8.11 (2015-05-22)

* SNI support for HTTPS connections. See #229. (@tarcieri)
* Use "http.rb" in the User-Agent string. See #227. (@tarcieri)


## 0.8.10 (2015-05-14)

* Fix cookie headers generation. (@ixti)


## 0.8.9 (2015-05-11)

* Add cookies support. (@ixti)
* Enforce stringified body encoding. See #219. (@Connorhd)


## 0.8.8 (2015-05-09)

* Fix CONNECT header for proxies. See #217. (@Connorhd)


## 0.8.7 (2015-05-08)

* Fix `HTTP.timeout` API with options only given. (@ixti)


## 0.8.6 (2015-05-08)

* Reset global timeouts after the request finishes. See #215. (@zanker)


## 0.8.5 (2015-05-06)

* Add simple timeouts configuration API. See #205. (@ixti)
* Deprecate `Request#request_header`. Use `Request#headline` instead. (@ixti)


## 0.8.4 (2015-04-23)

* Deprecate `#default_headers` and `#default_headers=`. (@ixti)
* Deprecate chainable methods with `with_` prefix. See #207. (@ixti)
* Add support of HTTPS connections through proxy. See #186. (@Connorhd)


## 0.8.3 (2015-04-07)

* Fix request headline. See #206. (@ixti)
* Remove deprecated `Request#__method__`. (@ixti)


## 0.8.2 (2015-04-06)

* Fix Celluloid::IO compatibility. See #203. (@ixti)
* Cleanup obsolete code. (@zanker)


## 0.8.1 (2015-04-02)

* Add missing `require "resolv"`. See #202. (@ixti)
* Add block-form `#persistent` calls. See #200, #201. (@ixti)


## 0.8.0 (2015-04-01)

* Properly handle WaitWritable for SSL. See #199. (@zanker)
* Add support for non-ASCII URis. See #197. (@ixti)
* Add configurable connection timeouts. See #187, #194, #195. (@zanker)
* Refactor requests redirect following logic. See #179. (@ixti)
* Support for persistent HTTP connections (@zanker)
* Add caching support. See #77 and #177. (@Asmod4n, @pezra)
* Improve servers used in specs boot up. Issue was initially raised up
  by @olegkovalenko. See #176. (@ixti)
* Reflect FormData rename changes (FormData -> HTTP::FormData). (@ixti)
* `HTTP::Headers` now raises `HTTP::InvalidHeaderNameError` in case of
  (surprise) invalid HTTP header field name (e.g.`"Foo:Bar"`). See #173.
  (@ixti)
jperkin pushed a commit that referenced this issue Oct 5, 2015
This release comprises some changes to the build machinery, notably
commit 49d1be0 which puts tests/tests.sh.in on list of files for
tarball. The Git log has the complete record.


Maxima 5.37 change log
======================

New items in core:
------------------

* new function with_default_2d_display: ensure pretty-printing output


New items in share:
-------------------

* new package cryptools: tools for cryptography
* new package elliptic_curves: elliptic curves over prime fields and binary fields
* new function cgrind: output Maxima expressions as C code
* package draw: new function vennplot (Venn diagrams)
* package stringproc: new functions flush_output, readbyte, and writebyte

Changes in core:
----------------

* function gf_symmetric renamed to gf_balanced


Changes in share:
--------------

* functions md5sum, sha1sum, sha256sum and base64_decode: accept and return numbers and octet lists as well as strings
* packages aes and aes2: provide flexible support for different data types, e.g. octet lists


Bug fixes:
----------

* [#3005]: Manual is wrong about "sqrt" and "radexpand"
* [#2998]: extra () in display2d:false output
* [#2988]: documentation error in gf_manual.pdf
* [#2987]: Some divergent integrals give error, some don't
* [#2982]: Display of taylor series in wrong order
* [#2980]: "rectform" causes infinite recursion depending on variable name
* [#2975]: number of distinct partitions gives wroing result
* [#2972]: Wrong limits involving logs
* [#2937]: dotscrules and antisymmetric
* [#2936]: stack overflow in integrate
* [#2934]: dotscrules and antisymmetric
* [#2929]: misformatting in debugger help message
* [#2905]: Assigning variable twice yields different results
* [#2620]: atan2(y,x)+atan2(-y,x) doesnt always return 0
* [#2230]: abs(x)^(2*int) doesn't simplify
* [#2211]: rtest_sign #77
* [#2183]: eigenvectors of a 10 x 10
* [#1193]: ev doesn't bind functions safely

Unnumbered bugs:
----------------

* commit [6779ac0]: zn-nrt: root of zero should be zero
* commit [b212487]: Fix up version variables so that load(drawutils) succeeds
* mailing list 2015-08-29: [Documentation fails with error][1]
* mailing list 2015-08-27: [Warnings from loading cartan package][2]
* mailing list 2015-08-25: [Strange symmetry of acoth(x), area cotangens hyperbolicus function (#552)][3]
* mailing list 2015-08-17: [trouble with GCL build][4]
* mailing list 2015-06-11: [rationalize(0.1) and the manual][5]

[1]: https://sourceforge.net/p/maxima/mailman/message/34417174/
[2]: https://sourceforge.net/p/maxima/mailman/message/34411188/
[3]: https://sourceforge.net/p/maxima/mailman/message/34401610/
[4]: https://sourceforge.net/p/maxima/mailman/message/34369023/
[5]: https://sourceforge.net/p/maxima/mailman/message/34196346/
jperkin pushed a commit that referenced this issue Jan 19, 2016
Changes:
Version 5.1.2
=============
Code Fixes
----------
* Code hardening using reallocarray() from OpenBSD.
* Sanity check in giffilter catches files with malformed extension records
  Fixes SourceForge bug #63: malformed gif causes segfault in giffilter.
* Inexpensive sanity check in DGifSlurp() catches malformed files with
  no image descriptor. Fixes SourceForge bug #64: malformed gif causes
  crash in giftool.
* Fix SourceForge bug #66: GifDrawBoxedText8x8() modifying constant input
  parameter.
* Bail out of GIF read on invalid pixel width. Addresses Savannah bug
  #67: invalid shift in dgif_lib.c
* Fix SourceForge bug #69: #69 Malformed: Gif file with no extension
  block after a GRAPHICS_EXT_FUNC_CODE extension causes segfault (in
  giftext).
* Fix SourceForge bug #71: Buffer overwrite when giffixing a malformed gif.
* Fix SourceForge bug #73: Null pointer deference in gifclrmap (only
  reachable with malformed GIF).
* Fix SourceForge bug #74: Double free in gifsponge under 5.1,1,
  for any valid gif image.
* Fix SourceForge bug #75: GAGetArgs overflows due to uncounted use of va_arg.
* Sanity check in giffix catches some malformed files. Addresses
  SourceForge bug #77: dgif_lib.c: extension processing error
jperkin pushed a commit that referenced this issue Jan 22, 2016
Version v1.7.5 - March 25, 2015

    Prevent method redefined warnings being generated by replacing uses of attr_accessor with: attr_reader where a setter function is already defined, attr_writer where a getter function is already defined

Version v1.7.4 - March 23, 2015
Version v1.7.3 - March 23, 2015
Version v1.7.2 - March 23, 2015
Added

    rubygems config

Version v1.7.1 - December 21, 2014
Bugfix

    ETA works again, when ProgressBar is initialized with a non zero starting_at.

Uncategorized

    Describe the wiki link
    Inline the cage image in the README
    THE CAGE
    Remove superfluous subtitle
    Remove sections from the README that were moved to the Wiki
    Add link to wiki
    Update logo

Version v1.7.0 - November 4, 2014
Feature

    Massive internal refactoring. Now 236% faster!
    Add Timer#restart

Version v1.6.1 - October 30, 2014
Uncategorized

    Update readme about output option
    Display warnings when testing

Bugfix

    Remove warnings from uninitialized instance variable
    Instance variable @started_at not initialized
    Instance variable @out_of_bounds_time_format not initialized
    Change private attributes to protected
    `*' interpreted as argument prefix
    Prefix assigned but unused variables with underscores
    Ambiguous first argument

Version v1.6.0 - September 20, 2014
Feature

    Add ability to disable auto-finish
    Add SCSS lint configuration
    Update JSHint config with our custom version
    Add right-justified percentages - Closes #77

Bugfix

    Don't allow title to change for non-TTY output
    Percentage formatter failed when total was 0 or unknown

Version v1.5.1 - May 14, 2014
Uncategorized

    Make grammar and spelling corrections in the README
    Add the ability to scale the rate component
    Add notes to the README about the new format components
    Add the %R flag to the formatting to show the rate with 2 decimal places of precision
    Remove unused molecule cruft
    Add specs to make sure that rate works even if the bar is started in the middle
    Add base functionality for the rate component
    Add Slack notification to Travis builds
    Upgrade rspectacular to v0.21.6
    Upgrade rspectacular to v0.21.5
    Upgrade rspectacular to v0.21.4
    Upgrade rspectacular to v0.21.3
    Upgrade rspectacular to v0.21.2
    Add badges to the README
    Upgrade rspectacular to v0.21.1
    Lower Timecop version for Ruby 1.8 compatibility
    Lower rake version to 0.9.6 so that it will be compatible with Ruby 1.8
    Update rspectacular to 0.21
    Add CODECLIMATE_REPO_TOKEN as a secure Travis ENV variable
    Upgrade rspectacular to v0.20
    Add the Code Climate test reporter gem
    Add Ruby 2.1 to Travis
    Convert to RSpec 3

Feature

    The running average is always set back to 0 when the bar is reset

Version v1.4.2 - March 1, 2014

    Improve estimated timer for short durations
    Remove useless protection
    README Update
    Slight formatting changes on the PACMAN example to make it consistent with the others
    Pacman-style progressbar

Version v1.4.1 - January 26, 2014

    Change from 'STDOUT.puts' to the more appropriate 'Kernel.warn'
    Add another spec which tests this in a different way
    Add an acceptance spec to mimic running fuubar with no specs
    Makes Timer#stop a no-op unless it has first been started.

Version v1.4.0 - December 28, 2013

    Displaying the call stack was probably too much
    Upgrade fuubar
    Add an error specifically for invalid progress so that, in parent libraries, it can be caught properly
    Use the splat operator just to be clear
    Fix an issue with the estimated timers blowing up if the total was nil - Closes #62
    Changed my mind. Rather than checking if the bar is stopped/started just blow up when the attempt is made to increment/decrement the bar to an invalid value
    Remove the CannotUpdateStoppedBarError
    Changes to the total should also be considered a change in progress and should therefore not be allowed for a stopped bar
    Add a warning that any changes to progress while the bar is stopped, will eventually be an exception
    Use the helper to divide the seconds. Don't know why I didn't do this before
    When finishing the bar, we also should stop the timers
    When checking 'finished?' make sure we check all progressables
    Always thought it was weird that the 'finished?' check was in the update method
    Move the 'finished' logic into the progressable
    Rather than specifying @elapsed_time explicitly, use the with_timers helper
    Add a method to check to see whether the bar has been started
    Extract logic for updating progress into a 'update_progress' method
    Add placeholder for an Error which will be used in v2.0.0
    Update the copyright in the README to 2014 (we're almost there :)
    Add 'Zero dependencies' to the README as a beneifit of using ruby-progressbar

Version v1.3.2 - December 15, 2013

    Try to fix issues with testing on 1.8 and 1.9 when 'console/io' is not available
    Remove rspectacular so we can get the specs to pass on 1.8 and 1.9.2

Version v1.3.1 - December 15, 2013

    Even if the throttle rate is passed in as nil, use the default regardless

Version v1.3.0 - December 15, 2013

    Remove the 'Road Map' section in the README
    Add notes to the README about non-TTY output
    Add notes to the CHANGELOG
    Give the bar the option of whether or not to automatically start or if #start has to be explicitly called
    Default to a non-TTY-safe format if there is no TTY support when outputting the bar
    Do not output the bar multiple times if #resume is called when the bar is already started
    Do not output the bar multiple times if #stop is called when the bar is already stopped
    Do not output multiple bars if #finish is called multiple times
    Change progressbar variables in specs to be let's instead
    Change output variables in specs to be let's instead
    Update Gemfile.lock to use HTTPS for Rubygems
    Add Ruby 2.0.0 to the README as a supported Ruby version
    Test with Ruby 2.0.0 on Travis CI
    Use HTTPS RubyGems source
    Added an option to set the :remainder_mark (along the lines of :progress_mark) that allows the user to set the character used to represent the remaining progress to be made along the bar.
    Add specs for the ANSI color code length calculation
    Name the regex for the ANSI SGR codes so that it's more clear what we're doing
    Remove comment
    allows to inclue ANSI SGR codes into molecules, preserving the printable length
    Switch from using 'git ls-files' to Ruby Dir globbing - Closes #54

Version v1.2.0 - August 12, 2013

    Add note to CHANGELOG about TTY updates
    Update benchmark script
    Update logic to describe the bar as being 'stopped' also when it is 'finished'
    Only print the bar output if we're printing to a TTY device, or any device as long as the bar is finished
    Switch to instead of STDOUT so that it can be properly reassigned for redirections
    Move carriage return to the clear method
    Add better inspection now that we can have a nil total
    Add note about unknown progress to the changelog
    Add notes to the README about displaying unknown progress
    Fix missing throttle rate in README
    Allow the progress bar to have an 'unknown' amount of progress
    Add item to the changelog
    Update the benchmark script
    Add #log to progressbar for properly handling bar output when printing to the output IO
    Add CHANGELOG
    Rename all of the requires lines to be consistent with the new lib file
    Remove depreciation code

Version v1.1.2 - August 11, 2013

    Fix the 'negative argument' problem - Closes #47
    Update a spec that was passing when it shouldn't have been and pend it until we can implement the fix
    Upgrade rspec and fuubar
    When dividing up the remainder of the length and determining how much space a completed bar should take up, round down so that the bar doesn't complete until 100%
    Add tags file to gitignore

Version v1.1.1 - June 8, 2013

    Fix file modes to be world readable
    Filter out specs themselves from coverage report
    Add tags file to gitignore
    Simplify #with_progressables and #with_timers

Version v1.1.0 - May 29, 2013

    Upgrade simplecov so it is resilient to mathn being loaded
    fix progress format when core lib mathn is loaded
    Rename throttle_period to throttle_rate
    Set a default throttle_period of 100 times per second
    Use the new precise #elapsed_seconds in the throttle component
    Add #elapsed_seconds that gets a more precise value for the elapsed time
    Rename #elapsed_seconds to #elapsed_whole_seconds
    Add throttle_period documentation
    Made throttle API resemble other components
    Add throttle_period option to #create
    Add throttle component
    Use StringIO in the new spec so we don't get output to STDOUT
    fix for the ruby_debug error, where debug defines a start method on kernel that is used erroneously by progressbar
    spec that recreates the problem we're seeing with ruby-debug under jruby
    fix terminal width crashing progressbar
    Add failing test for terminal width crashing progress bar
    Make sure we're using an up-to-date version of the JSON gem
    Fix gemspec since Date.today is no longer supported
    Update ruby-prof
    Upgrade timecop
    Upgrade simplecov
    Upgrade rake
    Make changes related to rspectacular
    Install rspectacular
    Remove guard
    Rework gem manifest so that it only calls ls-files once
    Replace .rvmrc with .ruby-version
    Rework #length specs now that we have a more complex set of specifications
    Fix overriding the progress bar length with an environment variable.
    Fix the rdoc_options specification in the gemspec
    Add Ruby Markdown code fencing to the README

Version v1.0.2 - October 7, 2012

    Remove superfluous comment
    The amount returned if the total is 0 should always be 100 (as in 100%) and not the DEFAULT_TOTAL. Even though they currently happen to be the same number.
    return DEFAULT_TOTAL for percentage_completed of total is zero, fixing ZeroDivisionError
    Use io/console where available.
    Add tmux notifications to Guardfile
    Bundler is not a development dependency
    Hashes are not ordered and therefore when looking for the time mocking method, we weren't selecting the proper one. Switched to an Array instead.
    Update development gems
    Move ruby-prof into the Gemfile so it is only loaded when it's MRI Ruby
    Add a script for benchmarking
    Now that we're memoizing Format::Base#bar_molecules, just use it to calculate how many bar molecules are left
    Limit the API of the Format.Base class by making #non_bar_molecules and #bar_molecules private
    Move Formatter#process into Format::Base because it is much more concerned with the format
    Remove the Kernel#tap in Formatter#process and just use an instance variable instead
    Now that we're not reparsing the format string each time, we can save some cycles by memoizing the Format::Base#non_bar_molecules and #bar_molecules
    When setting the format string, if it hasn't changed, we don't need to reparse it
    Extract the logic of setting the format string out into its own private method ProgressBar::Formatter#format_string=
    Add 'ruby-prof' to the project as a development gem

Version v1.0.1 - August 28, 2012

    Add Ruby 1.8.7 back into Travis CI build
    Fixing string slice bug
    Add a Rakefile
    Update .gitignore
    Add Rake to the Gemfile

Version v1.0.0 - August 18, 2012

    Remove 1.8 from the Ruby Travis builds
    Add a spec for the %% molecule
    Fix bug where a progress bar with an integrated percentage miscalculated the space it was taking up
    fix @terminal_width and bar_width calculation
    Fix more README typos
    Set the default bar mark to '='
    Make sure to blow up if a molecule is not value
    It's not sufficient to say that a molecule is 'a percent sign followed by something that isn't a percent sign', we need to force it to be followed by a letter
    Fix   problems in the README
    Update the formatting to make sure the %b and %i formatting molecules can coexist with each other
    Now that we can use the %b and %i flags, we can create a mirrored bar simply by using a format string of '%i%b' and therefore this extra code is no longer necessary
    Make sure that when the timer is started, then stopped, then started again, it should not register as stopped?
    Allow %i to be used display the incomplete space of the bar
    Update ProgressBar::Formatter#format to reset the bar style to default if it is called without passing in a format string
    Allow the %b molecule to be used to display the bar only without incomplete space
    Update the %B format test to be more reasonable
    Make the %w molecule only return the bar with the percentage instead of including empty space
    Remove the length argument when calling ProgressBar::Components::Bar#to_s and instead set the attribute
    Rename ProgressBar::Formatter#bar to #complete_bar
    Change the %b (bar with percentage) format molecule to %w
    Swap the meaning of the %b and %B molecules
    There was a typo in the example formats in the README. The literal percent sign needs to be included in the format string
    Make sure the '%%' molecule is formatted properly
    Little refactoring on the ProgressBar::Formatter#process method
    README update
    Remove all of the ProgressBar::Base#update calls and convert to method calls that take a block #with_update
    Add an "In The Weeds" section to the README
    Add 'It's better than some other library' section to the README
    Add contributors to the README
    Add supported Rubies to the README
    Tons of README formatting updates
    Add time-mocking information to the README
    If Time is being mocked via Delorean, make sure that the progress bar always uses the unmocked time
    If Time is being mocked via Timecop, make sure that the progress bar always uses the unmocked time
    When testing, make sure that we're able to always get the proper version of now that we need for our particular spec
    When calling ProgressBar::Time.now allow a Time-like object to be passed in
    Add a ruby-progressbar-specific implementation of Time to encapsulate the business logic
    Extract the notion of now into a method on the Timer module
    Remove extra private
    Use inheritance to put title= in the Formatter module where it belongs
    I didn't notice that #total and #progress were available in the Formatter module
    Move logic specific to the modules into those modules and use the inheritance chain to get at them
    Evidently Travis is having issues with Rubinius so we'll remove them from our .travis.yml file to get a passing build
    Try and get better 1.8.7 compatibility when checking the end character in the progressbar string
    Add the Travis-CI build status to the README
    Add the Travis-CI configuration file
    Update the other deprecation warnings outside of ProgressBar::Base
    Add the remaining method deprecation/warning messages
    Use a little metaprogramming to further dry up the deprecation messages
    fixup! c3e6991988107ab45ac3dac380750b287db3bc2e
    When displaying deprecation warnings for methods, only show them one time; not every time the method is invoked
    Dry up the warning messages in ProgressBar::Depreciable
    Move ProgressBar::Base#backwards_compatible_args_to_options_conversion to the ProgressBar::Depreciable module
    Add a new ProgressBar::Depreciable module to encapsulate all of the deprecation logic
    Forgot to return the options hash from ProgressBar::Base#backwards_compatible_args_to_options_conversion
    Add the old bar_mark= method back so it's more backwards compatible
    Update deprecation warnings to expire June 30th, 2013 instead of October 30th, 2013
    Update the README to reflect the new syntax for creating a ProgressBar
    Override ProgressBar.new and remain backward compatible with the pre-1.0 versions of the gem
    Convert the ProgressBar module to a class so that we can...
    Add ProgressBar::Base#progress and #total
    Update the gemspec
    Update the EstimatedTimer specs when smoothing is turned off such that the #decrement spec is sufficiently different from the smoothing on #decrement spec
    Update EstimatedTimer specs when smoothing is turned off to be more consistent with the new smoothing specs
    Add EstimatedTimer specs to test when smoothing is turned on
    Update the spec text for the EstimatedTimer class so that it doesn't contain the actual expected value but rather the general expectation
    Extract smoothing into its own let variable
    Add notes to the README about smoothing
    Invert the smoothing value such that 0.0 is no smoothing and 1.0 is maximum smoothing
    Set the default smoothing value to 0.9
    Convert the EstimatedTime#estimated_seconds_remaining over to using the running average
    Tell the Progressable module to update the running average any time the progress is set
    Add the notion of a smoothing variable to the Progressable module for use when calculating the running average
    Introduce Progressable#running_average and reset it any time Progressable#start is called
    Add a RunningAverageCalculator so we can offload the logic for calculating running averages in our Progressables
    Always refer to total using the accessor rather than the instance variable
    Fix place where we were using a literal string for our time format rather than the TIME_FORMAT constant
    Make the Progressable initializer optional
    Fix README mistake regarding out of bounds ETAs
    In Progressable, rather than accessing the starting_position instance variable, use an accessor
    Rather than having the logic in multiple places, use Progressable#start where possible
    Update the Progressable module to always reference the progress accessor rather than the instance variable
    Add the ability to customize the bar's title in real time
    Add a note to the README about customizing the bar in real time
    Add notes to the README about overriding the bar's length
    Update the deprecation date of
    Upgrade the README to describe the new 'integrated percentage' formatting option
    Update Ruby version in .rvmrc
    Replace @out.print with @out.write to work better in dumb terminal like Emacs' M-x shell.
    Document the smoothing attribute a little better.
    Rewrote smoothing stuff to something better.
    Offload handling of weird time values to format_time (isn't that its job?) ;-)
    Added "smoothing" attribute (default 0.9). It can be set to nil to use the old ETA code.
    Make time estimate a smoothed moving average
    Use the inherited #initialize
    Add a format where the bar has an integrated percentage
    Just always run all specs
    Alias stopped? to paused?
    If the bar is completed, show the elapsed time, otherwise show the estimated time
    estimated_time to estimated_time_with_no_oob
    Add a Guardfile
    Add the ability to set the progress mark at any point
    Upgrade RSpec in the Gemfile
    Allow :focused w/o the '=> true'
    More gem updates. Include guard
    Quotes
    Unindent private methods
    And again
    Consistency is key
    And again
    Change to new date and repo
    Upgraded RSpec uses RSpec not Rspec
    Not sure why I did this here
    Upgrade RSpec and SimpleCov
    Bump Ruby version to 1.9.3
    allow to customize the #title_width
    Detect whether the output device is a terminal, and use a simplified output strategy when it is not.
    Use 1.9 compatible require in test.
    Add tests for Timecop and Delorean time mocking
    Make Progressbar resistant to time mocking
    Automatically tag gem builds as Date.today
    Replace the Bar's instance variable references
    Remove Options Parser
    The starting value should be passed on #start
    Remove Title class for now
    Change 'reversed bar' to 'mirrored bar'
    Rename out to output and access w/o variable
    Change default output to STDOUT
    Rename output_stream to output
    Rename current to progress
    Update README
    Add #decrement to the progress bar
    Backwards compatibility for instantiation
    Create with_timers helper
    Update spec_helper with new root gem file
    Update gemspec with new license file
    Update gemspec to auto-update Date
    Add deprecation and backwards compatibility helprs
    Add SimpleCov to the project
    Rename 'beginning_position' option to 'started_at'
    Fix require files
    Update README
    Update README
    Update README
    Remove Test::Unit test cases which are covered
    Replace licenses with the MIT license
    Begin updating README
    Add .gitignore
    Fix 'ArgumentError: negative argument' when using with Spork
    Bar can be forcibly stopped
    Autostart for now
    Add ability to pause/resume progress bar
    Bar resets the elapsed time when reset.
    Bar resets the estimated time when reset.
    Timers can now be reset
    #start determines #reset position
    On #reset, bar goes back to its starting position
    Bar can be reset back to 0
    Fix test typo
    Fix tests
    Reminder for autostart
    Move #title
    Delete unneeded code
    Stop Elapsed Timer on finish
    Progressable components finish properly
    Refactor out common 'Progressable' functionality
    Prepare for more 'finish' functionality
    Refactor common Timer functionality into a module
    Bar outputs a \n when it's finished
    Bar can now be "finished"
    Remove unnecessary (for now) code
    Resizing algorithm is much smarter
    Fix length_changed? check
    Move formatting methods and make them private
    Create #inspect method
    Remove implemented methods
    We have a LICENSE file. No need for this.
    Fix output problem
    Always show 2 decimal places with precise percentage
    Elapsed Time works properly with progress bar
    Estimated Timer works properly with progress bar
    %r format string works properly
    Estimated Timer can now be incremented
    Bar graphic can now be reversed
    Remove method arguments from molecule
    %e, %E and %f format the estimated time correctly
    Formatting
    Include Molecule specs
    Estimated Timer works with out of bounds times
    Estimated Timer displays estimated time correctly
    Estimated Timer displays unknown time remaining
    Estimated Time can now be displayed
    Make Timer work properly
    Move bar_spec to the proper locale
    Elapsed Time can now be displayed
    Percentage information can now be displayed
    Capacity information can now be displayed
    Move Bar and Title into Components submodule
    Base refactoring work laid out
    Add RSpec support files
    Create a Gemfile and other infrastructure files
    Update gemspec
    Fix to failing test: Adjusting the path to progressbar.rb file
    accessor for alternate bar mark
    Updated gem name to match project (so it would build)
    Add a gemspec.
    Move progressbar.rb into lib/.
    Add LICENSE files.
    Get rid of the ChangeLog. That's what revision logs are for.
    Make the readme use Markdown.
    Initial commit (based on Ruby/ProgressBar 0.9).
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)
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