forked from pydoit/doit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES
610 lines (463 loc) · 22.7 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
.. meta::
:description: pydoit release history & changelog
:keywords: python, doit, release, changelog
.. title:: pydoit release history & changelog
=======
Changes
=======
0.37.0 (*unreleased*)
======================
0.36.0 (*2022-04-22*)
=====================
- BACKWARD INCOMPATIBLE: remove deprecated `doit.cmd_base.py:TaskLoader`.
- BACKWARD INCOMPATIBLE: does not use not maintained `toml` package, use `tomli` instead.
- BACKWARD INCOMPATIBLE: remove `auto` command, use plugin `doit-auto1`.
- BACKWARD INCOMPATIBLE: plugins use importlib-metadata instead of setuptools.
- BACKWARD INCOMPATIBLE: remove extra install `doit[plugins]`.
- BACKWARD INCOMPATIBLE: `UnmetDependency`, `SetupError` and `DependencyError` as sub-class of `TaskError`.
- DEPRECATED: `CatchedException`, renamed to `BaseFail`.
- api.run_tasks(): support `pos_arg`.
- add reporter `error-only`
- add attribute `report` to `BaseFail`. Controls if reporter should create own output for failures.
If `False` relies on underlying action to output failure information.
0.35.0 (*2022-04-07*)
=====================
- BACKWARD INCOMPATIBLE: Drop Python 3.6 support.
- BACKWARD INCOMPATIBLE: Drop Python 3.7 support.
- BACKWARD INCOMPATIBLE: `create_doit_tasks` does NOT automatically ignored when processing class.
- Fix #344: Command `clean`: add support for wildcard `*`.
- Add `TaskLoader2.task_opts` attribute.
This is passed to task creator and also as task config.
- CmdOption add `metavar` attribute.
- Fix #156: `actions.py:Writer`, add support for `fileno()`. Taken from original stream.
- `create_doit_tasks` supports `basename` attribute.
- Task: add attribute `io`; add `io.capture`.
- add `api.py::run_tasks()`
0.34.2 (*2022-02-18*)
=====================
- Fix #416: compare `task_params` using `is` operator.
0.34.1 (*2022-01-12*)
=====================
- Fix #410: if TOML lib not present, just print warning instead of raising error.
0.34.0 (*2021-12-11*)
=====================
- BACKWARD INCOMPATIBLE: Drop Python 3.5 support
- python 3.9 support
- python 3.10 support
- Fix #381: Allow Delayed tasks to be executed multiple times in same process.
- Fix #382: TaskResult make sure `started` include microsecond as decimal number.
- Fix #387: Pass pickled attributes, err and out when a task fails in multi processes context.
- Fix #398: Add `setuptools` as` extras_require`.
- Fix #373: read DOIT_CONFIG from TOML.
- Fix #405: Add Task attribute `meta`.
- Fix #349: Handle passing task args in "single" task execution.
- Fix #377: cmd forget, added options `--disable-default` and `--all`.
- Fix #307: Allows `create_after` decorator to be used on methods.
- Fix #311: Add `@task_params` decorator.
0.33.1 (*2020-09-04*)
=====================
- fix sdist distribution to include all files
0.33.0 (*2020-09-01*)
=====================
- python 3.8 support
- BACKWARD INCOMPATIBLE: Drop Python 3.4 support
- fix error installing with setuptools 50.0
0.32.0 (*2019-12-10*)
=====================
- python 3.7 support
- BACKWARD INCOMPATIBLE: Changed signature of `DoitCommand`
- BACKWARD INCOMPATIBLE: Fix #254: Python actions keywords with task metadata `dependencies`, `targets` and `changed` are a copied list
- BACKWARD INCOMPATIBLE: Custom backend initializer added parameter ``codec_cls``
- Fix #204: Accept loader command options before command name
- Fix #240: Command run: with `--pdb` drop into *pdb* on unhandled exception on `PythonAction`
- Fix #203: Allow configuration of `dodo.py` file name with env var `DOIT_FILE`
- Fix #113: `tools.config_changed` deals with nested dictionaries.
Using json instead of repr.
- Fix #261: help organize command options in sections, and improve formatting.
- Fix #267: `doit list` now has a `--sort` parameter to determine the order in which the tasks are listed.
- Make it possible to use a custom encoder when using config_changed with a dict.
- Add configuration `DOIT_CONFIG` `action_string_formatting` to control command action formatter.
- Fix `result_dep`, use result **after** its execution
- Fix #286: Support `functools.partial` on tasks' dict metadata `task.title`
- Fix #285: `clean` command, remove targets in reverse lexical order
- Deprecated `TaskLoader` in favor of `TaskLoader2`, which separates loading doit's configuration from loading tasks.
- Fix #288: Added `doit.globals.Globals.dep_manager` to access dependency manager during all task processing phases.
- Fix #98: Support custom backend codecs so that python-action return values which are not JSON serializable may be used.
- Fix #283: set task options from doit.cfg
0.31.1 (*2018-03-18*)
=====================
- Fix #249 reporter bug when using `--continue` option
- Fix #248 test failures of debian when using GDBM
- Fix #164 `get_var` fails on multiprocess execution on Windows
- Fix #245 custom `clean` action takes `dry-run` into account
0.31.0 (*2018-02-25*)
=====================
- BACKWARD INCOMPATIBLE: Drop Python 3.3 support
- Fix #171 Passing environment variables to CmdAction
- Fix #184 parametrize script name
- CmdParse now support getting values from OS environment variables
- option `seek_file` control by ENV var `DOIT_SEEK_FILE`
- #192 ipython extension uses `load_ipython_extension`
- #218 clean with option `--forget` can be used to also forget about cleaned tasks
- Fix strace command (seems strace output was modified)
- Fix #224: use `mock` from stdlib
- #227: enhancements to `info` command
- Fix #197: improve error message for invalid `clean` and `teardown` task params
- Fix #211: do not display traceback for error when missing `file_dep`
- Task `verbosity` has precedence over `verbosity` from config
- Fix #140: add `failure-verbosity`. ConsoleReporter, by default,
do not print stderr twice.
- Fix #155: pass `selected_tasks` to `Reporter.initialize()`
- Fix #221: do not leak meta arguments to actions `kwargs`
- Fix #202: help command display option's name used on config
- Fix #209: fix `clean` ordering, and following implicit task_deps
- Fix: list of sub-tasks do not include non-related `task_dep`
- Internal: Removed `Task.is_subtask` use `Task.subtask_of` instead
0.30.3 (*2017-02-20*)
=====================
- Revert usage of setuptools environment markers (feature too new)
0.30.2 (*2017-02-16*)
=====================
- Fix dependency on `pathlib` from PyPi
0.30.1 (*2017-02-16*)
=====================
- Fix GH-#159 KeyError on doit list --status when missing file dependency
- add python3.6 support
0.30.0 (*2016-11-22*)
=====================
- BACKWARD INCOMPATIBLE: #112 drop python2 compatibility
- GH-#94: option to read output from CmdAction line or byte buffered
- GH-#114: `file_dep`, `targets` and `CmdAction` support pathlib.
- fix GH-#100: make cmd `completion` output deterministic
- fix GH-#99: positional argument on tasks not specified from cmd-line
- fix GH-#97: `list` command does not display task-doc for `DelayedTask`
when `creates` is specified
- fix GH-#131: race condition in doit.tools.create_folder
- fix `auto` command on OS-X systems
- fix GH-#117: Give error when user tries to use equal sign on task name
0.29.0 (*2015-08-16*)
=====================
- BACKWARD INCOMPATIBLE: revert - `result_dep` to create an implicit `task_dep`
- fix GH-#59: command `list` issue with unicode names
- fix GH-#72: cmd `completion` escaping of apostrophes in zsh
- fix GH-#74: Task action's handle python3 callables with keyword only args
- fix GH-#50: Executing tasks in parallel (multi-process) fails on Windows
- fix GH-#71 #92: Better error messages for invalid command line tasks/commands
- fix issue with `--always-execute` and `setup` tasks
- GH-#67: multiprocess runner handles closures in tasks (using cloudpickle)
- GH-#58: add `DelayedLoader` parameter `target_regex`
- GH-#30: add `DelayedLoader` parameter `creates`
- GH-#58: cmd `Run` add option `--auto-delayed-regex`
- GH-#24: cmd `info` add option `--status` show reason a task is not up-to-date
- GH-#66: cmd `auto` support custom ( user specified ) commands to be executed
after each task execution
- GH-#61: speed up sqlite3 backend (use internal memory cache)
0.28.0 (*2015-04-22*)
=====================
- BACKWARD INCOMPATIBLE: signature for custom DB backend changed
- BACKWARD INCOMPATIBLE: `DoitMain` API change
- BACKWARD INCOMPATIBLE: `Command` API change
- BACKWARD INCOMPATIBLE: `default` reporter renamed to `console`
- GH-#25: Add a `reset-dep` command to recompute dependencies state
- GH-#22: Allow to customize how file_dep are checked
- GH-#31: Add IPython `%doit` magic-function loading tasks from its global
namespace
- read configuration options from INI files
- GH-#32 plugin system
- plugin support: COMMAND - add new commands
- plugin support: LOADER - add custom task loaders
- plugin support: REPORTER - add custom reporter for `run` command
- plugin support: BACKEND - add custom DB persistence backend
- GH-#36 PythonAction recognizes returned TaskError or TaskFailed
- GH-#37 CmdParse support for arguments of type list
- GH-#47 CmdParse support for choices
- fix issue when using unicode strings to specify `minversion` on python 2
- fix GH-#27 auto command in conjunction with task arguments
- fix GH-#44 Fix the list -s command when result_dep is used
- fix GH-#45 make sure all `uptodate` checks are executed (no short-circuit)
0.27.0 (*2015-01-30*)
======================
- BACKWARD INCOMPATIBLE: drop python 2.6 support
- BACKWARD INCOMPATIBLE: removed unmaintained genstandalone script
- BACKWARD INCOMPATIBLE: removed runtests.py script and support to run
tests through setup.py
- BACKWARD INCOMPATIBLE: `result_dep` creates an implicit `setup`
(was `task_dep`)
- BACKWARD INCOMPATIBLE: GH-#9 `getargs` creates an implicit `result_dep`
- BACKWARD INCOMPATIBLE: `CmdAction` would always decode process output
using `errors='strict'` default changed to `replace`
- allow task-creators to return/yield Task instances
- fix GH-#14: add support for delayed task creation
- fix GH-#15: `auto` (linux) inotify also listen for `MOVE_TO` events
- GH-#4 `CmdAction` added parameters `encoding` and `decode_error`
- GH-#6: `loader.task_loader()` accepts methods as *task creators*
0.26.0 (*2014-08-30*)
======================
- moved development to git/github
- `uptodate` callable "magic" arguments `task` and `values` are now optional
- added command `info` to display task metadata
- command `clean` smarter execution order
- remove `strace` short option `-k` because it conflicts with `run` option
- fix zsh tab-completion script when not `doit` script
- fix #79. Use setuptools and `entry_points`
- order of yielded tasks is preserved
- #68. pass positional args to tasks
- fix tab-completion on BASH for sub-commands that take file arguments
0.25.0 (*2014-03-26*)
======================
- BACKWARD INCOMPATIBLE: use function `doit.get_initial_workdir()`
instead of variable `doit.initial_workdir`
- DEPRECATED `tools.InteractiveAction` renamed to `tools.LongRunning`
- fix: `strace` raises `InvalidCommand` instead of using `assert`
- #28: task `uptodate` support string to be executed as shell command
- added `tools.Interactive` for use with interactive commands
- #69: added doit.run() to make it easier to turn a dodo file into executable
- #70: added option "--pdb" to command `run`
- added option "--single" to command `run`
- include list of file_dep as an implicit dependency
0.24.0 (*2013-11-24*)
======================
- reporter added `initialize()`
- cmd `list`: added option `--template`
- dodo.py can specify minimum required doit version with DOIT_CONFIG['minversion']
- #62: added the absolute path from which doit is invoked `doit.initial_workdir`
- fix #36: added method `isatty()` to `action.Writer`
- added command `tabcompletion` for bash and zsh
- fix #56: allow python actions to have default values for task parameters
0.23.0 (*2013-09-20*)
======================
- support definition of group tasks using basename without any task
- added task property `watch` to specific extra files/folders in auto command
- CmdAction support for all arguments of subprocess.Popen, but stdout and stderr
- added command option `-k` as short for `--seek-file`
- task action can be specified as a list of strings (executed using subprocess.Popen shell=False)
- fix #60: result of calc_dep only considered if not run yet
- fix #61: test failures involving DBM
- fix: do not allow duplicate task names
0.22.1 (*2013-08-04*)
======================
- fix reporter output in py3 was being displayed as bytes instead of string
- fix pr#12 read file in chunks when calculating MD5
- fix #54 - remove distribute bootstrapping during installation
0.22.0 (*2013-07-05*)
======================
- fix #49: skip unicode tests on systems with non utf8 locale
- fix #51: bash completion does not mess up with global COMP_WORDBREAKS
- fix docs spelling and added task to check spelling
- fix #47: Task.options can always be accessed from `uptodate` code
- fix #45: cmd forget, added option -s/--follow-sub to forget task_dep too
0.21.1 (*2013-05-21*)
======================
- fix tests on python3.3.1
- fix race condition on CmdAction (affected only python>=3.3.1)
0.21.0 (*2013-04-29*)
======================
- fix #38: `doit.tools.create_folder()` raise error if file exists in path
- `create_doit_tasks` not called for unbound methods
- support execution using "python -m doit"
- fix #33: Failing to clean a group of task(s) with sub-tasks
- python-actions can take a magic "task" parameter as reference to task
- expose task.clean_targets
- tools.PythonInteractiveAction saves "result" and "values"
- fix #40. added option to use threads for parallel running of tasks
- same code base for python 2 & 3 (no need to use tool `2to3`)
- add sqlite3 DB backend
- added option to select backend
0.20.0 (*2013-01-09*)
======================
- added command `dumpdb`
- added `CmdAction.save_out` param
- `CmdAction` support for callable that returns a command string
- BACKWARD INCOMPATIBLE `getargs` for a group task gets a dict where
each key is the name of subtasks (previously it was a list)
- added command `strace`
- cmd `auto` run tasks on separate process
- support unicode for task name
0.19.0 (*2012-12-18*)
======================
- support for `doit help <task-name>`
- added support to load tasks using `create_doit_tasks`
- dropped python 2.5 support
0.18.1 (*2012-12-03*)
=======================
- fix bug cmd option --continue not being recognized
0.18.0 (*2012-11-27*)
=======================
- remove DEPRECATED `Task.insert_action`, `result_dep` and `getargs` using strings
- fix #10 --continue does not execute tasks that have failed dependencies
- fix --always-execute does not execute "ignored" tasks
- fix #29 python3 cmd-actions issue
- fix #30 tests pass on all dbm backends
- API to add new sub-commands to doit
- API to modify task loader
- API to make dodo.py executable
- added ZeroReporter
0.17.0 (*2012-09-20*)
======================
- fix #12 Action.out and Action.err not set when using multiprocessing
- fix #16 fix `forget` command on gdbm backend
- fix #14 improve parallel execution (better process utilization)
- fix #9 calc_dep create implicit task_dep if a file_dep returned is a also a target
- added tools.result_dep
- fix #15 tools.result_dep supports group-tasks
- DEPRECATE task attribute `result_dep` (use tools.result_dep)
- DEPRECATE `getargs` specification using strings (must use 2-element tuple)
- several changes on `uptodate`
- DEPRECATE `Task.insert_action` (replaced by `Task.value_savers`)
- fix #8 `clean` cleans all subtasks from a group-task
- fix #8 `clean` added flag `--all` to clean all tasks
- fix #8 `clean` when no task is specified set --clean-dep and clean default tasks
0.16.1 (*2012-05-13*)
======================
- fix multiprocessing/parallel bug
- fix unicode bug on tools.config_changed
- convert tools uptodate stuff to a class, so it can be used with multi-processing
0.16.0 (*2012-04-23*)
=======================
- added task parameter ``basename``
- added support for task generators yield nested python generators
- ``doit`` process return value ``3`` in case tasks do start executing (reporter is not used)
- task parameter ``getargs`` take a tuple with 2 values (task_id, key_name)
- DEPRECATE ``getargs`` being specified as <task_id>.<key_name>
- ``getargs`` can take all values from task if specified as (task_id, None)
- ``getargs`` will pass values from all sub-tasks if specified task is a group task
- result_dep on PythonAction support checking for dict values
- added ``doit.tools.PythonInteractiveAction``
0.15.0 (*2012-01-10*)
=======================
- added option --db-file (#909520)
- added option --no-continue (#586651)
- added genstandalone.py to create a standalone ``doit`` script (#891935)
- fix doit.tools.set_trace to not modify sys.stdout
0.14.0 (*2011-11-05*)
========================
- added tools.InteractiveAction (#865290)
- bash completion script
- sub-command list: tasks on alphabetical order, better formatting (#872829)
- fix ``uptodate`` to accept instance methods callables (#871967)
- added command line option ``--seek-file``
- added ``tools.check_unchanged_timestamp`` (#862606)
- fix bug subclasses of BaseAction should get a task reference
0.13.0 (*2011-07-18*)
========================
- performance speed improvements
- fix bug on unicode output when task fails
- ConsoleReporter does not output task's title for successful tasks that start with an ``_``
- added ``tools.config_changed`` (to be used with ``uptodate``)
- ``teardown`` actions are executed in reverse order they were registered
- added ``doit.get_var`` to get variables passed from command line
- getargs creates implicit "setup" task not a "task_dep"
0.12.0 (*2011-05-29*)
=======================
- fix bug #770150 - error on task dependency from target
- fix bug #773579 - unicode output problems
- task parameter ``uptodate`` accepts callables
- deprecate task attribute run_once. use tools.run_once on uptodate instead
- added doit.tools.timeout
0.11.0 (*2011-04-20*)
========================
- no more support for python2.4
- support for python 3.2
- fix bug on unicode filenames & unicode output (#737904)
- fix bug when using getargs together with multiprocess (#742953)
- fix for dumbdbm backend
- fix task execution order when using "auto" command
- fix getargs when used with sub-tasks
- fix calc_dep when used with "auto" command
- "auto" command now support verbosity control option
0.10.0 (*2011-01-24*)
======================
- add task parameter "uptodate"
- add task parameter "run_once"
- deprecate file_dep bool values and None
- fix issues with error reporting for JSON Reporter
- "Reporter" API changes
- ".doit.db" now uses a DBM file format by default (speed optimization)
0.9.0 (*2010-06-08*)
=====================
- support for dynamic calculated dependencies "calc_dep"
- support for user defined reporters
- support "auto" command on mac
- fix installer on mac. installer aware of different python versions
- deprecate 'dependencies'. use file_dep, task_dep, result_dep.
0.8.0 (*2010-05-16*)
=======================
- parallel execution of tasks (multi-process support)
- sub-command "list" option "--deps", show list of file dependencies
- select task by wildcard (fnmatch) i.e. test:folderXXX/*
- task-setup can be another task
- task property "teardown" substitute of setup-objects cleanup
- deprecate setup-objects
0.7.0 (*2010-04-08*)
=====================
- configure options on dodo file (deprecate DEFAULT_TASKS)(#524387)
- clean and forget act only on default tasks (not all tasks) (#444243)
- sub-command "clean" option "clean-dep" to follow dependencies (#444247)
- task dependency "False" means never up-to-date, "None" ignored
- sub-command "list" by default do not show tasks starting with an underscore, added option (-p/--private)
- new sub-command "auto"
0.6.0 (*2010-01-25*)
=====================
- improve (speed optimization) of check if file modified (#370920)
- sub-command "clean" dry-run option (-n/--dry-run) (#444246)
- sub-command "clean" has a more verbose output (#444245)
- sub-command "list" option to show task status (-s/--status) (#497661)
- sub-command "list" filter tasks passed as positional parameters
- tools.set_trace, PDB with stdout redirection (#494903)
- accept command line optional parameters passed before sub-command (#494901)
- give a clear error message if .doit.db file is corrupted (#500269)
- added task option "getargs". actions can use computed values from other tasks (#486569)
- python-action might return a dictionary on success
0.5.1 (*2009-12-03*)
=====================
- fix. task-result-dependencies should be also added as task-dependency to force its execution.
0.5.0 (*2009-11-30*)
=====================
- task parameter 'clean' == True, cleans empty folders, and display warning for non-empty folders
- added command line option --continue. Execute all tasks even if tasks fails
- added command line option --reporter to select result output reporter
- added executed-only reporter
- added json reporter
- support for task-result dependency #438174
- added sub-command ignore task
- added command line option --outfile. write output to specified file path
- added support for passing arguments to tasks on cmd line
- added command line option --dir (-d) to set current working directory
- removed dodo-sample sub-command
- added task field 'verbosity'
- added task field 'title'
- modified default way a task is printed on console (just show ". name"), old way added to doit.tools.task_title_with_actions
0.4.0 (*2009-10-05*)
====================
- deprecate anything other than a boolean values as return of python actions
- sub-cmd clean (#421450)
- remove support for task generators returning action (not documented behavior)
- setup parameter for a task should be a list - single value deprecated (#437225)
- PythonAction support 'dependencies', 'targets', 'changed' parameters
- added tools.create_folder (#421453)
- deprecate folder-dependency
- CmdActions reference to dependencies, targets and changed dependencies (#434327)
- print task description when printing through doit list (#425811)
- action as list of commands/python (#421445)
- deprecate "action" use "actions"
0.3.0 (*2009-08-30*)
=====================
- added subcommand "forget" to clear successful runs status (#370911)
- save run results in text file using JSON. (removed dbm)
- added support for DEFAULT_TASKS in dodo file
- targets md5 is not checked anymore. if target exist, task is up-to-date. it also supports folders
- cmd line sub-commands (#370909)
- remove hashlib dependency on python 2.4
- sub-cmd to create dodo template
- cmd-task supports a list of shell commands
- setup/cleanup for task (#370905)
0.2.0 (*2009-04-16*)
====================
- docs generated using sphinx
- execute once (dependency = True)
- group task
- support python 2.4 and 2.6
- folder dependency
0.1.0 (*2008-04-14*)
====================
- initial release