
releases:

  - release:  0.0.5
    date:     2009-11-02
    enhances:

      - Command 'chdir()' can now take callable object as 2nd argument.
        In this case, (1) change directory, (2) call callable object,
	and (3) back to original directory.
	This feature is provided for Python 2.4 or older which doesn't
	support with-statement.
	    
            def f():
	       system 'python test_all.py'
	    chdir('test', f)
            ## above is same as:
	    #with chdir('test', f):
	    #    system 'python test_all.py'

    changes:

      - 'kk' command now searches Kookbook.py in parent directory recursively
        without $KK_CLIMB=1 setting.
	    

  - release:  0.0.4
    date:     2009-09-06
    changes:

      - Compact style of @recipe decorator supported.
        ex::
           ## normal style
	   @recipe
	   @product('*.o')
	   @ingreds('$(1).c', '$(1).h')
	   def file_o(c):
	       system(c%"gcc -c $(ingre)")

           ## compact style
	   @recipe('*.o', ['$(1).c', '$(1).h'])
	   def file_o(c):
	       system(c%"gcc -c $(ingre)")

      - 'kk' script supports '$KK_CLIMB' environment variable.
        If you set it, 'kk' script searches parent directories
        when 'Kookbook.py' is not found.
        ex::
           sh> ls -F
           Kookbook.py    src/    test/
           sh> cd src/foo/bar/
           sh> kk clean                    # ERROR
           kk: No kookbook found.
           sh> export KK_CLIMB=1
           sh> kk clean                    # OK
           ### * clean (recipe=clean)
           $ rm **/*.pyc

      - New command-line option '-R' (recursively) supported.
        If you specify '-R', pykook command searches Kookbook.py
	in parent directory recursively.
        ex::
           sh> ls -F
           Kookbook.py    src/    test/
           sh> cd src/foo/bar/
           sh> pykook clean                # ERROR
           pykook: Kookbook.py: not found.
           sh> pykook -R clean             # OK
           ### * clean (recipe=clean)
           $ rm **/*.pyc



  - release:  0.0.3
    date:     2009-08-09
    changes:

      - IMPORTANT!!
        New '@recipe' decorator is required for each recipe function.
        If function is decorated by '@recipe', 'task_' prefix is not necessary.

        ex:
          ## previous version
          def task_clean(c):    # 'task_' prefix is required
            rm_rf("*.o")
        
          ## since this release
          @release              # @release decorator is required
          def clean(c):         # 'task_' prefix is not necessary
            rm_rf("*.o")
        
        See http://www.kuwata-lab.com/kook/pykook-users-guide.html#cookbook-recipekind
        for details.

      - Library codes are much refactored.

    enhancements:

      - IMPORTANT!!
        New feature to support command-line script framework.
        You can convert Kookbook.py into command-line script.
        See http://www.kuwata-lab.com/kook/pykook-users-guide.html#topic-framework
        for details.

      - New command-line option '-n' (no exec) supported.
        If you specify '-n', commands such as 'cp()' or 'rm()' are not executed.
        In other words, '-n' means 'dry-run'.

      - Add a lot of test scripts.

    bugfixes:

      - A bug related timestamp detection is now fixed.
        There was a case that product file was not updated even when
        ingredient files were updated.

      - A bug about recipe tree is fixed. There was a case that the same recipe
        can be invoke more than once when an intermediate recipe was required
        from several recipes.


  - release:  0.0.2
    date:     2009-07-30
    enhancements:

      - Python 3 support.

      - Add 'kk' script which is shortcat for kk command.

    changes:

      - Decorator '@cmdopts()' is renamed to '@spices()', and
        there is no need to call parse_cmdopts().
        
            ### prev version
            @cmdopts('-v: verbose', '-f file: filename')
            def task_example(c, *args):
                opts, rests = c.parse_cmdopts(args)
                verbose = opts.get('v', False):
                fileame = opts.get('f', None)
            
            ### since this release (0.0.2)
            @spices('-v: verbose', '-f file: filename')
            def task_example(c, *args, *kwargs):
                opts, rests = kwarts, args
                verbose = opts.get('v', False):
                fileame = opts.get('f', None)

      - Remove 'pyk' script

      - Testing library is changed from Python's unittest library
        into 'test/oktest.py'.

    bugfixes:

      - glob2() now recognizes files on current directory.


  - release:  0.0.1
    date:     2008-10-19
    enhancements:

      - First release
