anchor.diff:  -export([main/0,
   	 run_sinan/0,
   	 run_sinan/1,
  -         do_task/3,
  -         start/0]).
  +         do_task/3]).
   
   -export_type([args/0,
   	      task_name/0]).
  
positive.code:        Tasks = sin_task:get_task_list(Task),
         case sin_hooks:get_hooks_function(ProjectDir) of
  	   no_hooks ->
  	       lists:foldl(fun(TaskDesc, NewConfig) ->
  				   ewl_talk:say("starting: ~p",
  						TaskDesc#task.name),
  				   NewNewConfig =
  				       (TaskDesc#task.task_impl):do_task(NewConfig),
  				   NewNewConfig
  			   end, BuildConfig, Tasks);
  	   HooksFun ->
  	       lists:foldl(fun(TaskDesc, NewConfig) ->
  				   ewl_talk:say("starting: ~p", TaskDesc#task.name),
  				   HooksFun(pre, Task, NewConfig),
  				   NewNewConfig = (TaskDesc#task.task_impl):do_task(NewConfig),
  				   HooksFun(post, Task, NewNewConfig),
  				NewNewConfig
  			   end, BuildConfig, Tasks)
         end
      catch
  	throw:{task_not_found, Task} ->
  	    sin_talk:say("Unknown task ~p", [Task])
      end.
  
  
  %% @doc parse the start dir out of the args passed in.
  -spec find_start_dir(args()) -> string().
  
negative.code:      {project, $p, "project", string, "the name of the project"},
       {version, $n, "nversion", string, "the version of the project"}].
  
  %% @doc run the task including all task dependencies
  -spec run_task(task_name(), string(), sin_config:config()) -> ok.
  run_task(Task, ProjectDir, BuildConfig) ->
  