========================
Changes in version 0.9.2
========================

The following changes were implemented in Fabric 0.9.2:

Feature additions
=================

* The `~fabric.operations.reboot` operation has been added, providing a way for
  Fabric to issue a reboot command and then reconnect after the system has
  restarted.
* ``python setup.py test`` now runs Fabric's test suite (provided you have all
  the prerequisites from the ``requirements.txt`` installed). Thanks to Eric
  Holscher for the patch.
* Added functionality for loading fabfiles which are Python packages
  (directories) instead of just modules (single files.) See
  :ref:`fabfile-discovery`.
* Added output lines informing the user of which tasks are being executed (e.g.
  ``[myserver] Executing task 'foo'``.)
* Added support for lazy (callable) role definition values in ``env.roledefs``.
* Added `contrib.django <fabric.contrib.django>` module with basic Django
  integration.
* :ref:`env.local_user <local-user>` was added, providing easy and permanent
  access to the local system username, even if an alternate remote username has
  been specified.
* :issue:`29`: Added support for arbitrary command-line-driven anonymous tasks
  via ``fab [options] -- [shell command]``. See :ref:`arbitrary-commands`.
* :issue:`52`: Full tracebacks during aborts are now displayed if the user has
  opted to see debug-level output.
* :issue:`101`: Added `~fabric.colors` module with basic color output support.
  (:issue:`101` is still open: we plan to leverage the new module in Fabric's
  own output in the future.)
* :issue:`137`: Commas used to separate per-task arguments may now be escaped
  with a backslash. Thanks to Erich Heine for the patch.
* :issue:`144`: `~fabric.decorators.hosts` (and `~fabric.decorators.roles`)
  will now expand a single, iterable argument instead of requiring one to use
  e.g.  ``@hosts(*iterable)``.
* :issue:`151`: Added a `~fabric.utils.puts` utility function, which allows
  greater control over fabfile-generated (as opposed to Fabric-generated)
  output. Also added `~fabric.utils.fastprint`, an alias to
  `~fabric.utils.puts` allowing for convenient unbuffered,
  non-newline-terminated printing.
* :issue:`208`: Users rolling their own shell completion or who otherwise find
  themselves performing text manipulation on the output of :option:`--list
  <-l>` may now use :option:`--shortlist` to get a plain, newline-separated
  list of task names.


Bugfixes
========

* The interactive "what host to connect to?" prompt now correctly updates the
  appropriate environment variables (hostname, username, port) based on user
  input.
* Fixed a bug where Fabric's own internal fabfile would pre-empt the user's
  fabfile due to a PYTHONPATH order issue. User fabfiles are now always loaded
  at the front of the PYTHONPATH during import.
* Disabled some DeprecationWarnings thrown by Paramiko when that library is
  imported into Fabric under Python 2.6.
* :issue:`44`, :issue:`63`: Modified `~fabric.contrib.project.rsync_project` to
  honor the SSH port and identity file settings. Thanks to Mitch Matuson
  and Morgan Goose.
* :issue:`123`: Removed Cygwin from the "are we on Windows" test; now, only
  Python installs whose ``sys.platform`` says ``'win32'`` will use Windows-only
  code paths (e.g. importing of ``pywin32``).


Documentation updates
=====================

* Added a few new items to the :doc:`FAQ </faq>`.
* :issue:`173`: Simple but rather embarrassing typo fix in README. Thanks to
  Ted Nyman for the catch.
* :issue:`194`: Added a note to :doc:`the install docs </installation>` about a
  possible edge case some Windows 64-bit Python users may encounter.
* :issue:`216`: Overhauled the :ref:`process backgrounding FAQ <faq-daemonize>`
  to include additional techniques and be more holistic.


Packaging updates
=================

* :issue:`86`, :issue:`158`: Removed the bundled Paramiko 1.7.4 and updated the
  ``setup.py`` to require Paramiko >=1.7.6. This lets us skip the known-buggy
  Paramiko 1.7.5 while getting some much needed bugfixes in Paramiko 1.7.6.
