0.8.1 2014-06-09

  • [Bug] #140: Revert incorrect changes to our regarding detection of sub-packages such as the vendor tree & the parser. Also add additional scripting to our Travis-CI config to try and catch this class of error in future. Thanks to Steven Loria and James Cox for the reports.

0.8.0 2014-06-08

  • [Feature] #125: Improve output of Failure exceptions when printed.

  • [Feature] #124: Add a --debug flag to the core parser to enable easier debugging (on top of existing INVOKE_DEBUG env var.)

  • [Bug] #127: Fill in tasks’ exposed name attribute with body name if explicit name not given.

  • [Bug] #116: Ensure nested config overrides play nicely with default tasks and pre-tasks.

  • [Bug] #131: Make sure one’s local tasks module is always first in sys.path, even if its parent directory was already somewhere else in sys.path. This ensures that local tasks modules never become hidden by third-party ones. Thanks to @crccheck for the early report and to Dorian Puła for assistance fixing.

  • [Support]: Refactor the Runner module to differentiate what it means to run a command in the abstract, from execution specifics. Top level API is unaffected.

  • [Feature] #87: (also #92) Rework the loader module such that recursive filesystem searching is implemented, and is used instead of searching sys.path.

    This adds the behavior most users expect or are familiar with from Fabric 1 or similar tools; and it avoids nasty surprise collisions with other installed packages containing files named

    Thanks to Michael Hahn for the original report & PR, and to Matt Iversen for providing the discovery algorithm used in the final version of this change.


    This is technically a backwards incompatible change (reminder: we’re not at 1.0 yet!). You’ll only notice if you were relying on adding your tasks module to sys.path and then calling Invoke elsewhere on the filesystem.

  • [Support] #117: Tidy up a bit, including axing the (broken) distutils support. Thanks to Matt Iversen for the original PR & followup discussion.

  • [Feature] #110: Add task docstrings’ 1st lines to --list output. Thanks to Hiroki Kiyohara for the original PR (with assists from Robert Read and James Thigpen.)

  • [Feature] #115: Make it easier to reuse Invoke’s primary CLI machinery in other (non-Invoke-distributed) bin-scripts. Thanks to Noah Kantrowitz.

  • [Support] #118: Update the bundled six plus other minor tweaks to support files. Thanks to Matt Iversen.

  • [Bug] #121: Add missing help output denoting inverse Boolean options (i.e. --[no-]foo for a --foo flag whose value defaults to true.) Thanks to Andrew Roberts for catch & patch.

  • [Bug] #128: Positional arguments containing underscores were not exporting to the parser correctly; this has been fixed. Thanks to J. Javier Maestro for catch & patch.

  • [Support] #25: Trim a bunch of time off the test suite by using mocking and other tools instead of dogfooding a bunch of subprocess spawns.

  • [Feature] #135: (also bugs #120, #123) Implement post-tasks to match pre-tasks, and allow control over the arguments passed to both (via call). For details, see Pre- and post-tasks.


    Pre-tasks were overhauled a moderate amount to implement this feature; they now require references to task objects instead of task names. This is a backwards incompatible change.

0.7.0 2014.01.28

  • [Feature] #107: Update configuration merging behavior for more flexible reuse of imported task modules, such as parameterizing multiple copies of a module within a task tree.
  • [Feature] #108: Update from_module to accept useful shorthand arguments for tweaking the Collection objects it creates (e.g. name, configuration.)
  • [Feature] #109: Add a default kwarg to Collection.add_task allowing per-collection control over default tasks.

0.6.1 2013.11.21

  • [Bug] #98: BACKWARDS INCOMPATIBLE CHANGE! Configuration merging has been reversed so outer collections’ config settings override inner collections. This makes distributing reusable modules significantly less silly.
  • [Bug] #96: Tasks in subcollections which set explicit names (via e.g. @task(name='foo')) were not having those names honored. This is fixed. Thanks to Omer Katz for the report.

0.6.0 2013.11.21

  • [Feature] #89: Implemented configuration for distributed task modules: can set config options in Collection objects and they are made available to contextualized tasks. See Using config values.
  • [Bug] #86: Task arguments named with an underscore broke the help feature; this is now fixed. Thanks to Stéphane Klein for the catch.

0.5.1 2013.09.15

  • [Bug] #83: Fix a bug preventing underscored keyword arguments from working correctly as CLI flags (e.g. mytask --my-arg would not map back correctly to mytask(my_arg=...).) Credit: @akitada.
  • [Bug] #81: Fall back to sane defaults for PTY sizes when autodetection gives insane results. Thanks to @akitada for the patch.

0.5.0 2013.08.16

  • [Bug] #55: A bug in our vendored copy of pexpect clashed with a Python 2->3 change in import behavior to prevent Invoke from running on Python 3 unless the six module was installed in one’s environment. This was fixed - our vendored pexpect now always loads its sibling vendored six correctly.
  • [Feature] #57: Optional-value flags added - e.g. --foo tells the parser to set the foo option value to True; --foo myval sets the value to “myval”. The built-in --help option now leverages this feature for per-task help (e.g. --help displays global help, --help mytask displays help for mytask only.)

Previous topic

util: Internal utilities

Next topic


This Page