# CHANGES

## 0.3.23

* Raise minimum Python version to 3.6.

* Handle FileNotFoundError when using subprocess on Python >= 3.8.

## 0.3.22

* Fix: default connect timeout was not being set correctly.

## 0.3.21

* Add close() method to shells, behaving the same as __exit__().

## 0.3.20

* SshShell: passing None as the port argument will cause port 22 to be used.

* Raise CouldNotChangeDirectoryError when failing to change directory to the cwd
  argument.

## 0.3.19

* Allow spur to be used with Paramiko 2. To quote the Paramiko changelog [1]:

    Replace PyCrypto with the Python Cryptographic Authority (PyCA)
    ‘Cryptography’ library suite. This improves security, installability, and
    performance; adds PyPy support; and much more.

  This should only affect installation requirements for Paramiko: see the
  changelog for more information. Since the API of Paramiko remains unchanged,
  spur should remain compatible with both Paramiko 1 and Paramiko 2.

  Note that Python 3.2 is not compatible with Paramiko 2: you can continue to
  use spur with Python 3.2 and Paramiko 1, although upgrading is recommended.

[1]: http://www.paramiko.org/changelog.html#2.0.0

## 0.3.18

* Add sock argument to SshShell.

## 0.3.17

* When encoding argument is set, decode output before writing to stdout and
  stderr arguments. This changes the behaviour to match the documented
  behaviour: previously, only the output on the result object was decoded.

## 0.3.16

* Remove non-ASCII character from README.rst.

## 0.3.15

* Add encoding argument to spawn and run.

* SshShell: add load_system_host_keys argument.

* LocalShell: don't raise NoSuchCommandError when cwd does not exist.

## 0.3.14

* Raise spur.CommandInitializationError when SshShell fails to read integers
  from stdout before the command is actually run.

## 0.3.13

* Add look_for_private_keys argument to SshShell to allow searching for private
  keys to be disabled.

## 0.3.12

* Add shell_type argument to SshShell to allow better support for minimal
  shells, such as those found on embedded systems.

* Open files in text mode by default. When opening files over SSH, this means
  that files are decoded using the encoding returned by
  locale.getpreferredencoding().

## 0.3.11

* Add support for platforms that don't support the pty module, such as Windows.

## 0.3.10

* SshShell: Use "which" if "command -v" is not available. Fixes GitHub issue #15:

    https://github.com/mwilliamson/spur.py/issues/15

## 0.3.9

* Treat output as bytes rather than attempting to decode to string when
  generating RunProcessError.message. Fixes GitHub issue #13:

    https://github.com/mwilliamson/spur.py/pull/13

* Support unicode commands over SSH.

## 0.3.8

* Add full support for Python 3.

## 0.3.7

* Handle buffering more consistently across different Python versions.

## 0.3.6

* LocalShell: Add support for Python 3. Since paramiko is currently unsupported
  on Python 3, use the package "spur.local" rather than "spur".

## 0.3.5

* SshShell: Use "command -v" instead of "which" for better POSIX compliance.
* SshShell: Skip blank lines when expecting echoed return code.

## 0.3.4

* LocalShell: Use Popen.wait instead of Popen.poll to get return code of local
  process to ensure process has exited.

## 0.3.3

* Make username argument to SshShell optional. Closes GitHub issue #4.

## 0.3.2

* Include original error and original traceback on spur.ssh.ConnectionError
* Add experimental use_pty argument for run and spawn. Use at your own risk!

## 0.3.1

* spur.NoSuchCommandError is now raised if the command passed to run
  or spawn doesn't exist

## 0.3.0

* Change default behaviour to raise an error when a host key is missing.
* Allow selection of behaviour when a host key is missing by adding
  host_key_missing argument to SshShell constructor.

## 0.2.4

* Catch EOFError and wrap it in spur.ssh.ConnectionError when opening SSH
  session
