3.1.0
=====

Features:

* Bump rand dependency to `0.7`.

Breaking: The minimum rust version is now `1.32.0`.

3.0.9
=====

Documentation:

* Add an example for reopening a named temporary file.
* Flesh out the security documentation.

Features:

* Introduce an `append` option to the builder.
* Errors:
  * No longer implement the soft-deprecated `description`.
  * Implement `source` instead of `cause`.

Breaking: The minimum rust version is now 1.30.

3.0.8
=====

This is a bugfix release.

Fixes:

* Export `PathPersistError`.
* Fix a bug where flushing a `SpooledTempFile` to disk could fail to write part
  of the file in some rare, yet-to-reproduced cases.

3.0.7
=====

Breaking:

* `Builder::prefix` and `Builder::suffix` now accept a generic `&AsRef<OsStr>`.
  This could affect type inference.
* Temporary files (except unnamed temporary files on Windows and Linux >= 3.11)
  now use absolute path names. This will break programs that create temporary
  files relative to their current working directory when they don't have the
  search permission (x) on some ancestor directory. This is only likely to
  affect programs with strange chroot-less filesystem sandboxes. If you believe
  you're affected by this issue, please comment on #40.

Features:

* Accept anything implementing `&AsRef<OsStr>` in the builder: &OsStr, &OsString, &Path, etc.

Fixes:

* Fix LFS support.
* Use absolute paths for named temporary files to guard against changes in the
  current directory.
* Use absolute paths when creating unnamed temporary files on platforms that
  can't create unlinked or auto-deleted temporary files. This fixes a very
  unlikely race where the current directory could change while the temporary
  file is being created.

Misc:

* Use modern stdlib features to avoid custom unsafe code. This reduces the
  number of unsafe blocks from 12 to 4.

3.0.6
=====

* Don't hide temporary files on windows, fixing #66 and #69.

3.0.5
=====

Features:

* Added a spooled temporary file implementation. This temporary file variant
  starts out as an in-memory temporary file but "rolls-over" onto disk when it
  grows over a specified size (#68).
* Errors are now annotated with paths to make debugging easier (#73).

Misc:

* The rand version has been bumped to 0.6 (#74).

Bugs:

* Tempfile compiles again on Redox (#75).

3.0.4
=====

* Now compiles on unsupported platforms.

3.0.3
=====

* update rand to 0.5

3.0.2
=====

* Actually *delete* temporary files on non-Linux unix systems (thanks to
@oliverhenshaw for the fix and a test case).

3.0.1
=====

* Restore NamedTempFile::new_in

3.0.0
=====

* Adds temporary directory support (@KodrAus)
* Allow closing named temporary files without deleting them (@jasonwhite)

2.2.0
=====

* Redox Support

2.1.6
=====

* Remove build script and bump minimum rustc version to 1.9.0

2.1.5
=====

* Don't build platform-specific dependencies on all platforms.
* Cleanup some documentation.

2.1.4
=====

* Fix crates.io tags. No interesting changes.

2.1.3
=====

Export `PersistError`.

2.1.2
=====

Add `Read`/`Write`/`Seek` impls on `&NamedTempFile`. This mirrors the
implementations on `&File`. One can currently just deref to a `&File` but these
implementations are more discoverable.

2.1.1
=====

Add LFS Support.

2.1.0
=====

* Implement `AsRef<File>` for `NamedTempFile` allowing named temporary files to
  be borrowed as `File`s.
* Add a method to convert a `NamedTempFile` to an unnamed temporary `File`.

2.0.1
=====

* Arm bugfix

2.0.0
=====

This release replaces `TempFile` with a `tempfile()` function that returnes
`std::fs::File` objects. These are significantly more useful because most rust
libraries expect normal `File` objects.

To continue supporting shared temporary files, this new version adds a
`reopen()` method to `NamedTempFile`.
